Samba 是 SMB/CIFS 网络协议的重新实现, 它作为 NFS 的补充使得在 Linux 和 Windows 系统中进行文件共享、打印机共享更容易实现。了解到一些用户需要简化访问学习成本,满足基础的权限控制管理,并支持实时编辑和保存文件,查询了相关资料显示 samba 是最佳选择。
yum install samba samba-client samba-common
[root@c7 ~]# rpm -qa | grep samba
samba-4.1.12-23.el7_1.x86_64
samba-libs-4.1.12-23.el7_1.x86_64
samba-common-4.1.12-23.el7_1.x86_64
samba-client-4.1.12-23.el7_1.x86_64
#过滤杂七杂八的注释备份一份
egrep -v "^.*#" /etc/samba/smb.conf > /etc/samba/smb_$(date +%d-%m-%y).conf
常用的 samba 共享目录参数
[MyShare]
comment = grind’s file #对共享备注
path = /home/grind #共享文件系统路径
allow hosts = host(subnet) #允许访问的主机
deny hosts = host(subnet) #禁止访问的主机
writable = yes|no #是否可写
readonly = yes|no #是否只读
user = user(@group) #可使用该资源的用户
valid users = user(@group) #白名单用户或组
invalid users = user(@group)#黑名单用户或组
read list = user(@group)#只读用户或组列表
write list = user(@group) #可写用户或组列表
admin list = user(@group) #指定能管理该共享资源(包括读写和权限赋予等)的用户和组
public = yes|no #是否能给游客帐号访问
guest ok = yes|no #是否能给游客账号访问
hide dot files = yes|no #是否像unix那样隐藏以“.”号开头的文件
create mode = 0755 #指明新建立的文件的属性,一般是0755
directory mode = 0755 #指明新建立的目录的属性,一般是0755
sync always = yes|no#指明对该共享资源进行写操作后是否进行同步操作
short preserve case = yes|no#指明是否区分文件名大小写。
preserve case = yes|no #指明保持大小写。
case sensitive = yes|no #指明是否对大小写敏感,一般选no,不然可能引起错误。
mangle case = yes|no#指明混合大小写
default case = upper|lower #指明缺省的文件名是全部大写还是小写
force user = grind #强制把建立文件的属主是谁
wide links = yes|no #指明是否允许共享外符号连接
max connections = 100 #设定同时连接数
delete readonly = yes|no#指明能否删除共享资源里面已经被定义为只读的文件
mkdir /home/development
mkdir /home/share
chmod -R 755 /home/development/
chmod -R 755 /home/share/
useradd anycto -s /sbin/nologin
smbpasswd -a anycto
pdbedit -L
[global]
workgroup = MYGROUP
server string = Samba Server Version %v
log file = /var/log/samba/log.%m
max log size = 50
cups options = raw
#匿名用户使用这个参数
#map to guest =Bad User
#指定用户访问需要修改成
security = user
passdb backend = tdbsam
#匿名用户可读写
[share]
path = /home/share
public = yes
browseable= yes
writable= yes
create mask = 0644
directory mask = 0755
#指定用户访问
[development]
comment = All Development File
path = /home/development
browseable= yes
create mask = 0644get
directory mask = 0755
#valid users = anycto,cnhzz
#write list = anycto
user = anycto
read only = No
guest ok = No
使用testparm测试配置是否有问题,使用testparm –v命令可以详细的列出smb.conf支持的配置参数。
组成Samba运行的有两个服务,一个是SMB,另一个是NMB;SMB是Samba 的核心启动服务,主要负责建立 Linux Samba服务器与Samba客户机之间的对话, 验证用户身份并提供对文件和打印系统的访问,只有SMB服务启动,才能实现文件的共享,监听139 TCP端口;而NMB服务是负责解析用的,类似与DNS实现的功能,NMB可以把Linux系统共享的工作组名称与其IP对应起来,如果NMB服务没有启 动,就只能通过IP来访问共享文件。
systemctl start smb.service nmb.service
systemctl status smb.service nmb.service
systemctl enable smb.service nmb.service
查看启动的端口
State Recv-Q Send-QLocal Address:Port Peer Address:Port
LISTEN 0 50*:139 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 50*:445 *:*
LISTEN 0 50 :::139 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
LISTEN 0 50 :::445 :::*
查看启动 samba 进程
[root@c7 ~]# ps aux | grep smb
root 1969 0.0 0.5 371836 5376 ?Ss 15:30 0:00 /usr/sbin/smbd
root 1970 0.0 0.2 371836 2976 ?S15:30 0:00 /usr/sbin/smbd
nobody1972 0.0 0.5 380100 5968 ?S15:30 0:00 /usr/sbin/smbd
root 1980 0.0 0.0 112656 968 pts/0S+ 15:31 0:00 grep --color=auto smb
[root@c7 ~]# ps aux | grep nmb
root 1968 0.0 0.2 300960 2516 ?Ss 15:30 0:00 /usr/sbin/nmbd
root 1982 0.0 0.0 112656 972 pts/0S+ 15:31 0:00 grep --color=auto nmb
可使用smbstatus查看当前 samba 服务的状态
[root@c7 ~]# smbstatus
Samba version 4.1.12
PID Username Group Machine
-------------------------------------------------------------------
12090 anyctoanycto10.211.55.2 (ipv4:10.211.55.2:57970)
Service pid machine Connected at
-------------------------------------------------------
development 12090 10.211.55.2 Thu Aug 6 18:58:31 2015
Locked files:
Pid UidDenyMode Access R/WOplock SharePath Name Time
--------------------------------------------------------------------------------------------------
120901000 DENY_NONE 0x100081RDONLY NONE /home/development . Thu Aug 6 19:01:56 2015
9、在打开 selinux 的情况下,需要修改 selinux 一些参数才能会有读写的权限。
默认情况下是这样:
[root@c7 ~]# getsebool -a | grep samba
samba_create_home_dirs --> off
samba_domain_controller --> off
samba_enable_home_dirs --> off
samba_export_all_ro --> off
samba_export_all_rw --> off
samba_load_libgfapi --> off
samba_portmapper --> off
samba_run_unconfined --> off
samba_share_fusefs --> off
samba_share_nfs --> off
sanlock_use_samba --> off
use_samba_home_dirs --> off
virt_sandbox_use_samba --> off
virt_use_samba --> off
需要调整参数确保是这样:
samba_create_home_dirs --> on
samba_domain_controller --> on
samba_enable_home_dirs --> on
samba_export_all_ro --> on
samba_export_all_rw --> on
因此需要执行:
setsebool -P samba_create_home_dirs=1
setsebool -P samba_domain_controller=1
setsebool -P samba_enable_home_dirs=1
setsebool -P samba_export_all_ro=1
setsebool -P samba_export_all_rw=1
在修改上述的 selinux 后需要重启一下 samba 在进行测试。
1.Windows上访问samba
在“计算机”中输入:\xxx.xxx.xxx.xxx\
2.Windows断开samba共享连接,实在不行可以选择注销或者重启
在【开始】→【运行】→【CMD】回车中输入:net use * /del /y
3.将samba共享的Linux目录映射成Windows的一个驱动器盘符
在【右键计算机】→【映射网络驱动器】→【文件夹\XX.XX.XX.XX\】