當前位置: 首頁>>技術教程>>正文


server – 如何為 vsftpd 設置可以訪問特定子目錄的虛擬用戶?

, , ,

問題描述

我需要能夠將虛擬用戶添加到隻能訪問子文件夾的 vsftpd。我想使用虛擬用戶的原因是我隻想在服務器上有 1 個真實用戶。

FTP結構為:

  • www

    • website_name1

      • sub_folder1

    • website_name2

      • sub_folder2

      • sub_folder3

    • website_name3

    • website_name4

主帳戶可以訪問 www 文件夾和所有子目錄,我想添加一個可以訪問 sub_folder1 且隻有 sub_folder1 的虛擬用戶

另外為了避免一些混亂,我還需要另一個用戶訪問 sub_folder3 並且隻有 sub_folder3。我的觀點是我需要能夠逐個用戶選擇哪個文件夾和子文件夾。

我找到了添加用戶以查看整個結構或設置用戶命名文件夾的方法,這對我來說都沒有用。

我在這裏發現了一個類似的問題:

How to setup VSFTPD for multiple users including adding specific directories

但它推薦 proftpd,但我認為它通常不太安全。還是我錯過了這裏的重點?

最佳答案

經過一番嘗試,我設法想出了一個半解決方案(不完美但足夠好)

使用 2707974 答案和我在其他地方獲得的信息,我已經能夠獲得我需要的東西。

首先你需要安裝 vsftp 和 PAM

apt-get install vsftpd libpam-pwdfile

編輯 /etc/vsftpd.conf

nano /etc/vsftpd.conf

然後粘貼在下麵

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
local_root=/var/www
chroot_local_user=YES
allow_writeable_chroot=YES
hide_ids=YES

#virutal user settings
user_config_dir=/etc/vsftpd_user_conf
guest_enable=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
nopriv_user=vsftpd
guest_username=vsftpd

根據您的確切需求編輯虛擬用戶最重要的一點是虛擬用戶設置評論之後的一切

創建用戶

您可以使用數據庫或 htpasswd 我發現 htpasswd 更快且更易於使用。

創建一個目錄來存儲你的用戶

mkdir /etc/vsftpd
htpasswd -cd /etc/vsftpd/ftpd.passwd user1

添加其他用戶隻需省略 -c

htpasswd -d /etc/vsftpd/ftpd.passwd user2

我隻設法使用 CRYPT 讓它工作,它限製為 8 個字符以使用超過 8 個字符使用 openssl 生成兼容的哈希並直接通過管道進入 htpasswd

htpasswd -c -p -b /etc/vsftpd/ftpd.passwd user1 $(openssl passwd -1 -noverify password)

創建用戶後,您現在可以更改 PAM 配置文件

nano /etc/pam.d/vsftpd

並刪除此文件中的所有內容並替換為以下內容

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so

這將為 /etc/vsftpd/ftpd.passwd 中定義的虛擬用戶啟用登錄,並將禁用本地用戶

接下來我們需要為這些虛擬用戶添加一個用戶來使用。這些用戶將無權訪問 shell,將被稱為 vsftpd

useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

用戶必須匹配 vsftpd conf 文件中的 guest_username=vsftpd

定義目錄訪問

這裏重要的一行如下

user_config_dir=/etc/vsftpd_user_conf

這意味著當 user1 登錄時,它將查找以下文件

/etc/vsftpd_user_conf/user1

此文件與 vsftpd.conf 相同,因此您可以定義新的 local_root

回到我們希望 user1 隻能訪問 var/www/website_name1/sub_folder1 的問題,因此我們需要創建 vsftpd_user_conf 文件夾:

mkdir /etc/vsftpd_user_conf

現在創建用戶文件:

nano /etc/vsftpd_user_conf/user1

並輸入以下行

local_root=/var/www/website_name1/sub_folder1

現在重啟vsftp

service vsftpd restart

您現在應該能夠以 user1 身份登錄,他隻能看到 var/www/website_name1/sub_folder1 以及其中的任何文件夾和文件。

就是這樣,您現在可以根據需要添加任意數量的用戶,並限製他們對您希望的任何文件夾的訪問。

重要的是要記住,如果您不創建用戶 conf 文件,它將默認以 root 身份進入 var/www 文件夾(在上麵的示例中)

如果子文件夾打算由用戶修改,則可能需要更改共享子文件夾的所有者:

chown vsftpd:nogroup /var/www/website_name1/sub_folder1

次佳答案

試試這本手冊。也許會為你工作。

怎麽做

安裝 vsftpd 和 PAM 庫

