特定ディレクトリ以下にSFTPでしかアクセス出来ないユーザーの作り方

スポンサーリンク

こんばんは。
本日は、特定のディレクトリ以下に、SFTPでしかアクセスすることが出来ないユーザーの作り方に関して書こうと思います。

環境

  • CentOS 6.6

ユーザー追加

まずは、rootでユーザーを作る必要があります。

$ su

グループを追加します。そのグループに配属するユーザーも作ります。
ユーザーを作る際、apacheやnginxで動かす場合はそのグループも指定してユーザーを作成しましょう。

# groupadd staff
# useradd -G staff,apache sftpuser

そしたら、対象のユーザーにログインします。

# su - sftpuser

SSHの設定

移動して、SSHキーを作成します。

$ cd ~
$ mkdir .ssh
$ cd .ssh
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/sftpuser/.ssh/id_rsa):[Enter]
Enter passphrase (empty for no passphrase):[Enter]
Enter same passphrase again:[Enter]
Your identification has been saved in /home/sftpuser/.ssh/id_rsa.
Your public key has been saved in /home/sftpuser/.ssh/id_rsa.pub.
The key fingerprint is:
c6:c9:xx:xx:7a:a6:4e:xx:xx:d3:cf:51:f2:a3:xx:xx [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
+-----------------+

名前を変更し、パーミッションも変更します。なお、id_rsaはsftpでログインする際に必要になるので、ローカルに持っておきましょう。

$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

rootに戻りまして、シェルからのログインを無効化します。

# usermod -s /sbin/nologin sftpuser

chrootの設定

chrootの設定をします。これは、タイトルに書いてある対象ディレクトリ以下にしかアクセス出来ないようにするために設定します。

vi /etc/ssh/sshd_config
# override default of no subsystems
- Subsystem sftp /usr/libexec/openssh/sftp-server
+ # Subsystem sftp /usr/libexec/openssh/sftp-server
+ Subsystem sftp internal-sftp -u 002

以下は一番最後に書きます。chrootの設定です。

Match User sftpuser
    AllowTcpForwarding no
    X11Forwarding no
    ChrootDirectory /var/www
    ForceCommand internal-sftp -u 002

chrootディレクトリに指定するディレクトリは前提として、rootでしか書き込み出来ない仕様でなければいけません。(755)
(ここで、root権限からしか色々出来ないと思うかと思いますが、このchrootディレクトリの下で、パーミッションを変更したディレクトリを作ることで、そちらで対応が出来ます。)

一応シンタックスチェックやっておきます。

# sshd -t

リロードします。

# /etc/init.d/sshd reload

確認

リロードして、まずsftpでアクセスできるか確認しましょう。
アクセス出来ない場合は、/var/log/secureログ等を確認し、パーミッションの問題等が無いかどうか確認すると良いです。

参考サイト一覧

コメント

タイトルとURLをコピーしました