RHCE培訓筆記——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末尾添加以下內容:

[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屬於其他人,是沒有讀寫權限的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章