從一則需求看LINUX下的許可權細分設定

2021-09-04 17:14:51 字數 4740 閱讀 1421

業務部門提過來乙個ftp配置需求,具體情況如下:

請提供一台ftp伺服器,需要建立的ftp目錄及賬號規則如下!

人員配置情況:

北京總部:5人(需建立2個賬號:bjzb讀許可權  bjguanli讀寫執行許可權)

北京大區:8人(需建立1個ftp賬號:bjdq)

上海大區:6人(需建立1個ftp賬號:shdq)

廣州大區:5人(需建立1個ftp賬號:gzdq)

ftp目錄及賬號許可權建立設計:

/data/bj  (北京大區)

賬號bjdq許可權:寫許可權、讀許可權、執行許可權

賬號shdq、gzdq許可權:讀許可權

賬號bjzb許可權:讀許可權

賬號bjguanli許可權:讀許可權、寫許可權、執行許可權

賬號shdq許可權:寫許可權、讀許可權、執行許可權

賬號bjdq、gzdq許可權:讀許可權

賬號bjzb許可權:寫許可權、讀許可權

賬號bjguanli許可權:讀許可權、寫許可權、執行許可權

/data/gz   (廣州大區)

賬號gzdq許可權:寫許可權、讀許可權、執行許可權

賬號bjdq、shdq許可權:讀許可權

賬號bjzb許可權:寫許可權、讀許可權

賬號bjguanli許可權:讀許可權、寫許可權、執行許可權

大家看到這則需求時,基本上會感覺,許可權實現起來有點困難。因為在linux下,對乙個檔案可以進行操作的物件被分為三類:file owner(檔案的擁有者)、group(組,注意不一定是檔案擁有者所在的組)、other(其他)。在每個類裡,許可權都是一致的,而在乙個相同的類裡實現不同的許可權就不那麼方便了,而上述提到的需求就是要在同乙個類裡實現不同的許可權。那麼我們就需要通過linux下的acl來實現題中的需求。簡單地說acl就是可以設定特定使用者或使用者組對於乙個檔案及目錄的操作許可權,需要掌握的命令也只有三個:getfacl,setfacl,chacl.

我們來具體說一下文章開頭提到的那個需求的實現過程

1、目錄和賬號的建立

預設情況下,在linux下建立使用者的時候,有個預設的家目錄,一般是在/home下,但是如果我們想在系統中建立多個使用者,而家目錄都不在/home 下的話,就需要用useradd -d 來指定家目錄

#groupadd ftpgroup

# useradd  bjdq  -d  /data/bj  -g ftpgroup

#passwd bjdq

# useradd  shdq  -d  /data/sh  -g ftpgroup 

#passwd shdq

# useradd  gzdq  -d  /data/gz  -g ftpgroup 

#passwd gzdq

#useradd bjzb  

#passwd  bjzb

#useradd bjguanli

#passwd  bjguanli

補充還有乙個方法是修改/etc/default/useradd檔案

# useradd defaults file

group=100

home=/home (將預設的home改為你設定的目錄)

inactive=-1

expire=

shell=/bin/bash

skel=/etc/skel

create_mail_spool=yes

這樣也可以在建使用者的時候,指定特定的使用者主目錄。

2、ftp的設定 

修改ftp配置檔案

# vi /etc/vsftpd/vsftpd.conf

local_umask=007  #使用者的許可權

chroot_list_enable=yes  //如果希望使用者登入後不能切換到自己目錄以外的其它目錄,需要設定該項來鎖定使用者目錄

chroot_list_file=/etc/vsftpd/chroot_list

userlist_enable=yes  #設定userlist_enable=yes,那麼只允許/etc/vsftpd/user_list中列出的使用者具有該功能

userlist_deny=no

userlist_file=/etc/vsftpd/user_list

~"/etc/vsftpd/vsftpd.conf" 147l, 5079c written

設定完重啟ftp服務

# service vsftpd restart

關閉 vsftpd:[確定]

為 vsftpd 啟動 vsftpd:[確定]

三、許可權的設定

由於/data/bj的所有者是bjdq,/data/sh的所有者是shdq,/data/gz的所有者是gzdq,這樣自然就有了讀、寫、執行許可權,我們只需設定組和其他的許可權即可

為了限定bjdq、shdq、gzdq的使用者不能切換目錄,我們還需要把bjdq、shdq、gzdq這三個使用者寫入chroot_list檔案。

