特定のユーザーに対してLinuxで特定のコマンドをブロックします。

特定のユーザーに対してLinuxで特定のコマンドをブロックします。

mkdir特定のユーザーに対するコマンドをブロックする方法は?

私がしたことは、読み取り専用機能を作成してユーザープロファイルに保存しただけです。~/.bashrc

/bin/mkdir() {
        echo "mkdir command not allow for you"

}

mkdir() {
        echo "mkdir command not allow for you"

}
./mkdir() {

        echo "mkdir command not allow for you"
}

readonly -f /bin/mkdir
readonly -f mkdir
readonly -f ./mkdir

テスト:

rahul@ubuntu:~$ cd /bin/
rahul@ubuntu:/bin$ ./mkdir /home/rahul/ggg
mkdir command not allow for you
rahul@ubuntu:/bin$ cd
rahul@ubuntu:~$ mkdir testing
mkdir command not allow for you
rahul@ubuntu:~$ /bin/mkdir testing
mkdir command not allow for you

だから私の質問はこれを達成する方法は何ですか?これを行うツールはありますか?

アップデート1#しかし、ユーザーが賢い場合は、mkdirバイナリをコピーして名前を変更して使用できます。それでは、これを達成する方法は何ですか?

答え1

bashでこれを行う方法はわかりませんが、ユーザーエクスペリエンスを制限する別のシェルは知っています。lshell (制限されたシェル)

構成クイック概要

LshellはINIファイルを介して設定されます。デフォルトでは、許可されているコマンドのホワイトリストを保持しますが、ユーザーが特定のコマンドを使用しないように簡単に設定できます。

この構成(デフォルトのconf /etc/lshell.conf)は、ユーザーが以下をfoo使用することを禁止しますmkdir

[foo]
allowed = 'all' - ['mkdir', 'bash', 'sh', 'csh', 'dash', 'env']

デフォルトでは、lshellを使用するようにユーザーアカウントを設定するには、次の手順を実行する必要があります。

 chsh -s /usr/bin/lshell foo

Lshellは、次のようなはるかに多くの作業を実行できます。

  • 3つの詳細レベル:ユーザー、グループ、全体。
  • システムの特定のパスへのアクセスが制限される可能性があります。
  • 特定の文字(たとえば|)の使用を制限できます。
  • SSHを介してのみ特定のコマンドの使用を制限できます。

そしてもっと。

アップデート1#テスト結果を追加:

rahul:~$ which bash
/bin/bash
rahul:~$ dd if=$(which bash) of=my_bash
*** forbidden syntax: dd if=$(which bash) of=my_bash
rahul:~$ bash
*** forbidden command: bash
rahul:~$ cp /bin/bash my_bash
*** forbidden path: /bin/bash
rahul:~$ /bin/bash
*** forbidden command: /bin/bash
rahul:~$ sh
*** forbidden command: sh
rahul:~$ dash
*** forbidden command: dash
rahul:~$ env bash
*** forbidden command: env
rahul:~$ cp /bin/mkdir mycreatedir
*** forbidden path: /bin/mkdir

答え2

私が一般的にこの制限を実装する方法には、いくつかの条件を満たす必要があります。そうしないと、制限を簡単にバイパスできます。

  • wheelユーザーは承認された唯一のグループsu(PAMを介して適用)に属しません。
  • ユーザーは、単純なユーティリティへのリンクを含むプライベートを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*
    
  • ユーザーには限られた読み取り専用環境があります(たとえばLESSSECURETMOUT変数HISTFILE)。

  • このユーザーは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できるかどうかを選択できます。mkdir~/bin/etc/skelsudo

答え3

仮想グループを追加し、グループにユーザーを追加しますchown root:somegroup /bin/mkdirchmod g-x /bin/mkdirこれは、ユーザーが自分のグループを編集できないことに注意してください。 IIRC これは GNU/Linux では該当しますが、他の Unices では適用されません。

答え4

sudoerをインストールし、適切なユーザーとコマンドを設定してみてください。

関連情報