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

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: