Cara menjalankan tugas cron menggunakan perintah sudo

118

Apakah mungkin menjalankan pekerjaan cron yang membutuhkan perintah sudo ?

Suka:

 sudo rm somefile
sayem siam
sumber
Selamat datang Sayem Siam, Lihat jawaban atas pertanyaan ini askubuntu.com/questions/2368/how-do-i-setup-cron-job . karena saya pikir pertanyaan Anda telah diajukan sebelum di sini pada AU
stephenmyall
1
Saya mencoba untuk mengeksekusi sudo yang membutuhkan kata sandi tetapi bagaimana saya bisa memberikan kata sandi dari file cron
sayem siam
3
@sayemsiam Anda tidak perlu memasukkan sudo, cukup edit root crontab.
Braiam
Lihat jawaban ini .
sampablokuper

Jawaban:

240

Saya tidak akan membahas seberapa banyak ini adalah ide yang buruk; sederhananya, menjalankan sudodi crontab membutuhkan kata sandi Anda untuk disimpan di suatu tempat di plaintext.

Itu ide yang buruk.


Berikut ini adalah metode yang disukai untuk menjalankan tugas administratif melalui cron. Karena Anda tidak benar-benar perlu menulis sudodi crontab, jika Anda memodifikasi crontab root.

Gunakan crontab root

Jalankan perintah berikut:

sudo crontab -e

Ini membuka rootcrontab. sudotidak perlu menjalankan perintah Anda dalam konteks ini, karena itu akan dipanggil sebagai rootpula.

Karena itu, Anda cukup menambahkan yang berikut ini ke crontab root.

@hourly rm somefile

Sekarang, jika Anda benar - benar ingin tidak aman dan mengambil risiko dengan kata sandi Anda, yang berikut ini akan menjalankan perintah Anda dari crontab Anda sendiri, dan memasukkan kata sandi Anda secara otomatis ketika diminta oleh sudo.

Sekali lagi, ini tidak dianjurkan .


Di crontab Anda sendiri, tulis perintah Anda seperti ini:

@hourly echo "password" | sudo -S rm somefile

Kerugian yang jelas di sini adalah, jika ada yang pernah mengakses crontab Anda, kata sandi Anda akan dapat dibaca dalam plaintext.

Anda seharusnya tidak melakukan ini.

TuanCharlo
sumber
1
Senang itu berhasil! Berhati-hatilah dengan lubang keamanan yang Anda tinggalkan .. Mereka mungkin akan kembali nanti untuk menghantui Anda.
SirCharlo
1
@ SirCharlo Mengapa menggunakan rootcrontab pengguna alih-alih crontab seluruh sistem /etc/crontab?
Eliah Kagan
1
@ Elia mengapa tidak?
SirCharlo
2
Jawaban ini meleset dari sasaran karena bercahaya di atas seluk-beluk yang tersedia di sudoersfile Anda , seperti grup sudo tanpa persyaratan kata sandi.
brent
Poin yang sangat sangat berguna, terima kasih atas bantuannya.
Nasser Mansouri
33

Jika Anda meletakkan skrip dari salah satu direktori cron ( /etc/cron.*) maka Anda tidak perlu menggunakan sudo karena itu dijalankan sebagai root.

Jika Anda menggunakan crontab, maka Anda ingin menggunakan crontab root. Ini akan menjalankannya sebagai root, dan juga tidak perlu sudo.

sudo crontab -e
tgm4883
sumber
1
Saya juga akan menempatkan perintah di /etc/cron.hourly/something. Itulah gunanya direktori ini.
John S Gruber
3
Tidak. Anda bisa memasukkannya ke /etc/cron.SOMETHING/SCRIPT, tapi saya tidak akan melakukan keduanya. Keduanya akan memberikan fungsi yang kira-kira sama, walaupun menggunakan crontab Anda akan memiliki sedikit lebih banyak kekuatan atas seberapa sering / ketika hal-hal berjalan.
tgm4883
1
Seharusnya aku menjelaskan bahwa maksudku itu sebagai alternatif. Terima kasih.
John S Gruber
3

Jalankan perintah berikut di terminal

sudo visudo

Menambahkan baris berikut ke akhir file:

vidyadhar  ALL= NOPASSWD: /bin/rm

Dalam contoh di atas vidyadhar adalah nama pengguna dan tidak akan meminta kata sandi jika Anda menjalankan perintah rm melalui vidyadhar.

Vidyadhar
sumber
17
Hmm .. Lalu perintah jahat apa pun, seperti sudo rm -rf 'slash'( jangan jalankan perintah itu ), jalankan dari pengguna itu, tidak memerlukan kata sandi .. Saya tidak tahu, rasanya tidak aman, bukan?
SirCharlo
Ya saya tahu itu. Pendekatanmu bagus. Tetapi saya menggunakan pendekatan di atas untuk memberikan hak kepada pengguna lain untuk menghentikan / memulai layanan tertentu.
Vidyadhar
24
Ini ide yang sangat buruk. Tolong jangan lakukan ini.
bkanuka
2
Mungkin vidyadhar ALL= NOPASSWD: /bin/rm somefileakan lebih aman.
Wernfried Domscheit
Ini ide yang buruk. Anda memberi blanko sudo kepada rm. Alih-alih, berikan sudo izin untuk skrip perintah Anda, termasuk rm atau yang lain dalam skrip itu, buat itu dapat dieksekusi, lalu berikan izin sudo ke skrip itu. <username> ALL=(ALL) NOPASSWD: /home/<username>/bin/<script>, yang akan jauh lebih aman.
RJ