シェルプログラムの実行を許可するユーザーのシェルを制限する方法


9

ユーザーがls、rmなどのシステムに害を及ぼす可能性のあるシステムコマンドを使用しないようにすることは可能ですか。しかし、ユーザーはシェルプログラムを実行できるはずです。


なぜこれをしたいのですか?彼らが相互作用するプログラムを書けませんか?
ジョー

どのようなシェルプログラムを実行する必要がありますか?
マイク

..あなたは、明らかなセキュリティ上の問題があり、「自分の創造の実行シェルプログラム」を意味しています
pjc50

13
ああ、いや、危険なlsコマンドではありません!
ウォンブル

回答:


11

あなたの質問は:

ユーザーを信用していません。馬鹿な人はインターネットで何かを見て、それが何をするか理解せずにそれを試します。悪意のある人は、他の人のファイルを覗き見してそれらのアイデアを盗むのが好きです。そして、怠惰な私に怠惰なものから始めさせないでください。

システムからユーザーをユーザーから保護するにはどうすればよいですか?


まず、unixには非常に包括的なファイルシステム許可システムがあります。 これは、UNIXファイルシステムのアクセス許可に関する適切なチュートリアルのようです。これの要点は、ユーザーがディレクトリに移動してそのディレクトリからプログラムを実行できるが、そのディレクトリの内容を表示できないようにディレクトリを設定できることです。たとえば、/ homeでこれを行うと、ユーザーが/ homeでlsを実行すると、権限拒否エラーが発生します。

ユーザーが本当に怖くて、制限された環境のスーパーマックスタイプにユーザーを固定したい場合は、freebsdのjailやsolarisのゾーンなどを使用します。追加されたポイントについては、ZFSを使用して、ログイン時に環境のスナップショットを取得できるため、ファイルが削除された場合、スナップショットからそれらをプルすることができます。


9

あなたが求めていることを完全に行うには、次の3つのことが必要です。

  1. 興味のあるコマンドがないカスタムシェル。これを取得するのは難しいことですが、本当にユーザーに一部のシェルプリミティブへのアクセスを許可したくない場合は、これがそれらを削除する唯一の方法です。
  2. ファイルの権限を正しく設定します。ユーザーにシステムを損傷させたくないですか?適切なツールがあっても、システムに損傷を与えないようにアクセス許可を設定します。これらの3つのステップのうち、これが最も簡単なステップです。
  3. AppArmorのような必須のアクセス制御技術を使用します。AppArmorやSELinuxなどのMACは、許可をカーネルに埋め込みます。これらは、ユーザーがどこかにそれらを見つけた場合でも適切なツールを実行できないようにします(ファイルのアクセス許可のように、制限されたボックスの外では使用できません)。

ベルト、サスペンダー、ステープルガン。そこに間違えにくい。

特定の実行可能ファイルのMACはそのすべての子によって継承されるため、AppArmorは興味深いものです。ユーザーのログインを/bin/bash-bobに設定し、その特定のバイナリ権利にAppArmorプロファイルを設定します。ユーザーがそのアクセス許可の刑務所から抜け出す唯一の方法は、カーネルの悪用です。なんらかの/var/opt/vendor/tmp理由で遅延インストールスクリプトがグローバル書き込み可能のままになっている場合/bin/bash-bob、シェルとして使用しているユーザーはそこに書き込むことができません。ホームディレクトリとへの書き込みのみを許可するようにbash-bobプロファイルを設定し/tmpます。このような権限の誤りは利用できません。彼らは何とかrootのパスワードを見つけた場合でも、用のAppArmorプロファイルは、/bin/bash-bobまだ彼らの後にも適用されますsuので、アップsuし、bashそれを処理スポーンはの子です/bin/bash-bob

難しいのは、そのAppArmorプロファイルを構築することです。

  1. / bin / bash-bobのAppArmorプロファイルを作成し、監査モードに設定します
  2. ボブのログインシェルを/ bin / bash-bobに設定します
  3. Bobとしてログインします。ボブにできることをすべて実行します。
  4. 監査ログを使用してAppArmorプロファイルを作成します(SUSEにはこのためのツールがあり、他のLinuxディストリビューションについては不明です)。これは非常に退屈な作業ですが、このレベルのセキュリティが必要な場合に実行する必要があります。
    1. あなたは次のようなことをするでしょう:
      • ほとんどのシステムライブラリへの読み取りアクセスの承認
      • 選択されたいくつかの許可されたシステムコマンドへの読み取りおよび実行権限の承認
      • 一時スペースへの書き込みアクセスの承認
      • 必要に応じて、ソケット作成の承認
  5. 実施するポリシーを設定します。
  6. Bobとしてログインし、操作を行います。
  7. 調整を行います。

私の意見では、手順2と3のみが必要です。両方を組み合わせると、両方の手順でセットアップした慎重に構成されたボックスの外で有害なことを実行する機能が妨げられるためです。


4

さて、あなたはできるユーザのシェルを設定するだけで、それらが特定のシェルスクリプトを実行することができますことをあなたが書いたプログラムに。

