1. 程式人生 > >文件服務器之:SAMBA 服務器,穩定可靠,沒有連接數限制

文件服務器之:SAMBA 服務器,穩定可靠,沒有連接數限制

目錄 AI drive 用戶密碼 HA CP dump 代碼 samba配置

SAMBA使用的是NetBIOS通訊協議,NetBIOS是無法跨路由的
透過NetBIOS over TCP/IP的技術,可以跨路由使用SAMBA服務器所提供的功能

SAMBA聯機模式:
1、peer/peer(Workgroup model,對等模式):適合小型的網域,不經常進行檔案數據分享的網絡環境,或者每個使用者都擁有該計算機的擁有權的環境
2、domain model(主控模式):DC服務器控管整個網域裏面的各個機器的賬號與密碼的信息

Samba所需軟件及其軟件結構:
samba :這個軟件主要提供了SMB服務器所需的各項服務程序(smbd及nmbd)的文件檔、以及其他與SAMBA相關的logrotate配置文件即開機默認選項檔案等;

samba-client:這個軟件提供了當Linux做為SAMBAClient端時,所需要的工具指令,例如:掛載SAMBA文件格式的mount.cifs、取得類似網絡鄰居相關樹形圖的smbtree等
samba-common:提供的是服務器與客戶端都會使用到的數據,包括SAMBA的主要配置文件(smb.conf)、語法檢驗指令(testparm)等等
SAMBA相關的配置文件:
/etc/samba/smb.conf: Samba的主要配置文件
/etc/samba/lmhosts :早期的NetBIOS name需額外設定,這個檔案不設定也無所謂
/etc/sysconfig/samba :提供啟動smbd,nmbd時,還想要加入的相關服務參數
/etc/samba/smbusers :對應windows與linux的賬號關系,使用這個檔案來設定
/var/lib/samba/private/{passdb.tab,secrets.tdb}:管理Samba的用戶賬號/密碼時,會用到的數據庫檔案
/usr/share/doc/samba-<版本>:包含了SAMBA的所有相關的技術手冊,安裝好SAMBA之後就存在了

常見腳本案(可直接執行的):
/usr/sbin/{smbd,nmbd}:服務器功能,就是最重要的權限管理(smbd)以及NetBIOS name 查詢(nmbd)兩個重要的服務程序;
/usr/bin/{tdbdump,tdbtool}:服務器功能,在Samba3.0以後的版本中,用戶的賬號與密碼參數以及轉為使用數據庫了,Samba使用的數據庫名稱為TDB(Trivial DataBase),tdbdump可察看數據庫的內容,tdbtool可以進入數據庫操作接口直接手動修改帳密參數,得要安裝tdb-tools這個軟件才行

/usr/bin/smbstatus:服務器功能,可以列出目前Samba的聯機狀況,包括每一條Samba聯機的PID,分享的資源,使用的用戶來源等
/usr/bin/{smbpasswd,pdbedit}:服務器功能,在管理Samba的用戶賬號密碼時,早期是使用smbpasswd指令; 使用TDB數據庫後,建議使用新的pdbedit指令來管理用戶數據;
/usr/bin/testparm:服務器功能,這個指令主要在檢驗配置文件smb.conf 的語法是否正確,當你編輯過smb.conf時,務必使用這個指令檢查一次
/sbin/mount.cifs:客戶端功能,在windows系統可以設定[網絡驅動器]來連接到自己的主機上面。在linux上面,則是透過mount.cifs來將遠程主機分析的檔案與目錄掛載到自己的linux主機上;
/usr/bin/smbclient :客戶端功能,使用這個指令來查看其他計算機所分享出來的目錄與裝置
/usr/bin/nmblookup:客戶端功能,類似nslookup,重點在查出NetBIOS name
/usr/bin/smbtree:客戶端功能,能夠查到工作組與計算機名稱的樹狀目錄分布圖

Samba設定:
1、服務器整體設定方面:在smb.conf當中設定好工作組、NetBIOS主機名、密碼使用狀態
(無密碼分享或本機密碼)等等
2、規劃準備分享的目錄參數:在smb.conf內設定好預計要分享的目錄或裝置以及可供使用
的賬號數據;
3、建立所需要的文件系統:根據步驟2的設定,在Linux文件系統當中建立好分享出去的
檔案或裝置,以及相關的權限參數;
4、建立可用Samba的賬號:根據步驟2的設定,建立所需的Linux實體賬號,再以pdbedit
建立使用Samba的密碼;
5、啟動服務:啟動Samba的smbd,nmbd服務,完成
smb.conf配置文件分為兩部分:
主機信息部分:在smb.conf當中與[global]全領域作為設定的依據;
分享的信息:以個別的目錄名稱為依據
在smb.conf中,# 與 ;都是批註符號;大小寫是沒有關系的,因為Windows沒區分大小寫

