Apakah ada cara untuk mencegah agar semua perintah tidak didefinisikan sebagai alias?
Sebagai contoh, pengguna seharusnya tidak dapat mendefinisikan rmatau perintah lain (perintah default Ubuntu) sebagai nama alias.
~/.bashrc.
Apakah ada cara untuk mencegah agar semua perintah tidak didefinisikan sebagai alias?
Sebagai contoh, pengguna seharusnya tidak dapat mendefinisikan rmatau perintah lain (perintah default Ubuntu) sebagai nama alias.
~/.bashrc.
Jawaban:
Tidak mungkin Anda dapat mencegah pengguna menentukan alias apa pun yang mereka inginkan. Mempertimbangkan:
/etc/bash.bashrc. Mereka mengaktifkannya di mana pun mereka mau./etc/bash.bashrc, dan semua ~/.bashrcdan ~/.bash_aliasesmelalui skrip. Mereka memasukkan alias mereka ke file lain dan sumbernya.PROMPT_COMMANDyang menonaktifkan alias tertentu. Mereka mendefinisikan ulang atau tidak mendefinisikan PROMPT_COMMAND.DEBUGdan tidak mendefinisikan alias. Mereka menghilangkan jebakan.unset, builtindan enable; membuat aliasfungsi ; declare -rf aliasuntuk mencegah pengguna memodifikasi fungsi; dan ekspor fungsinya. Mereka berjalan /bin/bashdengan --rcfiledan --init-fileuntuk memulai shell baru, di mana kata builtin sekarang diaktifkan.Anda dapat menonaktifkan alias pada waktu kompilasi, maka terserah Anda untuk terus memperbarui bash dan memastikan Anda tidak terpengaruh oleh Shellshock berikutnya. Tentu saja, para pengguna dapat membangun bash mereka sendiri.
unalias alias.
\unalias unalias.
Satu-satunya cara untuk mencegah pengguna membuat alias adalah dengan memberi mereka shell yang tidak mendukung alias. Ini umumnya merupakan masalah X / Y, di mana X benar-benar model ancaman yang harus diselesaikan dengan kontrol atau arsitektur yang tepat daripada mencoba menyelesaikan masalah post-facto setelah pengguna diberikan shell pada sistem bersama.
Di bawah ini, saya memberikan jawaban yang benar secara teknis, serta beberapa panduan tentang masalah apa yang akan dan tidak akan diselesaikan. Saya juga memberikan beberapa panduan tambahan tentang kontrol alternatif.
Anda dapat menggunakan shell terbatas Bash dengan menetapkan rbash sebagai shell login pengguna. Sebagai contoh:
foo:x:2001:2001:restricted user:/home/foo:/bin/rbash
Anda kemudian harus menonaktifkan alias built-in untuk pengguna, lebih disukai tanpa melanggar shell orang lain juga. Sebagai contoh, Anda bisa menambahkan yang berikut ke file seperti /etc/profile.d/rbash.sh :
# Limit effect to users in a specific UID range.
if ((UID >= 2000)) && ((UID < 3000)); then
# Check shell options; disable alias builtins when shell is restricted.
if [[ $- =~ r ]]; then
enable -n alias
enable -n unalias
fi
fi
Kecuali Anda telah menempatkan pengguna ke dalam chroot jail atau memberi mereka PATH yang dimodifikasi yang tidak menyertakan akses ke shell lain, tidak ada yang menghentikan pengguna dari hanya mengetik bashdi prompt dan mendapatkan shell yang tidak dibatasi.
Selain itu, dengan desain shell yang dibatasi mencegah banyak kegiatan umum seperti mengubah direktori:
$ cd /tmp
rbash: cd: restricted
tetapi tidak mencegah skrip atau program lain dalam PATH dari melakukannya. Ini berarti Anda harus membuat lingkungan pengguna dengan hati-hati, dan secara khusus Anda perlu mencegah mereka agar tidak dapat memodifikasi PATH dalam file startup mereka, karena meskipun rbash membuat PATH hanya-baca hal itu dilakukan setelah inisialisasi.
Bahkan jika Anda menggunakan rbash, Anda harus melakukannya sebagai bagian dari rangkaian kontrol yang lebih luas. Beberapa contoh mungkin termasuk:
Mencegah non-teknis pengguna dari sengaja memanggil perintah berbahaya dengan memberikan alias bawaan seperti rm -i, mv -i, dan cp -idi /etc/bash.bashrc berkas.
enable -n aliasjika Anda mau.Izin Unix Tradisional atau ACL POSIX untuk melindungi file dan direktori.
Login yang melakukan perintah non-interaktif tunggal. Sebagai contoh:
foo:x:2001:2001:run foo.sh:/home/foo:/usr/local/bin/foo.shGunakan perintah paksa SSH per kunci. Sebagai contoh:
# ~foo/.ssh/authorized_keys
command="/usr/local/bin/foo.sh" [remainder of line]Gunakan opsi OpenSSH ForceCommand dengan blok Match bersyarat.
Menggunakan alat khusus seperti gitolite atau scponly dirancang untuk kasus penggunaan khusus Anda.
Gunakan penjara chroot .
Gunakan virtualisasi seperti Xen, OpenVZ, LXC, VMware, VirtualBox, atau teknologi lainnya untuk menyediakan lingkungan yang terpisah.
Setelah Anda secara akurat mendefinisikan model ancaman Anda, Anda dapat mengidentifikasi kontrol yang paling tepat untuk kasus penggunaan Anda. Tanpa pemahaman yang lebih bermakna tentang mengapa Anda ingin mencegah alias (mis., Masalah dunia nyata apa yang dipecahkannya?), Anda tidak dapat memilih kontrol yang paling tepat.
Ini adalah usaha yang sia-sia, seperti yang ditunjukkan oleh jawaban muru. Tetapi ada beberapa opsi, tetapi mereka tidak sempurna.
Menurut bashmanual, fungsi selalu lebih diutamakan daripada alias, sehingga kami dapat melakukan hal berikut:
xieerqi@eagle:~$ function alias { echo "Aliases are no-no" ; }
xieerqi@eagle:~$ alias TEST='rm'
Aliases are no-no
Anda dapat menempatkan definisi fungsi ke seluruh sistem .bashrc, namun seperti yang ditunjukkan muru, pengguna cerdas akan menemukan cara untuk mendapatkan alias dengan sumber bashrcfile yang berbeda misalnya.
Gagasan lain yang saya mainkan adalah enablebawaan.
aliasadalah shell bawaan, dan bashmemiliki enableperintah yang bagus yang memungkinkan mengaktifkan atau menonaktifkan bawaan. Misalnya, inilah saya menonaktifkan alias.
xieerqi@eagle:~$ enable -n alias
xieerqi@eagle:~$ alias
No command 'alias' found, did you mean:
Command '0alias' from package 'zeroinstall-injector' (universe)
alias: command not found
xieerqi@eagle:~$ alias TEST='rm'
No command 'alias' found, did you mean:
Command '0alias' from package 'zeroinstall-injector' (universe)
alias: command not found
xieerqi@eagle:~$ enable alias
xieerqi@eagle:~$ alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
xieerqi@eagle:~$
Sekali lagi, menggunakan systemwide bashrcadalah opsi di sini.
rm, ia memeriksa daftar. Mempertimbangkan bahwa daftar akan cukup besar, akan butuh waktu lama untuk memulai, pengguna Anda akan banyak mengeluh kepada Anda dan membenci Anda sebagai admin sistem :)
Anda bisa mendefinisikan (dalam /etc/profile) fungsi yang disebut aliasyang melakukan validasi yang Anda inginkan (mungkin menggunakan type -p) (setelah semua "perintah default Ubuntu" adalah "executable in $PATH") sebelum memanggil builtin alias, TETAPI, seperti yang ditunjukkan orang lain, pengguna Anda bisa mendapatkan sekitar itu. Mengapa tidak mendapatkan kelompok pengguna yang berbeda, atau mendidik mereka ("Mendefinisikan perintah aliasyang mengabaikan perintah adalah Cara Yang Sangat Baik untuk Menembak Diri Sendiri di Kaki, dan menyebabkan kebingungan (misalnya, Mengapa lsmeminta kata sandi saya?))?