1. 程式人生 > 其它 >CentOS 7.9上搭建samba共享伺服器注意事項

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圖形化防火牆設定,如圖