カテゴリー
インフラ
投稿日時
2017-11-30 19:34:58
プログラマーたるもの、サーバーなどのインフラにも強くなくてはいけない、ということで今回は以前自分が行った作業について簡単に紹介してみようと思います。
背景としては、サーバー上でreboot(再起動)のみを行うことが出来るユーザーを作る必要があるということで、そのときに行った**特定のコマンドのみを実行できるユーザーの作成方法**についてこれから紹介してみます。
その前に、いくつか注意点を。
・基本的に、サーバーのOSはCentOSを前提にしています。今回のケースだとUbuntuとかでもそんなに変わらないはずですが、CentOS以外でうまくいかない場合は使用しているOSに対応するコマンドを調べてみてください。
・今回使用するコマンド(っていうか、実行する場所の権限設定との関連で)だとsudoをつけないと弾かれるものが結構あるので、その時はsudoをつけて実行してください。
# 1 rbashをbashのシンボリックリンクにしたものを作成
rbashとは、特定のコマンドの実行しか実行できないシェル(Restricted shell)で、基本的にコマンドの実行を制限するときは、これを使わせるようにします。
```
mkdir /opt/bin
ln -s /bin/bash /opt/bin/rbash
```
# 2 rbash用のユーザーを作成
今回は、対象のユーザー名を、r_userとしてみます。
```
useradd r_user -s /opt/bin/rbash
passwd r_user
```
useraddの-sオプションで、使用するログインシェルを指定しています。
その後で、passwdコマンドを打つとr_userのパスワードが設定できるので、そこでパスワードを設定します。
# 3 r_userが利用可能なコマンドのシンボリックリンクを格納したディレクトリを作成
今回は、ls, ps, rebootのみを実行できるようにしてみます。
```
mkdir /opt/bin/r_user
ln -s $(which ls | grep bin) /opt/bin/r_user
ln -s $(which ps | grep bin) /opt/bin/r_user
ln -s $(which reboot | grep bin) /opt/bin/r_user
```
# 4 .bash_profileの設定
r_user用の.bash_profileを書き換えて、r_userのPATHを/opt/bin/r_userに設定します。
```
chown root:root /home/r_user/.bash_profile
chmod 755 /home/r_user/.bash_profile
sed -i '/^PATH=/cPATH=/opt/bin/r_user/' /home/r_user/.bash_profile
```
最後のsedコマンドでは/home/r_user/.bash_profileの中身を正規表現を使って書き換えています。
ここまでで、lsとpsとrebootのみが実行できるユーザーr_userが作られたことになります。
なので、試しにr_userでログインして、lsやpsが実行できて、今回設定していないmkdirとかが実行できないことを試してみるといいでしょう。
ただ、これだとlsとpsはいいのですが、rebootはsudoじゃないと実行できないので、該当ユーザーがrebootをパスワードなしに実行できるようにする必要があります。
# 5 rebootをパスワードなしで実行できるようにする
```
sudo visudo
```
sudoコマンドに関する設定は/etc/sudoersに書かれているのですが、通常sudoの設定を変更する場合はvisudoというコマンドを使います。
これでエディタが開かれるので、最後の行に
```
r_user ALL=(ALL) NOPASSWD: /usr/bin/reboot
```
これでr_userはrebootコマンドをパスワード無しで実行できるようになります。
今回の作業内容としては以上になります。サーバー設定などのインフラ作業は奥が深いので覚えることが多いですが、何とかマスターしてインフラに関することを安心して行えるようになりたいものです。
Linuxコマンド一覧は[このあたり](http://itpro.nikkeibp.co.jp/article/COLUMN/20060224/230577/)や[このあたり](http://www.atmarkit.co.jp/ait/series/3065/)が詳しいので、今回のコマンドでよくわからないコマンドがあったら調べてみてください。
先日の社内での勉強会のテーマがちょうどApacheに関するものだったので、そのあたりもどこかで記事にしようと思います。