ホーム > Linux > CentOS 6.5 の OpenSSH でのsftp専用ユーザ(chroot)の設定

CentOS 6.5 の OpenSSH でのsftp専用ユーザ(chroot)の設定

2014 年 11 月 28 日

サーバ運用をする上で自分だけで使用している分には、問題は無いと思いますが、他人にサーバの一部を貸す場合にサーバの不必要なところを見られてしまうのは、精神衛生上よくないし、もし悪意がなくても間違った操作で問題が起こらないとも限らない。

一般ユーザにホームページ等でログインさせる場合にユーザ作成時のホームディレクトリがそのままルートディレクトリになるように設定を行う。

 

まず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

上記の設定で一般ユーザ(ホームページ管理者)に気軽にサーバの提供ができるようになる。

カテゴリー: Linux タグ:
コメントは受け付けていません。