CentOS 7.9上搭建samba共享伺服器注意事項
Samba檔案共享伺服器是能夠與windows系統共享檔案的伺服器,使用非常的廣泛,最近參考了《鳥哥的linux私房菜》--伺服器篇--samba伺服器,在虛擬機器上演練了搭建過程,記錄一下。
作業系統:CentOS 7.9
Samba版本:4.10.16
主配置檔案:/etc/samba/smb.conf,配置前最好先備份一個。另外修改此檔案後,注意用 testparm 檢查一下語法的正確性
1.samba安裝
[root@localhost ~]# yum install samba samba-client
如果有網路,可直接使用以上命令安裝,samba-client預設應該安裝了的。
如果沒有網路(我的虛擬機器暫時無網路),可使用iso映像來安裝,使用方法為:先掛載光碟到/mnt目錄(也可以是其他目錄)例如:# mount /dev/cdrom /mnt,然後新增此掛載目錄到yum源中(在 /etc/yum.repos.d/ 目錄中新增一個repo檔案,(其它檔案可先移動到另一個資料夾中,以避免報錯)),本地源repo檔案示例如下:
[root@localhost ~]# vim /etc/yum.repos.d/Local-CDROM.repo [Local-CDROM] #repo名稱 name=Local-CDROM #這個與上面一樣即可 baseurl=file:///mnt/ #光碟映像所掛載的目錄位置gpgcheck=0 #是否校驗,此處關閉 enabled=1 #啟用此源
2.3. 伺服器端的服務啟動與埠口觀察
服務啟動與開機啟動:
[root@localhost ~]# systemctl start smb.service [root@localhost ~]# systemctl enable smb.service
正常會開啟 tcp 139 和 445埠
[root@localhost ~]# netstat -tunlp | grep smbd tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 1399/smbd tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 1399/smbd tcp6 0 0 :::445 :::* LISTEN 1399/smbd tcp6 0 0 :::139 :::* LISTEN 1399/smbd
3. 無密碼共享設定注意事項
[global]
workgroup = SAMBA
security = user #注意samba新版本已不支援 share引數,要加上下面一行
map to guest = Bad User #注意要加上這一行,
; passdb backend = tdbsam #這一行先註釋掉,使用使用者名稱密碼共享時再啟用吧
force user = root #這一行很重要,沒加這一行前,一直不能訪問/tmp,此行意義為建立的檔案預設為roo
#t使用者所有,如果是其它目錄,若許可權設定為777,可以不要這一行。(/tmp的
#許可權比較特殊
[tmp] #共享名稱,可以與實際路徑名稱不同,例如temp
comment = Temporary file space #描述資訊
path = /tmp #要共享的實際目錄路徑
writable = yes #可寫入
browseable = yes #可瀏覽的共享
guest ok = yes #任何人可訪問
4. 使用帳號密碼共享檔案
1)修改 /etc/samba/smb.conf
[global] workgroup = SAMBA security = user ; map to guest = Bad User #註釋或刪除這一行和下面一行 ; force user = root passdb backend = tdbsam #使用TDB資料庫存放帳號與密碼 [homes] #此處預設共享家目錄,如果不想共享,可以註釋掉或刪除 comment = Home Directories valid users = %S, %D%w%S browseable = No read only = No inherit acls = Yes
[project] #假設共享/home/project目錄
comment = smbuser's project
path = /home/project #實際的目錄位置
browseable = yes
writable = yes #可寫
write list = @users #可寫入的有哪些使用者或使用者組,使用者直接寫,使用者組名前要加@,此處是user組
編輯完 /etc/samba/smb.conf,記得用 testparm測試一下語法的正確性。
2)注意共享資料夾的許可權設定
[root@www ~]# mkdir /home/project [root@www ~]# chgrp users /home/project [root@www ~]# chmod 2770 /home/project [root@www ~]# ll -d /home/project drwxrws---. 2 root users 4096 Jul 29 13:17 /home/project
5. 設定可使用 Samba 的使用者賬號與密碼 (pdbedit)
# 1. 先來建立所需要的各個賬號,但假設 student 已經存在了喔! [root@www ~]# useradd -G users smb1 [root@www ~]# useradd -G users smb2 [root@www ~]# useradd -G users smb3 [root@www ~]# echo 1234 | passwd --stdin smb1 [root@www ~]# echo 1234 | passwd --stdin smb2 [root@www ~]# echo 1234 | passwd --stdin smb3 # 2. 使用 pdbedit 指令功能 [root@www ~]# pdbedit -L [-vw] <==單純的察看帳戶資訊 [root@www ~]# pdbedit -a|-r|-x -u 賬號 <==新增/修改/刪除賬號 [root@www ~]# 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 有關! # 2.1 開始新增使用者吧! [root@www ~]# pdbedit -a -u smb1
6、最後,重新啟動 Samba 並進行自我測試
[root@www ~]# /etc/init.d/smb restart #重新啟動samba服務 [root@www ~]# /etc/init.d/nmb restart #使用mount掛載測試一下 [root@www ~]# mount -t cifs //127.0.0.1/smb1 /mnt -o username=smb1
7、關於設定SELINUX
如果共享目錄位於 /home下,需要開啟一個setsebool開關
#先檢視一下與samba有關的sebool [root@localhost home]# getsebool -a | grep samba samba_create_home_dirs --> off samba_domain_controller --> off samba_enable_home_dirs --> off #按下面方法設定為on samba_export_all_ro --> off samba_export_all_rw --> off samba_load_libgfapi --> off samba_portmapper --> off samba_run_unconfined --> off samba_share_fusefs --> off samba_share_nfs --> off sanlock_use_samba --> off tmpreaper_use_samba --> off use_samba_home_dirs --> off virt_use_samba --> off #設定samba_enable_home_dirs為on [root@localhost home]# setsebool -P samba_enable_home_dirs=1 [root@localhost home]# getsebool -a | grep samba_enable_home_dirs samba_enable_home_dirs --> on
8、防火牆設定
1)使用 iptables 開放防火牆
[root@localhost home]# iptables -I INPUT -i ens33 -p tcp -m multiport --dport 139,445 -j ACCEPT #引數說明 [root@www ~]# iptables [-AI 鏈名] [-io 網路介面] [-p 協議] \ > [-s 來源IP/網域] [-d 目標IP/網域] -j [ACCEPT|DROP|REJECT|LOG] 選項與引數: -AI 鏈名:針對某的鏈進行規則的 "插入" 或 "累加" -A :新增加一條規則,該規則增加在原本規則的最後面。例如原本已經有四條規則, 使用 -A 就可以加上第五條規則! -I :插入一條規則。如果沒有指定此規則的順序,預設是插入變成第一條規則。 例如原本有四條規則,使用 -I 則該規則變成第一條,而原本四條變成 2~5 號 鏈 :有 INPUT, OUTPUT, FORWARD 等,此鏈名稱又與 -io 有關,請看底下。 -io 網路介面:設定封包進出的介面規範 -i :封包所進入的那個網路介面,例如 eth0, lo 等介面。需與 INPUT 鏈配合; -o :封包所傳出的那個網路介面,需與 OUTPUT 鏈配合; -p 協定:設定此規則適用於哪種封包格式 主要的封包格式有: tcp, udp, icmp 及 all 。 -s 來源 IP/網域:設定此規則之封包的來源專案,可指定單純的 IP 或包括網域,例如: IP :192.168.0.100 網域:192.168.0.0/24, 192.168.0.0/255.255.255.0 均可。 若規範為『不許』時,則加上 ! 即可,例如: -s ! 192.168.100.0/24 表示不許 192.168.100.0/24 之封包來源; -d 目標 IP/網域:同 -s ,只不過這裡指的是目標的 IP 或網域。 -j :後面接動作,主要的動作有接受(ACCEPT)、丟棄(DROP)、拒絕(REJECT)及記錄(LOG)
2)建議使用firewalld圖形化防火牆設定,如圖