サーバーを構築するときに
セキュリティを意識しろ。とよく言われますが
具体的に何すればいいのか。
rootを廃止、sshポートの変更、アクセスできるユーザーの制限などなど
挙げればキリがないです。
たとえsshを突破されたとしても実行できるコマンドが制限されてたらまだセーフだよね!
例えばlsだけとか(笑)
今回は、sshした際にユーザーが実行できるコマンドを制限する方法を書き溜めます。
概要
使用コマンドを制限する際に、よく使われる方法は2種類あります。
- rbashを使う
- AuthorizedKeysFileを使う
rbashを使う
最初にぱっと思いつくのはrbashのほうかな?
結構細かい粒度で使用コマンドを設定できるので
ログインした後に複数操作をするユーザーはrbashのほうがいいね。
サーバー監視とかする人は、ssh後いろいろ操作することがあるけど
ルート権限いらない場合あるよね。
そういう人にはrbashで実行できるコマンドを
ls, cd, cat, grep, top, vmstatとかに制限するとか。
ビルトインコマンドが使える等、閉じるべきところを注意してね。
これはまた時間が空いたときに書き溜めます。
rbashを設定する
rbashの設定は
- 初期設定
- ユーザー追加設定
の2段階に別れます。
まず初期設定です。
これはサーバー構築の際には、最初の一回だけ行います。
やることはrbashのシンボリックリンクを設定するだけ。
よく/opt/binが基本かな?
1 2 |
mkdir /opt/bin ln -s /bin/bash /opt/bin/rbash |
これだけ。
この/opt/bin下にユーザーのホームを作っていきます。
次にユーザー追加設定をします。
これは各ユーザーごとに設定する感じです。
- ログインシェルを指定してユーザー作製
- 許可するコマンドを設定する
- .bash_profileを書き換えてPATHを切り替える
1 |
useradd rbash_user -s /opt/bin/rbash |
1 2 3 4 |
mkdir /opt/bin/rbash_user/ ln -s $(which ls | grep bin) /opt/bin/rbash_user/ ln -s $(which pwd | grep bin) /opt/bin/rbash_user/ ln -s $(which cat | grep bin) /opt/bin/rbash_user/ |
1 2 3 |
chown root:root /home/rbash_user/.bash_profile chmod 755 /home/rbash_user/.bash_profile sed -i '/^PATH=/cPATH=/opt/bin/rbash_user/' /home/rbash_user/.bash_profile |
以上です。
簡単だね〜。
新規ユーザーを作るたびに同じことをやるだけです。
AuthorizedKeysFileを使う
rbash以外にもコマンドを制限する方法はあります。
それはAuthorizedKeysFileを使う方法です。
前回は、AuthorizedKeysFileにIPアドレスを記述することで
アクセス元のIP制限をする方法を書き溜めました。
AuthorizedKeysFileはすごく便利でできることはまだあります。
ssh時にコマンドを制限する場合、AuthorizedKeysFileを修正します。
AuthorizedKeysFileとは、公開鍵認証でsshログインする際に使用するファイルです。
実体は公開鍵のリストファイルです。
公開鍵とその鍵を使用した際の挙動を設定するファイルです。
デフォルトでは~/.ssh/authorized_keys を使用します。
パスが「~/」なので各ユーザーごとに設定するものです。
例えば下記のように公開鍵を記述することで、
対応する秘密鍵でsshログインできるようになります。
1 |
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC5v5xtFa94H6Hd6jbXiC5Q/UipJm7G/BSd0TosCFurOy1v20osBZ/xKpW3vbtuTkRZeOl9ZzQORLk0aLGl23F9gdr3D9sWZ0m0vvAln1OSKTOr6a8aGTSRzSL10fyncwTN1uYTXl9oTlhaH8B7NopChbi19LXjMuzetIwsrnP9UWg3xj31UbBWpxBx2v9ny7bdpaSpJhI5w2M7PlagyDN8uZt5wPczb3C2mx6A6WnF+fM70WvXyVaKyqo4dWAuOLXCkoLoM8BXGcqe879elV9SkIdnsCJw+ya8oLnjXEDW1Xw9Xgd7XUlUBvG9BGbHyF/Ssp+xGihIP11R+9k5s+Ul noffuy@MacBook-Air.local |
このAuthorizedKeyFileを修正して実行コマンドに制限をかけてみましょう。
commandを記述
command=を記述することで公開鍵を使用した認証時に
使用するコマンドを制限できます。
Specifies that the command is executed whenever this key is used for authentication.
~/.ssh/authorized_keysで公開鍵の先頭にcommandを記述します。
lsコマンドのみ許可する場合、command="ls ~/"と書きます。
1 |
command="ls ~/" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC5v5xtFa94H6Hd6jbXiC5Q/UipJm7G/BSd0TosCFurOy1v20osBZ/xKpW3vbtuTkRZeOl9ZzQORLk0aLGl23F9gdr3D9sWZ0m0vvAln1OSKTOr6a8aGTSRzSL10fyncwTN1uYTXl9oTlhaH8B7NopChbi19LXjMuzetIwsrnP9UWg3xj31UbBWpxBx2v9ny7bdpaSpJhI5w2M7PlagyDN8uZt5wPczb3C2mx6A6WnF+fM70WvXyVaKyqo4dWAuOLXCkoLoM8BXGcqe879elV9SkIdnsCJw+ya8oLnjXEDW1Xw9Xgd7XUlUBvG9BGbHyF/Ssp+xGihIP11R+9k5s+Ul noffuy@MacBook-Air.local |
これだけ。簡単!
もっとしっかり知りたいよ。って人はここを見てね。
linux サーバーって面白いよね。
じゃあね〜〜〜〜。