Bir şifre sorulmadan bir komutta nasıl bir komut veririm?

101

Sistemimi her gün otomatik olarak açmak istiyorum. Bu yüzden aşağıdaki kodu Python betiğimde kullanıyorum, ancak sudo her seferinde bana bir şifre soruyor:

os.system('sudo sh -c "echo date \'+%s\' -d \'+ \
       24 hours\' > /sys/class/rtc/rtc0/wakealarm"')

Bu komut dosyasını her defasında parola sormadan sudo olmadan nasıl çalıştırabilirim?

    
sordu Viswa 25.06.2012 15:30

5 cevap

138
  

Lütfen dikkat: Giriş parolanızı düz metin halinde, bir komutta veya dosyada tutmayı içeren herhangi bir yöntem güvensizdir ve kullanılmamalıdır!

sudo 'yi ayarlamak için . parola.

Adım 1. Sadece bu komutu içeren bir kabuk komut dosyası oluşturun

  • echo date... > rtc... 'yi (veya favori düzenleyicinizi) açın ve komut dosyasını oluşturun. % Co_de%
  • Sadece bu satırı ekleyin ve kaydedin, ör. ev dizininiz:
    echo date \'+%s\' -d \'+ 24 hours\' > /sys/class/rtc/rtc0/wakealarm
  • Düzenleyiciden çıkın ve terminalden komut dosyasını çalıştırılabilir yapın ve sahipliğini root olarak değiştirin, aksi takdirde sisteminize erişimi olan başka bir kullanıcı bunu düzenleyebilir ve İstediğiniz komutları parolanıza gerek olmadan root olarak çalıştırın:
    sudo chown root:root /home/username/pydatertc.sh
    sudo chmod 700 /home/username/pydatertc.sh
    

Adım 2. gedit 'nın parola gerektirmeden yürütmesine izin vermek için sudo'yu ayarlayın

  • Sudo izinlerini ( pydatertc.sh ) dosyayı açmak için terminalde pydatertc.sh yazın
  • 25. satırın etrafında bu satırı göreceksiniz: sudo visudo
  • Bu satırın altında , aşağıdaki satırı ekleyin, burada sudoers kullanıcı adınız:
    username  ALL=(ALL) NOPASSWD: /home/username/pydatertc.sh
  • Düzenleyiciden çık ( Ctrl + X ise nano )

Adım 3. %sudo ALL=(ALL:ALL) ALL öğesini çağırmak için python komut dosyanızı değiştirin.

  • Satırı şununla değiştirin:
    os.system('sudo /home/username/pydatertc.sh')

Artık komut dosyanız, hesabınızın, verilerinizin veya sisteminizin güvenliğinden ödün vermeden VE parola gerektirmeden çalışmalıdır!

Yalnızca username için alternatif (genel kullanım için değil!):

yalnızca bu özel durumda , çünkü pydatertc.sh dosyasının sadece sistem için uyandırma alarmını kontrol ettiği ve aksi takdirde zararsız olduğu için paroladan kaçınmanın başka bir alternatifi de wakealarm dosyası (alarmı ayarlayan tek kullanıcı sizseniz) veya /sys/class/rtc/rtc0/wakealarm ile dünyaca yazılabilir hale getirin; Bu durumda, chown 'sini Python çağrınızdan kaldırarak chmod +666 bozulmadan bırakabilirsiniz.

    
verilen cevap ish 25.06.2012 16:53
29
  

Uyarı!

     

Giriş parolanızı düz metin halinde, bir komutta veya dosyada koymak, aşırı güvensizdir ve özel verilerinizi ve sisteminizi tehlikeye atabilir. Sisteminizin "kişisel" veya "güvenli bir konumda" olduğunu düşünüyorsanız bile, bunu asla şiddetle tavsiye etmelisiniz !

Eğer betik sadece kişisel kullanım içindir ve güvenli bir yere yerleştirdiyseniz ve hesabınızın çalınmasından korkmuyorsanız, işte basit bir çözüm:

echo LOGINPASSWD | sudo -S COMMAND HERE

LOGINPASSWD giriş parolanızdır (örnek: iloveponies) ve COMMAND HERE, sudo'dan sonra gelen komutunuz, sh -c gibi "echo da .. vb.

    
verilen cevap hytromo 25.06.2012 15:38
21

Saatin belirli bir saatinde (veya gün içinde) çalışan komut dosyasını almazsanız, kök dizininin dizinine ( /root ) koyun ve komut dosyasını sistemden ( /etc/crontab ) çalıştırın. ) kök olarak. O zaman güvenliğinden ödün vermek zorunda kalmayacaksın.

Komut dosyasının crontab'a nasıl ekleneceği hakkında İşte konusuna bakın.

    
verilen cevap z7sg 25.06.2012 15:49
11

Yukarıdaki mükemmel cevaplarda belirtilmeyen sudo'nun bir başka güzel özelliği 'timestamp_timeout' değişkenidir. Etkileşimli şifre yazarak kaydetmek için artabileceğiniz bir sudo değişkeni.

Örnek, / etc / sudoers dosyasında (veya ondan eklenen dosyalardan birinde) varsayılanı değiştirebilirsiniz:

# only require a password once every 60 minutes
Defaults timestamp_timeout=60

'Man sudoers' dan tam açıklama:

  

timestamp_timeout

        Number of minutes that can elapse before sudo will ask for
        a passwd again.  The default is 5, set this to 0 to always
        prompt for a password.

Elbette, bu komutun cron'dan çalıştırılması konusunda yardımcı olamaz. Ama farkında olmak güzel bir şey.

    
verilen cevap arielf 29.06.2012 23:10
1
export MY_SUDO_PASS="user_password_here"

Çalışma tipi olup olmadığını sınamak için:

echo $MY_SUDO_PASS
> user_password_here

"Sudo apt-get update" komutunu çalıştırmak ve daha önce oluşturduğumuz ortam değişkenlerinden şifre kabul etmek:

echo $MY_SUDO_PASS | sudo -S apt-get update

Python'dan çalıştırın (örnek, dizin sahipliğini yinelemeli olarak username_here olarak değiştiriliyor):

python
>> import subprocess
>> subprocess.call('echo $MY_SUDO_PASS | sudo -S chown -R username_here /home/username_here/folder_to_change_ownership_recursivley', shell=True)

echo $ MY_SUDO_PASS get şifresi -S anahtarı yakalamak ve şifreyi sudo'ya geçirmek

    
verilen cevap Jozsef Turi 15.03.2018 17:59

Etiketlerdeki diğer soruları oku