menghapus izin menulis tidak mencegah root menulis ke file

31

Saya baru saja memperhatikan pada mesin Ubuntu saya (filesystem ext3) bahwa menghapus izin menulis dari suatu file tidak membuat root tidak dapat menulisnya.

Apakah ini aturan umum izin file UNIX? Atau spesifik untuk Ubuntu? Atau kesalahan konfigurasi pada mesin saya?

# touch abc
# chmod ugo-w abc
# python
Python 2.6.4 (r264: 75706, 7 Des 2009, 18:45:15) 
[GCC 4.4.1] di linux2
Ketik "bantuan", "hak cipta", "kredit" atau "lisensi" untuk informasi lebih lanjut.
>>> terbuka ('abc', 'w'). write ('AAA \ n')
>>> 
# cat abc
AAA

Menulis ke file gagal (seperti yang diharapkan) jika saya melakukan ini dari akun pengguna normal saya.

  1. Apakah ini perilaku normal?

  2. Apakah ada cara untuk mencegah root agar tidak sengaja menulis ke file? (Lebih disukai menggunakan mekanisme sistem file normal, bukan AppArmor, dll.)

Tolong ajari saya tentang sesuatu yang saya pasti tidak mengerti.

CATATAN: Saya mengerti bahwa root memiliki kontrol total atas sistem dan dapat, misalnya, mengubah izin pada file apa pun. Pertanyaan saya adalah apakah izin yang ditetapkan saat ini diberlakukan pada kode yang berjalan sebagai root . Idenya adalah pengguna root yang mencegah dirinya sendiri untuk tidak sengaja menulis ke file.

CATATAN: Saya juga mengerti bahwa seseorang tidak boleh login sebagai root untuk operasi normal. Saya baru saja memperhatikan perilaku ini dan bertanya kepada Anda tentang hal itu.

laramichaels
sumber

Jawaban:

46

1) Ini adalah perilaku normal. root memiliki akses rw pada semua file setiap saat.

2) Anda dapat melindungi file bahkan dari root (bukan tindakan yang disengaja, tetapi tidak disengaja) dengan menggunakan

chattr +i filename.ext

Yaitu "ubah atribut tambah abadi". Untuk menghapus perlindungan:

chattr -i filename.ext

lihat man chattruntuk info lebih lanjut

brice
sumber
@ Brice: terima kasih banyak. langsung menjawab pertanyaan saya. tidak tahu tentang chattr.
laramichaels
sistem saya tampaknya membutuhkan akses root untuk dijalankan chattr. apakah ada cara mode pengguna untuk mengatur atribut seperti itu?
quack quixote
1
... meskipun itu adalah jawaban yang bagus untuk pertanyaan, "dapat rootmelindungi file dengan sangat baik bahkan Dia tidak bisa menghapusnya"!
quack quixote
4
Lebih tepatnya (dalam kasus Linux, toh), root memiliki CAP_DAC_OVERRIDEkemampuan yang memungkinkannya untuk mengabaikan ACL dan izin.
grawity
1
FYI, ekuivalen dengan ini pada OS X adalah sudo chflags <s|u>chg <file>untuk membuatnya tidak berubah untuk sistem atau pengguna, masing-masing, dan sudo chflags no<s|u>chg <file>untuk tidak mengaktifkan bendera abadi untuk masing-masing sistem atau pengguna.
GDP2
3
  1. Ya, ini normal. Akar adalah tuhan.

  2. Ya, ada beberapa cara untuk mencegah root menimpa file.

    • Setel bit yang tidak dapat diubah dengan chattr( +iset, -iunsets). Membutuhkan akses root, hanya berfungsi pada ext2 / ext3 (mungkin juga ext4), tetapi jika tidak praktis.
    • Jangan menjalankan aplikasi sebagai root. Tidak ada root privs, tidak ada file yang ditimpa. Gunakan sudountuk mengakses fungsi sistem.
    • Lepaskan sistem file. Tidak ada fs yang terpasang, tidak ada file yang ditimpa. [*]
    • Mematikan komputer. Tidak ada listrik, tidak ada file yang menimpa.

Metode-metode ini mengikuti secara logis dari # 1. Seperti yang Anda lihat, dua metode terakhir umumnya tidak berguna, dengan cara yang sama bahwa melindungi Windows terhadap virus dengan mencabut jaringan biasanya tidak berguna. Inilah sebabnya mengapa root berbahaya. [+]

[*] Dengan mengabaikan kemungkinan "tidak sengaja" menulis langsung ke perangkat blok, tentu saja. Ya, root dapat melakukannya. Ya, Anda dapat mencegahnya: putuskan sambungan perangkat.

[+] Di sinilah asal mula mitos BOfH itu. Itu tidak semua mitos.

quack quixote
sumber
@ ~ dukun: metode brice jauh lebih praktis daripada tiga daftar Anda. :)
laramichaels
@ ~ dukun: pertanyaan saya membuatnya jelas saya mengerti masalah dengan menjalankan perintah sebagai root.
laramichaels
3

Anda juga dapat membatasi akses file untuk pengguna root, dengan menggunakan kernel Linux "Capabilities": http://www.securityfocus.com/infocus/1400

Ada juga kemungkinan menggunakan SE-Linux atau patch kernel lainnya untuk membuat beberapa file tidak dapat diubah bahkan untuk di-root.


sumber
0

Saya pikir selama root adalah superuser, dan dia bisa melakukan apa saja, Anda tidak dapat menghapus izin apa pun darinya, juga jika Anda adalah root. Seharusnya kehendak root untuk mencegah dirinya melakukan atau tidak operasi (seperti menulis ke dalam file, atau membuka aplikasi).

Jadi tidak, kemungkinan Anda hanya akan menonaktifkan akun root, untuk mencegah penggunaan yang buruk.

Salam

[catatan untuk diri sendiri: kamu akan rendah hati ... mungkin kamu salah]

dag729
sumber