特定のコマンドしか実行できないユーザーIDを作成するには
bashの機能を制限するにはで紹介した方法は、Linuxのことをあまり知らないユーザーには有効だが、実行できるコマンドが多いし、exitコマンドで制限モードを終了することもできる。そこで、特定のコマンドしか実行できない専用のユーザーIDを作成する方法を説明する。
基本的な考え方は、デフォルトのシェルを制限付きにして、一部のコマンドのみを実行可能な環境設定を行うのだ。まず、ユーザーIDを作成する。
# useradd foo ←fooという専用のユーザーIDを作成 # passwd foo ←fooのパスワードを設定
次に、デフォルトのシェルを制限付きにする。bashをrbashという名前で起動すると、制限付きのシェルになるので、rbashというbashのリンクを作成する。
# ln -s /bin/bash /bin/rbash
次に、rbashをデフォルトのシェルにするのだが、その前に/etc/shellsにrbashを登録しなければならない。テキストエディタで/etc/shellsを開いて、/bin/rbashを追加する。
(省略) /bin/csh /bin/ksh /bin/zsh /bin/rbash ←この行を追加
これが終わったら、ユーザーfooでログインして、chshコマンドを実行する。
$ chsh foo のシェルを変更します。 Password: ←パスワードを入力 新しいシェル [/bin/bash]: /bin/rbash ←「/bin/rbash」を入力 シェルを変更しました。
これでシェルがrbash(制限付きのbash)になる。次に、再びrootでログインしてfooのホームディレクトリにある.bash_profileのユーザーとグループをrootに変更する。また、root以外が変更できないようにアクセス権を設定する。
# cd /home/foo # chown root .bash_profile ←.bash_profileの所有者をrootに変更 # chgrp root .bash_profile ←.bash_profileのグループをrootに変更 # chmod 755 .bash_profile ←.bash_profileのアクセス権を変更 # ls -al .bash_profile -rwxr-xr-x 1 root root 238 Oct 15 01:31 .bash_profile
最後に、PATHを特定のディレクトリに変更して、そのディレクトリにfooが実行可能なプログラムのリンクを作成する。ここでは、fooのホームディレクトリにPATHを設定して、dfコマンドだけを実行できるようにしてみる。
テキストエディタで.bash_profileを開いて、最下行に以下の記述を追加する。
export PATH=/home/foo
そして、/home/fooにdfコマンドのリンクを作成する。
# ln -s /bin/df /home/foo/df
以上で設定は終了だ。この場合、fooでログインすると、bashの組み込みコマンド(rbashで実行できないものを除く)とdf以外のコマンドは実行できなくなる。ほかのコマンドを実行可能にするには、上記の例のように特定のディレクトリにリンクを作成すればいい。
login: foo Password: $ ls bash: ls: command not found ←エラーになる $ df ←dfコマンドを実行 ファイルシステム 1k-ブロック 使用中 空き 使用% マウント場所 /dev/hda2 7052496 4025168 2669080 61% /