Cara membatasi shell pengguna yang memungkinkan untuk menjalankan program shell
9
Apakah mungkin untuk mencegah pengguna untuk tidak menggunakan perintah seperti ls, rm dan perintah sistem lainnya yang dapat membahayakan sistem. Tetapi para pengguna harus dapat menjalankan program shell.
Mengapa Anda ingin melakukan ini? Tidak bisakah Anda menulis sebuah program yang mereka berinteraksi?
Joe
Program shell seperti apa yang harus mereka jalankan?
Mike
Apakah yang Anda maksud "menjalankan program shell ciptaan mereka sendiri", yang memiliki masalah keamanan jelas ..
pjc50
13
Oh, tidak, bukan lsperintah berbahaya !
womble
Jawaban:
11
Pertanyaan Anda seharusnya:
Saya tidak mempercayai pengguna saya. Yang bodoh melihat sesuatu di internet dan mencobanya tanpa memahami apa yang dilakukannya. Yang licik suka mengintip dan melihat file orang lain dan mencuri ide-ide mereka. Dan yang malas, jangan mulai saya yang malas.
Bagaimana cara melindungi sistem saya dan pengguna saya dari pengguna saya?
Pertama, unix memiliki sistem perizinan filesystem yang sangat komprehensif. Ini tampaknya menjadi tutorial yang layak tentang izin sistem file unix . Inti dari hal ini adalah direktori dapat diatur sedemikian rupa sehingga pengguna dapat masuk ke direktori dan dapat menjalankan program dari direktori tersebut tetapi tidak dapat melihat isi direktori tersebut. Jika Anda melakukan ini, misalnya, di / home, jika pengguna menjalankan ls on / home, mereka akan mendapatkan izin yang ditolak kesalahannya.
Jika Anda benar-benar takut pada pengguna Anda dan ingin memasukkan mereka ke dalam jenis lingkungan terbatas supermax , gunakan sesuatu seperti penjara freebsd atau zona solaris - setiap pengguna mendapatkan lingkungan buatan mereka sendiri. Untuk poin tambahan gunakan ZFS sehingga Anda dapat mengambil snapshot dari lingkungan saat mereka masuk sehingga jika mereka menghapus file mereka, Anda bisa menariknya keluar dari snapshot.
Ada tiga hal yang perlu dilakukan untuk sepenuhnya melakukan apa yang Anda minta:
Shell khusus yang tidak memiliki perintah yang Anda minati . Ini adalah hal yang sulit didapat, tetapi jika Anda benar-benar tidak ingin pengguna memiliki akses ke beberapa shell primitif, ini adalah satu-satunya cara untuk menghapusnya.
Atur izin file dengan benar . Tidak ingin pengguna merusak sistem? Tetapkan izin sehingga mereka tidak dapat merusak sistem bahkan jika mereka memiliki alat yang tepat. Dari ketiga langkah ini, ini adalah langkah yang paling mudah.
Gunakan technoloy kontrol akses wajib seperti AppArmor . MAC seperti AppArmor dan SELinux menanamkan izin di kernel. Ini mencegah pengguna menjalankan alat yang tepat bahkan jika mereka menemukannya di suatu tempat (dan seperti izin file, mencegah mereka menggunakannya di luar kotak terlarang).
Belt, suspender, dan staple-gun untuk ukuran yang baik. Sulit salah di sana.
AppArmor menarik karena MAC untuk executable tertentu diwarisi oleh semua anak-anaknya. Atur login pengguna menjadi /bin/bash-bob, atur profil AppArmor untuk hak biner spesifik itu, dan satu-satunya cara mereka keluar dari penjara izin itu adalah melalui eksploitasi kernel. Jika beberapa skrip pemasangan malas dibiarkan /var/opt/vendor/tmpdapat ditulisi secara global karena alasan bodoh, pengguna yang menggunakan /bin/bash-bobshell tidak akan dapat menulis di sana . Atur profil bash-bob hanya mengizinkan penulisan ke direktori home mereka dan /tmp, dan kesalahan izin tersebut tidak dapat ditingkatkan. Bahkan jika mereka entah bagaimana menemukan kata sandi root, profil AppArmor untuk /bin/bash-bobakan tetap berlaku bahkan setelah mereka subangun sudan bashproses yang ditimbulkannya adalah anak-anak /bin/bash-bob.
Bagian yang sulit adalah membangun profil AppArmor itu.
Buat profil AppArmor untuk / bin / bash-bob dan atur ke mode audit
Atur shell-login Bob ke / bin / bash-bob
Masuk sebagai Bob. Lakukan semua yang Anda inginkan agar dapat dilakukan Bob.
Gunakan auditlog untuk membangun profil AppArmor (SUSE memiliki alat untuk ini, tidak yakin tentang distro Linux lainnya). Ini sangat membosankan, tetapi perlu terjadi jika Anda membutuhkan tingkat keamanan ini.
Anda akan melakukan hal-hal seperti:
Menyetujui akses baca ke sebagian besar pustaka sistem
Menyetujui hak baca dan eksekusi untuk beberapa perintah sistem yang diizinkan yang dipilih
Menyetujui akses tulis ke ruang temp
Menyetujui pembuatan soket, jika perlu
Tetapkan kebijakan untuk ditegakkan.
Masuk sebagai Bob, lakukan sesuatu.
Buat penyesuaian.
Menurut pendapat saya, Anda hanya perlu langkah 2 dan 3, karena dalam kombinasi keduanya mencegah kemampuan untuk melakukan sesuatu yang berbahaya di luar kotak yang dibangun dengan hati-hati yang Anda siapkan di kedua langkah itu.
Jangan coba dan batasi perintah, batasi izin file. Secara praktis Anda tidak dapat membatasi akses orang ke panggilan sys, jadi semua yang perlu dilakukan seseorang adalah memberikan salinan sendiri dari perintah "berbahaya" apa pun yang tidak ingin Anda jalankan, dan Anda kenyang.
Jika Anda ingin pengguna hanya dapat menjalankan skrip / binari tertentu, Anda dapat menggunakan shell terbatas . Ini (seperti yang disebutkan dalam artikel Wikipedia) tidak sepenuhnya aman, tetapi jika Anda dapat menjamin bahwa tidak ada aplikasi yang diizinkan untuk menjalankan dapat mengeksekusi shell baru maka itu adalah alternatif yang baik.
Untuk mengatur shell yang dibatasi pengguna, atur /bin/rbash(atau yang serupa, kebanyakan shell memasuki mode terbatas ketika biner bernama r *** *) sebagai shell pengguna. Kemudian, edit **. Bashrc (atau yang setara) dan atur $PATHke direktori tempat semua binari / skrip yang diizinkan disimpan.
Ya, itu mungkin, tetapi dalam praktiknya akan membutuhkan banyak pekerjaan dan perencanaan. Anda dapat membuat skrip dan menjalankannya sebagai penggunaan khusus, lalu hapus semua hak istimewa dari pengguna yang dimaksud. Atau, Anda dapat mengatur shell pengguna ke sesuatu buatan Anda sendiri yang memungkinkan mereka melakukan apa yang Anda izinkan secara eksplisit.
Namun, izin standar di linux membuatnya hampir mustahil bagi pengguna normal untuk "membahayakan sistem". Jenis kerusakan apa yang Anda coba cegah? Ini sepele untuk mencegah pengguna menginstal perangkat lunak atau menjalankan program di luar direktori home mereka, dan Anda dapat menggunakan chroot untuk mengunci sistem lebih jauh.
Saya mencoba untuk mencegah kemungkinan perintah seperti rm -rf / bin, ls / home / *, rm -rf / usr / bin, ls / .................... .....
2
Anda dapat mencegah mereka yang menggunakan hak akses file standar linux ...
ChristopheD
1
Anda mungkin ingin mencoba [lshell] [1] (shell terbatas).
lshell adalah shell yang dikodekan dalam Python, yang memungkinkan Anda membatasi lingkungan pengguna ke set perintah terbatas, memilih untuk mengaktifkan / menonaktifkan perintah apa pun di atas SSH (mis. SCP, SFTP, rsync, dll.), mencatat perintah pengguna, mengimplementasikan pembatasan waktu, dan lainnya.
Cara saya biasanya menerapkan pembatasan semacam ini mengharuskan beberapa kondisi terpenuhi, jika tidak, pembatasan dapat dengan mudah dielakkan:
Pengguna bukan milik wheelgrup, satu-satunya yang diizinkan untuk menggunakan su(diberlakukan melalui PAM).
Pengguna diberikan pengamanan yang benarrbash dengan read-only yang PATHmenunjuk ke pribadi ~/bin, ~/bin/direktori ini berisi tautan ke utilitas sederhana:
pengguna diberikan terbatas, read-only lingkungan (memikirkan hal-hal seperti LESSSECURE, TMOUT, HISTFILEvariabel).
pengguna dipetakan ke pengguna SELinux staff_udan diberikan hak untuk mengeksekusi perintah sebagai pengguna lain sebagaimana disyaratkan melalui sudo.
pengguna /home, /tmpdan mungkin /var/tmpdipolisi melalui /etc/security/namespace.conf:
Juga, /etc/security/namespace.initbuat semua file kerangka hanya dibaca untuk pengguna dan dimiliki oleh root.
Dengan cara ini Anda dapat memilih apakah $USERdapat menjalankan perintah apa pun atas namanya sendiri (melalui tautan di ~/bindirektori pribadi , disediakan melalui /etc/skel, sebagaimana dijelaskan di atas), atas nama pengguna lain (via sudo) atau tidak sama sekali.
ls
perintah berbahaya !Jawaban:
Pertanyaan Anda seharusnya:
Saya tidak mempercayai pengguna saya. Yang bodoh melihat sesuatu di internet dan mencobanya tanpa memahami apa yang dilakukannya. Yang licik suka mengintip dan melihat file orang lain dan mencuri ide-ide mereka. Dan yang malas, jangan mulai saya yang malas.
Bagaimana cara melindungi sistem saya dan pengguna saya dari pengguna saya?
Pertama, unix memiliki sistem perizinan filesystem yang sangat komprehensif. Ini tampaknya menjadi tutorial yang layak tentang izin sistem file unix . Inti dari hal ini adalah direktori dapat diatur sedemikian rupa sehingga pengguna dapat masuk ke direktori dan dapat menjalankan program dari direktori tersebut tetapi tidak dapat melihat isi direktori tersebut. Jika Anda melakukan ini, misalnya, di / home, jika pengguna menjalankan ls on / home, mereka akan mendapatkan izin yang ditolak kesalahannya.
Jika Anda benar-benar takut pada pengguna Anda dan ingin memasukkan mereka ke dalam jenis lingkungan terbatas supermax , gunakan sesuatu seperti penjara freebsd atau zona solaris - setiap pengguna mendapatkan lingkungan buatan mereka sendiri. Untuk poin tambahan gunakan ZFS sehingga Anda dapat mengambil snapshot dari lingkungan saat mereka masuk sehingga jika mereka menghapus file mereka, Anda bisa menariknya keluar dari snapshot.
sumber
Ada tiga hal yang perlu dilakukan untuk sepenuhnya melakukan apa yang Anda minta:
Belt, suspender, dan staple-gun untuk ukuran yang baik. Sulit salah di sana.
AppArmor menarik karena MAC untuk executable tertentu diwarisi oleh semua anak-anaknya. Atur login pengguna menjadi
/bin/bash-bob
, atur profil AppArmor untuk hak biner spesifik itu, dan satu-satunya cara mereka keluar dari penjara izin itu adalah melalui eksploitasi kernel. Jika beberapa skrip pemasangan malas dibiarkan/var/opt/vendor/tmp
dapat ditulisi secara global karena alasan bodoh, pengguna yang menggunakan/bin/bash-bob
shell tidak akan dapat menulis di sana . Atur profil bash-bob hanya mengizinkan penulisan ke direktori home mereka dan/tmp
, dan kesalahan izin tersebut tidak dapat ditingkatkan. Bahkan jika mereka entah bagaimana menemukan kata sandi root, profil AppArmor untuk/bin/bash-bob
akan tetap berlaku bahkan setelah merekasu
bangunsu
danbash
proses yang ditimbulkannya adalah anak-anak/bin/bash-bob
.Bagian yang sulit adalah membangun profil AppArmor itu.
Menurut pendapat saya, Anda hanya perlu langkah 2 dan 3, karena dalam kombinasi keduanya mencegah kemampuan untuk melakukan sesuatu yang berbahaya di luar kotak yang dibangun dengan hati-hati yang Anda siapkan di kedua langkah itu.
sumber
Nah, Anda dapat mengatur shell pengguna ke program yang Anda tulis yang hanya memungkinkan mereka menjalankan skrip shell tertentu.
Tentu saja ini hanya akan seaman program dan skrip shell; dalam praktiknya, shell terbatas semacam ini biasanya tidak aman terhadap penyerang pintar.
sumber
Jangan coba dan batasi perintah, batasi izin file. Secara praktis Anda tidak dapat membatasi akses orang ke panggilan sys, jadi semua yang perlu dilakukan seseorang adalah memberikan salinan sendiri dari perintah "berbahaya" apa pun yang tidak ingin Anda jalankan, dan Anda kenyang.
sumber
Jika Anda ingin pengguna hanya dapat menjalankan skrip / binari tertentu, Anda dapat menggunakan shell terbatas . Ini (seperti yang disebutkan dalam artikel Wikipedia) tidak sepenuhnya aman, tetapi jika Anda dapat menjamin bahwa tidak ada aplikasi yang diizinkan untuk menjalankan dapat mengeksekusi shell baru maka itu adalah alternatif yang baik.
Untuk mengatur shell yang dibatasi pengguna, atur
/bin/rbash
(atau yang serupa, kebanyakan shell memasuki mode terbatas ketika biner bernama r *** *) sebagai shell pengguna. Kemudian, edit **. Bashrc (atau yang setara) dan atur$PATH
ke direktori tempat semua binari / skrip yang diizinkan disimpan.sumber
Ya, itu mungkin, tetapi dalam praktiknya akan membutuhkan banyak pekerjaan dan perencanaan. Anda dapat membuat skrip dan menjalankannya sebagai penggunaan khusus, lalu hapus semua hak istimewa dari pengguna yang dimaksud. Atau, Anda dapat mengatur shell pengguna ke sesuatu buatan Anda sendiri yang memungkinkan mereka melakukan apa yang Anda izinkan secara eksplisit.
Namun, izin standar di linux membuatnya hampir mustahil bagi pengguna normal untuk "membahayakan sistem". Jenis kerusakan apa yang Anda coba cegah? Ini sepele untuk mencegah pengguna menginstal perangkat lunak atau menjalankan program di luar direktori home mereka, dan Anda dapat menggunakan chroot untuk mengunci sistem lebih jauh.
sumber
Anda mungkin ingin mencoba [lshell] [1] (shell terbatas).
[1]: http://lshell.ghantoos.org/Overview lshell
sumber
Cara saya biasanya menerapkan pembatasan semacam ini mengharuskan beberapa kondisi terpenuhi, jika tidak, pembatasan dapat dengan mudah dielakkan:
wheel
grup, satu-satunya yang diizinkan untuk menggunakansu
(diberlakukan melalui PAM).Pengguna diberikan pengamanan yang benar
rbash
dengan read-only yangPATH
menunjuk ke pribadi~/bin
,~/bin/
direktori ini berisi tautan ke utilitas sederhana:pengguna diberikan terbatas, read-only lingkungan (memikirkan hal-hal seperti
LESSSECURE
,TMOUT
,HISTFILE
variabel).staff_u
dan diberikan hak untuk mengeksekusi perintah sebagai pengguna lain sebagaimana disyaratkan melaluisudo
.pengguna
/home
,/tmp
dan mungkin/var/tmp
dipolisi melalui/etc/security/namespace.conf
:Juga,
/etc/security/namespace.init
buat semua file kerangka hanya dibaca untuk pengguna dan dimiliki olehroot
.Dengan cara ini Anda dapat memilih apakah
$USER
dapat menjalankan perintah apa pun atas namanya sendiri (melalui tautan di~/bin
direktori pribadi , disediakan melalui/etc/skel
, sebagaimana dijelaskan di atas), atas nama pengguna lain (viasudo
) atau tidak sama sekali.sumber
Ya, ubah saja izin pada perintah ini.
Anda mungkin memiliki kesempatan bertarung yang lebih baik dengan menulis perintah shell yang berlaku untuk kebutuhan Anda.
Apa yang tidak sesuai dengan izin default untuk pengguna normal di Linux?
sumber