web-dev-qa-db-ja.com

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

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

Update 1#しかし、ユーザーが賢い場合は、mkdirバイナリをコピーして名前を変更して使用できます。これを達成するにはどうすればよいですか?

27
Rahul Patil

Bashでそれを行う方法はわかりませんが、ユーザー環境を制限する別のシェル lshell(制限付きシェル) を知っています。

構成の概要

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

この構成(デフォルトの設定/etc/lshell.conf)は、ユーザーfoomkdirを使用することを禁止します:

[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
21
rahmu

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

  • ユーザーはwheelグループに属していません。suの使用が許可されている唯一のグループです(PAMによって強制されます)。
  • ユーザーには、プライベート~/binを指す読み取り専用のPATHで適切に保護されたrbashが与えられます。この~/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が自分の代わりにmkdirを実行できるかどうかを選択できます(上記で説明したように、~/binを介してプロビジョニングされたプライベート/etc/skelディレクトリ内のリンクを介して) )、他のユーザーに代わって(Sudo経由)、またはまったくなし。

15
dawud

ダミーグループを追加し、ユーザーをそのグループに追加します。chown root:somegroup /bin/mkdirchmod g-x /bin/mkdir。これは、ユーザーがグループを変更できないことに依存していることに注意してください。 IIRCこれはGNU/Linuxには当てはまりますが、他の一部のUnicesには当てはまりません。

4
strugee

私がテストした最高の方法は、Profile.dを使用することです。

ステップ1(エイリアスファイルの作成)

[root@newrbe ~]# vim /etc/customalias.sh

下の行を追加:

alias rm="echo remove contenet is restricted"
alias poweroff="echo Poweroff is restricted"
alias chmod="echo Change Permission is restristed"

保存して終了

ステップ2(プロファイルローダーの作成)

/etc/profile.d/この場所にはbash補完用のファイルが含まれています

[root@newrbe ~]# vim /etc/profile.d/customsource.sh

ファイルの下に以下の行を追加します。これらの行は、以下のユーザーのために言及されたコマンドをブロックします

if [ `whoami` == "user1" ] && [ `whoami` == "user2" ]; then
    source /etc/customalias.sh
fi

保存して終了

終了して再ログインします

よろしく、-Mansur

1
Mansur Ali