web-dev-qa-db-ja.com

sftpを使用したファイルのアクセス許可とグループの所有権

sftpの下で特定のユーザーによって作成されたすべてのファイルに特定のグループとファイルのアクセス許可を持たせる方法はありますか?もちろん、問題のユーザーはグループのメンバーになりますが、それは彼のプライマリグループではありません。言い換えれば、sftpがumaskとnewgrpの効果を自動的に複製する方法はありますか?

5
user24844

(Open)SSHにはsubsystemのようなものがあります。これは、対話型シェル以外のものを要求すると起動するプログラムです。技術的には、リモートホスト上の実行可能ファイルであり、認証してsetuidを呼び出した後、execの子によってsshdされます。

SSH構成でsftpの標準サブシステム定義を見つけることができます。

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

これは単なる実行可能ファイルであり、SUIDやその他の特別なものではないため、必要な属性を変更するシェルスクリプトを記述して、元のサブシステムハンドラーを起動するだけです。

次のスクリプトを/usr/lib/opensshフォルダーに配置します。例: sftp-fperm-server(これは必須ではありません。物事を1か所にまとめるためだけです):

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

次に、/etc/ssh/sshd_configの最後に行を追加します。

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

次に、sshdを再起動し(再起動時にセッションを強制終了しません)、-s sftp-fpermオプションを指定してsftpを起動します。出来上がり!ファイルは、新しく指定されたumaskを取得します。

毎回そのオプションを指定したくない場合は、標準のサブシステム定義を変更するだけです。インタラクティブセッションは影響を受けないため、何かを壊す可能性はありません。

newgrpコマンドを使用する場合は、少し注意が必要です。 newgrpは常に新しいインタラクティブシェルを起動しますが、愚かなことにパラメータを渡すことはできません。そのため、前の例のumaskとして使用することはできません。ただし、スクリプトの最後の行を次のように置き換えることができます。

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

私が所属するグループのnewgrpを実際に呼び出すと、パスワード要求が発行されるため、この解決策を確認できませんでした(つまり、newgrp 1つだけです)が、/bin/idを渡すと機能します。私のラップトップ(SSHなし)では、ユーザーのためにnewgrpが機能していれば、問題は発生しません。

5
whitequark

Whitequarkが言っていることに加えて、これらの線に沿ってソリューションを構築することもできますが、グループの一種の「su」であるnewgrpの代わりに「sg」コマンドを使用します。少なくとも、どのLinuxシステムでも「mansg」として検索してください。

2

chmod g+s directory
将来作成されるすべてのディレクトリとファイルの所有権をユーザーのグループに付与します。

1
csi

これはサーバー固有だと思います。潜在的な構成オプションについては、サーバー構成を確認してください。

0
pcapademic