讓ftp使用者只可存取其家目錄,但給予soft link或mount的存取權
前言
本篇譯自Lock down vsftpd and give access to symlinks,並加入筆者實際執行時的細節。
步驟
讓ftp使用者只能存取其家目錄
將ftp使用者可存取的目錄限制在其家目錄比較簡單,具體可以參考:VSFTP chroot or jail users – limit users to only their home directory howto這篇文章。
首先切換到vsftpd設定檔所在目錄,然後編輯設定檔:
cd /etc/vsftpd
vim vsftpd.conf
依使用場景來修改vsftpd.conf
:
-
讓所有使用者都無法存取上級目錄:
chroot_local_user=YES chroot_list_enable=NO
-
如果只想讓部份使用者無法存取上級目錄,可以建立一個使用者名單:
vim /etc/vsftpd/chroot_list
並讓名單中的使用者皆無法存取上級目錄:
chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list
然後使用
service vsftpd restart
來讓設定生效。
以下為執行結果:
Redirecting to /bin/systemctl restart vsftpd.service
上面介紹的比較簡單,只要照著步驟操作就會成功。
但是如果想要讓使用者存取家目錄以外的目錄,就可能會踩坑了。
讓使用者存取家目錄以外的目錄
如果想要讓使用者存取其家目錄以外的目錄,我們或許會想到用ln -s
的方式。
執行以下指令,希望可以透過symlink來存取<dir1>:
ln -s <dir1> symlink
接著開啟FileZilla,可以看到symlink
這個目錄:
但是點選symlink
這個目錄卻不會列中symlink
中的內容。
並且會出現以下訊息:
Befehl: CWD /symlink
Antwort: 550 Failed to change directory.
Fehler: Verzeichnisinhalt konnte nicht empfangen werden
訊息說明無法存取symlink
這個目錄。
使用ln -s
失敗了,接著改用mount
看看。
使用以下指令來將家目錄外部的<dir1>掛載到家目錄底下的mounted上:
mkdir mounted
mount --bind <dir1> mounted
在FileZilla中可以看到mounted
這個目錄:
並且點選它就可以看到其中的內容。
以下是FileZilla輸出的訊息:
Status: Empfange Verzeichnisinhalt für “/mounted”…
Status: Anzeigen des Verzeichnisinhalts für “/mounted” abgeschlossen
如此一來,使用者便可以存取到家目錄外部的目錄了!
參考連結
Lock down vsftpd and give access to symlinks
VSFTP chroot or jail users – limit users to only their home directory howto