[root@localhost vsftpd]# echo "bjdq" >>chroot_list

[root@localhost vsftpd]# echo "shdq" >>chroot_list

[root@localhost vsftpd]# echo "gzdq" >>chroot_list

許可權設定如下:

#chmod 755  /data/bj

#chmod 755  /data/sh

#chmod 755  /data/gz

針對bjzb和bjguanli這兩個賬戶的許可權設定如下

#setfacl -r -m u:bjzb:rx  /data/bj

#setfacl -r -m u:bjguanli:rwx  /data/bj

#setfacl -r -m u:bjzb:rx  /data/sh

#setfacl -r -m u:bjguanli:rwx  /data/sh

#setfacl -r -m u:bjzb:rx  /data/gz

#setfacl -r -m u:bjguanli:rwx  /data/gz

[root@localhost data]# ls -l

total 12

drwxr-xr-x+ 4 bjdq ftpgroup 4096 jan 18 19:09 bj

drwxr-xr-x+ 4 shdq ftpgroup 4096 jan 18 19:12 sh

drwxr-xr-x+ 4 gzdq ftpgroup 4096 jan 18 19:22 gz

最後大家可以通過getfacl來檢視這三個目錄的許可權並通過客戶端登陸來驗證。

(注:setfacl –x g:ftpgroup file   刪除ftpgroup組對file檔案的所有許可權

setfacl -x  u:bjguanli  /data/bj  刪除bjguanli使用者對/data/bj目錄的許可權保留讀許可權

setfacl –x u:bjzb file   刪除bjzb使用者對file檔案的所有許可權)

#getfacl --omit-header /data/bj

getfacl: removing leading '/' from absolute path names

# file: data/bj

# owner: bjdq

# group: ftpgroup

user::rwx

user:bjguanli:rwx

group::r-x

mask::rwx

other::r-x

default:user::rwx

default:user:bjguanli:rwx

default:group::r-x

default:mask::rwx

default:other::r-x

其他目錄許可權設定類似

四、客戶端測試

[root@localhost /]# ftp 192.168.1.130

connected to localhost.localdomain.

220 (vsftpd 2.0.5)

name (localhost:root): bjdq

331 please specify the password.

password:

500 oops: cannot change directory:/data/bj

login failed.

ftp> quit

注意這個報錯,你需要考慮iptables和selinux的限制了。

可以直接關閉iptables和selinux,如果是不能關則需要做如下調整

在iptable裡開放ftp服務,允許21、20埠通行。

針對selinux的安全限制,可以使用這句

[root@localhost test]# setsebool ftpd_disable_trans 1  #關閉selinux對ftp的保護

[root@localhost test]# service vsftpd restart

最後再試,一切正常。

[root@localhost test]#ftp 192.168.1.130

connected to localhost.localdomain.

220 (vsftpd 2.0.5)

name (localhost:root): bjdq

331 please specify the password.

password:

login successful.

ftp> pwd

ftp>bye

經驗證,最後許可權設定,符合業務部門的需求。

從一則需求看LINUX下的許可權細分設定

業務部門提過來乙個ftp配置需求,具體情況如下 請提供一台ftp伺服器,需要建立的ftp目錄及賬號規則如下!人員配置情況 北京總部 5人 需建立2個賬號 bjzb讀許可權 bjguanli讀寫執行許可權 北京大區 8人 需建立1個ftp賬號 bjdq 上海大區 6人 需建立1個ftp賬號 shdq ...

記一則Linux病毒的處理

今天某專案經理反饋學校的某台伺服器不停的向外發包,且cpu持續100 遠端登入後檢視發現有一長度為10的隨機字串程序,kill掉,會重新生成另外長度為10的字串程序。刪除檔案也會重複生成,非常痛苦。查閱crond相關日誌,發現實際執行的內容為 lib libudev.so 以此為關鍵字進行查詢,找到...

從一道面試題談Linux下fork的執行機制

某外企面試linux開發職位面試題 給出如下c程式,在linux下使用gcc編譯 要求如下 已知從這個程式執行到這個程式的所有程序結束這個時間段內,沒有其它新程序執行。1 請說出執行這個程式後,將一共執行幾個程序。2 如果其中乙個程序的輸出結果是 pid1 1001,pid2 1002 寫出其他程序...