Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Bash scriptje runnen als sudo maar zonder password  (gelezen 1832 keer)

Offline gercokees

  • Lid
Bash scriptje runnen als sudo maar zonder password
« Gepost op: 2007/09/11, 16:02:59 »
Hoi hoi,
Ik wil graag een shellscriptje runnen als root, maar, zonder steeds het password toe hoeven geven. Kan dat op de een of andere manier? En kan ik dan ook andere gebruikers de rechten geven om dat ene scriptje te runnen?
Alvast bedankt.
Groet,
Gerco-Kees
<><

Offline Tukcedo

  • Lid
    • http://www.tukcedo.nl
Bash scriptje runnen als sudo maar zonder password
« Reactie #1 Gepost op: 2007/09/11, 16:23:22 »
Dat kan het makkelijkst via SSH en public key authenticatie. Je richt SSH zo in dat je root account een public key zonder wachtwoord accepteert en dat ALLEEN maar dat script draait (in het bestand authorized_keys). Elke gebruiker die de bijbehorende private key heeft kan dan in principe het script via root laten draaien.

Ik begrijp dat dit een wat cryptische omschrijving is, dus als je er niks mee kan moet je nog maar even gillen.
Tukcedo Services - Unix en Linux Consultants
http://www.tukcedo.nl

Offline vanadium

  • Lid
Bash scriptje runnen als sudo maar zonder password
« Reactie #2 Gepost op: 2007/09/11, 16:54:57 »
Ik denk dat je de suid permissie moet zetten op je script. Op die manier kan een gewone gebruiker het script starten en wordt het uitgevoerd met de permissies van de eigenaar (voor wat jij wil: de root).

chown root:root jescript
chmod 4711 jescript

Offline Tukcedo

  • Lid
    • http://www.tukcedo.nl
Bash scriptje runnen als sudo maar zonder password
« Reactie #3 Gepost op: 2007/09/11, 16:56:24 »
Hmmm de meeste systemen laten SUID op scripts niet toe: die zijn namelijk te gemakkelijk aan te passen i.t.t. een binary executable. Vandaar die SSH oplossing. Maar in principe heb je gelijk.
Tukcedo Services - Unix en Linux Consultants
http://www.tukcedo.nl

Offline gercokees

  • Lid
Bash scriptje runnen als sudo maar zonder password
« Reactie #4 Gepost op: 2007/09/12, 19:16:57 »
Hoi,
De oplossing van Vanadium spreekt me wel aan, want sorry, die van tukcedo lijkt wat ingewikkeld. Maar ik geloof dat het allemaal toch nog niet werkt zoals ik het wil.
De inhoud van mijn script:
gercokees@Laptop:~/bin$ cat restart-network.sh
#!/bin/bash
sudo /etc/init.d/networking restart
met deze permissies:
gercokees@Laptop:~/bin$ ls -l | grep res
-rwsr-xr-x 1 root      root         49 2007-09-12 19:03 restart-network.sh
vraagt nog steeds om een password, gezien de 'sudo' in het script.
Haal ik dat sudo weg, dan kunnen er een aantal bestanden niet worden geopend, omdat daarvoor de rechten ontbreken. (Permission denied). Ik hoop dat iemand mij kan helpen. Oh ja, volgens mij moet je niet alleen execute rechten, maar ook leesrechten hebben, dus ik heb chmod 4755 gedaan....
Groet,
Gerco-Kees
<><

Offline Johan van Dijk

  • Administrator
    • johanvandijk
Bash scriptje runnen als sudo maar zonder password
« Reactie #5 Gepost op: 2007/09/12, 20:00:13 »
Als je het bestand /etc/sudoers aanpast, dan is het mogelijk om in te stellen dat jouw gebruiker een bepaald commando met sudo uit kan voeren zonder wachtwoord. Andere commando's hebben met sudo dan wel gewoon een wachtwoord nodig.

Let op: Het /etc/sudoers bestand mag je alleen bewerken met het commando sudo visudo!
Let op: Maak eerst een backup voordat je gaat rommelen.

Offline vanadium

  • Lid
Bash scriptje runnen als sudo maar zonder password
« Reactie #6 Gepost op: 2007/09/13, 10:21:10 »
Dat is weer iets raars, want je scriptje runnen als gewone gebruiker runnen met de suid bit zou wel degelijk equivalent moeten zijn als "sudo command". Zoals je het formuleert, is het evenwel niet duidelijk waar het probleem kan liggen:
Citaat
dan kunnen er een aantal bestanden niet worden geopend, omdat daarvoor de rechten ontbreken. (Permission denied)."
Er is maar één lijn in je script: als het niet werkt zoals verwacht, dan zou "/etc/init.d/networking" (niet opgestart kunnen worden wegens geen root rechten). Dat je een "aantal" bestanden niet kan openen, klinkt alsof "/etc/init.d/networking" wel degelijk wordt opgestart, maar dan problemen ondervindt tijdens het runnen.

