Hogyan adhatok parancsot a parancsfájlban, anélkül, hogy jelszót kérne?

101

Rendszerem automatikusan bekapcsolódik minden nap. Tehát az alábbi kódot használom a Python szkriptben, de asudo minden alkalommal kéri a jelszavamat:

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

Hogyan futtathatom ezt a szkriptet anélkül, hogysudo kérné a jelszót minden alkalommal?

    
készlet Viswa 25.06.2012 15:30
forrás

5 válasz

138
  

Felhívjuk a figyelmét: Bármely módszer, amely magában foglalja a bejelentkezési jelszó egyszerű szöveges formában, parancsban vagy fájlban való elhelyezését, nem biztonságos és NEM használható!

A helyes utat asudo beállításához úgy, hogy csak a szükséges egyedi parancs, azaz aecho date... > rtc... Jelszó.

1. lépés: Hozzon létre egy shell parancsfájlt ezzel a parancsgal

  • Nyissa meg agedit (vagy kedvenc szerkesztőjét), és hozzon létre egy parancsfájlt, pl. pydatertc.sh
  • Csak ezt a sort illessze be, és mentse el, pl. a saját könyvtárában:
    echo date \'+%s\' -d \'+ 24 hours\' > /sys/class/rtc/rtc0/wakealarm
  • Lépjen ki a szerkesztőből, és a terminálból készítse el a parancsfájl futtatható és tulajdonjogát root , különben egy másik felhasználó hozzáférhet a rendszeréhez, futtasson bármilyen parancsot, amit root szeretne, anélkül, hogy szüksége lenne a jelszóra:
    sudo chown root:root /home/username/pydatertc.sh
    sudo chmod 700 /home/username/pydatertc.sh
    

2. lépés. Állítsd be a sudo parancsot, hogy engedélyezd apydatertc.sh végrehajtását jelszó nélkül

  • Írja be asudo visudo parancsot a terminálon a sudo engedélyek (sudoers) fájl megnyitásához
  • A 25-ös sor mellett a következő sor fog megjelenni:%sudo ALL=(ALL:ALL) ALL
  • Az alábbi sor alatt írja be a következő sort, ahol ausername a felhasználónév:
    username  ALL=(ALL) NOPASSWD: /home/username/pydatertc.sh
  • Kilépés a szerkesztőből ( Ctrl + X , ha nano

3. lépés: Módosítsa a python scriptetpydatertc.sh

  • A sor módosítása:
    os.system('sudo /home/username/pydatertc.sh')

Most a szkriptnek futnia kell anélkül, hogy ÉS jelszót igényelne, anélkül, hogy veszélybe sodort a fiókja, az adata vagy a rendszere biztonsága!

Csak awakealarm (nem általános használatra!) alternatívája:

ez a konkrét eset csak , mivel a/sys/class/rtc/rtc0/wakealarm fájl csak a rendszer ébresztő riasztását vezérli, és egyébként ártalmatlan, egy másik alternatíva, hogy elkerülje a jelszavát, fájlchown -al (ha csak az a felhasználó állítja be a riasztást), vagy írja meg világszerte achmod +666; ebben az esetben egyszerűen távolítsa el asudo -ot a Python-hívásból, így ash -c "...." érintetlen marad.

    
válasz adott ish 25.06.2012 16:53
forrás
29
  

Figyelmeztetés!

     

A bejelentkezési jelszó egyszerű szövegben, parancsban vagy fájlban rendkívül bizonytalan, és veszélyeztetheti a személyes adatokat és a rendszert. Soha nem ajánlott erősen ajánlott akkor sem, ha úgy gondolja, hogy a rendszer "személyes" vagy "biztonságos" helyen van!

Ha a szkript csak személyes használatra készült, és biztonságos helyen helyezte el, és nem fél a fiók ellopásától és így, itt egyszerű megoldás:

echo LOGINPASSWD | sudo -S COMMAND HERE

ahol a LOGINPASSWD a bejelentkezési jelszó (például: iloveponies) és a COMMAND HERE a parancsod, ami a sudo után jön, mint a sh -c "echo da .. stb."

    
válasz adott hytromo 25.06.2012 15:38
forrás
21

Ha nem bánja, hogy a parancsfájl az adott órában (vagy a nap folyamán) meghatározott időpontban fut, helyezze be a gyökér főkönyvtárába (/root), és futtassa a parancsfájlt a rendszerből crontab (/etc/crontab ) rootként. Ezután nem kell veszélybe vennie biztonságát.

Tekintse meg a linket a szkript crontab használatához.

    
válasz adott z7sg 25.06.2012 15:49
forrás
11

A sudo egyik másik szép vonása, amelyet a fenti kiváló válaszok nem említettek, a 'timestamp_timeout' változó. Ez egy sudo változó, amelyet megnövelhet az interaktív jelszavak beírása érdekében.

Példa az / etc / sudoers (vagy a benne lévő fájlok egyikére) módosíthatja az alapértelmezett értéket:

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

Teljes leírás a "man sudoers" -től:

  

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.

Természetesen ez nem segít abban, hogy a cron parancsot futtassuk. De jó dolog tudni.

    
válasz adott arielf 29.06.2012 23:10
forrás
1
export MY_SUDO_PASS="user_password_here"

Annak tesztelése, hogy működik-e:

echo $MY_SUDO_PASS
> user_password_here

A "sudo apt-get update" futtatásához és a környezeti változók korábbi jelszavának elfogadása előtt:

echo $MY_SUDO_PASS | sudo -S apt-get update

Futtatás a pythonból (például a könyvtár tulajdonjogának rekurzív megváltoztatása username_here-hez):

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 kap jelszavát -A kapcsoló megragadja és átadta a jelszót a sudo-nak

    
válasz adott Jozsef Turi 15.03.2018 17:59
forrás