CentOS7でユーザのコマンドに制限をかける

以前特定のコマンドしか実行できないユーザを作る必要があった時にrbashを使用したのが便利だったので、その時のメモになります。確認した環境はCentOS 7.2になります。

1. rbashを使えるようにする
# ln -s /bin/bash /bin/rbash
# vi /etc/shells

/bin/rbash ←この行を追加

2. 実行シェルの変更
# su 制限するユーザ
$ cssh
新しいシェル [/bin/bash]: /bin/rbash ←「/bin/rbash」を入力

3. bash_profileの所有者変更および
rootにユーザーを切り替えてtenda_keieiのbash_profileの所有者と所有グループを変更
# chown root:root ./bash_profile
# chmod 755 .bash_profile

4. 実行可能コマンドの設定
# mkdir /home/制限するユーザ/command
# ln -s /usr/bin/java /home/制限するユーザ/java
# ln -s /usr/bin/date /home/制限するユーザ/date
# ln -s /usr/bin/mv /home/制限するユーザ/mv

 
5. 実行可能コマンドをpathに追加
# vi /home/tenda_keiei/.bash_profile

# settings for rbahs
# PATH=$PATH:$HOME/.local/bin:$HOME/bin
PATH=/home/制限するユーザ
export PATH=$PATH:/home/制限するユーザ/command

export PATH

javaで作ったバッチを実行するときとか
・実行するスクリプトの置き場所もpathに追加しておく
javaコマンドでクラスパスを指定する場合、bash_profileないで事前にクラスパス用の環境変数を用意しておき、それを使うようにする(rbashでは/を含んだコマンドを実行できない!)

◯その他
コマンド制限かけたユーザでバッチを実行する場合は以下の点に注意が必要になります。
・cronはrbashを有効にする前であれば設定できる。
・cronの場合にbash_profileで設定した環境変数が使えなかったら、rootユーザとかでにcronを設定しておきsourceで読み込ませる。(制限ユーザに対してsourceコマンドを有効にすることでも対応可能かは未確認です。)
0 3 * * * source /home/ruser/.bash_profile; ◯◯◯.sh