Fr. Br. George mengatakan dalam salah satu ceramahnya (ini dalam bahasa Rusia) bahwa ada beberapa hak akses yang tidak dapat dilanggar oleh pengguna super. Itu ada beberapa hak akses yang dapat melarang superuser melakukan sesuatu.
Saya tidak dapat menemukan informasi ini di Internet dan saya ingin tahu apa itu. Ini mungkin sesuatu yang berhubungan dengan eksekusi inti sistem, bukan? Mungkin dia tidak bisa menghentikan beberapa proses sistem? Atau mungkin dia tidak bisa menjalankan proses dalam mode nyata?
Pertanyaan ini tidak ada hubungannya dengan SELinux (George membicarakannya tepat sebelum pertanyaan).
root
privileges
access-control
Kolyunya
sumber
sumber
root
, dan karenanya tidak ada hak yang bisa diambil darinyaroot
.SECBIT_NOROOT
, dan menjadi 0 tidak lagi memberikan satu kemampuan secara otomatis.Jawaban:
akses ditolak untuk root :
root
dapat ditolak akses jaringan langsung. Ini berguna pada host yang terhubung internet, karena mengharuskan Anda login sebagaismith
, kemudiansudo
.beberapa hal yang tidak bisa dilakukan root :
Ini BUKAN karena kurangnya hak istimewa. Saya tidak dapat melihat apa pun yang tidak dapat dilakukan root, namun beberapa masalah teknis mungkin dialami sebagai "terlarang".
Anda sedang berbagi NFS / samba, dan Anda tidak memberikan
access=
otorisasi khusus ( ). Pengguna biasa gagal menggunakan common law. (lihat root lokal vs remote di bawah ini)Ada I / O yang tertunda dan drive fisik / LUN jarak jauh telah terputus, proses hanya dapat dimatikan dengan reboot.
Anda bisa
su - archemar
saja, atau mengubah kata sandi archemar tanpa mengetahui yang sebelumnya, tetapi Anda tidak dapat membacanya (singkat logger kunci), karena kata sandi disimpan menggunakan hash satu arah.root lokal vs jarak jauh
Sekarang
cukup login di server NFS, jalankan
./bash
dan Anda root di server perusahaan / universitas.sumber
root
secara lokal, tidak harus pada sistem lain. Kasus 2 dan 3 bukan hak istimewa (mereka tidak dapat diberikan kepada siapa pun). Jadi +1, kalimat pertama Anda tampaknya benar.root
pada mesin lokal bisa melakukan apa saja yang disukai dengan hak istimewa yang sama dengan pengguna lokal,su - username
jika tidak ada yang lain. Saya tidak pernah yakin mengapa mereka repot-repot membuatroot
tidak dapat menulis jaringan seperti itu; sepertinya agak sia-sia.root
membuat kata sandi meskipun dia tidak bisa mengakses?"root
akses ke saham NFS adalah untuk mencegah pembuatan binari "suid root" pada server jarak jauh, sesuatu yang dapat dimanfaatkan menjadi akses jarak jauh lengkap ke server.Dalam kasus biasa, ini salah - superuser memiliki hak istimewa / izin untuk fungsionalitas apa pun yang disediakan sistem (1). Di mana aturan ini rusak adalah ketika Anda melempar SELinux ke dalam campuran. Dengan SELinux, dimungkinkan untuk membatasi hak akses root sekalipun untuk melarang tindakan tertentu. Namun, tindakan spesifik yang dilarang sangat tergantung pada konfigurasi SELinux mesin lokal, sehingga bahkan dengan SELinux, pertanyaan ini tidak dapat dijawab dalam pengertian umum.
(1) - jika suatu sistem tidak menyediakan fitur yang diberikan, misalnya tidak ada fungsi kernel real-time, maka saya menganggap pernyataan "root tidak memiliki akses ke fungsi ini" menjadi salah, karena pernyataan itu bergantung pada asumsi salah (yaitu bahwa fitur yang diberikan tersedia untuk siapa saja di sistem itu)
sumber
Di satu sisi, ada hal-hal yang tidak dapat dilakukan pengguna , seperti
Tetapi itu bukan hak istimewa, karena tidak dapat diberikan, itu tidak mungkin bagi siapa pun.
Lalu ada batasan untuk seluruh sistem atau bagian-bagiannya yang bisa dihidupkan atau dimatikan.
Misalnya, pada OS X ada opsi untuk hanya mengizinkan kode untuk dijalankan jika telah ditandatangani oleh Apple.
Saya juga tidak menganggap ini sebagai hak istimewa, karena tidak ada pengguna yang dapat memilikinya jika superuser tidak bisa. Anda hanya dapat menonaktifkannya secara global.
Sunting:
Gagasan Anda tentang file tanpa bit yang dapat dieksekusi juga akan termasuk dalam kategori ini, karena secara harfiah tidak ada yang bisa melakukan itu, dan tidak ada yang dapat diberikan izin itu.
Dan bahkan ketika memberikan izin kepada pengguna atau grup lain untuk mengeksekusi file itu, tetapi bukan root atau root grup pengguna, root akan tetap dapat mengeksekusi file tersebut (diuji pada OS X 10.10, 10.11 dan server Ubuntu 15.04).
Terlepas dari kasus-kasus itu, nyaris tidak ada root yang tidak bisa dilakukan.
Namun, ada hal yang disebut mode kernel (sebagai lawan dari mode pengguna).
Sejauh yang saya tahu, pada sistem waras hanya kernel, ekstensi kernel dan driver berjalan dalam mode kernel, dan yang lainnya (termasuk shell dari mana Anda login sebagai root) berjalan dalam mode pengguna.
Karena itu Anda dapat berpendapat bahwa "menjadi root tidak cukup". Namun, pada sebagian besar sistem, pengguna root dapat memuat modul kernel, yang pada gilirannya akan berjalan dalam mode kernel, secara efektif memberi root cara menjalankan kode dalam mode kernel.
Namun ada sistem (seperti iOS) di mana ini tidak (sewenang-wenang) mungkin, setidaknya tidak tanpa mengeksploitasi keutuhan keamanan. Ini sebagian besar disebabkan oleh peningkatan keamanan, seperti penegakan penandatanganan kode.
Sebagai contoh, ada kunci enkripsi AES yang dibangun ke dalam prosesor iDevices, yang hanya dapat diakses dari mode kernel. Modul kernel dapat mengaksesnya, tetapi kode dalam modul kernel tersebut juga harus ditandatangani oleh Apple agar kernel dapat menerimanya.
Pada OS X, sejak versi 10.11 (El Capitan) ada juga yang disebut "mode tanpa akar" (walaupun namanya menyesatkan karena root masih ada), yang secara efektif melarang root hal-hal tertentu yang masih dapat dilakukan oleh installer.
Mengutip dari jawaban luar biasa ini di AskDifferent :
sumber
gcc -o hello hello.c && chmod 400 hello && /lib64/ld-linux-x86-64.so.2 ./hello
memberikanHello, World!
output yang diharapkan ,/lib64/ld-linux-x86-64.so.2
executable yang sebenarnya, dan./hello
hanya sebuah argumen untuk itu? Karena itu seperti melewatkan file teks yang berisi kode PHP ke penerjemah PHP ... atau seperti menjalankan skrip bash menggunakanbash ./my_script
..."Eksekusi inti sistem" yang Anda sebutkan berada di bawah
root
kendali misalnya melalui modul kernel yang dapat dimuat. Tentu saja, ini mengasumsikan memuat modul kernel didukung oleh kernel, tidak ada yang dapat melakukan tindakan yang tidak layak, bahkanroot
.Hal yang sama berlaku untuk proses sistem.
root
diizinkan untuk menghentikan proses apa pun, tetapi tidak mungkin menghentikan proses yang berjalan dalam mode kernel tanpa mengorbankan integritas kernel, sehingga tidak mungkin untuk menghentikan proses tersebut segera. Perhatikan bahwaroot
tidak akan ditolak untuk membunuh proses tersebut, membunuh itu sendiri tidak akan berpengaruh.Akhirnya, mode nyata: Kernel Linux tidak memiliki dukungan untuk itu, jadi sekali lagi, tidak ada yang bisa melakukan yang tidak mungkin, bahkan tidak
root
.@Siguza menyebutkan eksekusi file tanpa
x
izin, yang sangat mungkin bagiroot
pengguna:sumber
/proc/kmem
) melalui pencabutan kemampuan.Salah satu contoh dapat memodifikasi file tidak berubah: Anda dapat mengatur atribut file
i
denganchattr
yang membuat file tidak dapat diubah bahkan untuk root. Sebagai contoh:Perhatikan bahwa file tersebut muncul sebagai file normal yang dapat ditulis dalam
ls -l
output:Untuk melihat
i
atributnya, Anda harus menggunakanlsattr
:The halaman manual chattr negara berikut tentang
i
atribut:Meskipun, root dapat dengan mudah membatalkan keabadian:
sumber
Di FreeBSD, Anda tidak dapat menggunakan
gmirror
partisi yang sudah terpasang, bahkan sebagai root:Anda harus menetapkan
sysctl
(kern.geom.debugflags=16
) untuk dapat melakukannya.root
adalah pengguna istimewa, tetapi hak ini diberikan oleh kernel. Jadi kernel memiliki lebih banyak keistimewaan daripadaroot
.sumber
Dengan asumsi kolaborasi dari pengguna root itu sendiri,
root
dapat dicegah dari mengakses mount FUSE (denganallow_other
atauallow_root
opsi), tetapi ini karena FUSE dirancang untuk bertindak dengan cara ini. Karena FUSE berada pada lapisan virtual, ia dapat mengembalikan kesalahan apa pun yang disukainya berdasarkan logika, sebagai lawan dari modul perangkat blok umum yang berusaha untuk setransparan dan setipis mungkin, mendelegasikan izin ke lapisan lain.Ini tidak mencegah pengguna root dari menonaktifkan opsi, atau mengganti modul FUSE dengan yang membuang opsi secara diam-diam, kecuali jika Anda membuat sistem file read-only. Namun, ini hanya mengarah pada situasi "siapa yang mengawasi para penjaga": bagaimana Anda dapat memvalidasi bahwa sistem tersebut tidak berbohong? Shell Anda mungkin bahkan duduk di chroot yang menunjukkan Anda modul FUSE yang sah, sementara kernel sebenarnya menjalankan versi jahat itu.
sumber
Saya akan mengatakan bahwa ketidakmampuan untuk mengeksekusi file yang tidak dapat dieksekusi adalah hal yang sepele, karena tergantung pada izin file. (Dimungkinkan untuk menyiasati ini menggunakan /lib64/ld-linux-x86-64.so.2 untuk file yang tidak dapat dieksekusi, tetapi bukan file pada mount no-exec)
Ada juga masalah kunci file wajib, yang mencegah pengeditan file jika file saat ini sedang digunakan oleh suatu proses, meskipun pengguna super dapat mematikan proses.
Pada satu titik, pengguna super tidak dapat meng-unmount perangkat saat perangkat sedang sibuk, tetapi ini sekarang dapat dilakukan dengan menggunakan umy yang malas.
Keterbatasan lainnya adalah:
tidak dapat memodifikasi file yang tidak dapat diubah, dan hanya dapat menambahkan ke file yang hanya ditambahkan (linux memungkinkan pengguna super untuk menghapus flag yang tidak bisa diubah dan hanya menambahkan pada level run apa pun, namun, sebagian mengalahkan tujuan mereka)
tidak dapat menulis ke mount read-only, atau menjalankan apa pun di mount no-exec
tidak dapat mengikat mount yang tidak mengikat
tidak dapat mengount ulang sistem file sebagai baca-tulis jika perangkat bloknya hanya baca-saja
tidak dapat membuat stat apa pun pada mount sekering yang dimiliki oleh pengguna lain, kecuali itu dipasang allow-other atau allow-root
tidak dapat melanggar pengaturan SELinux
keterbatasan yang disengaja melekat dalam sistem itu sendiri, yang mempengaruhi root:
tidak dapat langsung mengatur waktu-c suatu file (atau waktu kelahiran, jika itu pernah diterapkan)
tidak dapat melihat kata sandi sebagai teks biasa
sumber