OpenSSH SFTPサーバーは、putコマンド(chrooted環境)後にumaskを使用するか、クライアント側の権限を保持しますか?


13

この質問はすでに議論されていることは知っていますが、投稿を読んでも答えを理解できませんでした。

すべての前に正確に:

  • RHEL 6.2でOpenSSH 5.9を使用しています
  • internal-sftpサブシステムを使用して-u 0002、umask用にchrootされたSFTPサーバーを構成しました。
  • 私は正確に、-pまたは-Pオプションを使用しません

私が一方で読んだものから:SFTP転送のためにumaskを定義する多くの方法があります:

  • オプション-uinternal-sftp(またはsftp-serverOpenSSHの5.4以降)、
  • ラッパーを作成しますsftp-server(ここで明示的にumaskを設定します-これはchrooted環境に適合しません)
  • pam.d/sshdファイルに特定の構成を追加する

一方、私は読んだ:

OpenSSH SFTPクライアントとサーバーは、アクセス許可を(拡張機能として)転送し、ローカル側のアクセス許可でリモートファイルを作成します。AFAICT、この動作を無効にする方法はありません。

そこで、次のテストを行いました。

クライアントで、アクセス許可600および700のファイルMYFILEとディレクトリを作成しましたMYDIR

それから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)

私はのパーミッション変更した場合MYFILEMYDIR、クライアント側では、再度アップロードし、私は、サーバー側で新しい権限を取得します。

私もpam.d解決策を試しましたが、何も変わりませんでした。

だから今私は混乱しています:

私がテストしたものと読んだものの一部から、OpenSSHは常に許可を保持していると言えます。しかし、umaskを定義できると言っている多くの投稿があるので、テスト構成で間違ったことをしていると想像できます。

経験豊富なフィードバックをお願いします。

ありがとうございました。

回答:


12

まず、umaskはクライアントではなくサーバーに関するものです。そのためput、OpenSSHクライアントのコマンドがumaskを使用するかどうかを尋ねることは間違っています。SFTPアップロードの結果としてファイルを作成するときに、OpenSSHサーバーがumaskを使用するかどうかを尋ねる必要があります。

とにかく、OpenSSH SFTPクライアントが行うこと:

  • put-Pフラグなしでは、ローカルファイルと同じ権限を持つファイルを作成するようサーバーに要求します。OpenSSHサーバーは(暗黙的に* nixルールにより)umaskを適用します。

  • put-Pフラグ、それは同じことを開始しますが、アップロードが完了した後、クライアントが明示的に(再)にサーバーを要求し、ローカルファイルを持っている(「chmodの」リクエスト)同じに権限を設定します。「chmod」の場合、umaskは適用されません。

  • mkdir、サーバーに許可0777のディレクトリを作成するように要求します。umaskは暗黙的に適用されます。

とにかく、umask 0002は許可が0600のファイルには影響しないと思います。これらは相互に排他的です。0644のような権限を持つファイルに対してumaskを試してください。

したがって、実際に、システムが説明どおりに構成されていれば機能するはずです。私の箱からの証拠を見る(OpenSSH 6.2p2を使用したUbuntu)

Match user user2
  ChrootDirectory /home/user2/chroot
  ForceCommand internal-sftp -u 0077
  AllowTcpForwarding no
  PermitTunnel no
  X11Forwarding no

putvs.の後のパーミッションの違いをご覧ください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」を適用すべきではありません。ただし、クライアントが指定したとおりにモードビットを設定する必要があります。クライアントは、送信する前にモードビットに適切な「umask」を適用する必要があります。


私はすでに多くの異なるアクセス許可を試しましたが、最初はクライアント側のディレクトリに755を持っていましたが、代わりに775を取得したかったのです。しかし、うまくいきませんでした。(アクセス権があるものは何でも)私は、ドキュメントを読んで-Pのためにあなたに同意しないが、それでもそのフラグなしで私は常にサーバー上でクライアントと同じ権限を取得する
drkzs

発言のためのおかげで、私はいくつかの用語を、タイトルを改善し、修正しようとした
drkzs

それは実際に動作するはずです、私の更新を参照してください。
マーティンPrikryl 14年

はい、あなたの例は動作します...しかし、umaskを0002に変更すると、もう動作しません。たぶん、この投稿は同じ問題を提起していますか?私がopenssh5.9にいるという事実と、そのumaskオプションが機能するはずであるという事実を除いて。あなたのSSHD構成と私の違いは、ForceCommandを使用しないため、サブシステム行でumaskを指定することです。(私は設定して、結果を投稿しようとするでしょうが、ネットワークテストは簡単にアクセス可能ではありません)
drkzs

1
その点について明確にするために、クライアントが許可情報を送信The server SHOULD NOT apply a 'umask' する場合にのみ適用されます。クライアントが許可情報を送信しない場合、umaskを適用することが意図されています。
-heiglandreas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.