私はこの質問がすでに議論されていることを知っていますが、投稿を読んでも答えを理解することができませんでした。
何よりもまず正確に:
internal-sftp
サブシステムを使用して、chrootされたSFTPサーバーを、umaskに-u 0002
を使用して構成しました-p
または-P
オプションを使用しない私が一方で読んだものから: SFTP転送のumaskを定義する方法はたくさんあります:
-u
/internal-sftp
(またはsftp-server
)、OpenSSH 5.4以降sftp-server
へのラッパーを作成します(この場合、umaskを明示的に設定します-これは、chrootされた環境には適合しません)pam.d/sshd
ファイルに特定の構成を追加する一方、私は読んだ:
OpenSSH SFTPクライアントおよびサーバーは、許可を(拡張として)転送し、ローカル側の許可でリモートファイルを作成します。 AFAICT、この動作を無効にする方法はありません。
だから私は次のテストをしました:
私のクライアントでは、ファイルMYFILE
とディレクトリMYDIR
を権限600と700で作成しました。
次に、sftp
コマンドを使用します。
mkdir => the new directory has permissions following the umask (OK)
put MYFILE => MYFILE has same permissions as on client (KO)
put -r MYDIR => MYDIR has same permissions as on client (KO)
クライアント側でMYFILE
とMYDIR
の権限を変更し、再度アップロードすると、サーバー側で新しい権限が取得されます。
私もpam.d
ソリューションを試しましたが、何も変わりませんでした。
だから今私は混乱しています:
私がテストした内容と読んだ内容の一部から、OpenSSHは常に権限を保持していると思います。しかし、umaskを定義できると言っている投稿がたくさんあるので、テスト構成で間違ったことをしたと想像できます。
経験豊富なフィードバックをお願いします。
ありがとうございました。
まず、umaskはクライアントではなくサーバーに関するものです。したがって、OpenSSHクライアントのput
コマンドがumaskを使用するかどうかを尋ねることは間違っています。 SFTPアップロードの結果としてファイルを作成するときに、OpenSSHサーバーがumaskを使用するかどうかを尋ねる必要があります。
とにかく、OpenSSH SFTPクライアントが行うこと:
put
-P
フラグなしで、ローカルファイルと同じ権限を持つファイルを作成するようサーバーに要求します。次にOpenSSHサーバーは(暗黙的に* nixルールにより)umaskを適用します。
put
と-P
フラグを使用すると、同じように開始されますが、アップロードが完了すると、クライアントはサーバーに、ローカルファイルと同じアクセス許可を明示的に(再)設定するように要求します( "chmod"リクエスト)。 「chmod」の場合、umaskは適用されません。
mkdir
、アクセス許可0777でディレクトリを作成するようサーバーに要求します。umaskは暗黙的に適用されます。
とにかく、umask 0002は、相互に排他的であるため、パーミッション0600のファイルには影響を与えないと思います。 0644のような権限を持つファイルに対してumaskを試す必要があります。
そのため、実際に、システムを設定どおりに構成すれば、問題なく機能するはずです。私の箱から証拠を見る(UbuntuとOpenSSH 6.2p2)
Match user user2
ChrootDirectory /home/user2/chroot
ForceCommand internal-sftp -u 0077
AllowTcpForwarding no
PermitTunnel no
X11Forwarding no
put
とput -P
の後の権限の違いを確認します。
user1:~$ touch file.txt
user1:~$ ls -l
total 0
-rw-r--r-- 1 user1 ftpuser 0 Oct 23 15:34 file.txt
user1:~$ sftp user2@localhost
user2@localhost's password:
Connected to localhost.
sftp> cd somefolder
sftp> put file.txt
Uploading file.txt to /somefolder/file.txt
file.txt 100% 0 0.0KB/s 0:00
sftp> ls -l
-rw------- 1 1003 1001 0 Oct 23 15:35 file.txt
sftp> put -P file.txt
Uploading file.txt to /somefolder/file.txt
file.txt 100% 0 0.0KB/s 0:00
sftp> ls -l
-rw-r--r-- 1 1003 1001 0 Oct 23 15:34 file.txt
ところで、 最新のSFTP仕様 は、umaskに関するクライアントとサーバーの動作を定義します。ご覧のとおり、OpenSSHは実際にはこれに違反していますが、OpenSSHはまだumaskについて言及していないSFTPバージョン3を実装しています。
7.6。権限
...
サーバーは、モードビットに「umask」を適用すべきではありません(SHOULD NOT)。ただし、クライアントが指定したモードビットを設定する必要があります。クライアントは、モードビットを送信する前に、適切な「umask」をモードビットに適用する必要があります。