Chinaunix首页 | 论坛 | 博客
  • 博客访问: 359776
  • 博文数量: 42
  • 博客积分: 1984
  • 博客等级: 上尉
  • 技术积分: 927
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-30 14:40
文章分类

全部博文(42)

文章存档

2016年(11)

2014年(3)

2013年(7)

2012年(3)

2011年(8)

2010年(10)

分类: LINUX

2013-05-28 22:27:02

Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。

以下通过两个基础实验来学习samba,实验平台为Centos 6.2,环境为:
Samba服务器
主机名:luffy    IP地址:192.168.56.53
客户端测试机
主机名:zoro     IP地址:192.168.56.54


实验一

假设公司有一台samba服务器,提供了一个共享名为/share的共享目录,现在要求只允许192.168.56.0网段的用户可以使用自己的samba帐户登录此目录,并可读写,但不允许动别人的资料。

一、准备工作

1.创建用户user1、user2,并在根目录下创建共享文件夹share及其共享文件,
其中share的文件夹属性为777。
创建结果如下:
[root@luffy ~]# cat /etc/passwd
……省略部分内容……
user1:x:502:502::/home/user1:/bin/bash
user2:x:503:503::/home/user2:/bin/bash
[root@ luffy ~]# ls -l /share
total 8
-rw-r--r--. 1 root root 4 May 24 06:41 a
-rw-r--r--. 1 root root 4 May 24 06:41 b
[root@ luffy ~]# ls -ld /share
drwxrwxrwx. 2 root root 4096 May 24 06:41 /share

2.安装samba软件
[root@luffy ~]# yum install samba*
Samba*涉及到的组件是samba,samba-common,samba-client
其中samba必需安装,后面两个在装系统时其实已默认安装(因此其他linux客户端可以直接使用smbclient命令访问samba的共享文件夹)。

3.添加samba用户
Samba中添加的用户,必须是samba服务器所在系统中预先创建的,但该用户登录samba时使用的密码,需由samba创建并保存。
使用到的命令是smbpasswd,参数-a表示添加用户,-x表示删除用户,-d表示禁用用户。
下面将user1和user2加入到samba中,
[root@ luffy ~]# smbpasswd -a user1
New SMB password:
Retype new SMB password:
Added user user1.
[root@ luffy ~]# smbpasswd -a user2
New SMB password:
Retype new SMB password:
Added user user2.

二、配置共享

在服务器SELinux开启(Enforcing状态)的情况下,进行以下实验。

1.在samba主配文件/etc/samba/smb.conf末尾添加以下内容:

        [share]
        comment = sharefile  #描述信息
        path = /share  #指定共享文件夹的路径
        hosts allow = 192.168.56.  #允许访问该目录的网段
        browseable=yes  #可浏览
        writable = yes  #可写

注,hosts allow字段如果不写,则表示所有可访问该服务器的客户端都可访问该共享目录。在本实验和许多实际环境中,都是内网共享,只有同网段的内网用户才可访问,“hosts allow=本网段”其实不需要写。

另外,主配文件第100行附近,
        security = user
        #smb passwd file = /etc/samba/smbpasswd
        passdb backend = tdbsam
表示,当前(默认)使用的是user认证方式,即客户端需要有samba中记录的用户及其密码才能登录,如果是security = share,则表示采用匿名登录方式。

配置修改完成后,重启samba服务,
[root@luffy ~]# service smb restart

客户端访问时,报错:
[root@zoro ~]# smbclient //192.168.56.53/share -U user1
Enter user1's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.9-151.el6]
smb: \> ls
NT_STATUS_ACCESS_DENIED listing \*

                40317 blocks of size 262144. 31467 blocks available
