感谢支持
我们一直在努力

Linux基本知识点总结——Samba

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末尾添加以下内容:

1
2
3
4
5
6

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

 

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

 

另外,主配文件第100行附近,

1
2
3

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末尾添加以下内容:

1
2
3
4
5
6
7
8
9

[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属于其他人,是没有读写权限的。

赞(0) 打赏
转载请注明出处:服务器评测 » Linux基本知识点总结——Samba
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