Batasi akses file hanya untuk menambahkan

11

Saya memiliki direktori dengan file log dan saya memasukkan log dari skrip yang diluncurkan oleh pengguna ke dalamnya. Masuk dengan syslog tampaknya tidak mungkin dalam kasus ini. (non-daemon rsync)

Saya ingin pengguna hanya memiliki izin menulis pada file log. Masalahnya adalah, bahwa izin menulis harus dibatasi lebih lanjut, sehingga pengguna (skrip) hanya dapat menambahkan file-file itu. Sistem file yang mendasarinya adalah XFS.

Berikut ini tidak berfungsi:

# chattr +a test.log
chattr: Inappropriate ioctl for device while reading flags on test.log

Apakah ada solusi lain untuk ini? Terima kasih atas petunjuknya.

kepala logam
sumber
Apakah Anda yakin itu XFS? chattr +abekerja untuk saya di sini (3,2 kernel). Perhatikan bahwa Anda harus menjadi root untuk menggunakan chattr( $prompt menyarankan non-superuser), meskipun Anda akan mendapatkan pesan kesalahan yang berbeda jika chattr +adidukung dan Anda bukan root.
Stéphane Chazelas
Juga diposting di Serverfault . Jangan lakukan ini.
Gilles 'SANGAT berhenti menjadi jahat'
Apa opsi pemasangan pada partisi? Mungkin mungkin menyimpannya menggunakan xattr, yang mungkin membutuhkan opsi mount yang relevan? (Dokumentasi untuk XFS juga tidak menyebutkan banyak tentang hal itu ...)
Gert van den Berg
Ini ditutup pada SF, jadi saya membiarkannya terbuka di sini
Michael Mrozek

Jawaban:

8

The chattrutilitas ditulis untuk ext2 / ext3 / ext4 filesystem. Itu memancarkan ioctls pada file, jadi terserah sistem file yang mendasari untuk memutuskan apa yang harus dilakukan dengan mereka. Driver XFS di kernel Linux yang lebih baru mendukung FS_IOC_SETFLAGSioctl yang sama dengan ext [234] untuk mengontrol flag seperti append-only, tetapi Anda mungkin menjalankan kernel yang lebih lama di tempat yang tidak (CentOS?). Coba gunakan xfs_ioutilitas sebagai gantinya:

echo chattr +a | xfs_io test.log

Perhatikan bahwa, untuk XFS seperti untuk ext [234], hanya root yang dapat mengubah flag append-only (lebih tepatnya, Anda memerlukan CAP_LINUX_IMMUTABLEkemampuan).

Gilles 'SANGAT berhenti menjadi jahat'
sumber
1

Apakah Anda memiliki izin untuk melakukan itu? Dari man 1 chattr:

File dengan set atribut `a 'hanya bisa dibuka dalam mode append untuk ditulis. Hanya superuser atau proses yang memiliki kemampuan CAP_LINUX_IMMUTABLE yang dapat mengatur atau menghapus atribut ini.

peterph
sumber
0

Atau, Anda dapat mencapai yang sama menggunakan SELinux , kemungkinan itu diaktifkan dan berjalan jika Anda menggunakan distro yang kompatibel dengan Red Hat. Ini bekerja pada setiap sistem file, SELinux memblokir proses dari melakukan operasi yang tidak diizinkan.

Sayangnya, Anda perlu menulis kebijakan untuk aplikasi Anda untuk memungkinkan mengakses semua sumber daya sistem, kecuali menambahkan file tertentu. Ini bisa sedikit menantang jika Anda melakukan ini untuk pertama kalinya, tetapi ada keuntungan pada lapisan keamanan yang ditambahkan ini.

Saya punya contoh tentang cara menulis aturan file khusus-append dalam pembicaraan ini: https://www.youtube.com/watch?v=zQcYXJkwTns

lzap
sumber