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
直接回车,不用输入密码。
实验三http://shjiayeah.blog.163.com/blog/static/225604180201321261310349/