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
私が通常この種の制限を実装する方法では、いくつかの条件が満たされている必要があります。それ以外の場合、制限は簡単に回避できます:
- ユーザーは
wheel
に属していませんsu
の使用を許可された唯一のグループ (PAM 経由で強制) -
ユーザーには適切に保護された
rbash
が与えられます プライベート~/bin
を指す読み取り専用の PATH を使用 、この~/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
経由) ) またはまったくありません。
ダミー グループを追加し、ユーザーをそのグループに追加します chown root:somegroup /bin/mkdir
、 chmod g-x /bin/mkdir
.これは、ユーザーがグループを変更できないことに依存していることに注意してください。 IIRC これは GNU/Linux では当てはまりますが、他の一部の Unice では当てはまりません。