Sudo, su & scripts: verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
 
(11 tussenliggende versies door dezelfde gebruiker niet weergegeven)
Regel 1: Regel 1:
<code>sudo</code> Staat voor ''super user do'' en da's een manier om een commando uit te voeren als beheerder. <code>su</code> Staat voor ''substitute user'': Een manier om de actuele inlogprompt van eigenaar te laten veranderen. In den beginne allemaal duidelijk. Niet dus.
+
Op het moment dat ik de executie van scripts combineer met <code>sudo</code> of <code>su</code>, krijg ik allerlei rare effecten. Tijd om in het konijnenhol af te dalen!
  
 
== sudo cd ==
 
== sudo cd ==
Regel 11: Regel 11:
 
== PATH ==
 
== PATH ==
  
Ik heb een map met eigen scripts, oorspronkelijk op <code>/opt/scripts</code>, maar recentelijk verplaatst naar <code>/home/strompf/Dropbox/.roaming/opt/scripts</code>. So far, so good.
+
In <code>/home/jeroen/Dropbox/Scripts</code> bewaar ik allerlei eigen scripts, bv. rondom webserverbeheer. Die locatie heb ik toegevoegd aan <code>$PATH</code>. Toch gaat dat niet altijd goed:
  
Maar niet zo good:
+
<pre>
 
+
MijnScript.sh        # Werkt prima
MijnScript.sh        # Werkt prima
+
sudo MijnScript.sh  # Werkt niet!
sudo MijnScript.sh  # Werkt niet!
+
su MijnScript.sh    # Werkt niet!
su MijnScript.sh    # Werkt niet!
+
</pre>
  
 
Dat komt omdat ''gebruikers'', ''sudo'' en ''su'', alle drie andere mechanismes hebben tav. de PATH-variabele.
 
Dat komt omdat ''gebruikers'', ''sudo'' en ''su'', alle drie andere mechanismes hebben tav. de PATH-variabele.
  
=== Gebruikers ===
+
=== Reguliere gebruikers ===
  
PATH-variabele specificeren en aanpassen in <code>.bashrc</code> - Nie moeilijk!
+
Voor reguliere gebruikers, kun je de PATH-variabele specificeren en/of aanpassen in <code>.bashrc</code> - Werkt prima.
  
 
=== su ===
 
=== su ===
  
* ''su'' Maakt gebruik van ''sytem-wide environment variables''. Die vind je in <code>/etc/environment</code>
+
<code>su</code> Maakt gebruik van ''sytem-wide environment variables''. Die vind je in <code>/etc/environment</code> (het bestand - niet de map!). Voorbeeld van wat ik daar zoal aantrof in een vrij nieuwe Linux Mint-installatie (juli 2020):
* Als je daar de PATH-variabele bijwerkt, dan werkt het commando <code>su MyScript.sh</code>.
+
 
 +
<pre>
 +
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
 +
</pre>
 +
 
 +
Dit heb ik als volgt aangepast:
 +
 
 +
<pre>
 +
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/strompf/Dropbox/Scripts"
 +
</pre>
 +
 
 +
Het commando <code>su MyScript.sh</code> werkt nu.
  
 
=== sudo ===
 
=== sudo ===
Regel 41: Regel 52:
 
</pre>
 
</pre>
  
Vandaar de foutmelding. Uiteraard kun je dit pad aanpassen, maar ik heb de indruk dat dat niet verstandig is. Alternatieve oplossingen:
+
In juli 2020 heb ik dit aangepast middels <code>sudo visudo</code> - Werkt prima.
 +
 
 +
== Zie ook ==
  
* Gebruik <code>sudo</code> in het script zelf, waar dat nodig is - Getest, en het werkt
+
* [[Su]]
* Gebruik <code>su</code>
+
* [[Sudo]]
* Gebruik absolute padnamen.
 
  
 
== Bronnen ==
 
== Bronnen ==

Huidige versie van 21 jul 2020 om 17:50

Op het moment dat ik de executie van scripts combineer met sudo of su, krijg ik allerlei rare effecten. Tijd om in het konijnenhol af te dalen!

sudo cd

Het commando sudo cd ... werkt niet: Na dit commando, is de werkdirectory immers aangepast, en mogelijk naar een locatie waar de gewone gebruiker geen rechten toe heeft.

De oplossing zou zijn:

sudo -i

PATH

In /home/jeroen/Dropbox/Scripts bewaar ik allerlei eigen scripts, bv. rondom webserverbeheer. Die locatie heb ik toegevoegd aan $PATH. Toch gaat dat niet altijd goed:

MijnScript.sh        # Werkt prima
sudo MijnScript.sh   # Werkt niet!
su MijnScript.sh     # Werkt niet!

Dat komt omdat gebruikers, sudo en su, alle drie andere mechanismes hebben tav. de PATH-variabele.

Reguliere gebruikers

Voor reguliere gebruikers, kun je de PATH-variabele specificeren en/of aanpassen in .bashrc - Werkt prima.

su

su Maakt gebruik van sytem-wide environment variables. Die vind je in /etc/environment (het bestand - niet de map!). Voorbeeld van wat ik daar zoal aantrof in een vrij nieuwe Linux Mint-installatie (juli 2020):

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

Dit heb ik als volgt aangepast:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/strompf/Dropbox/Scripts"

Het commando su MyScript.sh werkt nu.

sudo

sudo Has a policy of resetting the environment and setting a secure path. It is enabled by default:

/etc/sudoers:

Defaults  env_reset
Defaults  secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

In juli 2020 heb ik dit aangepast middels sudo visudo - Werkt prima.

Zie ook

Bronnen