CentOS 6.5 の OpenSSH でのsftp専用ユーザ(chroot)の設定
サーバ運用をする上で自分だけで使用している分には、問題は無いと思いますが、他人にサーバの一部を貸す場合にサーバの不必要なところを見られてしまうのは、精神衛生上よくないし、もし悪意がなくても間違った操作で問題が起こらないとも限らない。
一般ユーザにホームページ等でログインさせる場合にユーザ作成時のホームディレクトリがそのままルートディレクトリになるように設定を行う。
まずopensshをインストール。zlib等必要なときは、そちらもインストール。
インストールコマンドは下記で行いますがインストールは、すでにインストール完了しているところからの説明です。
(細部インストールの説明は、他のブログを参照してください。)
# yum -y install openssh-server
インストール終了後のこのサーバのsshのバージョン
# ssh -v OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
一般ユーザの作成
useradd -d /home/hogehoge -s /sbin/nologin hogehoge
-dでホームディレクトリを作成(このディレクトリがユーザのルートディレクトリになる。)
-sでログインシェルをなしにしてwinscp等でのログインのみに限定する。teraterm等では、ログインできない。
すでに存在する一般ユーザを変更するには、usermodコマンドで上記の必要な部分を変更してください。
そしてディレクトリの各種設定を行います。
一般ユーザhogehogeのホームディレクトリ /home/hogehoge
オーナー・グループをrootユーザに変更します。(一般ユーザでは、書き込み等できないようにします。)
また、通常であればchmodは必要ないですが、一応書いておきます。
chown root:root /home/hogehoge chmod 755 /home/hogehoge
また、このままでは、ユーザがログイン後書き込みできるディレクトリがないのでpublic_htmlを
作成しその中がトップページになるようにディレクトリの作成・ユーザ権限をつける。
ユーザが書き込みできるのは、public_html配下になる。
public_htmlもchmodが必要であれば実施する。(chmod 755)
#cd /home/hogehoge #mkdir public_html chmod 755 /home/hogehoge # chown hogehoge:hogehoge public_html/ # ls -la 合計 24 drwx------ 3 root root 4096 11月 28 19:44 2014 . drwxr-xr-x. 6 root root 4096 11月 28 19:41 2014 .. -rw-r--r-- 1 hogehoge hogehoge 18 10月 16 22:56 2014 .bash_logout -rw-r--r-- 1 hogehoge hogehoge 176 10月 16 22:56 2014 .bash_profile -rw-r--r-- 1 hogehoge hogehoge 124 10月 16 22:56 2014 .bashrc drwxr-xr-x 2 hogehoge hogehoge 4096 11月 28 19:44 2014 public_html
その後sshd_configの設定でユーザのルートディレクトリを設定する。
# vi /etc/ssh/sshd_config 省略 ・・・ Port 22 Protocol 2 SyslogFacility AUTHPRIV PermitRootLogin no ← ルートユーザでのログイン禁止 PermitEmptyPasswords no ← 空パスでのログイン禁止 ChallengeResponseAuthentication no GSSAPIAuthentication yes GSSAPICleanupCredentials yes UsePAM yes X11Forwarding yes #Subsystem sftp /usr/libexec/openssh/sftp-server #↓sshdが内部で持っているinternal-sftpで、sftpを使用するという設定 #chrootの設定をするのであれば変更が必要である。 Subsystem sftp internal-sftp Match user hogehoge AllowTcpForwarding no X11Forwarding no ChrootDirectory /home/hogehoge ForceCommand internal-sftp
最後にsshdを再起動すれば反映される。
/etc/init.d/sshd restart
この設定を行えば、WinScpなどのFTP/SFTP/SCPクライアントソフトでのログイン時トップページがhogehogeになり
それ以上の上位階層に行くことができない。
これにより不用意に別のディレクトリを見られる心配が無くなる。
一般ユーザが一人のときは、上記でいいがユーザ数が多い場合は、下記のようにする方法もある。
(人数分書きいてもかまわないが・・・)
%uは、ユーザ名、ユーザ名のディレクトリ(同じ構造のディレクトリ)を使用しているならば下記のように設定できる。
Match user hogehoge,hogehoge2,hogehoge3 AllowTcpForwarding no X11Forwarding no ChrootDirectory /home/%u ForceCommand internal-sftp
また、一般ユーザをグループ登録してグループで指定する方法もある。
sftponlyというグループを作成
一般ユーザをそのグループに所属させる。
# groupadd sftponly # usermod -G sftponly hogehoge
このsftponlyグループに所属している一般ユーザは、/home/ユーザ名がルートディレクトリに設定される
Match group sftponly AllowTcpForwarding no X11Forwarding no ChrootDirectory /home/%u ForceCommand internal-sftp
上記の設定で一般ユーザ(ホームページ管理者)に気軽にサーバの提供ができるようになる。