こんばんは。
本日は、特定のディレクトリ以下に、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
ログ等を確認し、パーミッションの問題等が無いかどうか確認すると良いです。
コメント