CentOS 8中Smaba服務的匿名訪問以及權限控制


開心一刻

       高考前:保護動物
       高考時:國家重點保護動物
       高考后:四害!

寫在前面

       上一篇博文已經介紹了samba服務的安裝與配置以及使用賬戶密碼訪問文件共享服務,這一篇博文主要介紹samba服務的匿名訪問以及權限設置,這里我主要實現類似學生交實驗作業的場景,即只能上傳文件,不能下載刪除、修改、查看已經上傳的文件,所有的權限只能由samba真實賬戶操作。

Samba服務配置(匿名訪問)

這里是我自己的配置文件內容,我在修改的時候先用cp命令做了一下備份。

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

這里是我的配置文件信息:

[global]
        workgroup = SAMBA
        security = user
        map to guest = bad user

        passdb backend = tdbsam

        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw

[home]
        comment = Do not arbitrarily modify the file
        path = /home/share
        public = yes
        inherit owner = yes
        create mask = 0600
        directory mask = 0777
        writable = yes

匿名訪問必須要有的參數:map to guest = bad user、public = yes
權限控制必須要有的參數:inherit owner = yes、create mask = 0600、directory mask = 0777、writable = yes
幾個重要的參數說明:

參數 作用
map to guest = bad user 匿名用戶最主要就是添加這行,可以實現匿名訪問,而且匿名訪問時默認會被映射為nobody用戶
guest account = nobody 如果匿名用戶不想映射為nobody,可以在這里修改,不過必須是系統已存在的用戶
security = user 安全驗證的方式,就使用默認的user即可,較新的samba服務將share和server棄用了,具體可以查看/etc/samba/smb.conf.example的說明
public = yes 是否公開(指明該共享資源是否能給游客帳號訪問)
guest ok = yes 與public意思相同
inherit owner = yes 上傳的文件繼承父目錄的所有者, 而不是使用登錄的賬號名。
create mask = 0600 創建或上傳文件時文件的權限
directory mask = 0777 創建或上傳目錄時目錄將被賦予的權限
force directory mode = 1000 在共享文件中創建的目錄自動加上t權限,使得用戶不能刪除文件
writable = yes 是否可上傳文件

幾個重要參數解釋:
inherit owner = yes,以我設置的為例,用戶上傳文件時會自動繼承/home/share目錄的所屬主,而不是nobody,但是這個參數只能影響上傳的文件,如果上傳的是目錄,則目錄的所屬主還是nobody,修改修改好后重啟samba服務,可以使用testparm命令檢查samba配置文件內容是否正確。
create mask = 0600,遠程訪問時,創建的文件權限為0600,即只有文件所屬主才能讀取、更改文件內容,而文件所屬主為share的所屬主,所以nobody用戶無法查看和修改文件內容
directory mask = 0777,遠程訪問時,創建的目錄權限為0777,因為目錄要有rwx權限才能查看目錄中的文件以及創建文件刪除文件,所以這里設置的權限是777,其實保證最后一個是7就可以,這樣nobody用戶就是可以查看文件夾中的內容的。

sudo systemctl restart smb
sudo systemctl enable smb #第一次使用可以將其加入到開機啟動項,讓其開機自動啟動。

防火牆開放samba服務和修改Selinux域策略可參考上一篇博文

修改Selinux安全上下文策略

這一步我在實際測試的時候發現不是必須的,因為我的共享目錄是在家目錄下的,我已經將Selinux域策略開啟,samba已經能夠訪問家目錄下的文件了,如果共享目錄不是家目錄下的目錄,那么還是需要設置Selinux安全上下文策略的。因此還是把修改Selinux安全上下文策略的方法寫出來。

在root用戶下執行,否則在命令前面加上sudo
mkdir /home/share
chmod 777 /home/share
chmod g+s /home/share
chmod o+t /home/share
semanage fcontext -at samba_share_t /home/share
restorecon -Rv /home/share

chmod 777 /home/share這條命令是為了讓nobody用戶可以讀取share目錄的內容以及在share目錄中上傳或創建文件。
chmod g+s /home/share這條命令是為了在share目錄中創建的文件都自動繼承share的所屬組,而不是nobody。這些內容涉及linux中文件的一般權限、特殊權限和隱藏權限,不過我這里沒有用到隱藏權限。
chmod o+t /home/share這條命令是使在share文件夾中創建的文件用戶不能刪除其他用戶的文件,目的就是實現用戶不能刪除文件,因為匿名用戶是nobody,而共享文件夾中的文件不會屬於nobody。
semanage fcontext -at samba_share_t /home/share修改share目錄的安全上下文,讓share目錄能夠被samba程序訪問。但是我發現其實這一步不需要設置,因為share目錄是在家目錄下的,而我已經開啟了samba訪問家目錄的域策略。如果是其他的目錄記得使用設置命令設置一下。
restorecon -Rv /home/share使semanage設置的安全上下文立即生效,與semanage要搭配使用。

成功設置后,可以找一台同一個局域網中的電腦,然后使用win+R組合鍵,在運行框中輸入\\samba服務器ip地址,然后回車,如果設置沒有問題,就會彈出一個要求輸入賬號密碼的對話框,但是對話框中需要隨便輸入一些字符,但是不能為空

結語

       這篇博文介紹在CentOS8中配置samba服務程序,實現samba的匿名訪問以及權限控制,實現遠程訪問samba服務程序是,只能上傳文件,而不能下載、修改和刪除。其他linux發行版大同小異,若是嫌麻煩,甚至可以直接關掉防火前和Selinux,只需要將samba配置文件設置好即可。_

文中都是我個人的理解,如有錯誤的地方歡迎下方評論告訴我,我及時更正,大家共同進步


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM