Мне нужно разрешить широкий анонимный доступ к загрузке через vsftpd, но ограничить загрузку только одним путем. Есть ли способ сделать это, кроме разрешений файловой системы?
При попытке заблокировать файловую систему возникают две основные проблемы:
Прямо сейчас # 2 вызывает большую озабоченность, поэтому у нас фактически есть область только для чтения, смонтированная как файловая система только для чтения, но это вызывает свои собственные проблемы.
Вы можете использовать bind
опция монтирования для отображения / перемонтирования уже смонтированной части иерархии файловой системы в другое место. Скажем, у вас есть общий ресурс самбы с видео и второй с библиотекой изображений, и вы хотите предложить их в качестве загрузки только для чтения по FTP.
mkdir -p /var/ftp/Videos /var/ftp/Images
mount --bind /share/Videos /var/ftp/Videos
mount --bind /share/Images /var/ftp/Images
Затем сделайте эти файловые системы доступными только для чтения:
mount -o remount,ro /var/ftp/Videos
mount -o remount,ro /var/ftp/Images
Разрешения файловой системы остаются неизменными, но все в разделе «Видео и изображения» теперь доступно только для чтения. Поэтому маловероятно, что подкаталог с drwx------
могут быть доступны для пользователя FTP, но пользователь FTP также не может писать в подкаталог с drwxrwxrwx
разрешения.
Монтирование привязки не принимает параметры, поэтому для достижения монтирования только для чтения требуется перемонтирование, и поэтому я думаю, что вы не можете использовать fstab, чтобы сделать это постоянным, и вместо этого нужно сценарий.
Затем настройте каталог для загрузки:
mkdir -p /var/ftp/Upload
chmod 700 /var/ftp/Upload
chown ftp.ftp /var/ftp/Upload
Затем настройте vsftpd правильно для анонимных загрузок и chroot () анонимного пользователя FTP в / var / ftp. Прошло некоторое время с тех пор, как я это сделал, но грубо и непроверенно:
# /etc/vsftpd/vsftpd.conf
listen=YES
#The following directives prevent local users from logging in and enables anonymous access respectively.
local_enable=NO
anonymous_enable=YES
#The following directive enables write access to the ftp server’s filesystem.
write_enable=Yes
anon_upload_enable=Yes
# Sets the root directory for anonymous connections.
anon_root=/var/ftp
Конечно, есть еще много подходящих вариантов.
Вы можете легко получить то, что хотите, с помощью proftpd
<VirtualHost anonymous.example.net>
ServerName "ANONYMOUS"
Protocols ftp
Port 21
DefaultRoot /var/ftp/pub/
<Anonymous /var/ftp/pub/>
User ftp
Group ftp
UserAlias anonymous ftp
MaxStoreFileSize 100 Mb user ftp
<Directory /var/ftp/pub/>
<Limit RMD MKD XMKD XRMD>
DenyAll
</Limit>
</Directory>
</Anonymous>
</VirtualHost>