Saya tidak tahu bagaimana melakukannya dengan bash, tapi saya tahu shell lain yang membatasi lingkungan pengguna:lshell (shell terbatas).
Ikhtisar singkat tentang konfigurasi
Lshell dikonfigurasi melalui file INI. Secara default, ini menyimpan daftar putih dari perintah yang diizinkan, tetapi dapat dikonfigurasi dengan mudah untuk melarang pengguna menggunakan perintah tertentu.
Konfigurasi ini (default conf /etc/lshell.conf
) melarang pengguna foo
dari penggunaan mkdir
:
[foo]
allowed = 'all' - ['mkdir', 'bash', 'sh', 'csh', 'dash', 'env']
Untuk mengonfigurasi akun pengguna agar menggunakan lshell secara default, Anda harus:
chsh -s /usr/bin/lshell foo
Lshell dapat melakukan lebih banyak, seperti:
- 3 tingkat perincian:pengguna, grup, semua.
- Dapat membatasi akses ke jalur tertentu dalam sistem.
- Dapat membatasi penggunaan karakter tertentu (seperti
|
). - Dapat membatasi penggunaan perintah tertentu hanya melalui SSH.
Dan banyak lagi.
Perbarui 1# Menambahkan Hasil Tes :
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
Cara saya biasanya menerapkan pembatasan semacam ini mengharuskan beberapa persyaratan dipenuhi, jika tidak, pembatasan dapat dengan mudah dielakkan:
- Pengguna bukan milik
wheel
grup, satu-satunya yang diizinkan untuk menggunakansu
(diberlakukan melalui PAM). -
Pengguna diberi
rbash
yang diamankan dengan benar dengan PATH read-only yang menunjuk ke~/bin
pribadi , ini~/bin/
direktori berisi tautan ke utilitas sederhana:$ 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*
-
pengguna diberi lingkungan hanya-baca yang dibatasi (pikirkan hal-hal seperti
LESSSECURE
,TMOUT
,HISTFILE
variabel). - pengguna dipetakan ke pengguna SELinux
staff_u
dan diberikan hak untuk menjalankan perintah sebagai pengguna lain sesuai kebutuhan melaluisudo
. -
/home
pengguna ,/tmp
dan mungkin/var/tmp
di-polyinstantiated melalui/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
Juga,
/etc/security/namespace.init
membuat semua file rangka hanya dapat dibaca oleh pengguna dan dimiliki olehroot
.
Dengan cara ini Anda dapat memilih apakah $USER
dapat mengeksekusi mkdir
atas namanya sendiri (melalui tautan di ~/bin
pribadi direktori, disediakan melalui /etc/skel
, seperti yang dijelaskan di atas), atas nama pengguna lain (melalui sudo
) atau tidak sama sekali.
Tambahkan grup boneka, tambahkan pengguna ke grup itu, chown root:somegroup /bin/mkdir
, chmod g-x /bin/mkdir
. Perhatikan bahwa ini bergantung pada pengguna yang tidak dapat memodifikasi grup mereka. IIRC hal ini berlaku di GNU/Linux tetapi tidak di Unix lainnya.