smb: \> quit
没有访问权限,是由于请求被selinux拦截了。
(注:如果是出现NT_STATUS_BAD_NETWORK_NAME的报错,大概是因为主配文件中定义共享文件块时,中括号里的名字出错,访问路径//192.168.56.53/share中的share不是指根目录中的share文件夹,而是主配文件中自定义的[share]中括包内的share。)

2.服务器端对samba共享目录修改安全上下文,使用chcon命令
[root@luffy ~]# ls -ldZ /share
drwxr-xr-x. root root system_u:object_r:default_t:s0   /share
[root@luffy ~]# chcon -t samba_share_t /share
[root@luffy ~]# ls -ldZ /share
drwxr-xr-x. root root system_u:object_r:samba_share_t:s0 /share

客户端再访问,就正常了
[root@zoro ~]# smbclient //192.168.56.53/share -U user1
Enter user1's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.9-151.el6]
smb: \> ls
  .                                   D        0  Fri May 24 06:41:33 2013
  ..                                 DR        0  Fri May 24 06:18:56 2013
  a                                            4  Fri May 24 06:41:26 2013
  b                                            4  Fri May 24 06:41:33 2013

                40317 blocks of size 262144. 31466 blocks available
smb: \>
smb: \> rm a
smb: \> ls
  .                                   D        0  Fri May 24 06:45:54 2013
  ..                                 DR        0  Fri May 24 06:18:56 2013
  b                                            4  Fri May 24 06:41:33 2013

                40317 blocks of size 262144. 31466 blocks available
smb: \>quit

从以上操作还可以看到,此时user1可以删除其root创建的文件a(因为文件夹share的权限被设成了777)。即user1可以动其他人的文件,这不符合要求。

3.服务器端对共享目录设置特殊权限
[root@luffy ~]# chmod o+t /share

这里的t,指sticky bit,可以理解为防删除位. 一个文件是否可以被某用户删除,主要取决于该文件所属的组是否对该用户具有写权限。如果没有写权限,则这个目录下的所有文件都不能被删除,同时也不能添加新的文件。如果希望用户能够添加文件,但同时不能删除文件,则可以对文件使用sticky bit位。设置该位后, 就算用户对目录具有写权限, 也不能删除该文件。(这话理解起来有点费劲~)

此时客户端登录便不可以删除其他用户的文件了,但删除自己的文件没问题。
[root@zoro ~]# smbclient //192.168.56.53/share -U user1
Enter user1's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.9-151.el6]
smb: \> ls
  .                                   D        0  Fri May 24 06:45:54 2013
  ..                                 DR        0  Fri May 24 06:18:56 2013
  b                                            4  Fri May 24 06:41:33 2013

                40317 blocks of size 262144. 31465 blocks available
smb: \> rm b
NT_STATUS_ACCESS_DENIED deleting remote file \b
smb: \> rmdir user1
smb: \>quit

三、将共享文件加载到客户端本地进行操作

客户端使用smbclient远程访问共享目录时,操作指令是有限的(通过help命令可以查看),touch命令就不可用。为做进一步验证,要将共享目录加载到本地,再进行相关操作。
通过mount cifs方式进行加载。

1.先使用user1挂载、操作:
[root@zoro ~]# mount -t cifs 192.168.56.53:/share /mnt/ -o username=user1
Password: 
[root@zoro ~]# cd /mnt
[root@zoro mnt]# ls
b
[root@zoro mnt]# mkdir user1
[root@zoro mnt]# vim user1/1
user111 (注,这个是输入的内容)                             
[root@zoro mnt]# ll
total 4
-rw-r--r-- 1 root root 4 May 24 06:41 b
drwxr-xr-x 2  502  502 0 May 24 07:02 user1
[root@zoro mnt]# ll user1/
total 4
-rw-r--r-- 1 502 502 8 May 24 07:02 1
[root@zoro mnt]# cd
[root@zoro ~]# umount -t cifs 192.168.56.53:/share /mnt/
umount: /mnt: not mounted

2.再用user2挂载、操作:
[root@zoro ~]# mount -t cifs 192.168.56.53:/share /mnt/ -o username=user2%redhat
(注,这行命令,直接把user2的samba密码redhat也写出来了)
[root@zoro ~]# cd /mnt
[root@zoro mnt]# ls
b  user1
[root@zoro mnt]# ls user1/
1
[root@zoro mnt]# cat user1/1
user111
[root@zoro mnt]# rm -rf user1/
rm: cannot remove `user1/1': Permission denied
[root@zoro mnt]# rm -rf b
rm: cannot remove `b': Permission denied
[root@zoro mnt]#
[root@zoro mnt]# touch 2
[root@zoro mnt]# cd
[root@zoro ~]# umount -t cifs 192.168.56.53:/share /mnt/
umount: /mnt: not mounted

可以看到,user2是没有权限删除或更改其他用户的文件的,但可以创建属于自己的文件。


实验二

公司的IT部门有it1、it2两个成员,他们可以登录到自己部门的共享目录进行读写操作,上传的文件的权限为640,且只允许他们之间读取文件,但不可以修改对方的文件。

一、准备工作

1.创建用户it1、it2和用户组it,并将it1和it2加入到用户组it。

2.创建共享目录/it,将其权限属性置为777,并使用chcon -t samba_share_t /it命令修改其安全上下文(本实验仍然在SELinux开启的情况下进行测试)。

3.将用户it1、it2加入到samba服务器
[root@luffy ~]# smbpasswd -a it1
New SMB password:
Retype new SMB password:
Added user it1.
[root@luffy ~]# smbpasswd -a it2
New SMB password:
Retype new SMB password:
Added user it2.

二、配置共享

1. 在主配文件/etc/samba/smb.conf末尾添加以下内容:
        [it]
        comment = it dept.
        path = /it
        browseable=yes
        writable = yes
        valid users = @it  #指定允许访问的用户组为it,注意@符号
        create mask = 640  #指定新创建的文件的权限为640
        directory mask = 750 #指定新创建的文件夹的权限为750
        group = it  #指定新创建的文件(夹)的用户组为it,这里没有@

配置修改完成后,重启samba服务,
[root@luffy ~]# service smb restart

2.客户端访问
[root@zoro ~]# smbclient //192.168.56.53/it -U user1
Enter user1's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.9-151.el6]
tree connect failed: NT_STATUS_ACCESS_DENIED
[root@zoro ~]# smbclient //192.168.56.53/it -U it1
Enter it1's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.9-151.el6]
smb: \> quit
[root@zoro ~]# smbclient //192.168.56.53/it -U it2
Enter it2's password: 
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.9-151.el6]
smb: \> ls
  .                                   D        0  Mon May 27 05:40:45 2013
  ..                                 DR        0  Mon May 27 05:40:45 2013

                40317 blocks of size 262144. 31463 blocks available
