業務部門提過來乙個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 寫出其他程序...