Linux - Apakah ada cara untuk mencegah / melindungi file agar tidak dihapus bahkan oleh root?

89

Saya memiliki file yang sangat penting yang digunakan aplikasi di tempat kerja saya, saya perlu memastikan itu tidak menghapus apa pun, bagaimana saya bisa melakukan itu?


sumber
13
Buat cadangan, sehingga Anda dapat mengembalikannya ... Selain itu, chattr +imungkin membantu tetapi akan membuat file hanya-baca juga (dan dapat diganti dengan chattr -i), juga Anda dapat mencoba melindunginya dengan SELInux dll.
Sven
43
Dapatkah root membuat proses yang bahkan root tidak bisa membunuh?
Mark Gabriel
4
@ MarkGabriel Ya. Bom garpu. :)
reirab
8
Admin HW dapat datang dan menghapus disk, merobeknya, membakar sisa-sisa dan memberi makan mereka ke hoghs. Atau, lebih baik, beberapa programmer C (++) dapat menyebabkan beberapa hidung sengau. Apa pun yang penting bagi Anda, buat cadangannya. Dua kali.
Pavel

Jawaban:

133

Ya, Anda dapat mengubah atribut file menjadi hanya-baca.

Perintahnya adalah:

chattr +i filename

Dan untuk menonaktifkannya:

chattr -i filename

Dari man chattr:

File dengan iatribut 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 pengguna super atau proses yang memiliki CAP_LINUX_IMMUTABLEkemampuan yang dapat mengatur atau menghapus atribut ini.

Itai Ganot
sumber
11
Bagi yang berminat, padanan bsd adalahchflags schg
Andrew Domaszek
85
Perhatikan bahwa pengguna dengan akses root dapat membatalkan flag itu dan kemudian menghapus file. Itu tidak mungkin terjadi secara tidak sengaja, tetapi itu tidak melindungi terhadap penghapusan yang disengaja.
Hibah
6
@Grant, tidak jika Securelevel diatur cukup tinggi. Proses boot menetapkan tingkat keamanan ke 2 sebelum jaringan diaktifkan, jadi mengatur ulang flag memerlukan akses mesin lokal (tetapi ini berarti bahwa file yang digunakan dalam proses boot sebelum waktu tersebut juga harus tidak berubah).
Simon Richter
16
@Grant Jika seseorang ingin membuatnya ekstrem, Anda tidak dapat mencegah partisi dihapus atau disk dimasukkan ke dalam tungku atau peluruhan proton dalam 10 ^ 30 tahun ...
Hagen von Eitzen
2
@Itu Ganot man aku berharap aku sudah membacanya 4 hari yang lalu. Saya adalah pertanyaan dalam ujian yang saya ikuti = /
vfbsilva
84

Membakarnya ke CD. Masukkan CD ke dalam drive CD-ROM dan akses dari sana.

Thorbjørn Ravn Andersen
sumber
15
+1 untuk berpikir di luar kotak. Dan, afaik, itu juga telah digunakan sebelumnya dalam beberapa keadaan (cdrom drive kotak hitam dengan cd di dalamnya dikirim ke tujuannya). Mungkin tidak tepat jika seseorang dapat memutuskan drive.
Alex Mazzariol
1
Kiss aku menyukainya! +1
MonkeyZeus
2
Saya pikir itu jawaban yang benar untuk pertanyaan ini. Mengubah atribut file (chattr -i) tidak dapat mencegah tindakan jahat.
Bruno von Paris
7
Hari ini kartu SD ukuran penuh dalam cardreader internal mungkin merupakan solusi yang lebih baik - konsumsi daya yang lebih rendah, akses yang lebih cepat dalam banyak kasus, dan lebih tahan lama dalam penggunaan tanpa penulisan.
Chris H
3
@ jpmc26 karenanya drive CD-ROM. Itu hanya baca / saja.
Thorbjørn Ravn Andersen
29
  1. Buat gambar sistem file.
  2. Pasang gambar.
  3. Salin file ke gambar yang dipasang.
  4. Lepas gambar dan remount sebagai hanya-baca.
  5. Sekarang Anda tidak dapat menghapusnya.

Contoh:

# dd if=/dev/zero of=readonly.img bs=1024 count=1024
# mkfs.ext2 readonly.img
# mkdir readonlyfolder
# mount readonly.img readonlyfolder/
# echo "can't delete this" > readonlyfolder/permanent.txt
# umount readonlyfolder
# mount -o ro readonly.img readonlyfolder
# cat readonlyfolder/permanent.txt 
can't delete this
# rm readonlyfolder/permanent.txt 
rm: cannot remove `readonlyfolder/permanent.txt': Read-only file system
Ken A
sumber
3
mount -o remount,rw readonlyfolder/ && rm readonlyfolder/permanent.txt
Kaz Wolfe
3
Mengambil ini sedikit lebih jauh, Anda dapat menggunakan squashfsatau cramfsyang dikompresi dan hanya-baca. Perlu alat khusus untuk membangun sistem file.
Zan Lynx
7

Linux memiliki opsi bind-mount yang merupakan fitur yang cukup kuat dan berguna untuk diketahui :

%  cd $TMP && mkdir usebindmountluke && cd usebindmountluke
%  echo usebindmountluke > preciousfile
%  sudo mount -B preciousfile preciousfile
%  sudo mount -oremount,ro preciousfile
%  echo sowhat > preciousfile
zsh: read-only file system: preciousfile
%  rm preciousfile
rm: cannot remove ‘preciousfile’: Read-only file system

- Apa yang dilakukan di sini adalah bind-mount file untuk dirinya sendiri (ya, Anda dapat melakukannya di Linux), kemudian dipasang kembali dalam mode R / O-mode. Tentu saja ini bisa dilakukan pada direktori juga.

poige
sumber
6

Anda juga harus membuat banyak tautan keras ke file tersebut. Ini harus di berbagai lokasi yang tidak dapat diakses oleh pengguna biasa.

Dengan cara ini, bahkan jika mereka berhasil mengesampingkan perlindungan chattr Anda, data akan tetap ada dan Anda dapat dengan mudah mengembalikannya ke tempat yang dicari aplikasi Anda.

andrew
sumber
11
Tautan keras tidak akan melindungi konten file.
200_sukses
Namun mereka akan memberikan perlindungan tambahan dari DELETION, yang merupakan pertanyaan awal.
barbecue
2
@barbecue Jika file tersebut tidak terhubung dengan nama yang dicari oleh aplikasi, tidak masalah bahwa konten file ada di bawah nama lain. Untuk apa pun yang mencari file dengan nama yang diharapkan, file tersebut masih telah dihapus.
CVn
5

Orang lain telah menjawab pertanyaan Anda saat Anda menanyakannya. Seperti @Sven disebutkan dalam komentar, solusi umum untuk pertanyaan, "Bagaimana saya memastikan saya tidak pernah kehilangan file?" adalah membuat cadangan file. Buat salinan file dan simpan di banyak tempat. Selain itu, jika file tersebut sangat penting dan perusahaan Anda memiliki kebijakan untuk membuat cadangan data penting dengan layanan cadangan, Anda mungkin melihat apakah file ini termasuk dalam layanan.

Kevin
sumber
2
Yah, tentu saja file sedang dicadangkan secara teratur, saya hanya ingin lapisan perlindungan lain terhadap pengguna yang terkadang bekerja pada kotak dengan izin pengguna root.
5

Pada Linux yang berubah bendera hanya didukung pada beberapa jenis sistem file (sebagian besar yang asli seperti ext4, xfs, btrfs...)

Pada sistem file di mana itu tidak didukung, opsi lain adalah untuk mengikat-mount file itu sendiri dalam mode read-only. Itu harus dilakukan dalam dua langkah:

mount --bind file file
mount -o remount,bind,ro file

Itu harus dilakukan pada setiap boot, misalnya via /etc/fstab.

sch
sumber
Saya harap siapa pun umountfile untuk mendapatkan izin menulis lagi
whoan
3

Dalam komentar atas jawaban Kevin , Jerry menyebutkan:

Yah, tentu saja file sedang dicadangkan secara teratur, saya hanya ingin lapisan perlindungan lain terhadap pengguna yang terkadang bekerja pada kotak dengan izin pengguna root. -

Saya akan berasumsi bahwa Anda tidak dapat mengubah praktik ini, karena ini adalah ide yang sangat, sangat buruk.

Semua saran tentang menggunakan perangkat baca-saja memiliki masalah yang sama - itu menjadikannya PITA bagi Anda untuk membuat perubahan yang sah ketika Anda perlu. Dalam kasus drive yang dapat dikunci, seperti kartu SD, Anda mengalami masalah yang tiba-tiba Anda rentan ketika Anda membuka kunci untuk melakukan perubahan.

Apa yang saya sarankan sebagai gantinya adalah menyiapkan mesin lain sebagai server NFS, dan berbagi direktori dengan file-file penting ke mesin yang telah di-root oleh pengguna. Bagikan pemasangan sebagai hanya-baca, sehingga mesin dengan pengguna yang tidak Anda percayai tidak dapat membuat modifikasi apa pun. Saat Anda perlu melakukan perubahan secara sah, Anda dapat terhubung ke server NFS dan membuat perubahan di sana.

Kami menggunakan ini untuk server web kami, sehingga eksploit yang berhasil terhadap server web tidak akan dapat menyisipkan atau mengubah file apa pun yang kemudian dilayani server, atau mengubah konfigurasi.

Perhatikan bahwa ini bisa macet dilewati dengan cara yang sama bahwa semua yang terkait dengan mount-point bisa:

  • Buat salinan dari direktori yang dilindungi
  • Lepas direktori
  • Pindahkan salinan di tempat mount, atau symlink di jika mount itu tidak memiliki ruang yang cukup.
Joe H.
sumber
Mengapa ini merupakan "ide yang sangat, sangat buruk" untuk membuat cadangan file penting secara teratur dan juga berupaya melindungi dokumen asli dari penghapusan tidak disengaja? Dalam pertanyaan awal OP, dan dari komentar OP pada jawaban yang Anda referensikan, jelas bahwa kekhawatirannya bukanlah aktivitas jahat, tetapi aktivitas yang tidak disengaja / tidak kompeten.
Craig
1
@Craig: Adalah ide buruk untuk memiliki banyak pengguna dengan root, terutama jika mereka tidak dipercaya untuk tidak mengacaukan file-file penting.
Joe H.
Ah ... tentu saja. :-) Tapi itu bukan inti dari pertanyaan OP. OP menegaskan bahwa ada yang pengguna dengan akses root yang harus dilindungi tanpa sengaja menghapus file.
Craig
@Craig: itu mungkin bukan inti dari pertanyaan, tetapi itu adalah inti masalahnya (masalah XY?) ... tapi saya tidak tahu apa yang mereka lakukan sebagai root, jadi jika mereka dapat menggunakan setuid dan / atau hak istimewa sudo terbatas. Dan Anda harus membaca kembali pertanyaannya, seperti yang saya lihat tidak disebutkan oleh Jerry bahwa ia hanya berusaha melindungi terhadap penghapusan yang tidak disengaja ("saya perlu memastikan itu tidak menghapus apa pun"), dan ia hanya memberikan satu tindak lanjut yang saya lihat (yang memicu respons saya).
Joe H.
2

Mengapa tidak membuat gambar ISO 9660, yang hanya bisa dibaca oleh desain?

Pasang gambar ISO, dan itu akan terlihat seperti CD-ROM, tetapi dengan kinerja hard drive, dan file pada gambar yang dipasang akan sama amannya dari penghapusan seperti file pada CD-ROM fisik.

Gagasan membakar file sensitif ke CD dan menjalankannya dari CD-ROM menarik, dengan asumsi bahwa pengaturan bit yang tidak dapat diubah pada file tidak dianggap cukup.

Ada potensi masalah negatif dengan menjalankannya dari CD fisik, termasuk kinerja (drive CD-ROM jauh, jauh lebih lambat daripada hard drive atau SSD). Ada kemungkinan CD-ROM dihapus oleh orang yang bermaksud baik dan diganti dengan disk yang berbeda yang membutuhkan akses. Ada kemungkinan pihak jahat hanya mengeluarkan disk dan melemparkannya ke dalam microwave (atau tempat sampah), sehingga "menghapus" file Anda. Ada ketidaknyamanan karena harus memiliki drive CD-ROM perangkat keras khusus hanya untuk satu file itu, dan faktor lainnya.

Tetapi OP menjelaskan bahwa maksud utamanya adalah untuk melindungi dari penghapusan yang tidak disengaja, bukan dari tindakan jahat, dan bahwa file tersebut didukung dan dipulihkan jika terjadi kecelakaan, tetapi sangat diharapkan bahwa file tersebut tidak pernah dihapus secara tidak sengaja.

Tampaknya menjalankan file dari image ISO yang dipasang akan memenuhi persyaratan.

Craig
sumber
1
Root masih dapat menghapus file dengan memanipulasi gambar secara langsung. Ini hanya file normal yang akan dipasang.
Thorbjørn Ravn Andersen
@ ThorbjørnRavnAndersen Bagaimana? ISO 9660 menurut desain tidak dapat diubah. Pihak yang melakukan perubahan itu harus menghapus dan mengganti seluruh file ISO. Bukannya mereka tidak bisa melakukan itu. Tetapi mereka tidak bisa masuk dan menghapus satu file tanpa keahlian yang luar biasa, bahkan jika itu terjadi. Akan jauh lebih mudah untuk menghapus CD-ROM fisik dari drive dan melemparkannya ke tempat sampah. ;-)
Craig
Tidak perlu canggih - cukup timpa file gambar dengan nol.
Thorbjørn Ravn Andersen
@ ThorbjørnRavnAndersen Saya akan cukup mudah menerima poin itu. Peringatannya adalah bahwa hal itu akan membutuhkan sengaja menurunkan gambar dan menimpanya. Seorang pelaku akan shredmelakukannya pada saat itu. Tetapi kecuali jika Anda menolak akses fisik ke mesin, sepertinya masih lebih mudah untuk hanya mengeluarkan CD fisik dari drive dan melemparkannya ke tempat sampah daripada menurunkan dan menimpa file ISO, meskipun keduanya mudah. Dan OP telah menyatakan bahwa file penting dicadangkan secara teratur, jadi ini hanyalah tindakan ekstra terhadap kerusakan yang tidak disengaja, bukan terhadap kejahatan berbahaya.
Craig
Saya telah menunjukkan cara mengubah gambar ISO9660 bahkan jika itu seharusnya tidak dapat diubah. Maksud saya adalah jika sedikit bisa ditulis, root dapat menulisnya.
Thorbjørn Ravn Andersen