CentOSで新規ユーザーに特定のコマンドのみ許可する方法

サーバーを管理する上で、メンバーにSSHログインは許可したいけど、ルートディレクトリは見てほしくないときってありますよね。

勝手にサーバーの設定を見られたくないときや、プログラムのコードを見られたくないときなど、管理ユーザー以外はcdコマンドを利用できないようにしたい。

そんなときは権限をめちゃくちゃ限定したユーザーを作るのがいいです。
特定のコマンドのみ実行可能にしておけば、余計な心配もせずに済みます。

ここでは、fooというユーザー名で/home/fooというディレクトリのみを参照可能なユーザーの作り方を紹介します。

新規ユーザーを作る

useradd -d /home/foo -m foo

rootでログインし、新規ユーザーを作成します。
新規ユーザーを作成するとき、-d で指定したディレクトリを新規ユーザー「foo」のホームディレクトリに指定します。

passwd foo

このコマンドを実行すると、新規ユーザーのパスワードを設定できます。

ln -s /bin/bash /bin/rbash

特定のコマンドのみを実行できるシェルを作成します。

su - foo
chsh
/bin/rbash

ユーザーをfooに切り替えて、特定のコマンドのみを実行できるシェルを設定します。

.bash_profileの権限を変更

cd /home/foo
chown root .bash_profile
chgrp root .bash_profile
chmod 755 .bash_profile

SSHでログインしたときに.bash_profileというファイルを読み込み、その設定を反映するため、このファイルにrootユーザー以外はアクセスできないように設定します。

vi /home/foo/.bash_profile

viで.bash_profileを開き、以下のように追記します。

PATH=/app/static/img
export PATH

実行できるコマンドを設定する

ln /bin/ls /home/foo/ls

実行可能なコマンドを設定するには、対象ユーザーのホームディレクトリにシンボリックリンクを作成します。
上の例では、ユーザーfooはlsコマンドのみ使用可能になります。

以上で設定は完了です。
あとはユーザーfooに切り替えてテストしてみてください。