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
nmbd 通知windows的網上鄰居自己的主機名,有點類似於netbios的功能
winbindd 當linux假如windows域中會啓動此進程
協議端口 137,138,445等
samba-client,samba-common,samba,其中前兩個是作爲客戶端的工具,而samba則是作爲服務器的軟件包。還有個輔助軟件包samba-swat用來實現通過web的方式來管理samba服務
port 137/udp(netbios),138/udp(netbios) ,139/tcp(netbios),445/tcp(smb服務)接受SElinux的控制
接下來我們看一下samba的主配置文件其中分爲三部分:[global],[homes],[printers]其中#開頭的是註釋內容,以;開頭的是可以啓用的內容
[printers] 是否共享打印機
語法測試testparm,同時可以顯示生效的語法
比較重要的選項[global]中:
workgroup定義工作組(加入windows的工作組)
server string 服務器的描述
interfaces 監聽的網卡地址或端口,默認會監聽所有的端口和地址
host allow 允許的主機網段的地址
同樣在smb.conf中也存在宏如 %v 顯示smb的版本號,%m訪問客戶機的主機名稱。
max log size日誌文件的大小,
security 安全級別(主要用於驗證用戶的方式),常見的share(共享,允許來賓賬號隨意訪問),user(默認的,必須提供的smb的用戶名和密碼),domain(通過域的驗證),server(服務器集中認證),ads(作爲域控中通過Kerberos加密的集中驗證身份)。
passdb backend 密碼的加密方式,默認是tdbsam。一般smb的用戶是系統的用戶,但密碼並不是系統的密碼
load printers 是否加載打印機
在[homes]中:
browseable 是否可以被其他用戶看見
valid users 有效合法的用戶
valid users
[printers]的選項(smb的最常用的選項):
printable 是否可以打印,作爲一個打印機這一項是必須yes的
自定義一個共享:假如我們想共享/sharing 而且其目標顯示爲share其操作爲:
1. 首先更改工作組在[global]中
2. 在主配置文件中添加如下內容
3. 創建目錄mkdir /sharing
4. testparm
5. 啓動服務 service smb start 通過查看端口 137,138,139,445就可以知道smb是否啓動了
6. 提供用戶和其密碼,前面說過其賬號是系統賬號,但密碼是自己有重新創建的,可以通過命令smbpasswd生成
smbpasswd
-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指定用戶名,以某個用戶的身份來列出資源
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這樣就可以通過SElinux對share目錄的限制了,但這時用戶有不能訪問家目錄了,還是由於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接口來管理,它通過tcp的901端口來訪問,默認是非獨立守護進程而其只能通過127.0.0.1來訪問