Задача
Сделать ftp пользователю доступ только для загрузки на сервер, без возможности удаления, перезаписи, изменения файлов.
Решение:
Создаем пользователя, каталог и выдаем необходимые права:
|
1 2 3 4 |
mkdir -p /backup-ftp useradd -m -d /backup-ftp/ -s /usr/sbin/nologin ftp-user chown -R ftp-user:ftp-user /backup-ftp chmod -R 750 /backup-ftp |
После того как пользователь и каталог созданы, ограничиваем доступ пользователю по ssh и sftp. Добавляем в /etc/ssh/sshd_config:
|
1 |
DenyUsers ftp-user |
Ограничения пользователя по ssh нужны из за того, что в данной реализации, ограничения на работу с каталогами настраиваются на стороне ftp сервера. Если этого не сделать, то либо по sftp, scp у нас пользователь сможет делать что угодно с файлами, либо придется до настроить это со стороны ssh сервера, что в наше ТЗ не входит.
Теперь остается настроить сам ftp сервер, в моем случае это proftpd, добавляем в конец файла конфигурации /etc/proftpd/proftpd.conf:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# Запрещает перезапись существующих файлов. # Если файл уже существует — upload завершится ошибкой. AllowOverwrite off # Разрешает логин пользователям без валидного shell. # Нужен если у пользователей /usr/sbin/nologin или /bin/false. RequireValidShell off # Chroot/jail для пользователя. Запрещаем подниматься вверх. # После логина пользователь будет видеть указанный каталог как корень FTP. DefaultRoot /backup-ftp ftp-user # Задаем ограничения и разрешения на нужный каталог: # На заметку, тут можно использовать регулярные выражения. # Например: /home/*/ftp-folder - применит настройки ко всем # каталогам ftp-folder у всех пользователей <Directory /backup-ftp> # Umask для новых файлов и директорий. # # Файлы: # 666 - 066 = 600 # => rw------- # # Директории: # 777 - 066 = 711 # => rwx--x--x # # Пользователь может работать со своими файлами, # остальные не могут читать содержимое. Umask 066 066 # Ограничение READ/RETR. # # READ — общий класс операций чтения. # RETR — скачивание файла. # # Запрещает: # - download файлов # - чтение содержимого файлов <Limit READ RETR> DenyAll </Limit> # Запрет опасных операций: # # DELE -> удаление файла # RNFR/RNTO -> переименование # APPE -> дозапись в файл # SITE_CHMOD -> chmod через FTP # # Пользователь не сможет: # - удалить # - переименовать # - изменить права # - дописать в существующий файл <Limit DELE RNFR RNTO APPE SITE_CHMOD> DenyAll </Limit> # Разрешённые операции: # # STOR -> upload файла # MKD -> создать каталог # XMKD -> расширенная create dir команда # LIST -> ls -l # NLST -> короткий список файлов # DIR -> list directory # # Пользователь может: # - загружать новые файлы # - видеть список файлов # - создавать каталоги <Limit STOR MKD XMKD LIST NLST DIR> AllowAll </Limit> </Directory> |
После настроек перезапускаем ssh и proftpd:
|
1 2 |
systemctl restart sshd systemctl restart proftpd |
Готово, можно проверять.
Добавить комментарий