samba

samba
 

samba服務只要是爲了實現linux主機提供一種類似於windows的網上鄰居的功能。

windows提供網絡共享主要是通過SMB/CIFS協議實現的

smb à service message block

cifs à common internet filesystem

windows在一個局域網中通過netbios來實現的名字解析,以此來實現在局域網中沒有DNS的情況下主機間共享文件。

linux/unix中實現文件共享的方法是NFS,但如果在linuxwindows之間共享問價的話就有點困難了

要想實現讓兩個系統之間來共享文件,就出現了samba服務,來共享linux中的文件夾,讓windows可以掛載。

samba共有三個進程 smbdnmbdwinbindd

smbd 實現文件共享

nmbd 通知windows的網上鄰居自己的主機名,有點類似於netbios的功能

winbindd linux假如windows域中會啓動此進程

協議端口 137,138,445

 
軟件包

samba-clientsamba-commonsamba,其中前兩個是作爲客戶端的工具,而samba則是作爲服務器的軟件包。還有個輔助軟件包samba-swat用來實現通過web的方式來管理samba服務

 
服務的腳本/etc/init.d/smb
主配置文件/etc/samba/smb.conf

port 137/udp(netbios)138/udp(netbios) 139/tcp(netbios)445/tcpsmb服務)接受SElinux的控制

配置文件

接下來我們看一下samba的主配置文件其中分爲三部分:[global][homes][printers]其中#開頭的是註釋內容,以;開頭的是可以啓用的內容

[global]定義全局配置,對後面的配置都是生效的,但後面的配置可以覆蓋全局配置
[homes]定義用戶是否能夠訪問其家目錄

[printers] 是否共享打印機

語法測試testparm,同時可以顯示生效的語法

比較重要的選項[global]中:

workgroup定義工作組(加入windows的工作組)

server string 服務器的描述

interfaces 監聽的網卡地址或端口,默認會監聽所有的端口和地址

host allow 允許的主機網段的地址

log file

同樣在smb.conf中也存在宏如 %v 顯示smb的版本號,%m訪問客戶機的主機名稱。

max log size日誌文件的大小,

security 安全級別(主要用於驗證用戶的方式),常見的share(共享,允許來賓賬號隨意訪問),user(默認的,必須提供的smb的用戶名和密碼),domain(通過域的驗證),server(服務器集中認證),ads(作爲域控中通過Kerberos加密的集中驗證身份)。

passdb backend 密碼的加密方式,默認是tdbsam。一般smb的用戶是系統的用戶,但密碼並不是系統的密碼

load printers 是否加載打印機

[homes]中:

comment 註釋信息

browseable 是否可以被其他用戶看見

writable 是否可以上傳(最終的權限取決於還有對目錄的權限)

valid users 有效合法的用戶

valid users

[printers]的選項(smb的最常用的選項):

command
path 共享的緩衝的打印機
guest ok 匿名用戶是否可以訪問

printable 是否可以打印,作爲一個打印機這一項是必須yes

 

自定義一個共享:假如我們想共享/sharing 而且其目標顯示爲share其操作爲:

1.          首先更改工作組[global]

2.          在主配置文件中添加如下內容

               [share]
                     comment=my share folder
                     path=/sharing
                     browserble=yes
                     guest ok=yes

3.          創建目錄mkdir /sharing

4.          testparm

5.          啓動服務 service smb start 通過查看端口 137,138,139,445就可以知道smb是否啓動了

6.          提供用戶和其密碼,前面說過其賬號是系統賬號,但密碼是自己有重新創建的,可以通過命令smbpasswd生成

 
 

smbpasswd

          -a USERNAME 添加用戶

          -x USERNAME 刪除用戶

          -d USERNAME 禁用用戶

          -e   USERNAME 啓用賬戶

egsmbpasswd -a redhat 然後輸入密碼

其用戶名存在於/etc/samba/smbusers文件中。在使用中先使用setenforce 0關閉SElinux

 

默認在windows中進入共享的文件夾有兩個文件夾和一個共享打印機,在和登錄用戶名相同的文件夾中創建的文件,生成在用戶的家目錄中而在另一個目錄中是沒有寫權限的,如果想要加上寫權限,需在剛纔的配置文件中添加writable=yes 同時讓用戶對/sharing有寫權限,然後重啓服務,就可以寫文件了。

 

使用linuxsmb客戶端使用命令smbclient

smbclient

    -L HOST(IP)列出主機上所有共享的資源,默認是以匿名用戶訪問的。可以同時使用-U指定用戶名,以某個用戶的身份來列出資源

    -U username%passwd

smbclient同時可以提供類似於ftp的登錄方式,如:

smbclient //HOST/share -U username%passwd 來登錄HOST上的共享的share文件夾,其操作完全類似與ftp

 
訪問控制

對於samba的訪問控制,通過定義hosts allow對允許的賬戶進行控制。切記,samba中對於一個網段的控制如192.168.0.0網段,我們只需要寫192.168.0.就可以了

testparm還可以測試特定的主機的訪問權限,命令的使用:testparm /etc/samba/smb.conf HOSTNAME(主機名稱) IP 來顯示遠程主機對本主機對其的訪問權限。還可以使用iptables對其進行控制。

對於訪問控制除了writable外還有write list 可以指定對用戶,對組(組名前加@+)用戶與用戶之間用空格隔開。

當打開SElinux時通過smbclient連接不上這時候我們執行命令chcon  -R -t samba_share_t /sharing/ 其意義爲將這個文件夾在SElinux中類型改爲samba_share_t這樣就可以通過SElinuxshare目錄的限制了,但這時用戶有不能訪問家目錄了,還是由於SElinux的原因,通過命令getsebool命令可以查看,使用命令setsebool -P samba_enable_home_dirs=1來開啓限制,這樣就可以訪問用戶的家目錄了。

掛載共享的目錄

mount -t cifs //192.168.0.172/share /mnt -o username=redhat

linux中掛在時候用\\

 
 

關於samba-swat這是用來管理samba的程序,而且提供了web接口來管理,它通過tcp901端口來訪問,默認是非獨立守護進程而其只能通過127.0.0.1來訪問 

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