smb: \> quit
从以上连接可以看出,只有属于it用户组的用户才有访问/it的权限。

三、将共享文件加载到客户端本地进行操作

1.使用it1登录、挂载,创建文件(夹)
[root@zoro ~]# mount -t cifs 192.168.56.53:/it /mnt/ -o username=it1%redhat
[root@zoro ~]# cd /mnt
[root@zoro mnt]# mkdir it01
[root@zoro mnt]# vim it01/a
this is file a 
[root@zoro mnt]# ls -ld it01/
drwxr-x--- 2 504 506 0 May 27 06:35 it01/
[root@zoro mnt]# ls -ll it01/
total 4
-rw-r----- 1 504 506 15 May 27 06:35 a
[root@zoro mnt]# cd
[root@zoro ~]# umount -t cifs 192.168.56.53:/it /mnt/
umount: /mnt: not mounted

注:由于在配置文件中,对/it的共享设置,指定了create mask = 640和directory mask = 750,所以创建的文件和文件夹,都是用户组成员有读(执行)权限,其他人没有任何读写权限。

另外,由于/it的共享设置里有group = it这一行,it1无论是创建文件或文件夹,其所属用户组都是it1(504)所在的用户组it(506)。这里因为是远程挂载的,使用ll命令只能看到用户id。

下面使用it2访问时,由于it2也在it组里,所以it2对文件夹it01的r-x权限,对文件a有r--权限。

2.使用it2登录、挂载,进行验证
[root@zoro ~]# mount -t cifs 192.168.56.53:/it /mnt/ -o username=it2%redhat
[root@zoro ~]# cd /mnt
[root@zoro mnt]# ls
it01
[root@zoro mnt]# ls it01/
a
[root@zoro mnt]# cat it01/a 
this is file a
[root@zoro mnt]# rm -rf it01
rm: cannot remove `it01/a': Permission denied
[root@zoro mnt]# rm -rf it01/a
rm: cannot remove `it01/a': Permission denied
[root@zoro mnt]# touch it01/b
touch: cannot touch `it01/b': Permission denied

以上可以看出,it2可以读it1的文件(夹),但却没有权限删除和修改(使用vim编辑it01/a时,会被提示不能修改)。

在上述配置文件中,如果对/it的共享设置,指定了create mask = 640和directory mask = 750,却没有添加group = it,那么it1创建的文件和文件夹,其用户组都是it1,此时it2属于其他人,是没有读写权限的。

本文出自 “一树清劲” 博客,转载请务必保留此出处。

阅读(1500) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~