Re: Sudo en environment
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.
> 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!
Het probleem is ondertussen opgelost en toch wat complex om hier te
bespreken.
Groet,
Paul
--
Paul van der Vlis Linux systeembeheer Groningen
https://www.vandervlis.nl/
Reply to: