Как настроить виртуальных пользователей для vsftpd с доступом к определенному подкаталогу?

Немного поиграв, мне удалось найти полурешение (не идеальное, но достаточно хорошее).

используя ответ 2707974 и информацию, которую я получил в другом месте, я смог получить то, что мне нужно.

Сначала вам нужно установить vsftp и PAM

apt-get install vsftpd libpam-pwdfile

Редактировать /etc/vsftpd.conf

nano /etc/vsftpd.conf

затем вставьте следующее

listen=YESanonymous_enable=NOlocal_enable=YESwrite_enable=YESlocal_umask=022local_root=/var/wwwchroot_local_user=YESallow_writeable_chroot=YEShide_ids=YES#virutal user settingsuser_config_dir=/etc/vsftpd_user_confguest_enable=YESvirtual_use_local_privs=YESpam_service_name=vsftpdnopriv_user=vsftpdguest_username=vsftpd

Отредактируйте в соответствии с вашими точными потребностями самое важное для виртуальных пользователей - это все, что находится после комментария к настройкам виртуального пользователя

Создание пользователя

Вы можете либо использовать базу данных, либо htpasswd Я нашел htpasswd быстрее и проще в использовании.

создайте каталог для хранения ваших пользователей

mkdir /etc/vsftpdhtpasswd -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.passwdaccount required pam_permit.so

Это позволит войти в систему для ваших виртуальных пользователей, определенных в /etc/vsftpd/ftpd.passwd и отключит локальных пользователей

Далее нам нужно добавить пользователя для использования этими виртуальными пользователями. Эти пользователи не будут иметь доступа к оболочке и будут вызваны vsftpd

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

пользователь должен соответствовать guest_username=vsftpd в файле vsftpd conf

Определение Доступа к каталогу

Важная строка здесь заключается в следующем

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

теперь вы должны иметь возможность войти в систему как пользователь1, который сможет видеть только var/www/website_name1/sub_folder1 и любая папка и файл внутри него.

Вот и все, теперь вы можете добавлять столько пользователей, сколько захотите, и ограничивать их доступ к любой папке, которую вы пожелаете.

важно помнить, что если вы не создадите файл user conf, по умолчанию он будет находиться в папке var/www как root (в приведенном выше примере).

Если подпапка предназначена для изменения пользователем, может потребоваться изменить владельца общей подпапки:

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