Linux<----->windows之间共享
Samba使用2个进程
smb ip之间的通信用smb (tcp) nmb 主机名之间的通信用nmb (netbios协议)端口
smb tcp 139 445
nmb udp 137 138配置文件 /etc/samba/smb.conf
安装samba
yum install samba*
firewall-cmd --permanent --add-service=samba # 添加防火墙策略 firewall-cmd --reload systemctl restart smb #启动或重启smb服务。nmb服务可以不用启动 systemctl enable smb netstat -anplut | grep smb #查看端口 139 445配置samba
hosts allow = 192.168.100. EXCEPT 192.168.100.99
hosts deny = 192.168.10.0/24 192.168.1. 同时出现,allow生效 workgroup = MYGROUP windows的工作组名 server string = Samba Server Version %v #对方看到的共享信息,出于防止泄漏版本号的安全考虑,最好改掉 log file = /var/log/samba/log.%m #%m代表客户端ip,多个客户端连接生成多个以客户端ip结尾的日志 max log size = 50 #日志大小50K security = user #设置共享的模式 #share 不用输入用户名/密码 (注:rhel7.4中设置为share时报错“WARNING: Ignoring invalid value 'share' for parameter 'security'”) #user 服务器用口令文件进行验证,客户端连接需要提供用户名和口令 #server 网络中配置专门的服务器认证 #domain 使用微软的DC认证测试环境说明:
LINUX系统:RHEL7.4 物理机系统:win10 虚拟机软件:OracleVirtualbox5.1 RHEL1 IP:192.168.100.1 作为samba主服务器 RHEL2 IP:192.168.100.2 作为客户机 |
1、实验-share模式
在RHEL1上
yum install samba* firewall-cmd --permanent --add-service=samba firewall-cmd --reload systemctl restart smb systemctl enable smb netstat -anplut | grep smb mkdir /share1 #创建测试目录及文件 mkdir /share2 mkdir /share3 touch /share1/111111 touch /share2/222222 touch /share3/333333 chmod o+rwx /share1 #生产中尽量采用setfacl赋权更安全 chmod o+rwx /share2 chmod o+rwx /share2 chcon -R -t samba_share_t /share1 #设置安全上下文 chcon -R -t samba_share_t /share2 chcon -R -t samba_share_t /share3 getsebool -a | grep samba#部分samba服务需打开samba_export_all_rw和samba_enable_home_dirs
# setsebool -P samba_export_all_rw on # setsebool -P samba_enable_home_dirs onvim /etc/samba/smb.conf
sercurity = share #更改 [share1] #客户端连接后看到的文件夹名comment = Public Stuff #客户端连接后看到的描述path = /share1 #本地的真实路径public = yes #share模式,此处必须为yesbrowseable = yes #客户端可见 |
在RHEL2上
yum install -y samba-client cifs-utils
smbclient -L //192.168.100.1 #查看服务器共享目录,无需输入密码 smbclient //192.168.100.1/share1 #无需输入密码即可进入 smb: \> ls smb: \> get file1 #put上传 如需写入需要在RHEL1的配置文件上打开writable = yes,并设置共享目录/share1有o+w权限 批量下载 smb: \>prompt smb: \>mget file* windows客户端 设置虚拟机通过虚拟网络与真机连接 \\192.168.100.1 net use * /del清除缓存2、实验-user模式
客户端要使用用户名、密码登录,已经在服务器存在的用户名密码/etc/passwd,客户端使用的密码可以和服务器上的/etc/shadow不同。samba自己有一个文件保存用户名密码,必须public=no
在RHEL1上 useradd -s /sbin/nologin user1 useradd -s /sbin/nologin user2 useradd -s /sbin/nologin user3 smbpasswd -a user1 #创建samba用户 smbpasswd -a user2 smbpasswd -a user3 -d 禁用samba用户disable -e 允许samba用户enable -x 删除samba用户delete修改配置文件:
vim /etc/samba/smb.conf
security = user #更改 [share1]comment = samba-share1path = /share1public = nobrowseable = yeswritable = yes[share2] comment = samba-share2path = /share2public = nobrowseable = yeswritable = nowrite list = user1[share3] comment = samba-share3path = /share3public = nobrowseable = yeswritable = nowrite list = user1 #只有user1授权写入valid users = user1 #只有user1授权登录 |
systemctl restart smb #重启smb服务
#优先级valid users>writable>write list
#writable=yes表示所有用户都有写的权限 #write list生效时必须writable=no #write list和valid users可采用user1 @shichangbu +shichangbu的格式,中间用空格分开在RHEL2上
smbclient -L //192.168.100.1 smbclient -U user1 //192.168.100.1/share1 #输入user1密码可进入 用user1登录share1-3均可写入 用user2登录share1可写入,share2可登陆不可写入,share3不可登录windows客户端测试
设置虚拟机通过虚拟网络与真机连接 \\192.168.100.1 net use * /del清除缓存 如果搭建了samba服务,无法写入 1.检测配置文件writable write list 2.检测文件系统是否有写的权限 ugo setfacl 3.检测selinux 1.布尔值 2.上下文 4.防火墙3、实验-单独用户配置文件
修改配置文件:vim /etc/samba/smb.conf
[Golble] config file = /etc/samba/smb.conf.%U #增加,%U代表用户名,以后有对应配置文件的用户将直接跳转读取自己的配置文件 cp /etc/samba/smb.conf /etc/samba/smb.conf.user3 vim /etc/samba/smb.conf.user3 删除config file = /etc/samba/smb.conf.%U[share3]comment = samba-share3path = /share3public = nobrowseable = yeswritable = yes |
systemctl restart smb
在RHEL2上
smbclient -L //192.168.100.1 #不输入密码可查看到所有共享资源 smbclient -L //192.168.100.1 -U user3 #输入user3的密码只可以看到自己的资源 smbclient -U user3 //192.168.100.1/share3 #之前user3对share3不可登录,现在可登陆可写入,由于自己的配置文件中没有share1和share2,所以user3不能登录share1和share24、实验-普通挂载
在RHEL2上
mount -t cifs -o username=user1,password=user1 //192.168.100.1/share1/ /mnt/share1/ |
#-t cifs可省略,系统会自动识别
ll /mnt/share1/ umount /mnt/share1/ mount -o username=user1 //192.168.100.1/share1/ /mnt/share1/ #输入密码可挂载 vim /etc/fstab //192.168.100.1/share1 /mnt/share1 cifs credentials=/etc/filename 0 0vim /etc/filename
user=user1 pass=user1或者:
//192.168.100.1/share1 /mnt/share1 cifs username=user1%user1 0 0 或者 //192.168.100.1/share1 /mnt/share1 cifs username=user1,password=user1 0 0#普通挂载su到其他用户可以直接使用挂载资源
5、实验-multiuser方式挂载一个用户
在RHEL1上
pdbedit -L #查看哪些用户可以挂载 rm -f /etc/samba/smb.conf.user3vim /etc/samba/smb.conf.user3
删除config file = /etc/samba/smb.conf.%U
[share1]comment = samba-share1path = /share1public = nobrowseable = yeswritable = nowrite list = user1valid users = user1 user2 |
systemctl restart smb
在RHEL2上
useradd user1 #本地必须有和服务器对应的用户 useradd user2 useradd user3在root用户下执行挂载
mount -o multiuser,user=user1,sec=ntlmssp //192.168.0.1/share1 /mnt/share1#输入密码可挂载,也加入password=user1直接挂载
su - user1
ll /mnt/share1 #无权限
cifscreds add 192.168.100.1 #输入RHEL1上user1的密码,从samba服务器获取认证 ll /mnt/share1 #获得RHEL1上user1的权限,可登陆,可写入 su - user2 ll /mnt/share1 #无权限 cifscreds add 192.168.100.1 #输入RHEL1上user2的密码,从samba服务器获取认证 ll /mnt/share1 #获得RHEL1上user2的权限,可登陆,不可写入 su - user3 ll /mnt/share1 #无权限cifscreds add 192.168.100.1 #输入RHEL1上user3的密码,从samba服务器获取认证
或者cifscreds update //192.168.100.1 #更新认证 ll /mnt/share1 #获得RHEL1上user3的权限,不可登陆 在root用户下cifscreds clearall可清除获得的认证,su到其他用户需重新获取认证 多用户各自有配置文件的情况,可以建立用户文件,一次挂载多个用户,vim /sambauser.txt
username=user1 password=user1 username=user2 password=user2 mount -o multiuser,credentials=/sambauser.txt,sec=ntlmssp //192.168.100.1/share1 /mnt/share1fstab自动挂载
//192.168.100.1/share1 /mnt/share1 cifs defaults,multiuser,credentials=/sambauser.txt,sec=ntlmssp 0 0 |
mount -a
smb客户端的multiuser挂载技术--管理员只需要作一次挂载--客户端在访问挂载点时,若需要不同权限,可临时切换新的共享用户【无需重新挂载】实现方式--挂载smb共享时启用multiuser支持--使用cifscreds临时切换身份挂载参数调整mount.cifs的挂载参数--multiuser, 对客户端多个用户身份的区分支持--sec=ntlmssp,NT局域网管理安全支持