Назад | Перейти на главную страницу

Разрешить пользователю vsftpd загружать только в один каталог

Мне нужно разрешить широкий анонимный доступ к загрузке через vsftpd, но ограничить загрузку только одним путем. Есть ли способ сделать это, кроме разрешений файловой системы?

При попытке заблокировать файловую систему возникают две основные проблемы:

  1. Это затрагивает всех пользователей - это неоднородная система, поэтому сложно гарантировать, что все Кроме у пользователя FTP есть доступ.
  2. Это не выглядит иерархическим - даже если мы можем заблокировать каталоги верхнего уровня, кому-то кажется простым создать подкаталог с возможностью записи по FTP, после чего 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>