編輯 /etc/vsftpd.conf/etc/pam.d/vsftpd

使用自定義目錄創建用戶帳戶(例如在 /var/www/中)

使用正確的 chmodchown 設置目錄

創建對服務器具有完全訪問權限的管理員用戶

  1. 安裝 vsftpd(非常安全的 FTP 守護程序)和 libpam-pwdfile 以創建虛擬用戶

我想創建 FTP 用戶,但不想添加本地 unix 用戶(沒有 shell 訪問權限,沒有主目錄等)。 PAM(可插入身份驗證模塊)將幫助您創建虛擬用戶。

sudo apt-get install vsftpd libpam-pwdfile

  1. 編輯 vsftpd.conf

首先需要備份原文件

sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak

然後新建一個

sudo vim /etc/vsftpd.conf

複製並粘貼以下行。該文件應僅包含以下行:

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
nopriv_user=vsftpd
virtual_use_local_privs=YES
guest_enable=YES
user_sub_token=$USER
local_root=/var/www/$USER
chroot_local_user=YES
hide_ids=YES
guest_username=vsftpd
  1. 注冊虛擬用戶

要注冊用戶,您使用 htpasswd ,所以我假設您有 apache2 在您的服務器上工作。創建一個 vsftpd 文件夾,然後將配置文件放入其中。

sudo mkdir /etc/vsftpd

然後

sudo htpasswd -cd /etc/vsftpd/ftpd.passwd user1

-c 表示如果文件尚不存在,我們將創建該文件 -d 強製 MD5,您在 ubuntu 12.04 上需要它,始終使用它

該命令將提示輸入密碼。

如果您想在之後添加新用戶:

sudo htpasswd -d /etc/vsftpd/ftpd.passwd user2

  1. /etc/pam.d/vsftpd 中配置 PAM

同樣,您需要備份原始文件

sudo mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak

並創建一個新的

sudo vim /etc/pam.d/vsftpd

複製並粘貼這兩行(這應該是唯一的內容)。我隻堅持這兩條線,我浪費了很多時間來保留原件,隻是添加了這些。

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so
  1. 創建沒有 shell 訪問權限的本地用戶

sudo useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

您可以使用 id 命令檢查它是否已創建:id vsftpd。由於 check_shell 參數(即使您不使用它),我們使用 /bin/false shell 定義用戶。當最終用戶連接到 FTP 服務器時,他們將用於權利和所有權:

chmodchown

  1. 重啟 vsftpd

常見的方法是像所有的守護進程一樣使用 init.d

sudo /etc/init.d/vsftpd restart

sudo service vsftpd restart

  1. 創建目錄

根據配置,所有用戶都將放置在此文件夾中:/var/www/user1。

您需要以特定權限創建它們:根文件夾不可寫!

 / [root = /var/www/user1] => 555
www [ /var/www/user1/www ] => 755
docs [ /var/www/user1/docs ] => 755

注意:用戶不能在根目錄下創建文件或文件夾。

vsftpd.conf 中,我們有 chroot_local_user=YES,因此用戶無法看到其文件夾之外的任何內容。在他看來,服務器是這樣的:

所以隻需運行這些命令:

mkdir /var/www/user1`
chmod -w /var/www/user1
mkdir www/user1/www
chmod -R 755 /var/www/user1/www
chown -R vsftpd:nogroup /var/www/user1

/var/www/user1 文件夾必須存在,否則連接將失敗。

現在你可以嘗試連接你的 FTP

  1. 創建一個管理員用戶來訪問整個服務器

要創建管理員用戶,我們需要使用 htpasswd 注冊一個新用戶。

在我們這樣做之前,我建議您檢查 /etc/ftpusers 文件,該文件定義了不允許連接 ftp 的某些用戶。我認為它僅適用於本地用戶而不是虛擬用戶,但以防萬一不要選擇此文件中包含的名稱。

sudo htpasswd -d /etc/vsftpd/ftpd.passwd theadmin

現在我們需要在 /etc/vsftpd.conf 中添加一個新行

chroot_list_enable=YES

這意味著您的用戶將被放入他們的文件夾(作為監獄),除了 /etc/中的用戶

vsftpd.chroot_list

讓我們創建這個文件並添加我們的用戶,該文件是一個包含 “theadmin” 的簡單行。每行添加一個用戶。這意味著您不需要創建 /var/www/theadmin 文件夾,用戶將登錄並在 /home/vsftpd 中啟動。

重啟服務器,大功告成!

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/12481.html,未經允許,請勿轉載。