web-dev-qa-db-ja.com

SFTPを介したデフォルトのグループ権限の設定

ユーザーがSFTP経由でログインするファイルサーバーをセットアップしています。すべてのユーザーに、ファイルの読み取りと書き込みを行うための同じ権限を持たせたいです。それらはすべて異なるパスワードを持つ異なるアカウントを持っているので、私は次のようなものになります:

-rw-r-----   1 user1   sharing  308 Jul  6 12:03 test2.rtf
-rw-r-----   1 user2   sharing  308 Jul  6 12:16 test3.rtf

このグループはsharingと呼ばれ、すべてのユーザーが含まれます。問題は、ファイルが書き込まれるときに、グループのデフォルトのアクセス許可が読み取り専用になることです。

sshd_configでumaskを設定してみました。

Subsystem sftp /bin/sh -c 'umask 0002; /usr/lib/openssh/sftp-server'
Match Group sharing
    ChrootDirectory /files/
    ForceCommand internal-sftp -u 002
    AllowTCPForwarding no
    X11Forwarding no

ディレクトリのfaclは次のとおりです。

# file: .
# owner: root
# group: sharing
# flags: -s-
user::rwx
group::rwx
group:sharing:rwx
mask::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::---

これらの場所でも:

init.d/rc:umask 002
init.d/ssh:umask 002
bash.bashrc:umask 002

SFTP経由でログインすると、640のアクセス許可を取得します。sftpを無効にしてssh経由でuser1としてログインし、新しいファイルをタッチすると、660のアクセス許可を取得します。これが必要です。

では、どうすればこれをSFTP経由で機能させることができますか?

これはdebian7ところでです。

3
DAB

バックグラウンド

これは、sftpとファイル共有の永続的な問題です。これは、結果のアクセス許可がユーザー側のファイルの元のアクセス許可に基づいており、umask(-u)引数がそのようなアクセス許可を強制せず、不要なアクセス許可を削除するだけであるためです。これは、ユーザーが権限0777でファイルをアップロードしようとした場合にのみ、ファイルが適用され、0775に削除されることを意味します。それ以外の場合は、そのままにしておきます。たとえば、ユーザーがファイルシステムに0700権限でファイルを保存している場合、アップロード後も0700として表示されます。

解決

最近、Fedoraでこの問題を解決するために、新しくアップロードされたファイルの正確な許可を強制するパッチを適用しました。これは、これに基づいています。

https://bugzilla.mindrot.org/show_bug.cgi?id=1844

これはCentOSで数か月以内に利用可能になりますが、Debianについてはよくわかりません。

Workaround

間違った権限を修正している定期的に実行されるスクリプト(cronから)を除いて、他の洗練された解決策はありません。それはbashのワンライナーになるでしょうが、あなたはいくつか考えることができると思います。興味があれば、これについてさらに詳しく説明します。

2
Jakuje

私はbindfsを使用してこれをdebianで動作させることができました-これはまだ一種のハッキーですが、動作します。基本的に、あるディレクトリを別のディレクトリにマウントし、すべての権限を強制的に好きなように動作させることができます。したがって、ファイルが実際のディレクトリにどのように書き込まれるかに関係なく、sftpによって提供されるディレクトリは常に書き込み可能です。これで、すべてのクライアントが他のユーザーが作成したファイルに書き込むことができます:D

1
DAB