LoginSignup
18

More than 5 years have passed since last update.

複数のSFTPユーザで編集するときに注意したいこと

Last updated at Posted at 2017-05-04

きっかけ

複数ユーザで、あるwebサイトのドキュメントルートを編集することになり、そのときに気づいたことを整理してみました。。

SFTPとファイルパーミッションとumask

状況として、共通のユーザグループXに属している複数ユーザが、SFTPで特定ディレクトリ以下を編集するというものです。

ポイント1. グループ所有者の権限

この場合、グループ所有者に対する権限を常に適切に設定されてることが重要です。
新規作成時には、読み書きの権限(必要なら実行権限も)があり、既存のものに対してもその権限を維持する必要があります。

グループ所有者の書き込み権限が落ちると、他のユーザは編集も削除もできなくなります。

ポイント2. ログインシェル + umaskでは対応できない

上の話からすると、デフォルトのパーミッションを決めるumaskでなんとかしようとなります。
今回のケースでは umask 0002 とすることで、グループ所有者に、rw(x)の権限が付与されます。

まずはやるのは、ログインシェルでの対応です。
bashなら、.bashrcに umask 0002 を追加すれば、ログインの度にデフォルトのパーミッションが設定されるので、sshログインの場合なら今回の目的は達成されます。

ですが、残念なことにsftpについてはこれではだめです。

結論. sftp-serverで対応

ではどうするかというと、sshd_configに、sftpコマンドの実体を決めている箇所があり、それがsftp-serverです。

Subsystem sftp /usr/libexec/openssh/sftp-server

これには、umaskを設定するオプションがあるので下記にようにすればOKです。

Subsystem sftp /usr/libexec/openssh/sftp-server -u 002

これだと全ユーザに対して有効になるので、対象を絞りたい場合は、

Match User X
# Subsystem sftp /usr/libexec/openssh/sftp-server -u 002 ← Matchに使えるものが限定されているのでこれはできない

ForceCommand /usr/libexec/openssh/sftp-server -u 002

を追記すれば、対象のユーザグループに対してのみ、設定が上書きされます。
あるいは、シェルスクリプトでラップして、そっちでユーザグループの判定をするとかです。

参考サイト

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18