web-dev-qa-db-ja.com

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

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

何よりもまず正確に:

  • RHEL 6.2でOpenSSH 5.9を使用しています
  • 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)

クライアント側でMYFILEMYDIRの権限を変更し、再度アップロードすると、サーバー側で新しい権限が取得されます。

私もpam.dソリューションを試しましたが、何も変わりませんでした。

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

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

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

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

13
drkzs

まず、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

putput -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」をモードビットに適用する必要があります。

12
Martin Prikryl