制限付きシェルを使用してLinuxユーザーが実行できることを制限する方法

公開: 2022-01-29
Linuxシステムのターミナルウィンドウ。
Fatmawati Achmad Zaenuri / Shutterstock

制限されたシェルは、Linuxでユーザーアカウントが実行できることを制限します。 制限されたユーザーは自分のディレクトリを変更できず、アクセスできるコマンドを制御できます。 Linuxで制限付きシェルを設定する方法は次のとおりです。

制限されたシェル

制限付きシェルは別のシェルではありません。 これは、標準シェルの別のモードです。 Bash、Korn、Fish、およびその他のシェルはすべて、制限付きシェルモードで開始できます。 この記事ではBashを使用しますが、他のシェルにも同じ原則が適用されます。

制限付きシェルは、標準シェルを使用するもう1つの方法であるため、セットアップが簡単です。 インストールするものはなく、Linuxがどこにあっても利用できます。

制限付きシェルはスクリプトにも適用できます。 これにより、誤って書き込まれた場合に発生する可能性のある損害は、制限された世界の範囲に限定され、コンピューター全体にアクセスできなくなります。

ただし、制限されたシェルは完全に脱出防止ではないことに注意してください。 十分な知識を持っている人は、制限されたシェルから逃れることができます。 これらは、カジュアルなユーザーに安全な境界を設定するのに最適ですが、実稼働システムの実際のセキュリティを制限されたシェルに依存しないでください。

関連: Bash、Zsh、およびその他のLinuxシェルの違いは何ですか?

制限付きbash

制限付きシェルとしてBashを実行すると、ユーザーはそれらからいくつかの機能を削除できます。 具体的には、ユーザーは次のことはできません

  • cdを使用して作業ディレクトリを変更します。
  • $PATH$SHELL$BASH_ENV 、または$ENV環境変数の値を変更します(ただし、現在の値を読み取ることはできます)。
  • $SHELLOPTSシェル環境オプションを読み取るか変更します。
  • コマンドの出力をリダイレクトします。
  • それらを見つけるためにパスを必要とするコマンドを呼び出します。 つまり、スラッシュ「 / 」が1つ以上含まれているコマンドを発行することはできません。
  • execを呼び出して、シェルの代わりに別のプロセスを使用します。
  • スクリプトで制限されている機能のいずれかを使用します。
広告

-r (制限付き)オプションを使用して、制限付きBashシェルを呼び出すことができます。 作業ディレクトリの変更などの単純なタスクを実行することは禁止されています。 簡潔なメッセージは、 cdが制限されていることを示しています。

 bash -r
 cdドキュメント

Bashシェルは、「bash」の代わりに「rbash」を使用して呼び出されたことを検出することもできます。 これにより、制限付きシェルとしても起動します。 これは、特定のユーザーのデフォルトシェルを設定する便利な方法を提供します。これはすぐに使用します。

Ubuntuでwhereisコマンドを使用してrbashファイルを検索すると、実行可能ファイルが「usr / bin」ディレクトリにあることがわかります。 マニュアルページは「/ usr / share / man / man1」ディレクトリにあります。

lsコマンドを-l (long)オプションとともに使用すると、 rbashが実際にはbashへのシンボリックリンクであることがわかります。

 whereis rbash
 ls -l / usr / bin / rbash 

ManjaroとFedoraでは、 rbashシンボリックリンクを作成する必要がありました。 これは両方のディストリビューションで機能します。

 whereis rbash
 sudo ln -s / bin / bash / bin / rbash
 whereis rbash 

広告

2回目にwhereisコマンドを使用すると、「/ usr / bin」ディレクトリでrbashが検出されます。

ユーザーの制限

「ミニー」という名前の新しいユーザーアカウントを作成しましょう。 useraddコマンドの-s (シェル)オプションを使用して、シェルを制限付きシェルに設定します。 また、 passwdコマンドを使用してアカウントのパスワードを設定し、それらのホームフォルダーを作成します。

mkdirコマンドの-p (parents)フラグは、ターゲットディレクトリと作成する必要のあるすべての親ディレクトリも作成するようにmkdirに指示します。 したがって、「/ home / minnie / bin」ディレクトリを作成することにより、「/ home / minnie」ディレクトリも同時に作成します。

 sudo useradd minnie -s / bin / rbash
 sudo passwd minnie
 sudo mkdir -p / home / minnie / bin 

minnieがログインすると、制限されたシェルで実行されます。

 CD 

彼女はスラッシュ「 / 」を含める必要のあるコマンドを呼び出すことはできません。

 / usr / bin / ping 

ただし、パスにあるコマンドは引き続き実行できます。

 ping 

広告

