
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*
ユーザーには限られた読み取り専用環境があります(たとえば
LESSSECURE
、TMOUT
変数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/skel
sudo
答え3
仮想グループを追加し、グループにユーザーを追加しますchown root:somegroup /bin/mkdir
。chmod g-x /bin/mkdir
これは、ユーザーが自分のグループを編集できないことに注意してください。 IIRC これは GNU/Linux では該当しますが、他の Unices では適用されません。
答え4
sudoerをインストールし、適切なユーザーとコマンドを設定してみてください。