1. 程式人生 > >讓ftp使用者只可存取其家目錄,但給予soft link或mount的存取權

讓ftp使用者只可存取其家目錄,但給予soft link或mount的存取權

讓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

  1. 讓所有使用者都無法存取上級目錄:

    chroot_local_user=YES
    chroot_list_enable=NO
    
  2. 如果只想讓部份使用者無法存取上級目錄,可以建立一個使用者名單:

    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

這個目錄:
ftp
但是點選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這個目錄:
ftp
並且點選它就可以看到其中的內容。
以下是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