[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Sudo en environment



On Fri, Mar 20, 2020 at 05:26:58PM +0100, Paul van der Vlis wrote:
> Op 20-03-2020 om 15:24 schreef Heiko Noordhof:
> > On 3/20/20 1:23 PM, Paul van der Vlis wrote:
> >> Maar nu loop ik hier ook tegenaan bij sudo. Als ik doe:
> >> sudo /bin/echo $USER
> >> Dan krijg ik als antwoord "paul", terwijl als ik als root werk ik graag
> >> de root-environment wil gebruiken. Hoe kan dat?
> >>
> > 
> > Hallo Paul,
> > 
> > Als je in je shell een commando uitvoert waarin een variabele voorkomt,
> 
> Je hebt helemaal gelijk. Verkeerde test.
> 
> > zoals bijv dit:
> > 
> >   ls -l  $HOME/Documents
> > 
> > Dan wordt door je shell *eerst* de variabele vervangen door zijn waarde,
> > dus:
> > 
> >   ls -l  /home/paul/Documents
> > 
> > En dat is dan wat als commando wordt gedraaid.
> > 
> > Zo ook met jouw voorbeeld:
> > 
> >   sudo /bin/echo $USER
> > 
> > Eerst wordt de variabele vervangen door zijn waarde en wordt het commando:
> > 
> >   sudo /bin/echo paul
> > 
> > En dan wordt het commando "/bin/echo paul" d.m.v. sudo als root gedraaid
> > en is de output uiteraard gewoon "paul". Het kan verwarrend zijn, maar
> > magischer dat dit is het niet.
> > 
> > Een complete shell als root draaien via sudo kan op meerdere manieren.
> > Deze zijn allemaal min of meer gelijkwaardig:
> > 
> >   sudo su -
> >   sudo -i
> >   sudo bash
> 
> Dat kan natuurlijk, maar dan krijg je een shell.
> Mijn bedoeling was één commando te geven in dit geval.
> 
> > Maar die moet je exit-en als je er klaar bent met commando's als root
> > doen. Als je per-se een enkel commando als root wilt draaien, dan is dit
> > misschien een oplossing:
> > 
> >   sudo bash -c '/bin/echo $USER'
> 
> Het was geen commando waarin een variabele voorkwam. Echter het
> programma wat gestart werd, gebruikte environment variabelen. Het gaat
> om het starten van een VNC-server, zoiets dus:
> 
> sudo /path/vncserver
> 
> Het rare was dat bovenstaande goed ging als gewone gebruiker, maar als
> root ging het fout.


Met `sudo` doe je iets als de super user. (De super user is default, andere users kan ook)

`sudo` verandert de "wie",  niet de "waar"

Elders in deze thread ge-illusteert met `sudo whoami`. Manual page
van `whoami` beschrijft kort en krachtig: "print effective userid"
  

 
> > Door de enkele quotes wordt de variable $USER niet direct vervangen door
> > zijn waarde.  De optie -c betekent: gebruik een string op de command
> > line als script om te draaien.
> > 
> > Dus sudo start bash als root met als script '/bin/echo $USER'. Die
> > als-root-draaiende bash vervangt dan wel de variabele door zijn waarde
> > en de output is dan: "root:
> > 
> > Groeten, Heiko
> > 
> > P.S. Wat ik hier steeds "een variabele door zijn waarde vervangen"
> > noemde, heet "parameter expansion" in de bash doc's.
> 
> Bedankt voor je uitgebreide uitleg!

Ja, aan shell expansie had ook niet meteen aangedacht. Dank.


> Het probleem is ondertussen opgelost
> en toch wat complex om hier te bespreken.

Ja, herkenbaar, dank voor de terugmelding.


Groeten
Geert Stappers
-- 
Silence is hard to parse


Reply to: