Bagaimana cara kerja izin file untuk pengguna "root"?

28

Saya memiliki file berikut:

---------- 1 Steve Steve 341 2017-12-21 01:51 myFile.txt

Saya mengalihkan pengguna ke rootterminal, dan saya perhatikan perilaku berikut:

  • Saya dapat membaca file ini dan menulisnya.

  • Saya tidak bisa menjalankan file ini.

  • Jika saya mengatur xbit dalam izin pengguna ( ---x------) atau izin grup ( ------x---) atau izin lain ( ---------x) dari file, maka saya akan dapat menjalankan file ini.

Adakah yang bisa menjelaskan kepada saya atau mengarahkan saya ke tutorial yang menjelaskan semua aturan yang berlaku ketika rootpengguna berurusan dengan file dan direktori?

Steve
sumber

Jawaban:

38

Akses istimewa ke file dan direktori sebenarnya ditentukan oleh kemampuan, bukan hanya dengan menjadi rootatau tidak. Dalam praktiknya, rootbiasanya memiliki semua kemampuan yang mungkin, tetapi ada situasi di mana semua / banyak dari mereka dapat dijatuhkan, atau beberapa diberikan kepada pengguna lain (proses mereka).

Secara singkat, Anda sudah menjelaskan bagaimana kontrol akses memeriksa bekerja untuk proses istimewa. Inilah bagaimana sebenarnya berbagai kemampuan memengaruhinya:

KemampuanCAP_DAC_OVERRIDE utama di sini adalah , sebuah proses yang dapat "memotong file membaca, menulis, dan menjalankan pemeriksaan izin". Itu termasuk membaca dan menulis ke file apa pun, serta membaca, menulis dan mengakses direktori.

Itu sebenarnya tidak berlaku untuk mengeksekusi file yang tidak ditandai sebagai executable. The komentar digeneric_permission ( fs/namei.c), sebelum pemeriksaan akses untuk file, mengatakan bahwa

Baca / tulis DAC selalu bisa ditimpa. DAC yang dapat dieksekusi dapat ditimpa ketika ada setidaknya satu set bit exec.

Dan kode memeriksa bahwa setidaknya ada satu xbit yang diatur jika Anda mencoba untuk mengeksekusi file. Saya menduga itu hanya fitur kenyamanan, untuk mencegah tidak sengaja menjalankan file data acak dan mendapatkan kesalahan atau hasil yang aneh.

Bagaimanapun, jika Anda bisa mengesampingkan izin, Anda bisa membuat salinan yang dapat dieksekusi dan menjalankannya. (Meskipun mungkin membuat perbedaan dalam teori untuk file setuid dari suatu proses mampu mengesampingkan izin file ( CAP_DAC_OVERRIDE), tetapi tidak memiliki kemampuan terkait lainnya ( CAP_FSETID/ CAP_FOWNER/ CAP_SETUID). Tetapi memiliki CAP_DAC_OVERRIDEmemungkinkan pengeditan /etc/shadowdan hal-hal seperti itu, jadi kira-kira sama untuk hanya memiliki akses root penuh.)

Ada juga CAP_DAC_READ_SEARCHkemampuan yang memungkinkan untuk membaca file dan mengakses direktori apa pun, tetapi tidak untuk mengeksekusi atau menulis kepada mereka; dan CAP_FOWNERitu memungkinkan proses untuk melakukan hal-hal yang biasanya disediakan hanya untuk pemilik file, seperti mengubah bit izin dan grup file.

Mengganti bit lengket pada direktori hanya disebutkan di bawah CAP_FOWNER, jadi sepertinya itu CAP_DAC_OVERRIDEtidak cukup untuk mengabaikannya. (Ini akan memberi Anda izin menulis, tetapi biasanya dalam direktori lengket Anda memilikinya, dan +tmembatasi itu.)

(Saya pikir perangkat khusus dianggap sebagai "file" di sini. Setidaknya generic_permission()hanya memiliki pemeriksaan jenis direktori, tapi saya tidak memeriksa di luar itu.)


Tentu saja, masih ada situasi di mana bahkan kemampuan tidak akan membantu Anda memodifikasi file:

  • beberapa file dalam /procdan /sys, karena mereka bukan file yang sebenarnya
  • SELinux dan modul keamanan lainnya yang mungkin membatasi root
  • chattrtidak berubah +idan hanya menambahkan +aflag pada ext2 / ext3 / ext4, keduanya menghentikan bahkan root, dan mencegah juga file mengubah nama dll.
  • sistem file jaringan, di mana server dapat melakukan kontrol aksesnya sendiri, misalnya root_squashdalam NFS mem-root peta kepada siapa pun
  • FUSE, yang saya anggap bisa melakukan apa saja
  • mount hanya baca
  • perangkat hanya-baca
ilkkachu
sumber
Mengejutkan bahwa komentar file sumber sepertinya tidak dicerminkan di capabilities(7)halaman manual - pertimbangkan untuk mengajukan laporan bug!
Toby Speight
@ilkkachu Seperti yang telah ditunjukkan, rootmemiliki rw-izin pada (hampir) file apa pun, dan untuk mendapatkan xizin, maka xbit tersebut harus ditetapkan pada izin pengguna / grup / orang lain pada file tersebut. Tetapi bagaimana dengan direktori, apakah rootmemiliki rwxizin pada direktori apa pun (bahkan jika direktori tidak memiliki izin sama sekali ( ----------))?
Joseph
@ Joseph, ya, CAP_DAC_OVERRIDEmemungkinkan mengesampingkan semua izin direktori, sehingga Anda bisa membaca, menulis, dan mengakses direktori (mis. Daftar konten, buat, dan hapus tautan file). Komentar yang saya kutip tentang exec bit adalah dalam konteks file (hanya).
ilkkachu
11

Persis seperti yang Anda perhatikan untuk izin default:

  • Baca & tulis:
    Secara default, pengguna Root dapat mengakses file apa pun di sistem. Anda dapat menghapus akses ini dengan mengubah atribut seperti jelaskan di sini: chattr . Ini kemudian dikaitkan dengan kemampuan.

  • Jalankan:
    Pengguna root tidak memiliki izin eksekusi kecuali setidaknya satu bit eksekusi diatur.

Kevin Lemaire
sumber
Dimungkinkan untuk memiliki file yang root tidak dapat menulis atau menghapus. Jadi "Root user dapat mengakses file apa saja di sistem." salah.
Lukas Boersma
Maksud Anda seperti sistem file read-only? atau Anda punya kasing lain?
Kevin Lemaire
1
Saya berbicara tentang kasus-kasus seperti ini: file unwriteable , file undeleteable
Lukas Boersma
5

Itu myFile.txtdiperoleh oleh chmod 000 myFile.txt.

0 no permission
1 execute
2 write
3 execute + write
4 read 
5 read + execute
6 read + write
7 all

--------- berarti tidak ada izin untuk pengguna, grup, dan lainnya.

Pengguna root memiliki kemampuan tidak terbatas untuk memodifikasi file ini. Baca / tulis diberikan. Untuk menjalankan file ini, pengguna root harus membuatnya dapat dieksekusi. (chmod 100, 010 atau 001)

GAD3R
sumber
2

Mode eksekusi diperlakukan sedikit berbeda dari mode lainnya.

Izin baca dan tulis digunakan untuk menegakkan kebijakan keamanan. The rootpengguna umumnya kebal dari pembatasan keamanan (ada beberapa pengecualian, seperti file berubah, dan fitur-fitur modern seperti kemampuan telah membuat fine grained lebih), yang mengapa nama lain untuk akun ini adalah "superuser".

Jalankan izin lebih dari mode penasehat, membedakan apakah file dimaksudkan untuk dapat dieksekusi atau hanya data. Karena itu, bahkan pengguna root mematuhinya - tidak ada gunanya dalam mengeksekusi file data. Jika tidak ada izin eksekusi yang ditetapkan, root tidak dapat mengeksekusi file; jika ada dari mereka yang ditetapkan, dia bisa. Tentu saja, karena root juga memiliki izin untuk mengubah izin file apa pun, akun dapat membuat file dapat dieksekusi jika diinginkan (kecuali jika sistem file hanya baca-saja).

BTW, skrip adalah kasus yang menarik dalam hal ini. Script adalah file data untuk juru bahasa yang relevan. Jika skrip memiliki #!garis, Anda dapat menjalankannya sebagai program - penerjemah yang disebutkan di shebang dijalankan dengan nama file skrip sebagai argumen. Tapi ini hanya akan dilakukan ketika izin dieksekusi diatur. Di sisi lain, Anda bisa menjalankan penerjemah secara langsung, mis /bin/bash scriptname. Penerjemah hanya peduli jika mereka dapat membaca file, mereka tidak memeriksa izin eksekusi.

Barmar
sumber
1

Biarkan saya jelaskan secara teoretis.

pengguna root adalah raja dari sistem operasi.

Jika file atau direktori memiliki izin seperti X untuk dieksekusi tetapi tidak ada yang lain dan seseorang seperti Steve memiliki file sendiri maka root juga dapat mengeksekusi file tersebut.

Selalu ingat, di root Linux bisa melakukan apa saja, tidak ada batasan pada root.

Hassan Sohail
sumber
Tidak apa-apa. Jika file memiliki atribut yang tidak dapat diubah , misalnya, maka bahkan root tidak dapat mengubahnya (kecuali ia secara eksplisit menghapus atribut itu).
Ruslan
@Ruslan ya, tapi terlalu banyak kasus luar biasa dia baru jadi saya menjelaskannya sebagai dasar, secara default atribut seperti ini tidak terjadi.
Hassan Sohail