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

直接回车,不用输入密码。

实验三

参考拓展