sshでのrootログインを禁止しssh経由でのroot権限では指定のコマンドだけを実行できるようにする方法 †本資料では、sshでrootによるログイン禁止環境で指定のコマンドだけをroot権限で実行できるようにする方法を記述した資料です。 関連記事 †
sshのセキュアな運用 †sshはもっとも一般的なリモートシェルプログラムです。 たとえば、セキュリティの観点において、ネットワーク上のマシンにrootで直接ログインすること しかし、実際の運用においてはrootによる直接ログインは多用されていると思います。 rootによる直接ログインは禁止したいが、 限定した形でssh経由でのroot権限の利用を可能とするために、sshの機能である sshの自動コマンド実行機能 †sshの機能として公開鍵に実行したいコマンドを指定することができます。 この機能の利用手順は以下の通りです。 新しい公開鍵の作成 †自動コマンド実行機能を利用したいマシン上の任意のユーザで、新しい公開鍵を作成します。 新しい公開鍵ファイル(ファイル名: ~/.ssh/command_only)を-fオプションで指定して、 % ssh-keygen -f ~/.ssh/command_only Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user01/.ssh/command_only. Your public key has been saved in /home/user01/.ssh/command_only.pub. The key fingerprint is: 88:52:12:eb:cb:b4:f0:58:6a:de:15:5f:69:c7:a9:81 user01@ubuntu The key's randomart image is: +--[ RSA 2048]----+ | . | | o | | o . | | . o . .. o . | |. = ...ES= + | | O + o o + | |o.= . . . | |o . . | | . . | +-----------------+ % コマンド設定を公開鍵に追加する †作成された公開鍵ファイル~/.ssh/command_only.pubをエディタで開き、 command="実行したいコマンド名" 例えば、lsコマンドを指定して設定すると、公開鍵ファイルの内容は以下のようになります。 command="ls -l" ssh-rsa AAAAB3NzaC1yc...... コマンドにはオプション引数も指定できますし、シェルスクリプトも登録できるので、 公開鍵をコマンドを実行したい対象マシン・ユーザの~/.ssh/authorized_keysに登録する †command句を追加した自動コマンド実行専用の公開鍵データを、 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAsXTxFq88NS6a+1s2IdOY0YjT/t7DXUkPByUz1rDK41jPlVdZQuxYnRkc14/i39qGnLZTsKKpTi8UeSStYoYplllTvckf4lX8OvLFIeboW98ZbuJ8q64sw8LNwRcgFvWpxleOJ19sCRPrJ/T4xQIXyvE8yyvyIct/ID/2ZwXUmlSK74A2k+TcbPds2Mcoc9W8Q2sjuVVR2do9Oru8EEd+AqM+vCPg/SlxGYggRZZQgE6+txMm6zMM8zkBZc68RpHJeUIto3YMELczQuRLks/puyvmvPEGmcqP+9OozWEKe8hEBUQuC4eawV1LqNEXBKJ75uclszNYR5YRY6Vt1R+EAQ== user01@ubuntu command="ls -l" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDPAruvXDwCspfrftVsf4lO9B0mJVPcB7zuGAFikn6TdF2kW7MU+CEE3fAFZARCYA6e2Be17pwtB2WKFEPVXcx5ng74xJvEWbyo6viblroMVwoEVNXpUEG81dQM73RjXhqyE/fUaw+s2n3gTBtBK2UZyFdg0F3efVilqCiRjxz4Sf4VS8SaDqhvETWKpJ2oSolBp8kUE4DgVJ4KOfCOJHLldrJCDs89mQsuTuOzrYgeDO2Trk/tegnzUYlXsngFAG7E+/DGPT3M2vEp8n9LlCVddXMEv0zavvdlNeDOLD5c+bW+N9qBIPYiLwUm8LmJF1cum47SMCO2dvB8yPdWs/jR user01@ubuntu 今回は、対象マシン server のrootユーザの/root/.ssh/authorized_keysに登録しました。 (一行目は通常のログインや遠隔コマンド実行で使っていた公開鍵です。 作成した鍵を使って対象マシンに接続する †作成した鍵をsshの-iオプションで指定して、対象に接続します。 % ssh -i ~/.ssh/command_only root@server -rwxr-xr-x 1 root root 24 8月 15 17:59 test.sh -rw-r--r-- 1 root root 0 8月 15 17:57 test.txt Connection to server closed. % 指定したコマンドls -lが実行され、対象マシンの/rootにあったファイルが表示され、その後すぐに接続が切られました。 なお、この自動コマンド実行機能は、rootに限らずどんなユーザであっても利用可能です。 rootでのログインを不可とし、コマンド実行だけを可能とする †これまでの手順で自動コマンド実行専用の公開鍵の作成と登録ができました。 次の手順で、rootでのログインを禁止し、自動コマンド実行機能による接続のみを可能とします。 sshdの設定変更 †対象マシンのroot権限で、sshdの設定ファイル/etc/ssh/sshd_confgをエディタで編集し、 変更前 # Authentication: LoginGraceTime 120 PermitRootLogin yes StrictModes yes 変更後 # Authentication: LoginGraceTime 120 PermitRootLogin forced-commands-only StrictModes yes 設定を変更後、sshdを再起動します。 root@server:~# service ssh restart ssh stop/waiting ssh start/running, process 31269 root@server:~# 通常ログインの禁止 †再起動後は、先程の自動コマンド実行接続はできますが、通常のログインはできなくなっています。 % ssh -i ~/.ssh/command_only root@server 合計 4 -rwxr-xr-x 1 root root 24 8月 15 17:59 test.sh -rw-r--r-- 1 root root 0 8月 15 17:57 test.txt Connection to server closed. ubuntu[1]% 通常のログインを試みると、パスワードの入力を求められますが、何を入力しても無効になります。 % ssh root@server root@server's password: Permission denied, please try again. root@server's password: Permission denied, please try again. root@server's password: Permission denied (publickey,password). 以上、sshでのrootログインを禁止し、ssh経由でのroot権限では指定のコマンドだけを実行できるようにする方法についてでした。 |