Sudo komutunu kullanarak bir cron işi nasıl çalıştırılır


118

Sudo komutunu gerektiren bir cron işi çalıştırmak mümkün mü ?

Sevmek:

 sudo rm somefile

Hoş Geldiniz Sayem Siam, Bu soruya verilen cevaplara bir göz atın . Askubuntu.com/questions/2368/how-do-i-setup-cron-job . Sanırım sorunuz daha önce
AU'da

1
Ben şifre gerektiren sudo yürütmek çalışıyorum ama nasıl cron dosyasından şifre verebilir
sayem siam

3
@sayemsiam, sudo koymanıza gerek yok, sadece root crontab dosyasını düzenleyin.
Braiam

Bu cevaba bakınız .
sampablokuper

Yanıtlar:


240

Bunun ne kadar kötü bir fikir olduğunu anlayamıyorum; basitçe söylemek gerekirse, sudocrontab'da çalışmak şifrenizin düz metin içerisinde bir yerde saklanmasını gerektirir.

Bu kötü bir fikir.


Aşağıdakiler yönetim görevlerini cron üzerinden yürütmek için tercih edilen yöntemdir. Kökün crontab'ını değiştiriyorsanız, crontab'da gerçekten yazmaya gerek yok çünkü sudo.

Kökün crontabını kullan

Aşağıdaki komutu çalıştırın:

sudo crontab -e

Bu rootcrontab'ı açar . sudokomutunu bu bağlamda çalıştırmak gerekmez, çünkü rootyine de çağrılır .

Bu nedenle, sadece root'un crontab'ına aşağıdakileri ekleyin.

@hourly rm somefile

Şimdi, kesinlikle güvensiz olmak ve şifrenizle risk almak istiyorsanız, aşağıdakiler komutunuzu kendi crontab'ınızdan çalıştıracak ve istendiğinde şifrenizi otomatik olarak girecektir sudo.

Yine, bu önerilmez .


Kendi crontab'ında komutunu şöyle yaz:

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

Buradaki bariz dezavantaj, birisi crontab'ınıza erişerse, şifrenizin düz metin olarak okunabilmesidir.

Bunu yapmamalısın.


1
Çalışmasına sevindim! Sadece geride bıraktığınız güvenlik açıklarına karşı dikkatli olun .. Sonradan musallat olmak için daha sonra gelebilirler.
SirCharlo

1
@SirCharlo Neden rootsistem çapındaki crontab yerine kullanıcı crontabını kullanmalısınız /etc/crontab?
Eliah Kagan,

1
@Elijah neden olmasın?
SirCharlo

2
Bu cevap işareti özlüyor çünkü sudoersparolanız gerekmeden sudo grupları gibi dosyanızda mevcut inceliklerin üzerinden kayıyor .
brent

çok çok yararlı bir nokta, büyük yardımlarınız için teşekkürler.
Nasır Mansouri

33

Komut dosyasını cron dizinlerinden ( /etc/cron.*) birine yerleştiriyorsanız, root olarak çalıştığı için sudo kullanmanıza gerek yoktur.

Eğer crontab kullanıyorsanız, o zaman root's crontab kullanmak isteyeceksiniz. Bu onu root olarak çalıştıracak ve sudo'ya ihtiyaç duymayacak.

sudo crontab -e

1
Ben de komutu /etc/cron.hourly/something içine koyardım. Bu dizinler bunun için var.
John S Gruber,

3
Hayır. /Etc/cron.SOMETHING/SCRIPT dizinine koyabilirsiniz, ancak ikisini de yapmazdım. Her ikisi de kabaca aynı işlevi görür, ancak crontab'ı kullanırken, işlerin ne sıklıkla / ne zaman çalıştığı konusunda biraz daha fazla güce sahip olursunuz.
tgm4883

1
Bunu bir alternatif olarak kastettiğimi açıkça belirtmeliydim. Teşekkürler.
John S Gruber,

3

Terminalde aşağıdaki komutu çalıştır

sudo visudo

Dosyanın sonuna şu satır eklendi:

vidyadhar  ALL= NOPASSWD: /bin/rm

Yukarıdaki örnekte vidyadhar kullanıcı adıdır ve vidyadhar aracılığıyla rm komutunu çalıştırıyorsanız şifre sormaz.


17
Hmm .. Sonra herhangi bir kötü amaçlı komut, sudo rm -rf 'slash'( o komutu çalıştırma ), o kullanıcıdan kaçma, şifre gerektirmez. Bilmiyorum, güvensiz hissediyor, hayır?
SirCharlo

Ya biliyorum. Yaklaşımın iyi. Ancak, diğer kullanıcıları belirli hizmetleri durdurma / başlatma hakları için yukarıdaki yaklaşımı kullanıyorum.
Vidyadhar

24
Bu son derece kötü bir fikir. Lütfen bunu yapma.
bkanuka

2
Belki vidyadhar ALL= NOPASSWD: /bin/rm somefiledaha güvenli olurdu.
Wernfried Domscheit

Bu korkunç bir fikir. Battaniyeye sudo izni verdin . Bunun yerine, komut dosyasına rudo veya komut dosyasındaki diğerleri de dahil olmak üzere komut dosyasına sudo izinleri verin, yürütülebilir hale getirin, ardından söz konusu komut dosyasına sudo izinleri verin. <username> ALL=(ALL) NOPASSWD: /home/<username>/bin/<script>, çok daha güvenli olurdu.
RJ,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.