Kalau saya root, saya cukup membuat dummy pengguna / grup, mengatur izin file yang sesuai dan menjalankan proses sebagai pengguna itu. Namun saya tidak, jadi apakah ada cara untuk mencapai ini tanpa menjadi root?
permissions
not-root-user
jails
Tobias Kienzler
sumber
sumber
chroot
secara alami cocok di sana, tetapi sekali lagi Anda tidak root.Jawaban:
Qs yang lebih mirip dengan lebih banyak jawaban yang patut diperhatikan:
CATATAN: Beberapa jawaban di sana menunjukkan solusi spesifik yang belum disebutkan di sini.
Sebenarnya, ada beberapa alat pemenjaraan dengan implementasi yang berbeda, tetapi banyak dari mereka yang tidak aman oleh desain (seperti
fakeroot
,LD_PRELOAD
berbasis), atau tidak lengkap (sepertifakeroot-ng
,ptrace
berbasis), atau akan membutuhkan root (chroot
, atauplash
disebutkan di fakechroot label peringatan ).Ini hanya contoh; Saya berpikir untuk mendaftarkan mereka semua berdampingan, dengan indikasi 2 fitur ini ("dapat dipercaya?", "Memerlukan root untuk mengatur?"), Mungkin di Implementasi virtualisasi tingkat sistem Operasi .
Secara umum, jawaban di sana mencakup berbagai kemungkinan yang dijelaskan dan bahkan lebih banyak lagi:
mesin virtual / OS
ekstensi kernel (seperti SELinux)
chroot
Pembantu berbasis chroot (yang bagaimanapun harus setUID root, karena
chroot
memerlukan root; atau mungkinchroot
bisa bekerja di namespace yang terisolasi - lihat di bawah):[untuk memberi tahu lebih banyak tentang mereka!]
Alat isolasi berbasis chroot yang dikenal:
hsh-run
danhsh-shell
perintahnya. ( Hasher dirancang untuk membuat perangkat lunak dengan cara yang aman dan berulang.)ptrace
Solusi isolasi lain yang dapat dipercaya (selain yang
seccomp
berbasis ) adalah syscall-interception menyeluruhptrace
, seperti yang dijelaskan dalam halaman manual untukfakeroot-ng
:Namun, seperti yang dapat Anda baca,
fakeroot-ng
itu sendiri tidak dirancang untuk tujuan ini.(BTW, saya bertanya-tanya mengapa mereka memilih untuk menggunakan
seccomp
pendekatan berbasis untuk Chromium daripadaptrace
berbasis ...)Dari alat-alat yang tidak disebutkan di atas, saya telah mencatat Geordi untuk diri saya sendiri, karena saya suka bahwa program pengendalian ditulis dalam Haskell.
Alat isolasi berbasis ptrace yang dikenal:
fakeroot-ng
seccomp
Salah satu cara yang diketahui untuk mencapai isolasi adalah melalui pendekatan kotak pasir seccomp yang digunakan di Google Chromium . Tetapi pendekatan ini mengandaikan bahwa Anda menulis pembantu yang akan memproses beberapa (yang diizinkan) dari akses file "dicegat" dan syscall lainnya; dan juga, tentu saja, berusaha untuk "mencegat" syscalls dan mengarahkannya ke helper (mungkin, itu bahkan akan berarti menggantikan syscalls yang disadap dalam kode proses yang dikendalikan; jadi, itu tidak terdengar untuk menjadi cukup sederhana; jika Anda tertarik, Anda sebaiknya membaca detail daripada hanya jawaban saya).
Info terkait lainnya (dari Wikipedia):
(Item terakhir tampaknya menarik jika seseorang mencari
seccomp
solusi berbasis umum di luar Chromium. Ada juga posting blog yang layak dibaca dari penulis "seccomp-nurse": SECCOMP sebagai solusi Sandboxing?. )Ilustrasi pendekatan ini dari proyek "perawat perawat" :
Seccomp "fleksibel" mungkin di masa depan Linux?
Dulu muncul pada tahun 2009 juga saran untuk menambal kernel Linux sehingga ada lebih banyak fleksibilitas ke
seccomp
mode - sehingga "banyak akrobat yang saat ini kita butuhkan dapat dihindari". ("Akrobat" mengacu pada komplikasi penulisan pembantu yang harus mengeksekusi banyak syscall yang mungkin tidak bersalah atas nama proses yang dipenjara dan menggantikan syscall yang mungkin tidak bersalah dalam proses dipenjara.) Sebuah artikel LWN menulis tentang hal ini:"Seccomp fleksibel" ini akan membawa kemungkinan Linux lebih dekat untuk menyediakan fitur yang diinginkan dalam OS, tanpa perlu menulis pembantu yang rumit.
(Posting blog dengan konten yang pada dasarnya sama dengan jawaban ini: http://geofft.mit.edu/blog/sipb/33 .)
ruang nama (
unshare
)Mengisolasi melalui namespaces (
unshare
solusi berbasis ) - tidak disebutkan di sini - misalnya, mount-point unsharing (dikombinasikan dengan FUSE?) Mungkin bisa menjadi bagian dari solusi yang berfungsi untuk Anda yang ingin membatasi akses sistem file dari proses yang tidak dipercaya.Lebih banyak tentang ruang nama, sekarang, karena implementasinya telah selesai (teknik isolasi ini juga dikenal di bawah nme "Linux Containers", atau "LXC" , bukan? ..):
"Salah satu tujuan keseluruhan ruang nama adalah untuk mendukung implementasi wadah, alat untuk virtualisasi ringan (serta tujuan lain)" .
Bahkan mungkin untuk membuat namespace pengguna baru, sehingga "suatu proses dapat memiliki ID pengguna tidakrivil normal di luar namespace pengguna sementara pada saat yang sama memiliki ID pengguna 0 di dalam namespace. Ini berarti bahwa proses tersebut memiliki hak root root penuh untuk operasi di dalam namespace pengguna, tetapi tidak terjangkau untuk operasi di luar namespace ".
Untuk perintah kerja nyata untuk melakukan ini, lihat jawabannya di:
dan pemrograman / kompilasi ruang pengguna khusus
Namun, tentu saja, jaminan "jail" yang diinginkan dapat diimplementasikan dengan pemrograman dalam ruang pengguna ( tanpa dukungan tambahan untuk fitur ini dari OS ; mungkin itu sebabnya fitur ini belum dimasukkan di tempat pertama dalam desain OS) ); dengan sedikit banyak komplikasi.
Kotak pasir yang disebutkan
ptrace
- atauseccomp
berbasis dapat dilihat sebagai beberapa varian penerapan jaminan dengan menulis pembantu kotak pasir yang akan mengendalikan proses Anda yang lain, yang akan diperlakukan sebagai "kotak hitam", program Unix yang berubah-ubah.Pendekatan lain bisa menggunakan teknik pemrograman yang dapat peduli tentang efek yang harus dilarang. (Pasti Anda yang menulis program itu; mereka bukan kotak hitam lagi.) Untuk menyebutkan satu, menggunakan bahasa pemrograman murni (yang akan memaksa Anda untuk memprogram tanpa efek samping) seperti Haskell hanya akan membuat semua efek dari program eksplisit, sehingga programmer dapat dengan mudah memastikan tidak akan ada efek yang dilarang.
Saya kira, ada fasilitas sandboxing yang tersedia untuk pemrograman dalam bahasa lain, misalnya, Java.
Lih Proposal proyek "Sandboxed Haskell" .
NaCl - tidak disebutkan di sini - milik grup ini, bukan?
Beberapa halaman yang mengumpulkan info tentang topik ini juga ditunjukkan dalam jawaban di sana:
sumber
chroot
, tetapi itu mungkin masih akan membutuhkan hak akses root yang nyata ...Ini adalah batasan mendasar dari model izin unix: hanya root yang dapat didelegasikan.
Anda tidak perlu menjadi root untuk menjalankan mesin virtual (tidak berlaku untuk semua teknologi VM), tetapi ini adalah solusi kelas berat.
User-mode Linux adalah solusi virtualisasi Linux-on-Linux yang relatif ringan. Tidak mudah diatur; Anda perlu mengisi partisi root (dalam direktori) dengan setidaknya jumlah minimum yang diperlukan untuk mem-boot (beberapa file
/etc
,/sbin/init
dan dependensinya, program login, shell, dan utilitas).sumber
Saya kira Anda dapat memiliki sedikit keberuntungan dengan
LD_PRELOAD
mencegat akses ke file tertentu, tetapi ini mungkin sangat sulit.sumber
LD_PRELOAD
tidak dapat dipercaya (dapat dielakkan), tetapi intersepsi melaluiptrace
dapat.LD_PRELOAD
solusi berbasis tidak dapat dipercaya sebagai langkah keamanan.Dari daftar lengkap saya hanya akan menambahkan:
fakeroot (dari pengelola paket debian): bertujuan membuat paket dengan alat "ramah". Ini bukan isolasi lengkap, tetapi membantu membangun paket dengan pengguna yang berbeda dan perangkat palsu dan file pseudo khusus lainnya.
fakechroot (yang menggunakan fakeroot). Program ini memiliki banyak bug. Misalnya, "/ etc / hosts" adalah hardcoded di glibc: Anda tidak dapat mengubahnya melalui alat ini.
qemu: Anda perlu mengkompilasi kernel linux, tetapi hasilnya sangat cepat, dan ini adalah mesin "palsu" (yaitu virtual) dengan hak root nyata. Anda dapat membuat dan memasang gambar boot apa saja.
sumber
Firejail adalah alat yang bagus untuk memenjarakan proses apa pun, dengan atau tanpa akses root dengan banyak opsi dan sangat fleksibel:
sumber