もちろん、これはプログラムとシェルスクリプトと同じくらい安全です。実際には、この種の制限付きシェルは通常、スマートな攻撃者に対して安全ではありません。


3

コマンドを制限したり、ファイルのアクセス許可を制限したりしないでください。syscallへの人々のアクセスを実質的に制限することはできないので、誰かがする必要があるのは、実行してほしくない「危険な」コマンドのコピーを提供することだけであり、あなたは詰め込まれています。


2

ユーザーが特定のスクリプト/バイナリのみを実行できるようにする場合は、制限付きシェルを使用できます。これは(ウィキペディアの記事で言及されているように)完全には安全ではありませんが、実行を許可されているアプリケーションが新しいシェルを実行できないことを保証できる場合は、優れた代替手段です。

ユーザー制限付きシェルをセットアップするには、ユーザーシェルとして設定します/bin/rbash(または、バイナリがr *** name *という名前の場合、ほとんどのシェルは制限付きモードになります)。次に、**。bashrc(または同等のもの)を編集$PATHし、許可されたすべてのバイナリ/スクリプトが格納されているディレクトリに設定します。


1

はい、可能ですが、実際には多くの作業と計画が必要になります。スクリプトを作成し、それらを特権使用として実行し、問題のユーザーからすべての特権を削除できます。または、ユーザーのシェルを独自に作成したものに設定して、明示的に許可したものだけをユーザーが実行できるようにすることもできます。

ただし、Linuxの標準の権限では、通常のユーザーが「システムに害を及ぼす」ことはほとんど不可能です。どんな害を防ごうとしていますか?ユーザーがホームディレクトリの外でソフトウェアをインストールしたりプログラムを実行したりできないようにするのは簡単です。chrootを使用してシステムをさらにロックダウンすることができます。


rm -rf / bin、ls / home / *、rm -rf / usr / bin、ls / ....................のような可能なコマンドを回避しようとしています.....

2
標準のlinuxファイルのアクセス許可を使用してそれらを防ぐことができます...
ChristopheD

1

[lshell] [1](制限付きシェル)を試してみてください。

lshellはPythonでコード化されたシェルであり、ユーザーの環境を限られたコマンドセットに制限したり、SSH経由のコマンド(SCP、SFTP、rsyncなど)を有効/無効にしたり、ユーザーのコマンドをログに記録したり、タイミング制限を実装したりできます。もっと。

[1]:http : //lshell.ghantoos.org/Overview lshell


1

通常、この種の制限を実装する方法では、いくつかの条件を満たす必要があります。そうでない場合、制限を簡単に回避できます。

  • ユーザーはwheelグループに属しておらず、使用が許可されている唯一のユーザーですsu(PAMを介して適用されます)。
  • ユーザーには、privateを指す読み取り専用のポイントで適切に保護され rbashています。このディレクトリには、単純なユーティリティへのリンクが含まれています。PATH~/bin~/bin/

    $ ll ~/bin
    total 0
    lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 clear -> /usr/bin/clear*
    lrwxrwxrwx. 1 root dawud  7 Sep 17 08:58 df -> /bin/df*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 egrep -> /bin/egrep*
    lrwxrwxrwx. 1 root dawud  8 Sep 17 08:58 env -> /bin/env*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 fgrep -> /bin/fgrep*
    lrwxrwxrwx. 1 root dawud  9 Sep 17 08:58 grep -> /bin/grep*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 rview -> /bin/rview*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 rvim -> /usr/bin/rvim*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 sudo -> /usr/bin/sudo*
    lrwxrwxrwx. 1 root dawud 17 Sep 17 08:58 sudoedit -> /usr/bin/sudoedit*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 tail -> /usr/bin/tail*
    lrwxrwxrwx. 1 root dawud 11 Sep 17 08:58 wc -> /usr/bin/wc*
    
  • ユーザーが制限され、読み取り専用の環境を与えられている(のようなものを考えるLESSSECURETMOUTHISTFILE変数)。

  • ユーザーはSELinuxユーザーにマップされ、staff_u必要に応じて他のユーザーとしてコマンドを実行する権限が与えられますsudo
  • ユーザーの/home/tmpおよびおそらくによって/var/tmpインスタンス化され/etc/security/namespace.confます:

    /tmp       /tmp/.inst/tmp.inst-$USER-     tmpdir:create   root
    /var/tmp   /tmp/.inst/var-tmp.inst-$USER- tmpdir:create   root
    $HOME      $HOME/$USER.inst/              tmpdir:create   root
    

    また、/etc/security/namespace.initすべての骨格ファイルをユーザーに対して読み取り専用にし、が所有するようにしrootます。

このようにして、他のユーザーに代わって(上記で説明したように、を介してプロビジョニングさ$USERれたプライベート~/binディレクトリのリンクを介して)自分の代わりにコマンドを実行できるか、まったく実行できないかを選択できます。/etc/skelsudo


0

はい、これらのコマンドの権限を変更してください。

要件に応じて動作するシェルコマンドを作成することで、より良い戦いの機会が得られるかもしれません。

Linuxの通常のユーザーにデフォルトのアクセス許可として適切でないものは何ですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.