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

Пользователи SFTP не могут удалять файлы

Я установил простой SFTP-сервер в Ubuntu 18.04. У меня 10 пользователей, которые должны иметь доступ только к файлам в своих домашних каталогах, и они не должны иметь возможность выйти из своего домашнего каталога.

У нас есть API, который записывает файлы в свои домашние каталоги.

Все идет нормально.

Пользователи могут входить в систему, получать файлы и ограничиваться своими собственными каталогами. Однако они не могут удалить файлы. Любая команда 'rm' возвращает ошибку разрешений - Не удалось удалить файл: в разрешении отказано.

Пользователь / группа для папки root: www-data. Если я изменю его на user: www-data SFTP сломается - они не смогут войти. Я создал группу sftp, но опять же, если я добавлю пользователя в группу sftp, измените домашний каталог на user: sftp, они не могут войти в систему.

Вот как выглядит домашняя папка:

drwxr-xr-x 2 root   www-data 172032 Feb  6 14:19 29
drwxr-xr-x 2 root   www-data 135168 Feb  6 14:17 52
drwxr-xr-x 4 root   www-data  69632 Feb  6 14:15 44
drwxr-xr-x 2 root   www-data  36864 Feb  6 14:14 68

Моя конфигурация sftp из / etc / ssh / sshdconfig:

Match group sftp
ChrootDirectory /home/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

Мои пользователи настроены так:

29:x:1002:1001::/home/26:/bin/sh
44:x:1003:1003::/home/44:/bin/sh
52:x:1004:1004::/home/52:/bin/sh
68:x:1005:1005::/home/29:/bin/sh

Моя группа sftp:

sftp:x:1001:26,44

Помимо проблема именования пользователей, который следует исправить, но, вероятно, не влияет на ваш вариант использования, ваша конфигурация должна удовлетворять двум несовместимым ограничениям:

  • Как указано в sshd_config справочная страница:

    ChrootDirectory Задает путь к каталогу, в который после аутентификации будет использоваться chroot (2). Все компоненты имени пути должны быть корневые каталоги которые не записывается любым другим пользователем или группой. После chroot sshd (8) меняет рабочий каталог на домашний каталог пользователя.

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

Поэтому вам нужно создать каталог внутри /home/user, который будет принадлежать пользователю. Главный выбор - /home/user/home/user которому sftp пойдет после входа в систему.

Подводя итог, если у вас есть такие пользователи:

u29:x:1002:1001::/home/u26:/bin/sh
u44:x:1003:1003::/home/u44:/bin/sh
u52:x:1004:1004::/home/u52:/bin/sh
u68:x:1005:1005::/home/u29:/bin/sh

вам просто нужно создать несколько каталогов:

for user in u29 u44 u52 u68; do
    home=/home/$user
    # Create the chroots owned by root
    mkdir -p $home
    # Create the homes inside the chroots
    mkdir -p $home$home
    # Fix ownership
    chgrp www-data -R $home
    chown root -R $home
    chown $user -R $home$home
    # Fix directory permissions
    find $home -type d -exec chmod 755 {} +
    find $home$home -type d -exec chmod 2770 {} +
done

В Setgid в домах пользователей может быть полезно для ваших скриптов (которые запускаются как www-data Я предполагаю). Вы также можете подумать о настройке umask для sftp:

ForceCommand internal-sftp -u 0002

PS: Не могу понять, почему многие настаивают на том, чтобы административно запретить пользователям доступ к домашним каталогам друг друга. Разрешение на звук по умолчанию для домашнего каталога (например, 700) и umask (077) должно быть достаточно. Те, кто знает, что делают, могут изменить свои разрешения.