# SAMBA Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。 ---- ## windows文件共享设置 - 网络和共享中心 - 更改高级共享设置 - 在“网络发现”中设置为“启用网络发现” - 在"密码保护的共享"中”启用密码保护共享“提高共享的安全性 - 在想要设置成共享的文件的文件上单击并选者共共享,高级共享 - 选择共享此文件夹,然后点击下面的“权限,可设置”共享权限“ ```bash #查看一下该用户共享权限下的共享情况 smbclient -L //IP地址 -U 用户名 ##其中数字为IP,最后为用户名 #例如 smbclient -L //222.29.111.222 -U wuhongyi #输出中不带“$”的那个,就是我们可以访问的共享文件夹 ``` Linux将共享文件夹也是当作磁盘资源对待的,因此需要使用mount工具将其挂载到本地文件空间才可以访问,这一点就像Windows常用的网络磁盘映射是一样的。 因此,首先我们需要创建一个挂载点,也就是在本地目录空间中创建一个挂载目录。 ```bash #例如 mkdir -p /mnt/MYSHARE # mkdir -p /home/wuhongyi/windows/D ``` 挂载点创建之后,就可以使用mount命令挂载共享文件夹了。 ```bash mount -t cifs -o user=用户名称,password=共享密码,iocharset=utf8,codepage=cp936 //共享IP地址或NetBIOS名称/共享目录 本底挂载地址 #其中cifs使用Linux常用的网络文件类型,也可以使用smbfs,以系统可以识别为准 # “-o”表示挂载参数,常见的是需要提供共享的用户名和密码,另外需要注意的是iocharset和codepage,这两个参数是用来解决系统之间的字符编码转换的,如果出现乱码的情况,是需要调整这两个参数的,针对简体中文,使用utf8和cp936一般都可以解决问题。 #例如 mount -t cifs -o user=wuhongyi,password=xxxxx //222.29.111.222/D /home/wuhongyi/windows/D ``` Windows共享资料使用完毕之后,也可以将其使用umount命令卸载,卸载就很简单了,直接使用“umount /mnt/MYSHARE”就可以了,其中MYSHARE是就是我们前面创建的挂载点了。 挂载的Windows共享文件夹在Linux重启之后就会消失的,如果还要使用,是需要重新挂载的。 如果希望Linux开机自动挂载Windows共享文件夹,则需要将挂载命令添加到Linux的“/etc/fstab”,也就是将前述的命令参数按照fstab的要求添加到fstab里面。 ```bash #/etc/fstab中加入 //222.29.111.222/D /home/wuhongyi/windows/D cifs auto,username=wuhongyi,password=xxx 0 0 然后保存,退出,运行命令: mount -a ``` ---- ## Linux文件共享设置 ```bash #/etc/samba/smb.conf #可参考/etc/samba/smb.conf.example #samba4 已经不支持 security = share 模式 [global] workgroup = WORKGROUP security = user hosts allow = 222.29.111.222 #可以访问的IP地址,这里写的是windows地址 passdb backend = tdbsam printing = cups printcap name = cups load printers = yes cups options = raw #这里屏蔽掉是为了安全 “setsebool -P samba_enable_home_dirs on” 命令之后整个根目录就全暴露了 # [homes] # comment = Home Directories # valid users = %S, %D%w%S # browseable = No # read only = No # inherit acls = Yes [printers] comment = All Printers path = /var/tmp printable = Yes create mask = 0600 browseable = No [print$] comment = Printer Drivers path = /var/lib/samba/drivers write list = root create mask = 0664 directory mask = 0775 #采用自己创建的名称 [Linux] #共享名,就是windows访问时会显示的名称 comment = Hongyi Wu Linux #注释 path = /home/wuhongyi #设置共享文件夹目录 browseable = Yes #是否可以浏览看到目录结构 guest ok = No #不登录是否可以访问,来访记录 writable = Yes #是否可写(表示通过共享window下可写入) ``` ```bash #设置开机启动 systemctl enable smb.service #查看是否设置成功 systemctl status smb.service #启动samba服务 systemctl start smb.service #再次查看启动状态 systemctl status smb.service #添加用户 smbpasswd -a username #回车后会提示输入密码。这个就是将来远程主机登录时需要的密码,这里的username帐号必须是系统已经有的帐号,没有的话会报错,然后新输的密码就是远程登录密码,这样做的好处就是自己的密码和远程登录的密码分开。 #附: smbpasswd命令的常用方法 #smbpasswd -a 增加用户(要增加的用户必须以是系统用户) #smbpasswd -d 冻结用户,就是这个用户不能在登录了 #smbpasswd -e 恢复用户,解冻用户,让冻结的用户可以在使用 #smbpasswd -n 把用户的密码设置成空.要在global中写入 null passwords -true #smbpasswd -x 删除用户 #selinux设置 getsebool -a | grep samba setsebool -P samba_enable_home_dirs on #共享根目录需要开启。例如/etc /home #防火墙,使用新的防火墙firewall添加就可以,比iptables更方便 firewall-cmd --list-services firewall-cmd --permanent --add-service=samba firewall-cmd --reload firewall-cmd --list-services #重启samba服务 systemctl restart smb.service #service smb start #SL6? ``` windows下连接,启动运行,输入 ``` \\222.29.111.84 ``` ---- > https://jingyan.baidu.com/article/574c521911f0866c8d9dc1a3.html > http://blog.csdn.net/farsight2009/article/details/67638461 > http://blog.csdn.net/vincentlmeng/article/details/72623013 > https://www.cnblogs.com/cutelinux/p/5683940.html