Samba是实现Windows系统和Linux系统的文件共享服务。
一、Samba的配置文件
首先是安装Samba
[root@tpp ~]# yum install -y samba samba-client
Samba的配置文件是/etc/samba/smb.conf,默认未注释的部分如下:
[root@tpp ~]# vim /etc/samba/smb.conf [global] workgroup = MYGROUP server string = Samba Server Version %v log file = /var/log/samba/log.%m max log size = 50 security = user passdb backend = tdbsam load printers = yes cups options = raw [homes] comment = Home Directories browseable = no writable = yes [printers] comment = All Printers path = /var/spool/samba browseable = no guest ok = no writable = no printable = yes
注:主要有以上三个部分:[global], [homes], [printers]
[global] 定义全局的配置,workgroup用来定义工作组,一般情况下,需要我们把这里的MYGROUP改成WORKGROUP(windows默认的工作组名字)。
●security = user //这里指定samba的安全等级。关于安全等级有四种:
(1)share:用户不需要账户及密码即可登录samba服务器
(2)user:由提供服务的samba服务器负责检查账户及密码(默认)
(3)server:检查账户及密码的工作由另一台windows或samba服务器负责
(4)domain:指定windows域控制服务器来验证用户的账户及密码。
●passdb backend = tdbsam //passdb backend(用户后台),samba有三种用户后台:smbpasswd, tdbsam和ldapsam.
(1)smbpasswd:该方式是使用smb工具smbpasswd给系统用户(真实用户或者虚拟用户)设置一个Samba密码,客户端就用此密码访问Samba资源。smbpasswd在/etc/samba中,有时需要手工创建该文件。
(2)tdbsam:使用数据库文件创建用户数据库。数据库文件叫passdb.tdb,在/etc/samba中。passdb.tdb用户数据库可使用 smbpasswd -a 创建Samba用户,要创建的Samba用户必须先是系统用户。也可使用pdbedit创建Samba账户。pdbedit参数很多,列出几个主要的:
pdbedit -a username //新建Samba账户。 pdbedit -x username //删除Samba账户。 pdbedit -L: //列出Samba用户列表,读取passdb.tdb数据库文件。 pdbedit -Lv: //列出Samba用户列表详细信息。 pdbedit -c “[D]” -u username //暂停该Samba用户账号。 pdbedit -c “[]” -u username //恢复该Samba用户账号。
(3)ldapsam:基于LDAP账户管理方式验证用户。首先要建立LDAP服务,设置 “passdb backend =ldapsam:ldap://LDAP Server”
●load printers 和 cups options 两个参数用来设置打印机相关。
除了这些参数外,还有几个参数:
●netbios name = MYSERVER //设置出现在网上邻居中的主机名
●hosts allow = 127. 192.168.12. 192.168.13. //用来设置允许的主机,如果在前面加 ”;” 则表示允许所有主机
●log file = /var/log/samba/%m.log //定义samba的日志,这里的%m是上面的netbios name
●max log size = 50 //指定日志的最大容量,单位是K
[homes] 该部分内容共享用户自己的家目录,也就是说,当用户登录到samba服务器上时实际上是进入到了该用户的家目录,用户登陆后,共享名不是homes而是用户自己的标识符,对于单纯的文件共享的环境来说,这部分可以注视掉。
[printers] 该部分内容设置打印机共享。
二、Samba试验
下面我们来进行试验,不过实验之前要先关闭iptables和selinux,否则很有可能试验失败。
实验一
要求:共享一个目录,任何人都可以访问,即不用输入密码就可访问,要求只读。
1、打开Samba的配置文件
[root@tpp ~]# vim /etc/samba/smb.conf [global] //修改如下两处 workgroup = WORKGROUP server string = Samba Server Version %v security = share passdb backend = tdbsam load printers = yes cups options = raw [tppshare] //在末尾处增加 comment = share all path = /tmp/samba browseable = yes public = yes writable = no
2、创建测试目录
[root@tpp ~]# mkdir /tmp/samba [root@tpp ~]# chmod 777 /tmp/samba [root@tpp ~]# cd /tmp/samba/ [root@tpp samba]# mkdir 12 [root@tpp samba]# touch test.txt [root@tpp samba]# echo "1234dfgxc6" > test.txt
3、启动Samba服务
[root@tpp ~]# /etc/init.d/smb start 启动 SMB 服务: [确定]
也可以用testparm命令测试smb.conf文件是否配置正确:
[root@tpp ~]# testparm
4、测试
(1)在Windows下测试:
win+r 输入 \\192.168.0.109 就可以看到如下图所示:
你可以试着修改下文件,或者新建文件,都会发现没有权限,只能读。
(2)在Linux下测试:
客户机上要安装cifs-utils
[root@tpp ~]# yum install -y cifs-utils
挂载到/opt/目录下
[root@tpp ~]# mount -t cifs //192.168.0.109/tppshare /opt //不要输入密码直接回车 [root@tpp ~]# df -h
[root@tpp ~]# ls -l /opt/ 总用量 4 drwxr-xr-x 2 root root 0 9月 13 21:44 12 -rw-r--r-- 1 root root 11 9月 13 21:29 test.txt
实验二
要求:共享一个目录,使用用户名和密码登录后才可以访问,要求可以读写。
1、打开Samba的配置文件
[root@tpp ~]# vim /etc/samba/smb.conf [global] //修改如下 workgroup = WORKGROUP server string = Samba Server Version %v security = user passdb backend = tdbsam load printers = yes cups options = raw [myshare] //在末尾处增加 comment = share for users path = /tmp/mysamba browseable = yes public = no writable = yes
2、创建测试目录
[root@tpp ~]# mkdir /tmp/mysamba [root@tpp ~]# chmod 777 /tmp/mysamba [root@tpp ~]# cd /tmp/mysamba/ [root@tpp mysamba]# mkdir 111 [root@tpp mysamba]# touch 1.txt [root@tpp mysamba]# echo "dakdfaifhai" > 1.txt
3、添加用户
因为在[globa]中 “passdb backend = tdbsam”, 所以要使用 pdbedit 来增加用户,注意添加的用户必须在系统中存在,所以需要先创建系统账号
[root@tpp mysamba]# useradd user1 //创建系统用户 [root@tpp mysamba]# pdbedit -a user1 //添加user1为Samba账号
重启Samba服务
[root@tpp mysamba]# service smb restart
注意:pdbedit有什么命令参数,常用的还有 -L:列出Samba账号,-x:删除某个Samba账号
4、测试
(1)在Windows下测试:
win+r 输入 \\192.168.0.109 就可以看到要输入账号密码的提示框,输入正确后可以进入,接着我们可以对文件夹以及文件进行修改。
注意:从上面我们可以看到会生成一个以用户名为命名的文件夹,因为我们没有把[home]那个模块给注释掉。
注释掉后重启Samba服务,我们再查看下就会发现user1目录不存在了。
(2)在Linux下测试:
[root@tpp ~]# mount -t cifs -o username=user1,password=123456 //192.168.0.109/myshare /opt [root@tpp ~]# df -h
查看下,并且我们可以/opt/目录进行新建文件或者文件夹的操作。
另外在Linux下还有一种方式访问,就是在客户端安装samba-client包,然后用smbclient命令访问。
[root@tpp ~]# yum install -y samba-client [root@tpp ~]# smbclient //192.168.0.109/myshare -U user1
smb也有很多命令,大家可以试试。
实验三
要求:共享两个目录,public与private,其中public目录可匿名访问,任何人可以读写;private目录需要验证用户名密码才能够访问。但都是只读。
1、打开Samba的配置文件
[root@tpp ~]# vim /etc/samba/smb.conf [global] //修改如下两处 workgroup = WORKGROUP server string = Samba Server Version %v security = user map to guest = bad user //这个很关键,实现匿名无须交互输入用户名和密码 guest account = nobody //匿名用户映射为nobody用户,系统中要有nobody用户 encrypt passwords = yes //用户的密码加密 passdb backend = tdbsam load printers = yes cups options = raw [public] comment = public path= /tmp/public browseable = yes //可以被浏览,就是在网络邻居中能看到共享名 guest ok = yes //允许匿名访问,这个也需要设置,否则匿名无法访问 public = yes create mask = 0644 directory mask = 0755 [private] comment = project path= /tmp/private browseable = yes public = no guest ok = no write list = @train force user = root //强制制定建立的文件的属主 create mask = 0644 directory mask = 0755
2、创建测试目录
[root@tpp ~]# mkdir /tmp/public[root@tpp ~]# mkdir /tmp/private
注:因为配置文件中定义过文件的权限,故不用再定义
3、创建用户
试验二已经定义过,我们就不用再定义。可查看下Samba的所有账号:
[root@tpp ~]# pdbedit -L
4、测试
(1)在Windows下测试:
win+r 输入\\192.168.0.109 进入后,可以看到两个文件夹。
public目录可直接访问,private目录要输入账号密码验证后才可以进入;不过都对这两个文件只读。
(2)在Linux下测试:
[root@tpp ~]# mount -t cifs -o username=user1,password=123456 //192.168.0.109/private /opt [root@tpp ~]# df -h
[root@tpp ~]# mount -t cifs //192.168.0.109/public /mnt
直接回车,不用输入密码。
实验三
参考拓展