1

Я настраиваю файловый сервер, на котором пользователи входят через SFTP. Я хочу, чтобы все пользователи имели одинаковые права на чтение и запись любого файла. Поскольку все они имеют разные учетные записи с разными паролями, я получаю что-то вроде этого:

-rw-r-----   1 user1   sharing  308 Jul  6 12:03 test2.rtf
-rw-r-----   1 user2   sharing  308 Jul  6 12:16 test3.rtf

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

Я попытался установить umask в sshd_config:

Subsystem sftp /bin/sh -c 'umask 0002; /usr/lib/openssh/sftp-server'
Match Group sharing
    ChrootDirectory /files/
    ForceCommand internal-sftp -u 002
    AllowTCPForwarding no
    X11Forwarding no

Фас для каталога это:

# file: .
# owner: root
# group: sharing
# flags: -s-
user::rwx
group::rwx
group:sharing:rwx
mask::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::---

также в этих местах:

init.d/rc:umask 002
init.d/ssh:umask 002
bash.bashrc:umask 002

Если я вхожу через SFTP, я получаю разрешения 640. Если я отключу sftp и войду в систему как user1 через ssh и коснусь нового файла, я получу права доступа 660 - что я и хочу.

Так как я могу заставить это работать через SFTP?

Это Debian 7, кстати.

2 ответа2

1

Фон

Это вечная проблема sftp и обмена файлами. Это связано с тем, что полученные разрешения основаны на исходном разрешении файла на стороне пользователя, а аргумент umask (-u) не форсирует такие разрешения, а только удаляет нежелательные разрешения. Это означает, что только если пользователь пытается загрузить файл с разрешением 0777 , он применяется и сокращается до 0775 . В противном случае это просто осталось как было. Например, если у пользователя есть файл, сохраненный в его файловой системе с разрешением 0700 , он также появится после загрузки как 0700 .

Решение

Недавно мы решили эту проблему в Fedora, применив патч, требующий точного разрешения для новых загруженных файлов, который основан на этом:

https://bugzilla.mindrot.org/show_bug.cgi?id=1844

Это будет доступно в CentOS через несколько месяцев, не уверен насчет Debian.

Временное решение

Не существует другого элегантного решения, кроме некоторого периодически запускаемого скрипта (от cron), который исправляет неправильные разрешения. Это будет одна строчка в bash, но я думаю, вы можете подумать о некоторых. Я могу подробнее остановиться на этом, если вам интересно.

1

Мне удалось заставить это работать на Debian с помощью bindfs - что все еще немного странно, но работает. По сути, он монтирует один каталог в другой, и вы можете заставить все разрешения работать так, как вам нравится. Таким образом, независимо от того, как файл записан в реальном каталоге, каталог, обслуживаемый sftp, всегда будет доступен для записи. Теперь все мои клиенты могут записывать в файлы, созданные другими пользователями:D

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .