Hak akses mana yang tidak bisa dilanggar oleh pengguna super?

23

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).

Kolyunya
sumber
2
"Hak istimewa" atau "izin" adalah hak untuk melakukan sesuatu, hak yang dapat diberikan ke akun pengguna tertentu. Di UNIX dan Linux (tidak termasuk versi yang diperkeras seperti SELinux), root memiliki semua hak. Tidak ada hak yang bisa diberikan root, dan karenanya tidak ada hak yang bisa diambil darinya root.
MSalters
1
@Malters, maaf? Seseorang tentu dapat mempertahankan UID 0 sambil tetap mencabut kemampuan proses.
Charles Duffy
... atur SECBIT_NOROOT, dan menjadi 0 tidak lagi memberikan satu kemampuan secara otomatis.
Charles Duffy
Begitu banyak jawaban - apakah masuk akal untuk mengubahnya menjadi wiki komunitas, atau haruskah seseorang menulis ringkasan jawaban?
Simon Richter
1
@SimonRichter Saya juga akan sebagai George untuk memberi tahu kami apa yang dia maksud dalam ceramahnya.
Kolyunya

Jawaban:

24

akses ditolak untuk root :

rootdapat ditolak akses jaringan langsung. Ini berguna pada host yang terhubung internet, karena mengharuskan Anda login sebagai smith, kemudian sudo.

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".

Saya root, mengapa saya tidak bisa membuat / menghapus file ini, sementara pengguna biasa bisa?

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)

Saya root, mengapa saya tidak bisa mematikan proses ini?

Ada I / O yang tertunda dan drive fisik / LUN jarak jauh telah terputus, proses hanya dapat dimatikan dengan reboot.

Saya root, bagaimana cara mendapatkan kata sandi archemar?

Anda bisa su - archemarsaja, 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

  • Anda dapat melakukan root pada stasiun / PC Anda, dan menggunakan saham NFS perusahaan / kampus / universitas / penyedia.
  • Selanjutnya Anda hanya dapat memiliki login non-root di komputer yang mengekspor NFS.

Sekarang

cp /bin/bash /nfs/home/me/bash
chown root /nfs/home/me/bash
chmod u+s /nfs/home/me/bash

cukup login di server NFS, jalankan ./bashdan Anda root di server perusahaan / universitas.

Archemar
sumber
Kasus 1 pada dasarnya adalah kesalahan karena Anda hanya rootsecara 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.
MSalters
Secara teknis, rootpada mesin lokal bisa melakukan apa saja yang disukai dengan hak istimewa yang sama dengan pengguna lokal, su - usernamejika tidak ada yang lain. Saya tidak pernah yakin mengapa mereka repot-repot membuat roottidak dapat menulis jaringan seperti itu; sepertinya agak sia-sia.
Tom Hunt
4
Ini pertanyaan lama, "Bisakah rootmembuat kata sandi meskipun dia tidak bisa mengakses?"
corsiKa
5
@ TomHunt, salah satu alasan untuk tidak memberikan rootakses 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.
Markus
1
Membunuh suatu proses dalam menunggu tanpa gangguan sepertinya bukan hak saya. Itu adalah sesuatu yang tidak bisa Anda lakukan. Seperti menulis ke sistem file lengkap.
Blacklight Shining
11

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)

John
sumber
1
Terima kasih atas jawaban Anda, John! Tapi dia secara eksplisit menyatakan bahwa pertanyaan ini tidak terkait dengan SELinux ...
Kolyunya
Kemudian, jika tidak ada perincian lebih lanjut, saya harus mempertimbangkan pernyataan bahwa root tidak memiliki akses ke fungsi tertentu sebagai salah. (Saya tidak mempertimbangkan kasus OS dikunci dari BIOS atau serupa dengan keamanan BIOS.)
John
Anda juga memiliki kerumitan bahwa root mengontrol konfigurasi SELinux. Jika saya (sebagai root) diblokir dalam suatu tindakan saya dapat memodifikasi SELinux untuk memungkinkan tindakan dan kemudian mengubahnya kembali sesudahnya. Bisa lolos begitu saja tergantung di mana jejak log disimpan.
doneal24
2
Belum tentu benar. Singkirkan CAP_NET_ADMIN-nya, dan menjadi 0 masih tidak membiarkan proses mengubah konfigurasi jaringan. (Demikian juga untuk CAP_SYS_ADMIN dan kemampuan yang dikontrolnya, dll).
Charles Duffy
5

Di satu sisi, ada hal-hal yang tidak dapat dilakukan pengguna , seperti

  • direktori yang menghubungkan keras (karena keterbatasan sistem file)
  • menulis ke CD-ROM yang sudah dibakar (karena fisika)

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 :

