Bazı komutları kullanan, ayrıcalıklı olmayan bir kullanıcının crontab'ından çalışan bir betiğim var sudo
. Dışında değil. Betik iyi çalışıyor ancak sudo'ed komutları sessizce başarısız oluyor.
Betik, söz konusu kullanıcı olarak bir kabuktan kusursuz bir şekilde çalışır.
Sudo şifre gerektirmez. Söz konusu kullanıcının içinde
(root) NOPASSWD: ALL
erişim izni var/etc/sudoers
.Cron çalışıyor ve betiği çalıştırıyor. Basit bir ekleme
date > /tmp/log
, doğru zamanda çıktı üretir.Bu bir izin sorunu değil. Yine komut dosyası sudo'ed komutlarını değil, idam edilir.
Bu bir yol problemi değil. Çalıştırılan
env
betiğin içinden çalıştırmak,$PATH
sudo yolunu içeren doğru değişkeni gösterir . Tam yol kullanarak çalıştırmak yardımcı olmuyor. Gerçekleştirilen komuta tam yol adı verilmiştir.STDERR de dahil olmak üzere sudo komutunun çıktısını almaya çalışmak yararlı bir şey göstermiyor.
sudo echo test 2>&1 > /tmp/log
Komut dosyasına ekleme boş bir günlük oluşturur.Sudo binaryinin kendisi gayet iyi yürütür ve betiğin içindeki crondan çalıştırıldığında bile izinlerinin olduğunu bilir.
sudo -l > /tmp/log
Komut dosyasına ekleme , çıktısını üretir:Ec2 kullanıcısı bu ana bilgisayarda aşağıdaki komutları çalıştırabilir:
(root) NOPASSWD: ALL
Kullanarak komutun çıkış kodunu incelemek $?
bir hata döndürdüğünü gösterir (çıkış kodu:) 1
, ancak hiçbir hata oluşmuyor gibi görünüyor. Basit bir komut /usr/bin/sudo /bin/echo test
aynı hata kodunu döndürür.
Başka neler olabilir?
Bu son Amazon Linux AMI çalıştıran yeni oluşturulan bir sanal makine. Crontab kullanıcıya aittir ec2-user
ve sudoers dosyası dağıtım varsayılanıdır.
sudo
, betikte ihtiyacın olan komutlar için / sadece / sadece sınırlı haklara sahip ayrı bir kullanıcı kurmak ve giriş yeteneklerini tamamen devre dışı bırakmak.
The user in question has (root) NOPASSWD: ALL access granted in /etc/sudoers
ve beynim okumaya devam etmek için çok yüksek sesle çığlık atmaya başladı.