Linux/Unix上のユーザーに対して、機能の制限を儲けたい場合があるかと思います。
たとえば、ログイン専用ユーザーを作りたいとか。そしてそれ以外のユーザーからはログインを許可しないとか。
そんなユーザーを作ってみたいと思います。
前提として、シェルはbashを利用します。
1. rbashを作成
rbashというのは、元々存在しないシェルです。
ですが、bashシェルをrbashという名前で起動すると、制限がかかるようになります。
そこで、rbashというシェル名でbashからシンボリックリンクを作成します。
# ln -s /bin/bash /bin/rbash
次に、rbashをログインシェルとして利用できるように、/etc/shellsにrbashを登録しておきます。
適当なエディタで、/etc/shellsを開き
/bin/rbash
を追記します。
2. 専用ユーザーを作成
制限をかけたいユーザーを作成します。
作成する際に、そのユーザーのシェルを1.で作成したrbashを指定します。
# useradd -m -d /home/hoge -s /bin/rbash hoge
3. ユーザー環境ファイルの設定
ユーザーは、ログインした際(又はユーザー変更した際)にデフォルトで読み込まれる環境ファイルがあります。
例えばbashの場合は、
1. .bash_profile
2. .bashrc
3. /etc/bashrc
などがそれにあたります。
ユーザーがログイン(又はユーザー変更)されると、上記の順番で環境ファイルが読み込まれていきます。
制限付きユーザーを作る場合、そのユーザーのホームディレクトリにある、「.bash_profile」の所有者と権限変更をする必要があります。
理由は、その制限ユーザー自身で「.bash_profile」ファイルを編集させないようにしておく為です。
所有者変更
# chown root:root /home/hoge/.bash_profile
権限変更
# chmod 755 /home/hoge/.bash_profile
次に、「.bash_profile」ファイルを編集して、環境変数「PATH」を下記のように設定します。
PATH=/home/hoge export PATH
これで、制限ユーザー(hoge)のPATHは、「/home/hoge」しか通らなくなっています。
ですので、あらゆるコマンドが実行できない状態になります。
この状態で、制限ユーザー(hoge)に変更してみて、何かコマンドを実行しても下記のようにエラーが表示されます。
$ ls -rbash: ls: command not found
この状態では、hogeユーザーは何も出来ません。
実行できるコマンドは、一部のシェル組みコマンドのみです。
シェル組み込みコマンドも多くの場合は、rbashにより制限を受けています。
4. 実行させたいコマンドを登録する
ここまでの状態では、その制限ユーザーは何もできない為、実行させたいコマンドを登録します。
これは、そのユーザーに何を許すかという事になります。
一番初めに書いた、ログイン専用ユーザーを作るという点は、実はここまでの話とは別の制限が必要になります。
それは、SSHで該当のユーザーのみをログインできるようにしておくなどの設定になります。
(SSHで、特定ユーザーのみログインさせる方法は「SSHのログインを制限する 」を参照してみてください。)
で、そのユーザーでログインできたものの、そのユーザーはログイン専用ユーザーという位置づけであれば、そのユーザーのまま何かをされたら不都合があったりします。
そこでここでは、ここまでに設定した制限ユーザーにユーザー変更コマンド(suコマンド)だけを許可したいと思います。
方法は、3.でパスを通した「/home/hoge」以下にsuコマンドのシンボリックリンクを作成する事です。
# ln -s /bin/su /home/hoge/su
これでhogeユーザーは、suコマンドが利用できるようになります。
他にも、実行させたいコマンドがある場合は、hogeユーザーのパスが通っている「home/hoge」ディレクトリ以下に、上記同様にシンボリックリンクを作成するとそのコマンドが実行可能になるわけです。