Немного поиграв, мне удалось найти полурешение (не идеальное, но достаточно хорошее).
используя ответ 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