文件共享服務介紹
早期網絡想要在不同主機之間共享文件大多要用FTP協議來傳輸,但FTP協議僅能做到傳輸文件卻不能直接修改對方主機的資料數據,這樣確實不太方便,於是便出現了NFS開源文件共享程序:NFS(NetworkFile System)是一個能夠將多臺Linux的遠程主機數據掛載到本地目錄的服務,屬於輕量級的文件共享服務,不支持Linux與 Windows系統間的文件共享。
隨後在1991年時大學生Tridgwell爲了解決Linux與Windows系統之間共享文件的問題,便開發出了SMB協議與Samba服務程序。
SMB(Server Messages Block)協議:實現局域網內文件或打印機等資源共享服務的協議。
當時Tridgwell想要註冊SMBServer這個商標,但卻被因爲SMB是沒有意義的字符被拒絕了,經過Tridgwell不斷翻看詞典,終於找到了一個拉丁舞蹈的名字——SAMBA,而這個熱情舞蹈的名字中又恰好包含了SMB(SAMBA),於是這便是Samba程序名字的由來。
Samba服務程序是一款基於SMB協議並由服務端和客戶端組成的開源文件共享軟件,實現了Linux與Windows系統間的文件共享。
Samba服務器角色與安全等級:
Samba服務器有3種服務器角色,可以使用server role參數進行指定,分別如下。
standalone:獨立服務器模式。在此模式下,用戶驗證由本機負責,登錄用戶的口令數據庫存儲在本機。
member server:成員服務器模式。在此模式下,用戶驗證由Windows或Samba域控制器負責。
domain controller:域控制器模式。在此模式下,本機爲Windows和Samba客戶提供登錄驗證服務。
Samba有3種安全等級,可以使用security參數進行指定,分別如下。
user:由本機負責驗證用戶及口令(是Samba默認的安全等級)。
domain:驗證賬戶及口令的工作由其他的Windows或Samba域控制器負責。需要使用password server指令指定驗證服務器。
ads:驗證賬戶及口令的工作由支持Kerberos驗證的Windows活動目錄服務器負責。需要使用realm指令指定Kerberos領域。
Samba賬戶數據庫
當設置了user的安全等級後(此爲默認設置),將由本地系統對訪問Samba共享資源的用戶進行認證。Samba使用的賬戶數據庫是與系統賬戶文件分離的。要通過Samba服務器本身進行用戶認證,需要Samba的賬戶數據庫,默認使用TDB格式的口令數據庫,初始情況下賬戶數據庫文件並不存在。爲了創建Samba的口令數據庫文件,管理員可以在添加Samba賬戶的同時進行創建。
使用smbpasswd命令可以配置Samba賬號並設置其口令。
mbpasswd命令的常用方法
smbpasswd -a 增加用戶(要增加的用戶必須以是系統用戶)
smbpasswd -d 凍結用戶,就是這個用戶不能在登錄了
smbpasswd -e 恢復用戶,解凍用戶,讓凍結的用戶可以在使用
smbpasswd -n 把用戶的密碼設置成空.
要在global中寫入 null passwords -true
smbpasswd -x 刪除用戶
samba服務配置文件各參數含義:
[global] | #全局參數。 | |
workgroup = MYGROUP | #工作組名稱。 | |
server string = Samba Server Version %v | #服務器介紹信息,參數%v爲顯示SMB版本號。 | |
log file = /var/log/samba/log.%m | #定義日誌文件存放位置與名稱,參數%m爲來訪的主機名。 | |
max log size = 50 | #定義日誌文件最大容量爲50Kb。 | |
security = user | #安全驗證的方式,總共有4種。 | |
#share:來訪主機無需驗證口令,更加方便,但安全性很差。 | ||
#user:需由SMB服務驗證來訪主機提供的口令後纔可建立訪問,更加的安全。 | ||
#server:使用獨立的遠程主機驗證來訪主機提供的口令(集中管理帳號)。 | ||
#domain:使用PDC來完成驗證 | ||
passdb backend = tdbsam | #定義用戶後臺的類型,共有3種。 | |
#smbpasswd:使用SMB服務的smbpasswd命令給系統用戶設置SMB密碼。 | ||
#tdbsam:創建數據庫文件並使用pdbedit建立SMB獨立的用戶。 | ||
#ldapsam:基於LDAP服務進行帳戶驗證。 | ||
load printers = yes | #設置是否當Samba服務啓動時共享打印機設備。 | |
cups options = raw | #打印機的選項 | |
[homes] | #共享參數 | |
comment = Home Directories | #描述信息 | |
browseable = no | #指定共享是否在“網上鄰居”中可見。 | |
writable = yes | #定義是否可寫入操作,與"read only"相反。 | |
[printers] | #打印機共享參數 | |
comment = All Printers | ||
path = /var/spool/samba | #共享文件的實際路徑(重要)。 | |
browseable = no | ||
guest ok = no | #是否所有人可見,等同於"public"參數。 | |
writable = no | ||
printable = yes |
標準的Samba共享參數是這樣的:
參數 | 作用 |
[linuxprobe] | 共享名稱爲linuxprobe |
comment = Do not arbitrarily modify the database file | 警告用戶不要隨意修改數據庫 |
path = /home/database | 共享文件夾在/home/database |
public = no | 關閉所有人可見 |
writable = yes | 允許寫入操作 |
案例1:
爲所有用戶配置只讀共享和讀寫共享
服務器端配置:
Windows下連接samba服務器:
進入public目錄創建文件:
服務器上可以看到新建的文件及文件的所屬組和所屬用戶
進入cdrom目錄,嘗試創建文件被拒絕。
Windows下清空連接緩存,重新連接服務器,使用smbuser2登錄。清空緩存需要在cmd裏執行net use * /del指令。
此條命令運行後,會有一定的延時才能成功。
net use * /del /y---解決訪問共享時提示多重連接的問題
解決不允許一個用戶使用一個以上用戶名與一個服務器或共享資源的多重連接
用net use命令可以查看你當前與網絡資源的連接,例如驅動器映射、IPC連接。使用該命令後,應該可以看到你和有資源連接。然後可以用net use * /del /y命令中斷開所有連接。最後,你再次訪問,應該就不會有這個提示了
刪除已有的連接,避免出現“一個用戶使用...多重連接”的問題。
net use * /delete
如果提示“列表是空的”,表示當前沒有任何關聯連接;如果提示“您有如下遠程連接... 繼續運行會取消連接”,輸入“Y”或者“y”
此條命令運行後,會有一定的延時才能成功。
進入public目錄,創建文件user2f2.txt
服務器上可以看到新建的文件及文件的所屬用戶和所屬組
刪除文件user1f1.txt失敗(sticky起的作用),可以刪除自己創建的文件。
案例2:
爲指定用戶配置samba讀寫共享
檢測配置文件語法,並使其生效。
案例3:
爲指定用戶和組配置samba共享
資料來源: