Mengapa saya tidak bisa menghapus file ini sebagai root?

20

Saya memiliki ujian direktori dengan 2 file di dalamnya. Saya perlu menghapus file tetapi izin ditolak. Bahkan rm -rfperintah tidak dapat menghapus file-file ini. Saya masuk sebagai pengguna root.

masukkan deskripsi gambar di sini

Anjing kampung
sumber
13
(1) Silakan kirim teks dari Terminal sebagai teks jika memungkinkan. Idealnya, salin dan tempel. Jika Anda tidak memiliki cara untuk menangkap teks kecuali menyalinnya secara manual, maka lakukan itu, tetapi ungkapkan bahwa Anda melakukannya, dan sertakan gambar tangkapan layar sehingga kami dapat memeriksa ulang pengetikan Anda. (2) Ketika Anda memiliki pertanyaan tentang izin, tolong, selalu, lakukan ls -la, sehingga kami dapat melihat izin di .(direktori).
G-Man Mengatakan 'Reinstate Monica'

Jawaban:

39

Dari pengguna root memeriksa atribut file

# lsattr 

jika Anda perhatikan i(tidak berubah) atau a(hanya-tambahkan), hapus atribut tersebut:

# man chattr
# chattr -i [filename]
# chattr -a [filename]
Invoker
sumber
1
Wow, itu rumit. Terima kasih telah mengirimkan solusi ini; Aku kehabisan akal. Saya cukup yakin bahwa ini entah bagaimana terkait dengan sinkronisasi serentak saya; itu dibiarkan dalam keadaan 'tidak dikenal' (karena banyak alasan), dan ini berarti bahwa direktori-direktori yang tidak dapat saya hapus ditetapkan (secara serentak) hanya untuk ditambahkan (ini adalah tipikal serempak). Tetapi saya tidak tahu bagaimana cara melihat / mengatur ulang mode append-only! Anda adalah penyelamat; Saya harap poster aslinya juga menyelesaikan masalah mereka.
Gwyneth Llewelyn
Ini adalah penyelamat.
Luka
16

Alasan paling umum untuk rmmengeluh bahwa Anda tidak memiliki izin untuk menghapus file, adalah bahwa izin pada direktori melarang Anda menghapus file. Untuk menghapus file, Anda harus menulis izin pada direktori. Izin pada file tidak relevan ( rmtanpa -fmeminta konfirmasi sebelum menghapus file read-only, tapi itu hanya konfirmasi, bukan batasan). Pada beberapa varian Unix seperti OSX (tetapi bukan Linux), ACL pada file dapat mencegah penghapusannya; ls -lakan ditampilkan @di akhir bidang izin jika ada entri ACL pada file.

Akses sebagai root memintas izin, sehingga root dapat menghapus file bahkan dalam direktori read-only.

Output dari ls -lmenunjukkan a .di akhir kolom izin. Ini menunjukkan bahwa file tersebut memiliki konteks keamanan SELinux. Tidak seperti izin dasar dan ACL, konteks keamanan SELinux pada file dapat mengontrol siapa yang diizinkan untuk menghapusnya. Lebih jauh SELinux tidak selalu dapat di bypass oleh root (dimungkinkan untuk menjalankan proses sebagai ID pengguna 0 tetapi dengan hak sesedikit yang dipilih oleh perancang kebijakan SELinux). Untuk melihat apa yang bisa dilakukan oleh konteks SELinux, jalankan ls -lZ . exam_a.

Hal lain yang dapat mencegah file terhapus adalah jika file atau direktori yang memuatnya memiliki atribut Linux append-only atau immutable . Jalankan lsattr -d . exam_auntuk melihat atribut Linux. Jika atribut aatau iaktif, Anda harus menghapusnya ( chattr -a -i . exam_a) untuk menghapus file; hanya root yang bisa melakukannya. Root tidak dapat mem-bypass atribut ini untuk menghapus file, atribut harus dimatikan dulu.

Namun hal lain yang mencegah file terhapus adalah jika sistem file di-mount hanya-baca, tetapi Anda akan mendapatkan pesan kesalahan yang berbeda dalam kasus itu.

Gilles 'SANGAT berhenti menjadi jahat'
sumber