それはあなたが期待していたかもしれない振る舞いではありません、そしてそれは確かに私たちが望んでいるものではありません。 制限をさらに厳しくするには、ミニーのシェルがコマンドを探すために使用するパスを変更する必要があります。

制限を厳しくする

minnieのホームディレクトリ「/ home / minnie」を作成したときに、「/ home / minnie / bin」ディレクトリも作成しました。 ここで、そのディレクトリが役立ちます。

minnieの「.bash_profile」ファイルを編集し、そのディレクトリのみを指すように彼女のパスを設定します。 また、minnieの「.bash_profile」ファイルを制限して、rootのみが編集できるようにします。 つまり、他のユーザーはそのファイルを編集してパスを変更することはできません。

 sudo gedit /home/minnie/.bash_profile 

既存の「PATH =」を編集するか、次の行を追加します。

 PATH = $ HOME / bin 

ファイルを保存します。 chownコマンドを使用してファイルの所有者をrootに変更し、 chmodコマンドを使用してファイルのアクセス許可を変更します。 rootユーザーのみがファイルを編集できます。

 sudo chown root:root /home/minnie/.bash_profile
 sudo chmod 755 /home/minnie/.bash_profile
 ls -l /home/minnie/.bash_profile 

次回ユーザーminnieがログインするとき、彼女のパスは単一のフォルダーを指します。

広告

制限付きユーザーのミニーは、 echoaliaslogoutなどのBash組み込みコマンドのみを使用できます。 彼女はlsを使うことさえできません!

 ls 

彼らに何か役に立つことをさせたいのなら、私たちは絞首刑を少し緩める必要があります。 minnieの「bin」ディレクトリからminnieが使用できるようにするコマンドへのシンボリックリンクをいくつか作成します。

 sudo ln -s / bin / ls / home / minnie / bin
 sudo ln -s / bin / top / home / minnie / bin
 sudo ln -s / bin / uptime / home / minnie / bin
 sudo ln -s / bin / pinky / home / minnie / bin 

minnieが次にログインすると、Bashの組み込みコマンドに加えて、リンクされているコマンドを使用できることがわかります。

 ls
 ピンキーデイブ
稼働時間

既存のユーザーを制限する

新しいユーザーとしてminnieを作成しました。 既存のユーザーのシェルを変更するには、 usermodコマンドの-s (シェル)オプションを使用できます。

 sudo usermod -s / bin / rbash mary 

「/ etc / passwd」ファイルでlessコマンドを使用すると、ユーザーのデフォルトシェルとして設定されているシェルをすばやく確認できます。

 少ない/ etc / passwd 

ユーザーメアリーが次にログインするときに制限付きシェルを使用することがわかります。

広告

他の変更を適用して、 $PATH環境変数を制限し、ユーザーmaryが実行できるようにするコマンドを設定することを忘れないでください。

スクリプトの制限

通常の制限のないユーザーは、制限されたシェルで実行されるスクリプトを起動できます。 次の行をコピーして、エディターに貼り付けます。 ファイルを「restricted.sh」として保存し、エディターを閉じます。

 #!/ bin / bash

#スクリプトは通常のBashシェルで開始します
echo "##無制限モードで!##"

エコー
echo "現在のディレクトリ:` pwd` "
エコー「ディレクトリの変更」
cd / usr / share
echo "Now in directory:` pwd` "
echo "ホームディレクトリへの変更"
cd〜
echo "Now in directory:` pwd` "

#制限付きモードの設定
set -r

エコー
echo "##制限付きモードで!##"

エコー
echo "現在のディレクトリ:` pwd` "
echo "ディレクトリを/ home /に変更しています"
cd / home
echo "まだディレクトリにあります:` pwd` "

エコー
echo「別のシェルを開始しようとしています」
/ bin / bash

エコー
echo "コマンド出力をリダイレクトしようとしています"
ls -l $ HOME> my_files.txt
cat my_files.txt
エコー

出口0

スクリプトを実行可能にするには、 +x (実行)フラグを指定してchmodコマンドを使用する必要があります。

 chmod + xrestricted.sh 

スクリプトの最初の部分は通常のシェルで実行されます。

 ./restricted.sh 

スクリプトの2番目の部分(「set-r」行の後のビット)は、制限されたシェルで実行されます。

スクリプトの制限された部分では、試行されたアクションはどれも成功しません。

広告

最初の行に-rを追加することで、制限付きシェルでスクリプト全体を実行できます。

 !#/ bin / bash -r

Houdiniを覚えておいてください

制限付きシェルは便利ですが、完全に確実というわけではありません。 十分に熟練したユーザーはそれらを逃れることができるかもしれません。 ただし、慎重に使用すると、特定のアカウントに一連の制限を設定するための便利な方法になります。