程序环境:
服务端程序包:samba 与Windows机器交互的服务器和客户端软件。
配置文件:/etc/samba/smb.conf 由samba-common包提供
主程序:
nmbd: NetBIOS名称服务器
smbd:SMB/CIFS服务器
单元:
smb.service
nmb.service
监听的端口:
137/udp 138/udp
139/tcp 445/tcp
准备三台计算机:
proxy:192.168.10.107 192.168.200.2(samba服务器端)
web02:192.168.200.200 (客户端)
windows 10:192.168.10.106(客户端)
安装软件:yum install samba
检查软件:rpm -q samba
软件安装后在/etc/samba目录下产生3个文件:lmhosts smb.conf smb.conf.example
# cp smb.conf{,.bak}
# mv smb.conf.example smb.conf
主配置文件:/etc/samba/smb.conf,有以下描述:
需要修改的主配置文件配置段:
workgroup = SAMBA # workgroup = windows NT域名或工作组名,例如:SAMBA
server string = Samba Server Version %v # server string = 相当于Windows NT描述段
netbios name = Proxy # netbios name = 用于指定一个不绑定到这台主机名的服务器名,最多15个字符。
interfaces = lo eth0 eth1 # interfaces = 用于配置Samba监听多个网络接口。如果你有多个网卡,你可以使用"interfaces ="选项来配置Samba监听那些网卡中的哪些。 不要漏掉本地接口(lo)。
hosts allow = 127. 192.168.10. 192.168.200. # hosts allow = 允许连接的主机。也可以对每台机器使用这个选项。
共享文件系统配置:[SHARED_NAME]
有三类:
[homes]:为每个samba用户定义其是否能通过samba服务访问自己的家目录
[printers]:定义打印服务
[shared_fs]:定义共享的文件系统
常用指令:
comment:注释信息
path:当前共享所映射的文件系统路径
browsable:是否可浏览,指是否可被用户查看
guest ok:是否是否允许来宾账号访问
public:是否公开所有用户
writable:是否可写
read only: 是否为只读
write list:拥有写权限的用户列表
用户名
@组名
+组名
samba用户管理:
smbpasswd
smbpasswd [options] USERNAME
-a:添加
-x:删除
-d:禁用
-e:启用
pdbedit
-L:列出samba服务中的所有用户
-a,--create:添加用户为samba用户
-u,--user=USER:要管理的用户
-x,--delete:删除用户
-t,--password-from-stdin:从标注输出接收字符串作为用户密码
要查看服务器端的共享:
smbclient -L SMB_SERVER [-U USERNAME]
交互式文件访问:
smbclient //SMB_SERVER/SHARE_NAME -U USERNAME
测试参数是否正确:testparm
在服务器端添加samba账号并且添加这个用户且设置访问samba的密码后激活:
useradd smbuser1
smbpasswd -a smbuser1
smbpasswd -e smbuser1
启动软件:systemctl start smb
客户端:
安装cifs-utils软件,支持cifs文件系统和samba-client
客户端程序:
smbclient:交互式命令行客户端
mount.cifs:挂载cifs文件系统的专用命令
在客户端web02上安装samba客户端软件:
yum install samba-client
yum install cifs-utils
在服务器端添加samba账号并且添加这个用户且设置访问samba的密码后激活:
useradd smbuser1
smbpasswd -a smbuser1
smbpasswd -e smbuser1
在客户端web02: smbclient -L 192.168.200.2 -U smbuser1并输入设置的密码,可以看到Samba服务器端导出的内容:
在客户端使用web02上,用smbclient测试服务器的上传和下载服务:
smbclient //192.168.200.2/homes -U smbuser1
ls显示服务器目录下的内容,!ls显示本地路径下的内容,get从服务器下载文件到当前路径,put从当前路径上传文件到服务器。
在web02客户端,挂载samba服务器共享内容:
临时:
mount -t cifs -o user=smbuser,pass=xxxxx //192.168.200.2/homes /mnt/smb
注意:
df -h 查看挂载情况
ls /mnt/smb 查看服务器共享的内容
永久:
在fstab中写入以下内容挂载samba服务器共享内容:
//192.168.200.2/homes /mnt/smb cifs defaults,_netdev,user=smbuser1,pass=xxxxxx 0 0
在windows客户端,通过映射网络驱动器中,填入服务地址:
再填入用户名和密码:
可以在客户端显示服务器共享的内容:
注意:一定要关闭服务器端的防火墙,或者用策略放行指定端口,否则客户端会报权限错误。
要共享samba服务器上指定目录:
在samba服务器上添加一个路径:mkdir -pv /data/samba/files
同时更改这个目录的读写权限,指定这个目录可以被smbuser1用户读写执行: setfacl -m u:smbuser1:rwx /data/samba/files/ (通过更改此目录的所有者为smbuser1也可以)
在配置文件/etc/samba/smb.conf中Share Definitions下添加[myfiles]的内容:
path指定服务器上共享的路径
gest_ok指定来宾账号可见
writable指定这个目录是否可写
重启服务器:systemctl restart smb
在客户端,通过smbclient -L 192.168.200.2 -U smbuser1可见查看到服务器上导出的共享目录:
在客户端,通过smbclient //192.168.200.2/myfiles -U smbuser1连接服务器端:
ls:查看共享目录中的内容
lcd /etc/samba:切换到客户端的本地目录
!ls:查看本地目录中的内容
put smb.conf:把本地目录中的smb.conf文件上传服务器
把目录共享给用户组:
添加用户smbsuer2,添加用户组smbgrp,设置用户组权限
添加用户smbuser3,但不把这个用户添加到用户组smbgrp中:
更改/etc/samba/smb.conf配置文件:
重启samba服务器,systemctl restart smb
在客户端用smbuser1,smbuser2和smbuser3用户测试服务器的上传,smbuser1和smbuser2在组smbgpr中,拥有上传权限,而smbuser3不在smbgrp用户组中,只有读权限:
在服务器端输入:smbstatus查看共享情况:
在客户端进行临时挂载:
先创建两个文件夹:/mnt/samba和/mnt/smb
mount -t cifs //192.168.200.2/myfiles /mnt/samba -o username=smbuser1,password=xrdxrd,dir_mode=0777,file_mode=0777
mount -t cifs //192.168.200.2/myfiles /mnt/samba -o username=smbuser1,password=xrdxrd
挂载后使用df -h查看挂载情况,把samba服务器的共享目录分布挂载在/mnt/samba下和/mnt/smb下,root用户拥有读写权限,想要更改/mnt/smb的所有者,文件权限的尝试都失败了。如果想要除root外的用户对此目录有写权限,挂载时候带上选项,dir_mode=0777,file_mode=0777