Inilah yang membatasi, bahkan dari root:

  • Anda tidak dapat mengubah apa pun di / Sistem, / bin, / sbin, atau / usr (kecuali / usr / lokal); atau aplikasi dan utilitas bawaan apa pun. Hanya Penginstal dan pembaruan perangkat lunak yang dapat memodifikasi area ini, dan bahkan mereka hanya melakukannya saat menginstal paket yang ditandatangani Apple.
Siguza
sumber
1
Sebenarnya, Anda dapat menjalankan executable tanpa bit eksekusi yang ditetapkan: gcc -o hello hello.c && chmod 400 hello && /lib64/ld-linux-x86-64.so.2 ./hellomemberikan Hello, World!output yang diharapkan ,
doneal24
@ DougO'Neal Tapi bukankah /lib64/ld-linux-x86-64.so.2executable yang sebenarnya, dan ./hellohanya sebuah argumen untuk itu? Karena itu seperti melewatkan file teks yang berisi kode PHP ke penerjemah PHP ... atau seperti menjalankan skrip bash menggunakan bash ./my_script...
Siguza
1
@ DougO'Neal Itu dulu berfungsi, tetapi dinonaktifkan di versi terbaru glibc (untuk mencegahnya menjadi bypass sepele dari mount noexec).
duskwuff
@duskwuff Seberapa baru-baru ini versi glibc? Ini masih bekerja di bawah Ubuntu 14.04.
selesai24
1
Apple tidak menambahkannya ke ln tetapi kelas sistem yang ln menggunakan tautan misalnya memungkinkan ini melihat stackoverflow.com/a/4707231/151019 Ini adalah cara Time Machine bekerja
user151019
4

"Eksekusi inti sistem" yang Anda sebutkan berada di bawah rootkendali 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, bahkan root.

Hal yang sama berlaku untuk proses sistem. rootdiizinkan 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 bahwa roottidak 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 xizin, yang sangat mungkin bagi rootpengguna:

/lib/ld-linux.so.2 /path/to/executable
Dmitry Grigoryev
sumber
... tetapi proses uid-0 dapat kehilangan kemampuan untuk memuat modul kernel baru (atau melalui hotpatch /proc/kmem) melalui pencabutan kemampuan.
Charles Duffy
4

Salah satu contoh dapat memodifikasi file tidak berubah: Anda dapat mengatur atribut file idengan chattryang membuat file tidak dapat diubah bahkan untuk root. Sebagai contoh:

# whoami
root
# touch god
# chattr +i god
# rm god
rm: cannot remove ‘god’: Operation not permitted
# touch god
touch: cannot touch ‘god’: Permission denied

Perhatikan bahwa file tersebut muncul sebagai file normal yang dapat ditulis dalam ls -loutput:

# ls -l god
-rw-r--r-- 1 root root 0 Oct 26 19:27 god

Untuk melihat iatributnya, Anda harus menggunakan lsattr:

# lsattr god
----i----------- god

The halaman manual chattr negara berikut tentang iatribut:

File dengan atribut `i 'tidak dapat dimodifikasi: tidak dapat dihapus atau diganti namanya, tidak ada tautan yang dapat dibuat ke file ini dan tidak ada data yang dapat ditulis ke file. Hanya superuser atau proses yang memiliki kemampuan CAP_LINUX_IMMUTABLE yang dapat mengatur atau menghapus atribut ini.

Meskipun, root dapat dengan mudah membatalkan keabadian:

# chattr -i god
# rm -v god
removed ‘god’
Tuoma
sumber
Kernel Linux tidak menerapkan dengan benar fasilitas securelevel BSD (lagi), memberi Anda hasil yang semakin berkurang pada atribut yang tidak berubah dan hanya menambahkan . Dengan securelevel , bit-bit ini tidak dapat di-reset begitu sistem berada dalam runlevel multiuser, sehingga admin harus mematikan dan menggunakan konsol lokal, yang akan menghentikan penyerang jaringan.
Simon Richter
2

Di FreeBSD, Anda tidak dapat menggunakan gmirrorpartisi yang sudah terpasang, bahkan sebagai root:

label gmirror -v -b lebih suka gm0s1 ad4s1
gmirror: Tidak dapat menyimpan metadata di ad4s1: Operasi tidak diizinkan.

Anda harus menetapkan sysctl( kern.geom.debugflags=16) untuk dapat melakukannya.

rootadalah pengguna istimewa, tetapi hak ini diberikan oleh kernel. Jadi kernel memiliki lebih banyak keistimewaan daripada root.

Vinz
sumber
1

Dengan asumsi kolaborasi dari pengguna root itu sendiri, rootdapat dicegah dari mengakses mount FUSE (dengan allow_otheratau allow_rootopsi), 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.

sleblanc
sumber
0

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

orang lain
sumber