ユーザーが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ところでです。
これは、sftp
とファイル共有の永続的な問題です。これは、結果のアクセス許可がユーザー側のファイルの元のアクセス許可に基づいており、umask(-u
)引数がそのようなアクセス許可を強制せず、不要なアクセス許可を削除するだけであるためです。これは、ユーザーが権限0777
でファイルをアップロードしようとした場合にのみ、ファイルが適用され、0775
に削除されることを意味します。それ以外の場合は、そのままにしておきます。たとえば、ユーザーがファイルシステムに0700
権限でファイルを保存している場合、アップロード後も0700
として表示されます。
最近、Fedoraでこの問題を解決するために、新しくアップロードされたファイルの正確な許可を強制するパッチを適用しました。これは、これに基づいています。
https://bugzilla.mindrot.org/show_bug.cgi?id=1844
これはCentOSで数か月以内に利用可能になりますが、Debianについてはよくわかりません。
間違った権限を修正している定期的に実行されるスクリプト(cron
から)を除いて、他の洗練された解決策はありません。それはbashのワンライナーになるでしょうが、あなたはいくつか考えることができると思います。興味があれば、これについてさらに詳しく説明します。
私はbindfsを使用してこれをdebianで動作させることができました-これはまだ一種のハッキーですが、動作します。基本的に、あるディレクトリを別のディレクトリにマウントし、すべての権限を強制的に好きなように動作させることができます。したがって、ファイルが実際のディレクトリにどのように書き込まれるかに関係なく、sftpによって提供されるディレクトリは常に書き込み可能です。これで、すべてのクライアントが他のユーザーが作成したファイルに書き込むことができます:D