
私はルート ユーザーですが、ユーザーが ssh 以外のすべての Linux コマンドを実行できないようにしたいです。ユーザーは自分のユーザーで ssh コマンドのみを使用する必要があります。どうすればいいでしょうか? どなたか助けてください。
答え1
これを実現するには、いくつかの異なるアプローチがあります。いくつかのオプションを以下に示します。
bash シェルに組み込まれている制限モードを使用する: bash -r または rbash を実行すると、ユーザーのシェルを制限モードで起動できます。これにより、ユーザーは、ディレクトリの変更、環境変数の設定、/bin/sh を使用したコマンドの実行など、ほとんどのコマンドを実行できなくなります。ただし、ユーザーは、cd、echo、exit など、bash シェルに組み込まれているコマンドを引き続き実行できます。
bash シェルの alias コマンドを使用する: alias コマンドを使用して、ユーザーが実行できるカスタム コマンドを定義できます。たとえば、次のように ssh のエイリアスを作成できます。
alias ssh='/usr/bin/ssh'
これにより、ユーザーは ssh コマンドを実行できるようになりますが、他のコマンドを実行することはできません。
bash シェルの組み込みコマンドを使用する: 組み込みコマンドを使用すると、関数または組み込みコマンドとして実行するのではなく、コマンド ラインから実行されているかのようにコマンドを実行できます。これを使用すると、ユーザーが特定のコマンドを実行できるようにしながら、他のコマンドの実行を禁止できます。例:
command ssh
これにより、ユーザーは ssh コマンドを実行できるようになりますが、他のコマンドを実行することはできません。
bash シェルの enable 組み込み関数を使用する: enable 組み込み関数を使用すると、特定のシェル組み込み関数またはコマンドを有効または無効にできます。これを使用すると、ユーザーが特定のコマンドを実行できるようにしながら、他のコマンドの実行を禁止することができます。例:
enable -n ssh
これにより、ssh コマンドが無効になり、ユーザーはそれを実行できなくなります。
bash シェルの export コマンドを使用します。export コマンドを使用して、ユーザーが変更できない環境変数を設定できます。例:
export PATH=/usr/bin:/usr/sbin
これにより、ユーザーの PATH 環境変数が /usr/bin および /usr/sbin ディレクトリのみを含むように設定され、それらのディレクトリにあるコマンドのみを実行できるようになります。
カスタム シェルを使用する: ユーザーが特定のコマンドのみを実行できるようにするカスタム シェルを作成できます。たとえば、次のような ssh-only というシェル スクリプトを作成できます。
#!/bin/bash
# Check if the first argument is "ssh"
if [ "$1" == "ssh" ]; then
# If it is, run the ssh command
/usr/bin/ssh "$@"
else
# If it's not, print an error message
echo "Command not allowed"
fi
次に、chsh コマンドを使用して、ユーザーのシェルを /path/to/ssh-only に設定します。これにより、ユーザーは ssh コマンドを実行できるようになりますが、他のコマンドは実行できなくなります。