設定完smb.conf後,使用testparm查閱smb.conf的語法設定正確性,後在啟動smb服務
指令:testparm 或 testparm -v
-v:查閱完整的參數設定,連同默認值(默認隱藏了)也會顯示出來;顯示的信息中,中括號[]前出現信息,則有錯誤

Samba預設會啟動多個端口,包括數據傳輸的TCP端口139,445;以及進行NetBIOS名稱解析之類工作的UDP端口(137,138)

假設本機為客戶端的檢驗(默認為lo接口):安裝samba-client 客戶端軟件,用yum或rpm
指令smbclient:
smbclient -L [//主機或IP] [-U 使用者賬號
選項與參數:
-L:僅查閱後面接的主機所提供分享的目錄資源;
-U:以後面接的這個賬號來嘗試取得該主機的可使用資源

Samba密碼的建立(設置登錄samba共享需要密碼驗證):
Samba使用者賬號必須要存在與Linux系統當中(/etc/passwd)
Samba的用戶密碼檔案使用TDB數據庫格式,默認檔案在/var/lib/samba/private內
密碼必須要加密(默認就是加密的);每個可使用samba的使用者均擁有自己的家目錄
共享群組的權限通常是2770,含有SGID的特殊旗標功能

使用pdbedit 指令功能(對samba軟件使用的指令):
pdbedit -L [-vw] <==單純的察看帳戶信息
pdbedit -a|-r|-x -u 賬號 <==新增/修改/刪除賬號
pdbedit -a -m -u 機器賬號 <==與PDC有關的機器碼
選項與參數:
-L :列出目前在數據庫當中的賬號與UID等相關信息;
-v:需要搭配-L來執行,可列出更多的信息,包括家目錄等數據;
-w:需要搭配-L來執行,使用舊版的smbpasswd格式來顯示數據;
-a:新增一個可使用Samba的賬號,後面的賬號需要在/etc/passwd中存在;
-r:修改一個賬號的相關信息,需搭配很多特殊參數,請 man pdbedit;
-x:刪除一個可使用Samba的賬號,可先用-L找到賬號後再刪除;
-m:後面接的是機器的代碼(machine account),與domain model 有關
-u:後面接的是username,即Linux中已有的賬號名稱

修改密碼使用smbpasswd 指令: smbpasswd 用戶名

故:samba新增使用者賬號,若賬號在Linux系統中不存在,則需要使用useradd再以pdbedit -a 去新增
擴充samba分享的目錄與能夠登入的使用者時,這樣做:
1、編輯smb.conf來開放其他的目錄資源,並且特別註意Linux在該目錄下的權限,使用chown
與chmod ;
2、利用pdbedit來新增其他可用的samba賬號,先增加Linux系統賬號,以useradd增加;
3、進行完任何設定,先以testparm進行確認,之後重新啟動smb服務
samba配置要生效:smb和nmb服務都要啟動

1、設定成為samba的打印機服務器(CUPS(Common Unix Printing System)系統):
使用lsusb指令查看USB接口的情況,可查看USB接口打印機是否連接
打印服務cups默認啟動631端口
打印測試指令: echo "HeLLO printer" > /dev/usb/lp0 ;lp0是打印機在Linux中的接口名
打印服務cups配置文件: /etc/cups/cupsd.conf
1、修改監聽端口,第18行,修改其中的localhost為需要開放的IP或網段
2、第28行左右,<Location />區域新增能夠讓內網其他IP瀏覽者進行CUPS的瀏覽與管控
3、在33行左右,<Location /admin> 新增能夠管理CUPS者
設定完重啟打印服務,cups
瀏覽器裏輸入https://打印服務器IP:631 即可打開打印服務器設置界面,Administrator選項登錄root賬號才有權限設置打印服務器共享打印機;如果瀏覽器提示不安全,則點選高級,增加例外即可

2、在smb.conf配置文件中加入打印機的支持,默認是支持的,設定全局global與printers區域
3、讓Samba主動提供驅動程序給Windows用戶使用
Postscript的打印格式,安裝支持Windows打印機驅動程序的cups
目錄 /var/lib/samba/drivers* 下的文件夾是samba分享的各個操作系統的驅動程序文件,可放置在裏面
4、在smb.conf裏面增加新的分享數據,數據必須是 [print$] 名稱才行
預設的cups僅有root能管理
如果自己設置了打印驅動程序分享目錄,註意selinux,使用chcon修改
5、由cups告知samba,cups可提供驅動程序,使用指令:
cupsaddsmb [-H SAMBA服務器名] [-h CUPS服務器名] -a -v [-U 使用者賬號]
選項與參數:
-H:後續接的是samba服務器名,本機直接用localhost即可;
-h:後續接的是cups的服務器名,本機直接用localhost即可;
-a:自動搜尋出所有可用的cups打印機;
-v:列出更多的信息;
-U:打印機管理員
例如:cupsaddsmb -H localhost -U root -a -v 將打印驅動程序掛上samba
6、重啟cups即samba服務
7、如果打印錯數據,清除數據的方法
指令: lpstat -a 列出所有可用的打印機狀態
lpq 查詢目前默認打印機的工作情況
lprm - 刪除所有的打印工作項目

Samba安全性的議題與管理:selinux及防火墻iptables
smbd和nmbd並不支持TCP Wrappers,故只能透過iptables來控制
內建的samba設定:
smb.conf中的hosts allow即hosts deny 兩個參數,通常只用使用hosts allow即可
例如:只想讓本機、192.168.100.254、192.168.1.0/24使用samba,則編輯smb.conf全局參數(global)
hosts allow = 127. 192.168.100.254 192.168.1
網段只需要寫主機位即可
建議samba防火墻設置使用smb.conf配置文件global參數的hosts allow和hosts deny處理

利用Quota限制samba用戶的磁盤使用
samba服務器掛載中文扇區:
mount -t 文件系統格式 -o iocharset=big5,codepage=950 /dev/sa[a-p][1-15] 掛載點
iocharset指的是本機的語言編碼方式;codepage則與遠程軟件有關

samba客戶端軟件功能:
Linux系統可以掛載samba服務器也能掛載windows提供的網絡鄰居(共享),以smbclient指令觀察,再以mount掛載文件系統
smbclient查詢功能: smbclient -L //[IP|hostname] [-U username]
利用類似FTP的方式登入遠程主機:意思是使用某個賬號來直接登入某部主機的某個共享資源
smbclient ‘//[IP|hostname]/資源名稱‘ [-U username]
例如:smbclient ‘//192.168.100.254/smb1‘ -U smb1 輸入密碼後即可進入 smb: \> 下,可以使用常用的ftp指令來進行數據傳輸,輸入 ?可查看所有指令

mount.cifs:直接掛載鄰居成為網絡驅動器
早期的samba主要是提供smbmount或mount.smbfs指令來掛載,現已被mount.cifs取代

mount.cifs語法:
mount -t cifs //IP/分享資源名 /掛載點 [-o options]
選項與參數:
-o :後面接的參數(options)常用如下:
username=你的登錄賬號,例如 username=smb1
password=你的登入密碼,需要與username參數對應
iocharset=本機的語系編碼方式,如big5或utf8等等
codepage=遠程主機的語系編碼方式,例如繁體中文為cp950

nmblookup :查詢NetBIOS name與IP及其他相關信息
nmblookup [-S] [-U wins IP] [-A IP] name
選項與參數:
-S :除了查詢name的IP之外,亦會找出該主機的分享資源與MAC等;
-U:後面一般可接Windows的主要名稱管理服務器的IP,可與-R互用;
-R:與-U互用,以Wins服務器來查詢某個Netbios name;
-A:相對於其他的參數,-A後面可接IP,由IP來找出相對的NetBIOS數據;
例如:由192.168.100.254找出vbirdserver這部主機的IP地址
nmblookup -U 192.168.100.254 vbirdserver

smbtree:網絡上的鄰居的瀏覽器顯示模式
smbtree [-bDS]
選項與參數:
-b :以廣播的方式取代主要瀏覽器的查詢
-D:僅列出工作組,不包括分享的資源
-S:列出工作組與該工作組下的計算機名稱(NetBIOS)不包括各項資源目錄

smbstatus:觀察SAMBA的狀態;是服務器的相關功能,必須安裝samba才能使用此指令
smbstatus [-pS] [-u username]
選項與參數:
-p:列出已經使用samba聯機的程序PID;
-S:列出已經被使用的資源共享狀態;
-u:只列出某個用戶相關的分享數據

文件服務器之:SAMBA 服務器,穩定可靠,沒有連接數限制