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: