このシナリオを想像してください。ユーザーが特定のタスクのみを実行し、特定のコマンドを実行できるようにする必要があります。ユーザーは環境変数/パスを変更しないでください。ホームディレクトリ以外の他のディレクトリにアクセスしたり、他のユーザーなどに切り替えたりすることはできません。ユーザーは、システム管理者によって割り当てられたいくつかのコマンドしか実行できません。それは可能ですか?はい!ここが制限付きシェルです 助けになります。制限付きシェルを使用すると、Linuxシステムへのユーザーのアクセスを簡単に制限できます。ユーザーを制限付きシェルモードにすると、ユーザーは制限付きのコマンドセットのみを実行できるようになります。この簡単なチュートリアルでは、Linuxでこれを行う方法について説明します。このガイドをCentOS7最小サーバーでテストしました。ただし、ほとんどのUnixライクなディストリビューションで動作します。
制限付きシェルとは何ですか?
まず、制限付きシェルとは何かを明確にしましょう。 Bash、Korn Shellなどのような個別のシェルではありません。「rbash」、「-restricted」、「-r」オプションを使用して既存のシェルを起動すると、制限付きシェルになります。たとえば、Bourneシェルは、コマンド bsh -r を使用して、制限付きシェルとして開始できます。 、およびコマンド ksh -rを使用したKornシェル 。
制限付きシェルは、ユーザーがほとんどのコマンドを実行したり、現在の作業ディレクトリを変更したりすることを制限します。制限付きシェルは、ユーザーに次の制限を課します。
- cdを実行することはできません 指図。だからどこにも行けません。現在の作業ディレクトリにとどまることができます。
- $ PATHの値を変更することはできません 、 $ SHELL 、 $ BASH_ENV または$ ENV 環境変数。
- /(スラッシュ)文字を含むプログラムを実行することはできません。たとえば、 / usr / bin / unameを実行することはできません または./uname 指図。ただし、unameコマンドは実行できます。つまり、現在のパスでのみコマンドを実行できます。
- 「 > 」を使用して出力をリダイレクトすることはできません ’、‘ > | ’、‘ <> 」、「 >& ’、‘ &> 」、および「 >> ’リダイレクト演算子。
- スクリプト内で制限されたシェルモードから抜け出すことはできません。
- ‘set + r’で制限付きシェルモードをオフにすることはできません または「set+orestricted」 。
これは、多数のユーザーが共有システムを使用している場合に非常に役立ちます。したがって、ユーザーが特定のコマンドのみを実行できるようにする場合は、制限付きシェル これを行う1つの方法です。
制限付きシェルを使用してLinuxシステムへのユーザーのアクセスを制限する
まず、 rbashというシンボリックリンクを作成します 以下に示すようにBashから。次のコマンドは、 rootとして実行する必要があります ユーザー。
# ln -s /bin/bash /bin/rbash
次に、 "ostechnix"というユーザーを作成します rbash デフォルトのログインシェルとして。
# useradd ostechnix -s /bin/rbash
新しいユーザーにパスワードを設定します。
# passwd ostechnix
ビンを作成します 新しいユーザーのホームフォルダ内のディレクトリ。
# mkdir /home/ostechnix/bin
次に、ユーザーが実行できるコマンドを指定する必要があります。
ここでは、ユーザーに "ls"のみを実行させるようにします。 、 "mkdir" 、および "ping" コマンド。任意のコマンドを割り当てることができます。
これを行うには、次のコマンドを実行します。
# ln -s /bin/ls /home/ostechnix/bin/ls
# ln -s /bin/mkdir /home/ostechnix/bin/mkdir
# ln -s /bin/ping /home/ostechnix/bin/ping
これで、前の手順で「bin」ディレクトリを作成した理由がわかりました。ユーザーは、上記の3つのコマンド以外のコマンドを実行できません。
次に、ユーザーが .bash_profileを変更できないようにします 。
# chown root. /home/ostechnix/.bash_profile
# chmod 755 /home/ostechnix/.bash_profile
/home/ostechnix/.bash_profileを編集します ファイル:
# vi /home/ostechnix/.bash_profile
PATH変数を変更します 以下のように。
[...] PATH=$HOME/bin [...]
ESCを押します キーとタイプ:wq ファイルを保存して閉じます。
これで、ユーザーがログインすると、制限付きシェル(rbash)がデフォルトのログインシェルとして実行され、 .bash_profileが読み取られます。 、PATHを $ HOME / binに設定します ユーザーがlsのみを実行できるようにします 、 mkdir およびping コマンド。制限されたシェルでは、ユーザーはパスを変更できません 、および .bash_profileの権限 ユーザーが次のログインセッション中に制限をバイパスするように環境を変更することはできません。
Rbashの確認
ここで、rootユーザーからログアウトし、新しく作成したユーザー(この場合はostechnix)で再度ログインします。
次に、いくつかのコマンドを実行して、機能するかどうかを確認します。たとえば、ターミナルをクリアしたい。
そうするために、私は走りました:
$ clear
出力例:
-rbash: clear: command not found
cdは使用できません 別のディレクトリに移動するコマンド。
$ cd /root
出力例:
-rbash: cd: restricted
>演算子を使用して出力をリダイレクトすることもできません。
$ cat > file.txt
出力例:
-rbash: file.txt: restricted: cannot redirect output
ユーザー「ostechnix」は、ユーザー(もちろんシステム管理者)によって割り当てられたコマンドのみを使用できます。この場合、ユーザーはls、mkdir、およびpingコマンドを実行できます。
$ ls
$ mkdir ostechnix
$ ping -c 3 google.com
これらの3つのコマンドを除いて、ユーザーは何も実行できません。 S/彼は完全にあなたの管理下にあります。
推奨される読み物:
- Linuxでユーザーアクティビティを監視する方法
ユーザーに新しいコマンドを許可する
ユーザーにさらにコマンドを割り当てる場合は、現在のユーザーからログアウトして、ルートに再度ログインします。 もう一度ユーザーを使用して、以下に示すようにコマンドを割り当てます。
たとえば、ユーザー(ostechnixなど)が rmを実行できるようにする場合 コマンドを実行するには、次のコマンドを rootとして実行します。 ユーザー。
# ln -s /bin/rm /home/ostechnix/bin/rm
これで、ユーザーは「rm」コマンドを使用できるようになります。
詳細については、以下のリンクのマニュアルページを参照してください。
- Rbashのマニュアルページ