samba
samba服務隻要是為了實作linux主機提供一種類似于windows的網路上的芳鄰的功能。
windows提供網絡共享主要是通過SMB/CIFS協定實作的
smb à service message block
cifs à common internet filesystem
windows在一個區域網路中通過netbios來實作的名字解析,以此來實作在區域網路中沒有DNS的情況下主機間共享檔案。
在linux/unix中實作檔案共享的方法是NFS,但如果在linux和windows之間共享問價的話就有點困難了
要想實作讓兩個系統之間來共享檔案,就出現了samba服務,來共享linux中的檔案夾,讓windows可以挂載。
samba共有三個程序 smbd,nmbd,winbindd
smbd 實作檔案共享
nmbd 通知windows的網路上的芳鄰自己的主機名,有點類似于netbios的功能
winbindd 當linux假如windows域中會啟動此程序
協定端口 137,138,445等
軟體包
samba-client,samba-common,samba,其中前兩個是作為用戶端的工具,而samba則是作為伺服器的軟體包。還有個輔助軟體包samba-swat用來實作通過web的方式來管理samba服務
服務的腳本/etc/init.d/smb
主配置檔案/etc/samba/smb.conf
port 137/udp(netbios),138/udp(netbios) ,139/tcp(netbios),445/tcp(smb服務)接受SElinux的控制
<b>配置檔案</b>
接下來我們看一下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 啟用賬戶
eg:smbpasswd -a redhat 然後輸入密碼
其使用者名存在于/etc/samba/smbusers檔案中。在使用中先使用setenforce 0關閉SElinux
預設在windows中進入共享的檔案夾有兩個檔案夾和一個共享列印機,在和登入使用者名相同的檔案夾中建立的檔案,生成在使用者的家目錄中而在另一個目錄中是沒有寫權限的,如果想要加上寫權限,需在剛才的配置檔案中添加writable=yes 同時讓使用者對/sharing有寫權限,然後重新開機服務,就可以寫檔案了。
使用linux的smb用戶端使用指令smbclient
smbclient
-L HOST(IP)列出主機上所有共享的資源,預設是以匿名使用者通路的。可以同時使用-U指定使用者名,以某個使用者的身份來列出資源
-U username%passwd
smbclient同時可以提供類似于ftp的登入方式,如:
smbclient //HOST/share -U username%passwd 來登入HOST上的共享的share檔案夾,其操作完全類似與ftp
<b>通路控制</b>
對于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這樣就可以通過SElinux對share目錄的限制了,但這時使用者有不能通路家目錄了,還是由于SElinux的原因,通過指令getsebool指令可以檢視,使用指令setsebool -P samba_enable_home_dirs=1來開啟限制,這樣就可以通路使用者的家目錄了。
<b>挂載共享的目錄</b>
mount -t cifs //192.168.0.172/share /mnt -o username=redhat
在linux中挂在時候用\\
關于samba-swat這是用來管理samba的程式,而且提供了web接口來管理,它通過tcp的901端口來通路,預設是非獨立守護程序而其隻能通過127.0.0.1來通路