LoginSignup
10
8

More than 5 years have passed since last update.

CentOS 6 に rssh を導入する

Last updated at Posted at 2015-11-26

rsshssh (1)を利用したアクセスのうち scp (1)や sftp (1)といった特定のコマンドのみの実行を許可したり chroot 環境を提供するログインシェルで、セキュアなファイル転送は提供したいがシェルアカウントへのログインを拒否したい場合などに非常に有効なログインシェルです。

scp (1)や sftp (1)のみの実行を許可する場合はアカウントのログインシェルを rssh に変更して設定ファイルで実行を許可するコマンドを指定するだけで設定は完了します。
しかし chroot 環境を提供する場合はそのための環境設定が必要なのでその手順です。

ここでは chroot するディレクトリを /path/to/chroot として記述しています。

rssh のインストール

CentOS 6 では yum (1)から導入可能です。

ターミナル
$ sudo yum -y install rssh
  :
  :
インストール:
  rssh.x86_64 0:2.3.4-1.el6

完了しました!

設定ファイルの編集

ssp (1)、 sftp (1)のアクセスを許可し chroot するディレクトリを指定します。

/etc/rssh.conf
# This is the default rssh config file

# set the log facility.  "LOG_USER" and "user" are equivalent.
logfacility = LOG_USER

# Leave these all commented out to make the default action for rssh to lock
# users out completely...

allowscp                                     # scpを許可
allowsftp                                    # sftpを許可
#allowcvs
#allowrdist
#allowrsync

# set the default umask
umask = 022

# If you want to chroot users, use this to set the directory where the root of
# the chroot jail will be located.
#
# if you DO NOT want to chroot users, LEAVE THIS COMMENTED OUT.
chrootpath = /path/to/chroot                 # chroot先ディレクトリ

# You can quote anywhere, but quotes not required unless the path contains a
# space... as in this example.
#chrootpath = "/usr/local/my chroot"

##########################################
# EXAMPLES of configuring per-user options
  : 
  : 
  :  

chroot 環境の初期設定

rssh に附属のスクリプトで chroot 環境の初期構築を行います。
いくつかエラーが表示されますがここでは気にしなくても大丈夫です。

ターミナル
$ sudo sh /usr/share/doc/rssh-2.3.4/mkchroot.sh /path/to/chroot
NOT changing owner of root jail. 
NOT changing perms of root jail. 
setting up /opt/chroot/usr/bin
setting up /opt/chroot/usr/libexec/openssh
setting up /opt/chroot/usr/libexec
Copying libraries for /usr/bin/scp.
    (0x00007fff541ff000)
cp: cannot stat `(0x00007fff541ff000)': そのようなファイルやディレクトリはありません
  :
  :
Copying libraries for /usr/libexec/openssh/sftp-server.
    (0x00007fff577f1000)
cp: cannot stat `(0x00007fff577f1000)': そのようなファイルやディレクトリはありません
  :
  :
Copying libraries for /usr/bin/rssh.
    (0x00007fff00bff000)
cp: cannot stat `(0x00007fff00bff000)': そのようなファイルやディレクトリはありません
    /lib64/libc.so.6
Copying libraries for /usr/libexec/rssh_chroot_helper.
    (0x00007fff3e152000)
cp: cannot stat `(0x00007fff3e152000)': そのようなファイルやディレクトリはありません
    /lib64/libc.so.6
copying name service resolution libraries...
tar: メンバ名から先頭の `/' を取り除きます
tar: /lib/libnss_files*: stat 不能: そのようなファイルやディレクトリはありません
tar: /lib/libnss1_files*: stat 不能: そのようなファイルやディレクトリはありません
tar: 前のエラーにより失敗ステータスで終了します
Setting up /etc in the chroot jail
cp: omitting directory `/etc/ld.so.conf.d'
Chroot jail configuration completed.

NOTE: if you are not using the passwd file for authentication,
you may need to copy some of the /lib/libnss_* files into the jail.

NOTE: you must MANUALLY edit your syslog rc script to start syslogd
with appropriate options to log to /opt/chroot/dev/log.  In most cases,
you will need to start syslog as:

   /sbin/syslogd -a /opt/chroot/dev/log

NOTE: we make no guarantee that ANY of this will work for you... if it
doesn't, you're on your own.  Sorry!

