親バカエンジニアのナレッジ帳

webのエンジニアをやっており、日頃の開発で詰まったことや書き残しておきたいことを載せています。

ユーザにSFTPの特定ディレクトリのみ操作できる権限を付与


一般ユーザは、SFTPで特定のディレクトリのみしか触れないようにしたい

サーバのファイル操作を複数人で行うようなことは、エンジニアの現場ではよく起きることです。
そのような場合、全員が管理者権限を持ってしまうと、みんなが自由にサーバの設定を変えることができるため、セキュリティ面で何かと問題があります。
管理者以外のユーザは、SFTPで特定のディレクトリのみしか触れないようにしたい場合、以下の手順で対応できます。
ちなみにこの手順では、SSHのログインもできないように設定します。

ディレクトリの作成

SSHでサーバにログイン後、「su -」で管理者ユーザに切り替わった状況からスタートします。

まずはディレクトリを用意します。
これは、今回操作権限を付与するユーザが、唯一操作できるディレクトリになります。
「/var/www/」直下にhomeDirというディレクトリを作るとします。
※すでに用意してある場合は不要です。

cd /var/www
mkdir homeDir

最後にも確認しますが、homeDirの所有権はrootユーザになるようにしてください。
そうしないとエラーが発生してしまいます。

ここで終わりではなく、さらにhomeDirの中にuploadDirというディレクトリを作成してください。

cd homeDir
mkdir uploadDir

最終的には、今回操作権限を与えるユーザがログインした場合、ホームディレクトリ(ログインした後にたどり着くディレクトリ)をhomeDirとしますが、実際にファイルの更新などができるのはuploadDirの中だけとしたいです。



ユーザとグループの作成

次にユーザを作成しましょう。
今回はtestUserというユーザを作成することにします。

useradd testUser

そして作成したユーザのパスワードを設定します。

passwd testUser

続いてグループを作成します。
今回はsftpgroupというグループを作成し、このグループに所属するユーザは、操作権限が与えられるものとします。
※gpasswdはユーザのグループ情報を管理するコマンドです。

groupadd sftpgroup
gpasswd -a testUser sftpgroup


※今後同じようなユーザを増やしたい場合、上記で作成したグループに入れましょう。

この時点でSSHやSFTPでログインできることを確認してください。
今のままではこのユーザのディレクトリ操作制限が設定されていないので、書き込み権限はないもののサーバの中身が丸見えです。

ディレクトリの権限変更

この対応では権限設定を間違えると上手くいきません。
各ディレクトリに対して以下のような権限設定をしてください。

homeDirは今回唯一操作可能なディレクトリということになりますが、書き込み・読み込み権限を与えた上で、ユーザ所有権・グループ所有権共にrootにしてください。

cd /var/www
chmod 775 homeDir
chown root:root homeDir

次にファイルの更新を行うディレクトリに関してですが、こちらはユーザ所有権をtestUser、グループ所有権をsftpgroupとしてください。
このディレクトリの所有権をrootにしてしまうと、誰も中身を更新できなくなりますし、グループにsftpgroupを指定することで、後ほどユーザをグループに追加すれば誰でも更新できるようになります。

cd /var/www/homeDir
chown testUser:sftpgroup uploadDir



sshd_configを変更して操作権限を付与

あとは以下のようにsshd_configの一番下の部分を変更してください。

vim /etc/ssh/sshd_config

#Subsystem      sftp    /usr/libexec/openssh/sftp-server # コメントアウトする
Subsystem sftp internal-sftp # SSHログインを制御してSFTPでないとログイン不可に

Match Group sftpgroup
    ChrootDirectory /var/www/homeDir
    PasswordAuthentication yes

簡単に説明しますと、sftpgroupのグループに属するユーザがログインした場合、homeDirしか操作できなくするという意味です。

sshdの再起動を忘れずにしましょう。

service sshd restart

ログインがうまくいかない場合は以下のログで確認してください。

/var/log/secure

以下は権限の設定ミスにより発生したログですが、なぜログインできないのか原因を吐き出してくれています。

fatal: bad ownership or modes for chroot directory

まとめ

いかがでしたか?
長い手順に見えますが、意外とすぐにできてしまいます。
セキュリティのためにも、一般ユーザには極力触れる範囲を絞るようにしましょう。


見てわかるTCP/IP

見てわかるTCP/IP

  • 作者:中嶋 章
  • 発売日: 2009/10/14
  • メディア: 大型本