Bisakah symlink digunakan di /etc/cron.d/?

25

Saya mencoba menerapkan mekanisme konfigurasi yang memungkinkan dalam proyek tertentu untuk menggunakan svn konfigurasi cron.

Saya segera berpikir bahwa apa yang harus saya lakukan adalah cerate symlinks dari /etc/cron.d/ ke file cron proyek saya (yang pada gilirannya dikendalikan oleh vcs), tetapi itu tampaknya tidak berfungsi.

Saya menemukan beberapa pesan forum lama yang merujuk bahwa symlinks tidak didukung dan yang lain mengatakan itu. Yang mana itu?

Apakah ada hal lain atau cara lain yang baik untuk mencapai ini?

Luís Faceira
sumber

Jawaban:

27

Menurut man crond

CAVEAT

Semua file crontab harus berupa file biasa atau symlink ke file biasa, mereka tidak boleh dieksekusi atau dapat ditulis untuk orang lain selain pemiliknya. Persyaratan ini dapat ditimpa dengan menggunakan opsi -p pada baris perintah crond. Jika tidak ada dukungan yang digunakan, perubahan pada crontab yang disinkronkan tidak secara otomatis diperhatikan oleh daemon cron. Daemon cron harus menerima sinyal SIGHUP untuk memuat ulang crontab. Ini adalah batasan dari API yang tidak sah.

Output syslog akan digunakan sebagai pengganti surat, ketika sendmail tidak diinstal.

Ini mengganggu omong kosong hidup dari saya juga, Singkatnya ya Anda dapat menggunakan symlink namun, jika tidak regular files or symlinks to a regular fileharus menggunakan -pswitch.

siapa saya
sumber
1
Anda juga akan menemukan bahwa file tersebut harus dimiliki oleh cron pengguna untuk menjalankan pekerjaan; misalnya, jika symlink /etc/cron.d/bobsjobmenunjuk ke file yang dimiliki oleh pengguna "bob" cron akan gagal dengan pesan syslog WRONG FILE OWNER (/etc/cron.d/bobsjob).
Craig Ringer
@CraigRinger Saya memiliki pengguna bernama "www-data" yang memiliki file cron, saya saat ini mendapatkan kesalahan PEMILIK FILE SALAH di syslog. Bagaimana saya bisa membuat Cron mengeksekusi menggunakan pengguna "www-data". Saya tidak ingin membuat root memiliki file.
CMCDragonkai
@ CMCDragonkai sudo -u www-data crontab -edan menambahkannya ke crontab pengguna data-www. Ini kemudian akan berjalan sebagai pengguna www-data. Ingatlah untuk menghapus kolom pengguna eksplisit, karena itu tidak ada di crontab pengguna.
Craig Ringer
Apakah itu akan menempatkan file di dalamnya etc/cron.? Saya berada di bawah kesan alat crontab akan menempatkan tugas di tempat lain.
CMCDragonkai
@ CMCDragonkai Anda benar, menelepon crontab -ebukan yang Anda inginkan dalam kasus ini. Saya mencari tetapi belum menemukan cara untuk menjalankan crontab pengguna sebagai pengguna non-root.
ACK_stoverflow
14

Ini memiliki implikasi keamanan. Skrip di /etc/cron.d/ dijalankan oleh root dengan hak akses root. Merupakan ide yang buruk untuk menyinkronkan skrip di sana yang dimiliki dan dapat ditulis untuk pengguna non-root, karena sistem Anda dapat dikompromikan dengan cara itu

Florian Heinle
sumber
4

Saya akan memeriksa manual cron untuk versi Ubuntu Anda (saya berasumsi kita sedang berbicara Ubuntu di forum ini!):

File dalam direktori ini harus dimiliki oleh root, tidak perlu dieksekusi (mereka adalah file konfigurasi, seperti / etc / crontab) dan harus sesuai dengan konvensi penamaan yang sama seperti yang digunakan oleh run-parts (8): mereka harus hanya terdiri dari huruf besar dan kecil, angka, garis bawah, dan tanda hubung. Ini berarti bahwa mereka tidak dapat berisi titik-titik apa pun.

Seperti yang ditunjukkan Florian, jika file ini dapat ditulis oleh pengguna non-root, ini merupakan lubang keamanan karena pekerjaan akan dijalankan oleh root (untuk siapa pun yang disebut sebagai pemilik pekerjaan dalam file). Perhatikan juga, oleh karena itu

Direktori ini dapat berisi tugas mendefinisikan file apa pun mengikuti format yang digunakan di / etc / crontab, yaitu tidak seperti spool cron pengguna, file-file ini harus memberikan nama pengguna untuk menjalankan tugas seperti dalam definisi tugas.

yaitu pop nama pengguna sebelum perintah untuk dijalankan.

busa
sumber
1
Ini berarti bahwa mereka tidak dapat berisi titik-titik apa pun. perhatikan ini. Saya memiliki titik pada nama tautan. Itu adalah pelakunya karena pekerjaan saya yang tidak berjalan untuk saya. Plus: file itu sendiri HARUS diakhiri dengan CRLF
Dr. Gianluigi Zane Zanettini