Saya menulis skrip yang ingin saya jalankan tanpa hak istimewa. Saya ingin kesalahan yang ditemukan skrip untuk dicatat ke beberapa file log. Saya tidak punya hak untuk menulis satu /var/log
. Dan saya tidak ingin memilikinya di direktori home saya.
Apakah ada lokasi di mana skrip userspace dapat mencatat informasi runtime? Apa praktik terbaik untuk mendapatkan informasi log skrip saya /var/log
tanpa membuat masalah keamanan potensial? Saya ragu untuk mengatur uid / gid pada skrip.
sumber
syslog
adalah rutin pustaka C, dan C ++ dapat memanggil C apa pun menggunakanextern "C"
. Bahasa lain sering memberikan pengikatan generik pada apa pun C, atau mengikat pada hal-hal tertentu, tetapi itu tergantung pada bahasanya.Jika Anda sebagai pengguna biasa memutuskan untuk menjalankan suatu program, tempat alami untuk log-nya ada di direktori home Anda. Direktori rumah Anda dimaksudkan untuk menyimpan semua file Anda, apakah itu log dari program yang Anda jalankan atau apa pun.
Jika program dijalankan sebagai bagian dari sistem, berjalan sebagai pengguna sistem khusus, maka tempat alami untuk log-nya adalah masuk
/var/log
. Buat subdirektori/var/log/myapp
dan berikan izin yang sesuai sehingga aplikasi Anda dapat menulis di sana.Jika relevan dan sistem operasi Anda mengizinkannya, tandai file log sebagai append-only. Hanya root yang bisa melakukan ini. Ini memiliki keuntungan bahwa jika aplikasi Anda dikompromikan, itu tidak akan dapat menghapus log sebelumnya, yang dapat sangat berguna untuk analisis forensik kompromi. Anda akan memerlukan intervensi root untuk memutar log:
chown
sehingga file log tidak lagi dapat dibuka oleh aplikasi,rename
file log, buat file append-only baru dengan kepemilikan yang sesuai, kemudian beri tahu aplikasi untuk membuka file kosong yang baru. .Anda dapat membuat log aplikasi apa pun ke log sistem dengan menelepon
logger(1)
atausyslog(3)
.sumber
Secara umum untuk daemon file log dibuat pada
root
saat itu izin diubah sehingga pengguna yang tidak memiliki hak istimewa dapat menulis untuk itu.logrotate
kemudian diatur untuk mempertahankan izin selama rotasi.Jika itu adalah perintah, bukan daemon, maka masuklah
/tmp
(lebih disukai menggunakanmktemp
) dan beri tahu pengguna melaluiSTDOUT
tempat log itu pergi.sumber
&
untuk menghindari mengangkat prompt, tetapi mulai menulis dropbox ke konsol. Saat ini saya sedang mengarahkan kembali outputnya/dev/null
, tetapi ingin memiliki beberapa cara untuk debug jika dropbox gagal memulai.daemonize
.chmod
. Biasanya0644
atau0664
dan kepemilikan pengguna / grup juga diubah ke daemon yang diharapkan akan ditulis untuk itu.Saya mendapat kesan bahwa program userspace diharapkan untuk membuang log secara default. Saya telah melihat berbagai program membuang log di mana pun mereka suka, dan itu tidak pernah disambut dengan baik di sistem saya; cenderung membangun di beberapa lokasi yang tidak pernah diperhatikan kecuali / sampai menjadi besar.
Saya lebih suka jika ada tempat yang pasti untuk mereka, saya bermain-main di sistem saya mencoba mencari tempat yang stabil untuk mereka.
Ide pertama saya adalah menggunakan
/var/run/user/$UID/log
, tetapi menemukan bahwa di sistem saya, itu adalah TMPFS mount, tidak cukup besar, atau benar-benar bagus untuk digunakan dengan log.Buat tempat untuk mereka
Karena saya tidak mengerti / var / run / pengguna dengan cukup baik untuk diintegrasikan dengannya, saya memilih untuk menirunya dengan tangan, untuk pengguna 1000.
Saya akan merekomendasikan menempel pada FHS / var / log spc untuk struktur dalam folder ini, tetapi spec-form jadi tidak ada banyak untuk mematuhi.
Logrotate Config
Tidak ada rotasi log yang ada pada direktori ini yang disediakan oleh sistem Anda, saya sarankan membuat satu untuk sistem Anda:
Di bawah ini adalah postingan / var / run / user / 1000 / log saya sebelumnya, saya tidak bisa merekomendasikan hal ini kecuali Anda benar-benar tahu apa yang Anda lakukan (Dan jika Anda tahu, beritahu saya caranya juga!)
mungkin sebagai berikut, tetapi saya hanya mengada-ada karena itu masuk akal bagi saya.Integrasikan dengan / var / log / user / 1000:
sumber