本次環境:
服務端-centos6.8-192.168.2.200
客戶端1-centos6.8-192.168.2.201
客戶端2-Windows7-192.168.2.104
假設條件如下:
- 使用者認證層級設定 (security) 為: user
- 用戶密碼檔案使用 TDB 數據庫格式,默認檔案在 /var/lib/samba/private/ 內;
- 密碼必須要加密;
- 每個可使用 samba 的使用者均擁有自己的家目錄;
- 設定三個用戶,名稱為 smb1, smb2, smb3 ,且均加入 users 為次要群組。此三個用戶 Linux 密碼為 1234, Samba 密碼則為 4321;
- 分享 /home/project 這個目錄,且資源名稱取名為: project;
- 加入 users 這個群組的使用者可以使用 //IP/project 資源,且在該目錄下 users 這個群組的使用者具有寫入的權限。
所需要的軟件與配置文件如下:
- samba: 這個軟件主要提供了 SMB 服務器所需的各項服務程序 (smbd 及 nmbd)、 的文件檔、以及其他與 SAMBA 相關的 logrotate 配置文件及開機默認選項檔案等;
- samba-client: 這個軟件則提供了當 Linux 做為 SAMBA Client 端時,所需要的工具指令,例如掛載 SAMBA 文件格式的 mount.cifs、 取得類似網芳相關樹形圖的 smbtree 等等;
- samba-common: 這個軟件提供的則是服務器與客戶端都會使用到的數據,包括 SAMBA 的主要配置文件 (smb.conf)、語法檢驗指令 (testparm) 等等;
這三個軟件你都得要安裝才行喔!如果尚未安裝的話,使用 yum 去裝好它吧!安裝完畢之后,你可以依序察看一下 Samba 的軟件結構喔!與它相關的配置文件基本上有這些:
- /etc/samba/smb.conf: 這是 Samba 的主要配置文件,基本上,咱們的 Samba 就僅有這個配置文件而已,且這個配置文件本身就是很詳細的說明文件了,請用 vim 去查閱它吧!主要的設定項目分為服務器的相關設定 (global),如工作組、NetBIOS 名稱與密碼等級等, 以及分享的目錄等相關設定,如實際目錄、分享資源名稱與權限等等兩大部分。
- /etc/samba/lmhosts: 早期的 NetBIOS name 需額外設定,因此需要這個 lmhosts 的 NetBIOS name 對應的 IP 檔。 事實上它有點像是 /etc/hosts 的功能!只不過這個 lmhosts 對應的主機名是 NetBIOS name 喔!不要跟 /etc/hosts 搞混了!目前 Samba 預設會去使用你的本機名稱 (hostname) 作為你的 NetBIOS name,因此這個檔案不設定也無所謂。
- /etc/sysconfig/samba: 提供啟動 smbd, nmbd 時,你還想要加入的相關服務參數。
- /etc/samba/smbusers: 由於 Windows 與 Linux 在管理員與訪客的賬號名稱不一致,例如: administrator (windows) 及 root(linux), 為了對應這兩者之間的賬號關系,可使用這個檔案來設定
- /var/lib/samba/private/{passdb.tdb,secrets.tdb}: 管理 Samba 的用戶賬號/密碼時,會用到的數據庫檔案;
- /usr/share/doc/samba-<版本>: 這個目錄包含了 SAMBA 的所有相關的技術手冊喔!也就是說,當你安裝好了 SAMBA 之后,你的系統里面就已經含有相當豐富而完整的 SAMBA 使用手冊了!值得高興吧! ^_^,所以,趕緊自行參考喔!
至於常用的腳本文件案方面,若分為服務器與客戶端功能,則主要有底下這幾個數據:
- /usr/sbin/{smbd,nmbd}:服務器功能,就是最重要的權限管理 (smbd) 以及 NetBIOS name 查詢 (nmbd) 兩個重要的服務程序;
- /usr/bin/{tdbdump,tdbtool}:服務器功能,在 Samba 3.0 以后的版本中,用戶的賬號與密碼參數已經轉為使用數據庫了!Samba 使用的數據庫名稱為 TDB (Trivial DataBase)。 既然是使用數據庫,當然要使用數據庫的控制指令來處理啰。tdbdump 可以察看數據庫的內容,tdbtool 則可以進入數據庫操作接口直接手動修改帳密參數。不過,你得要安裝 tdb-tools 這個軟件才行;
- /usr/bin/smbstatus:服務器功能,可以列出目前 Samba 的聯機狀況, 包括每一條 Samba 聯機的 PID, 分享的資源,使用的用戶來源等等,讓你輕松管理 Samba 啦;
- /usr/bin/{smbpasswd,pdbedit}:服務器功能,在管理 Samba 的用戶賬號密碼時, 早期是使用 smbpasswd 這個指令,不過因為后來使用 TDB 數據庫了,因此建議使用新的 pdbedit 指令來管理用戶數據;
- /usr/bin/testparm:服務器功能,這個指令主要在檢驗配置文件 smb.conf 的語法正確與否,當你編輯過 smb.conf 時,請務必使用這個指令來檢查一次,避免因為打字錯誤引起的困擾啊!
- /sbin/mount.cifs:客戶端功能,在 Windows 上面我們可以設定『網絡驅動器機』來連接到自己的主機上面。在 Linux 上面,我們則是透過 mount (mount.cifs) 來將遠程主機分享的檔案與目錄掛載到自己的 Linux 主機上面哪!
- /usr/bin/smbclient:客戶端功能,當你的 Linux 主機想要藉由『網絡上的芳鄰』的功能來查看別台計算機所分享出來的目錄與裝置時,就可以使用 smbclient 來查看啦!這個指令也可以使用在自己的 SAMBA 主機上面,用來查看是否設定成功哩!
- /usr/bin/nmblookup:客戶端功能,有點類似 nslookup 啦!重點在查出 NetBIOS name 就是了。
- /usr/bin/smbtree:客戶端功能,這玩意就有點像 Windows 系統的網絡上的芳鄰顯示的結果,可以顯示類似『靠近我的計算機』之類的數據, 能夠查到工作組與計算機名稱的樹狀目錄分布圖!
大致的軟件結構就是這樣,底下就准備來講一個簡單的案例吧!這樣比較好介紹配置文件項目啦!
一、服務端的搭建配置:
1.安裝所需軟件
1 [root@lys1 ~]# yum -y install samba samba-client samba-common 2 已加載插件:fastestmirror 3 設置安裝進程 4 Determining fastest mirrors 5 * base: mirrors.nwsuaf.edu.cn 6 * extras: mirrors.aliyun.com 7 * updates: mirrors.aliyun.com 8 base | 3.7 kB 00:00 9 extras | 3.4 kB 00:00 10 updates | 3.4 kB 00:00 11 updates/primary_db | 1.4 MB 00:01 12 解決依賴關系 13 --> 執行事務檢查 14 ---> Package samba.x86_64 0:3.6.23-35.el6_8 will be 安裝 15 ....................
2、設定 smb.conf 配置文件與目錄權限相關之設定
1 [root@lys1 ~]# vim /etc/samba/smb.conf
1 [global] 2 workgroup = vbirdhouse 3 netbios name = vbirdserver 4 server string = This is vbird's samba server 5 unix charset = utf8 6 display charset = utf8 7 dos charset = cp950 8 log file = /var/log/samba/log.%m 9 max log size = 50 10 load printers = no 11 12 # 與密碼有關的設定項目,包括密碼檔案所在格式喔! 13 security = user <==這行就是重點啦!改成 user 層級 14 passdb backend = tdbsam <==使用的是 TDB 數據庫格式! 15 16 # 2. 分享的資源設定方面:刪除 temp 加入 homes 與 project 17 [homes] <==分享的資源名稱 18 comment = Home Directories 19 browseable = no <==除了使用者自己外,不可被其他人瀏覽 20 writable = yes <==掛載后可擦寫此分享 21 create mode = 0664 <==建立檔案的權限為 664 22 directory mode = 0775 <==建立目錄的權限為 775 23 24 [project] <==就是那三位使用者的共享資源 25 comment = smbuser's project 26 path = /home/project <==實際的 Linux 上面的目錄位置 27 browseable = yes <==可被其他人所瀏覽到資源名稱(非內容) 28 writable = yes <==可以被寫入 29 write list = @users <==寫入者有哪些人的意思
3 、每次改完 smb.conf 你都需要重新檢查一下語法正確否!
1 [root@lys1 samba]# testparm 2 Load smb config files from /etc/samba/smb.conf 3 rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384) 4 Processing section "[homes]" 5 Processing section "[project]" 6 Loaded services file OK. 7 Server role: ROLE_STANDALONE 8 Press enter to see a dump of your service definitions 9 10 [global] 11 dos charset = cp950 12 unix charset = utf8 13 display charset = utf8 14 workgroup = VBIRDHOUSE 15 netbios name = VBIRDSERVER 16 server string = This is vbird's samba server 17 log file = /var/log/samba/log.%m 18 max log size = 50 19 client signing = required 20 load printers = No 21 idmap config * : backend = tdb 22 23 [homes] 24 comment = Home Directories 25 read only = No 26 create mask = 0664 27 directory mask = 0775 28 browseable = No 29 30 [project] 31 comment = smbuser's project 32 path = /home/project 33 write list = @users 34 read only = No 35 [root@lys1 samba]#
4、建立共享目錄並設置權限
1 [root@lys1 samba]# mkdir /home/project 2 [root@lys1 samba]# chgrp users /home/project 3 [root@lys1 samba]# chmod 2770 /home/project 4 [root@lys1 samba]# ll -d /home/project 5 drwxrws---. 2 root users 4096 8月 13 02:06 /home/project 6 [root@lys1 samba]#
5、設定可使用 Samba 的用戶賬號與密碼
1 [root@lys1 samba]# useradd -G users smb1 2 [root@lys1 samba]# useradd -G users smb2 3 [root@lys1 samba]# useradd -G users smb3 4 [root@lys1 samba]# echo 1234 | passwd --stdin smb1 5 更改用戶 smb1 的密碼 。 6 passwd: 所有的身份驗證令牌已經成功更新。 7 [root@lys1 samba]# echo 1234 | passwd --stdin smb2 8 更改用戶 smb2 的密碼 。 9 passwd: 所有的身份驗證令牌已經成功更新。 10 [root@lys1 samba]# echo 1234 | passwd --stdin smb3 11 更改用戶 smb3 的密碼 。 12 passwd: 所有的身份驗證令牌已經成功更新。 13 [root@lys1 samba]#
6、通過pdbedit命令把剛創建的3個賬號添加成Samba使用者
pdbedit:
選項與參數:
-L :列出目前在數據庫當中的賬號與 UID 等相關信息;
-v :需要搭配 -L 來執行,可列出更多的訊息,包括家目錄等數據;
-w :需要搭配 -L 來執行,使用舊版的 smbpasswd 格式來顯示數據;
-a :新增一個可使用 Samba 的賬號,后面的賬號需要在 /etc/passwd 內存在者;
-r :修改一個賬號的相關信息,需搭配很多特殊參數,請 man pdbedit;
-x :刪除一個可使用 Samba 的賬號,可先用 -L 找到賬號后再刪除;
-m :后面接的是機器的代碼 (machine account),與 domain model 有關!
1 [root@lys1 samba]# pdbedit -a -u smb1 2 new password: 3 retype new password: 4 Unix username: smb1 5 NT username: 6 Account Flags: [U ] 7 User SID: S-1-5-21-3802184857-4025074321-3003230506-1000 8 Primary Group SID: S-1-5-21-3802184857-4025074321-3003230506-513 9 Full Name: 10 Home Directory: \\vbirdserver\smb1 11 HomeDir Drive: 12 Logon Script: 13 Profile Path: \\vbirdserver\smb1\profile 14 Domain: VBIRDSERVER 15 Account desc: 16 Workstations: 17 Munged dial: 18 Logon time: 0 19 Logoff time: 三, 06 2月 2036 23:06:39 CST 20 Kickoff time: 三, 06 2月 2036 23:06:39 CST 21 Password last set: 六, 13 8月 2016 02:16:15 CST 22 Password can change: 六, 13 8月 2016 02:16:15 CST 23 Password must change: never 24 Last bad password : 0 25 Bad password count : 0 26 Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 27 [root@lys1 samba]# pdbedit -a -u smb2 28 [root@lys1 samba]# pdbedit -a -u smb3
查詢下目前已存在的samba賬號
1 [root@lys1 samba]# pdbedit -L 2 smb1:500: 3 smb3:502: 4 smb2:501: 5 [root@lys1 samba]#
7、開啟Samba並進行自我測試
1 smb2:501: 2 [root@lys1 samba]# /etc/init.d/smb start 3 啟動 SMB 服務: [確定] 4 [root@lys1 samba]# /etc/init.d/nmb start 5 啟動 NMB 服務: [確定]
1 [root@lys1 samba]# smbclient -L //127.0.0.1 -U smb1 2 Enter smb1's password: <==輸入 smb1 在 pdbedit 所建立的密碼 3 Domain=[VBIRDHOUSE] OS=[Unix] Server=[Samba 3.6.23-35.el6_8] 4 5 Sharename Type Comment 6 --------- ---- ------- 7 project Disk smbuser's project 8 IPC$ IPC IPC Service (This is vbird's samba server) 9 smb1 Disk Home Directories 10 Domain=[VBIRDHOUSE] OS=[Unix] Server=[Samba 3.6.23-35.el6_8] 11 12 Server Comment 13 --------- ------- 14 VBIRDSERVER This is vbird's samba server 15 16 Workgroup Master 17 --------- ------- 18 VBIRDHOUSE VBIRDSERVER 19 [root@lys1 samba]#
自我掛載測試
1 [root@lys1 /]# mount -t cifs //127.0.0.1/smb1 /mnt -o username=smb1,password=4321 2 [root@lys1 /]# ll -a /mnt/ 3 ls: 正在讀取目錄/mnt/: 權限不夠 4 總用量 0 5 [root@lys1 /]#
分析:應該是 SELinux 的問題吧!根據 /var/log/messages 的訊息,進行如下的動作就能夠處理好這個程序!
1 setsebool setsid setsysfont 2 [root@lys1 /]# setsebool -P samba_enable_home_dirs=1 3 [root@lys1 /]# ls -a /mnt 4 . .. .bash_logout .bash_profile .bashrc 5 [root@lys1 /]#
1 [root@lys1 /]# df -h 2 Filesystem Size Used Avail Use% Mounted on 3 /dev/mapper/vg_lys1-lv_root 4 18G 900M 16G 6% / 5 tmpfs 491M 0 491M 0% /dev/shm 6 /dev/sda1 477M 28M 425M 7% /boot 7 //127.0.0.1/smb1 18G 900M 16G 6% /mnt 8 [root@lys1 /]# umount /mnt 9 [root@lys1 /]#
二、客戶端搭建使用
1、Windows7的使用:
雙擊網絡,啟動網絡發現,會發現Samba服務器:VBIRDSERVER如下圖:

