5

Есть ли способ, чтобы все файлы, созданные конкретным пользователем в sftp, имели определенные группы и права доступа к файлам? Данный пользователь, конечно, будет членом группы, но это не его основная группа. Другими словами, есть ли способ для sftp автоматически дублировать эффекты umask и newgrp?

4 ответа4

5

В (Open)SSH есть такая вещь, как подсистема : это программа, которая запускается, когда вы запрашиваете что-то, кроме интерактивной оболочки. Технически это просто исполняемый файл на удаленном хосте , который exec «d от sshd ребенка после проведения аутентификации и вызова УИП.

Вы можете найти стандартное определение подсистемы для sftp в вашей конфигурации SSH:

Subsystem sftp /usr/lib/openssh/sftp-server

Так как это простой исполняемый файл, а не SUID или какой-либо другой, вы можете написать сценарий оболочки, который изменит любые необходимые вам атрибуты, а затем просто запустить оригинальный обработчик подсистемы.

Поместите следующий скрипт в папку /usr/lib/openssh например, sftp-fperm-server (это не требуется, просто чтобы хранить вещи в одном месте):

#!/bin/sh
umask 026
exec /usr/lib/openssh/sftp-server

Затем добавьте строку в конец /etc/ssh/sshd_config:

Subsystem sftp-fperm /usr/lib/openssh/sftp-fperm-server

А затем перезапустить sshd (он не убивает сессий на перезапуске) и запустить sftp с опцией -s sftp-fperm Вуаля! файлы получают новый указанный umask.

Если вы не хотите указывать эту опцию каждый раз, просто измените определение стандартной подсистемы. Интерактивные сеансы не будут затронуты этим, поэтому нет шансов что-то сломать.

Если вы хотите использовать команду newgrp , все будет немного сложнее. newgrp всегда запускает новую интерактивную оболочку, тупо не позволяя передавать ей какие-либо параметры, поэтому вы не можете использовать ее как umask в предыдущем примере. Но вы можете заменить последнюю строку в скрипте на:

SHELL=/usr/lib/openssh/sftp-server newgrp git

На самом деле вызов newgrp для некоторой группы, к которой я принадлежу, отправляет запрос пароля, поэтому я не смог проверить это решение (я имею в виду только newgrp ), но он работает, когда я передаю /bin/id на моем ноутбуке (без SSH), так что если у вас есть newgrp работающий на пользователя, никаких проблем возникнуть не должно.

2

Чтобы добавить к тому, что говорит whitequark, вы можете построить решение в том же духе, но использовать вместо команды newgrp команду sg, которая является своего рода su для групп. Посмотрите это как "man sg" в любой системе Linux, по крайней мере.

1

chmod g+s directory
Предоставит право собственности группе пользователей для всех каталогов и файлов, созданных в будущем.

0

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

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