環境構築の続き

附属のスクリプトでメッセージに表示されている処理やエラーで完結できなかった処理などを実行して環境を構築します。

/dev/null の作成

まず chroot 環境に /dev/null を作成します。

ターミナル
$ ls -l /dev/null
crw-rw-rw-. 1 root root 1, 3  8月 26 10:58 2015 /dev/null
$ sudo mknod /path/to/chroot/dev/null c 1 3
$ sudo chmod 666 /path/to/chroot/dev/null
$ ls -l /path/to/chroot/dev/null
crw-rw-rw-. 1 root root 1, 3  8月 26 11:59 2015 /opt/chroot/dev/null

ライブラリのコピー

次にライブラリをコピーします。
附属のスクリプトのエラーメッセージから ldd (1)で参照されたライブラリのうちいくつかがコピーできていない事が確認できるので手動でコピーします。
chroot 環境にコピーされるのは以下のコマンドなので、それぞれのコマンドの ldd (1)の結果を参照して不足しているライブラリをコピーします。

  • /usr/bin/scp
  • /usr/libexec/openssh/sftp-server
  • /usr/bin/rssh
  • /usr/libexec/rssh_chroot_helper

ldd (1)の出力結果からコピーが必要なライブラリを決定しているのですが linux-vdso.so.1ld-linux-x86-64.so.2 は表示形式が通常と異なっているためにコピーできていない様です。

ターミナル
$ ldd /usr/bin/scp
        linux-vdso.so.1 =>  (0x00007ffef53f0000)
        libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007fbd8e06a000)
        libutil.so.1 => /lib64/libutil.so.1 (0x00007fbd8de67000)
        libz.so.1 => /lib64/libz.so.1 (0x00007fbd8dc50000)
        libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fbd8da37000)
        libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fbd8d800000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fbd8d5e5000)
        libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007fbd8d3a1000)
        libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007fbd8d0ba000)
        libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007fbd8ce8d000)
        libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007fbd8cc89000)
        libnss3.so => /usr/lib64/libnss3.so (0x00007fbd8c94a000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fbd8c5b5000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fbd8c3b1000)
        libfreebl3.so => /lib64/libfreebl3.so (0x00007fbd8c1ae000)
        libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007fbd8bfa2000)
        libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007fbd8bd9f000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fbd8bb82000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fbd8e662000)
        libnssutil3.so => /usr/lib64/libnssutil3.so (0x00007fbd8b955000)
        libplc4.so => /lib64/libplc4.so (0x00007fbd8b750000)
        libplds4.so => /lib64/libplds4.so (0x00007fbd8b54c000)
        libnspr4.so => /lib64/libnspr4.so (0x00007fbd8b30d000)
        libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fbd8b0ee000)
        librt.so.1 => /lib64/librt.so.1 (0x00007fbd8aee5000)
$ ldd /usr/libexec/openssh/sftp-server
   :
   :
$ ldd /usr/bin/rssh
   :
   :
$ ldd /usr/libexec/rssh_chroot_helper
   :
   :

linux-vdso.so.1 は各プログラムのアドレス空間のみに常駐する Virtual Dynamic Shared Object なので実体は存在しなくて問題ありません。
それ以外に不足しているライブラリ(今回は ld-linux-x86-64.so.2 )を chroot 環境にコピーします。

ターミナル
$ sudo cp /lib64/ld-linux-x86-64.so.2 /path/to/chroot/lib64

認証関係のファイルコピー

附属のスクリプトでメッセージに表示されてる様に認証処理で必要な libnss_* をコピーします。

ターミナル
$ sudo cp -p /lib64/libnss_files.so.2 /path/to/chroot/lib64

これで chroot された環境に scp (1)、 sftp (1) での アクセスが可能となります。

動作確認

ログインシェルの変更

chroot するユーザのログインシェルを rssh (1)に変更します。

ターミナル
$ sudo chsh -s /usr/bin/rssh ユーザーID

sftp でアクセス確認

sftp (1)でアクセスして確認します。

ターミナル
sftp ユーザID@localhost
Connecting to localhost...
ユーザID@localhost's password:
sftp> pwd
Remote working directory: /
sftp> exit
10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8