雙擊VBIRDSERVER服務器會出現等了界面,輸出在Samba上創建的其中一個賬戶如下圖:


2、linux客戶端的使用
先安裝客戶端軟件
1 [root@lys2 ~]# yum -y install samba-client samba-common
掛載使用
1 [root@lys2 ~]# mount -t cifs //192.168.2.200/smb2 /mnt -o username=smb2,password=4321,codepage=cp950 2 [root@lys2 ~]# df -h 3 Filesystem Size Used Avail Use% Mounted on 4 /dev/mapper/vg_lys2-lv_root 5 18G 862M 16G 6% / 6 tmpfs 491M 0 491M 0% /dev/shm 7 /dev/sda1 477M 28M 425M 7% /boot 8 //192.168.2.200/smb2 18G 900M 16G 6% /mnt
客戶端使用正常。
去服務器看下使用log是否生成:
1 [root@lys1 home]# ll /var/log/samba/ 2 總用量 16 3 drwx------. 4 root root 4096 8月 13 02:19 cores 4 -rw-r--r--. 1 root root 0 8月 13 02:20 log.127.0.0.1 5 -rw-r--r--. 1 root root 0 8月 13 02:43 log.192.168.2.104 6 -rw-r--r--. 1 root root 0 8月 13 03:00 log.192.168.2.201 7 -rw-r--r--. 1 root root 0 8月 13 02:43 log.liuyisai-pc 8 -rw-r--r--. 1 root root 359 8月 13 02:20 log.nmbd 9 -rw-r--r--. 1 root root 1523 8月 13 02:59 log.smbd 10 -rw-r--r--. 1 root root 0 8月 13 02:20 log.vbirdserver 11 drwx------. 2 root root 4096 5月 12 13:23 old
OK,實驗成功!!!
