права доступа к файлу и владение группой с использованием sftp


5

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


Также найдите варианты, чтобы сделать это с помощью scp. К сожалению, существует путаница между scp - sftp - ftps - ftp-ssl
pcapademic

Для меня это больше похоже на вопрос ServerFault, но это может быть серая зона.
Squircle

Ответы:


5

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

Вы можете найти стандартное определение подсистемы 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, вы можете построить решение в том же духе, но использовать команду sg вместо newgrp, которая является своего рода su для групп. Посмотрите это как "man sg" в любой системе Linux, по крайней мере.


1

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


0

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


Ну, это программа sftp, которая поставляется с OpenSSH (под Linux). Для меня просто не очевидно, как делать то, что я хочу, полностью прозрачно для пользователя sftp.
user24844
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.