Veel moet je script niet doen: het komt neer op het runnen van ifdown. Ik zie dus niet waarmee het script networking problemen zou kunnen hebben. Je post best de output van je eigen script (zonder de sudo) eens hier.

Offline Tukcedo

  • Lid
    • http://www.tukcedo.nl
Bash scriptje runnen als sudo maar zonder password
« Reactie #7 Gepost op: 2007/09/13, 11:08:51 »
Het probleem is waarschijnlijk dat sudo niet "overerft" naar onderliggende executables. Dus alhoewel je het bovenste script dan met succes mag starten, zijn de onderliggende natuurlijk niet SUID en gaat het niet werken.

Inderdaad is de SSH oplossing niet de meest simpele, maar werkt wel zonder bijwerkingen. Als je er es naar wilt kijken, mail me maar!
Tukcedo Services - Unix en Linux Consultants
http://www.tukcedo.nl

Offline Johan van Dijk

  • Administrator
    • johanvandijk
Bash scriptje runnen als sudo maar zonder password
« Reactie #8 Gepost op: 2007/09/13, 19:59:18 »
Werkt het volgende niet?

sudo visudo
(Om het sudoers bestand te bewerken)

Voeg nu als laatste regel het volgende in:
jouwgebruikersnaam ALL=(ALL) NOPASSWD: /etc/init.d/networking

Hierna moet je misschien wel eerst uitloggen of opnieuw starten, maar dat weet ik niet zeker.

Offline vanadium

  • Lid
Bash scriptje runnen als sudo maar zonder password
« Reactie #9 Gepost op: 2007/09/13, 20:39:35 »
Ik raak er eerlijk gezegd ook niet meer aan uit: ik heb volgende test gedaan:

touch test #maakt een testbestandje
mkdir rootdir ; sudo chown root:root rootdir
Scriptje testsuid
#!/bin/bash
cp test rootdir
chmod +x testuidWe proberen:

~$ ./testuid
cp: cannot create regular file `rootdir/test': Permission denied
Logisch tot hier, want rootdir is van root, en als gewone gebruiker heb je de permissies niet.

sudo chown root:root testuid
sudo chmod +s testuid
Tot mijn verbazing krijg ik hier dezelfde foutmelding. Het script is nu nochthans van root, maar met de suid permissie:

-rwsr-sr-x  1 root  root        29 2007-09-13 20:21 testuidIk zou dus verwachten dat het script, wanneer door de gewone gebruiker uitgevoerd, met rootpermissies werkt. Nee dus.

Hier http://linux.sitetree.nl/doc/html/node60.html staat zeer volledige en zeer begrijpelijke (nederlandse!) uitleg rond permissies en suid. Van daaruit wordt gelinkt naar de benadering van Johanvd, visudo: http://linux.sitetree.nl/doc/html/node134.html#security:sudo Die zal misschien meer succes hebben.

Als iemand door heeft wat we hier missen of verkeerd voorhebben, welkom!

Offline gercokees

  • Lid
Bash scriptje runnen als sudo maar zonder password
« Reactie #10 Gepost op: 2007/09/13, 20:54:38 »
Hoi hoi,
Ja, die benadering van Johanvd had ik ook al eens geprobeerd, maar ik had ingevuld:
mijngebruikersnaam ALL=(ALL) NOPASSWD: /home/gercokees/bin/network-restart.

Maar met "/etc/init.d/networking" werkt het helemaal perfect!!!
Hardstikke bedankt voor de moeite, en blijkbaar hebben we er allemaal iets van geleerd. Dat met die SUID en SGID bits blijf ik maar ingewikkeld vinden. Komt het eropneer dat met het SUID (is dat superuserid?) geset de gebruiker die het script aanroept de rechten krijgt van de eigenaar van het script? En is er nog verschil tussen de kleine letter s en de hoofdletter S? En wat doet de SGID dan?
Groetjes,
Groet,
Gerco-Kees
<><

Offline Tukcedo

  • Lid
    • http://www.tukcedo.nl
Bash scriptje runnen als sudo maar zonder password
« Reactie #11 Gepost op: 2007/09/16, 12:03:47 »
Het probleem is dat wanneer je een script start met sudo of met SUID, het script ZELF inderdaad met root permissies draait. Echter, alle externe commando's (vaak zelf ook weer scripts) worden in een nieuwe shell opgestart en deze shell heeft dus NIET de SUID permissies van het ouder-proces. Zoals ik hierboven al zei, sudo en SUID "overerven" niet uit beveiligingsoverwegingen.

Het is om deze reden dat ik altijd de SSH methode aanraad, dan draai je namelijk "echt" als root en heb je deze problemen niet, terwijl het toch heel goed is te beveiligen.

SGID doet voor een executable's group owner wat SUID doet voor de owner: tijdelijk de group overnemen dus.

Een paar leuke linkjes:
http://nixshell.wordpress.com/2007/04/21/suid-shell-scripts-setting-the-sticky-bit/
http://www.newlinuxuser.com/explain-what-is-setuid-and-setgid/
Tukcedo Services - Unix en Linux Consultants
http://www.tukcedo.nl