sudo script som almindelige bruger

Alle tekniske spørgsmål som ikke hører ind under de andre fora.
thj01
Indlæg: 2667
Tilmeldt: 21. nov 2006, 10:06
Geografisk sted: Fredericia

sudo script som almindelige bruger

Indlæg af thj01 »

Jeg har haft nogle problemer med darktable, fordi databasen til programmet nogle gange fucker op, og der har jeg lavet et script for at af- og geninstallere det.

Men for at få det til at virke helt perfekt har jeg brug for at starte programmet op som min egen bruger, for at programmet danner sin konfigurationsfil, så jeg kan skifte sprog.

Jeg har prøvet at starte programmet op med kommandoen:

Kode: Vælg alt


sudo -u tj darktable
sleep 4
sudo pkill darktable
sleep2
sed bla bla bla.....


... og det starter fint op, men af en eller anden grund får den ikke etableret konfigurationsfilen så sed kommandoen virker...

Hvad gør jeg forkert?
Forfatter til Ubuntuguiden: http://www.vidas.dk/guides/ubuntuguiden.html

Kører LTS udgaverne.

"It's always easy if you know how to do it."
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Re: sudo script som almindelige bruger

Indlæg af lath »

thj01 skrev:Jeg har haft nogle problemer med darktable, fordi databasen til programmet nogle gange fucker op, og der har jeg lavet et script for at af- og geninstallere det.

Men for at få det til at virke helt perfekt har jeg brug for at starte programmet op som min egen bruger, for at programmet danner sin konfigurationsfil, så jeg kan skifte sprog.

Jeg har prøvet at starte programmet op med kommandoen:

Kode: Vælg alt


sudo -u tj darktable
sleep 4
sudo pkill darktable
sleep2
sed bla bla bla.....


... og det starter fint op, men af en eller anden grund får den ikke etableret konfigurationsfilen så sed kommandoen virker...

Hvad gør jeg forkert?


Jeg forstår ikke hvad du mener med "ikke etaberet" i:
men af en eller anden grund får den ikke etableret konfigurationsfilen så sed kommandoen virker


Hvis et program bruger en bestemt konfigurationsfil, og du skal skifte i mellem >1 konfigurationsfil, så lader du programmet læse fra et symlink, der peger på den konfigurationsfil du vil bruge.

For at det virker så skal programmet bruge lstat (meget normalt) før det bruger andre fil I/O system kald, så som open, read, write.
Lstat giver et program informationer om den fil et sym link peger på, og dermed ikke selve sym link filen.

Kernen vil følge et sym link, til et symlink, til et symlink, etc., men kun et bestemt antal gange. Hvis grænsen nås, så vil kernen i stedet for information returnere en fejl meddelelse. Grænsen er ret høj, AFAIK.

---

Hvad angår din titel på indlægget:
sudo script som almindelige bruger

...

Der er 2 ting du skal være opmærksom på:
  • sudo fjerner miljø variabler
  • Kernen nægter at køre et script set uid root, altså med superbruger/root rettigheder, af den åbenlyse grund at det åbner en ladeport af muligheder for at omgå sikkerheden i et Linux baseret styresystem.
    • At køre et program med sudo foran er ikke en set uid root fil, når set uid bit'en ikke er sat, og/eller user for filen ikke er superbrugeren, root.

Hvis du vil starte et program uden sudo, så skal du oversætte et wrapper program med f.eks en C compiler.
Programmet skal først, AFAIK, sætte programmets euid(=effective user id) til 0, altså root,, og så execv programmet du egentlig ville starte.
Programmets process id PID, vil blive genbrugt, da dit kompilerede wrapper program fuldstændig erstattes af det program du execv'er (=starter).

For at programmet virker, så skal du enten sætte det kompilerede program set uid root, (med chmod kommandoen), eller tilføje de rigtige capabilities, (med setcap kommandoen).

Se manual siden capabilities(7) med:

Kode: Vælg alt

man 7 capabilities

... for at finde ud af hvilken/hvilke capabilities dit program skal bruge.

Bemærk at hvis du flytter filen, eller ændrer så meget som en eneste bit i filen, så mister filen omgående alle capabilities.
Det gælder også en set uid root, fil, da sådan en fil er indehaver af samtlige capabilities fra capabilities(7).

/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
AJenbo
Admin
Indlæg: 20861
Tilmeldt: 15. nov 2009, 15:04
IRC nickname: AJenbo
Geografisk sted: Vanløse, København

Re: sudo script som almindelige bruger

Indlæg af AJenbo »

Når du starte med sudo vil konfigurationen sikkert blive oprettet for root brugeren i /root mappten. Men hvorfor vælger du overhovedet at starte programmet via sudo og ikke blot starte det på normal vis?
thj01
Indlæg: 2667
Tilmeldt: 21. nov 2006, 10:06
Geografisk sted: Fredericia

Re: sudo script som almindelige bruger

Indlæg af thj01 »

Jeg har lavet et script der først afinstallerer programmet med apt-get .. og derefter fjerner samtlige filer der er efterladt i systemet.

Derefter geninstalleres det, men da det gøres med sudo, er programmet endnu ikke blevet konfigureret hos min bruger.

derfor vil jeg gerne have det sådan at scriptet starter darktable op som min bruger, hvilket medfører at konfigurationsfilen bliver oprettet i, så jeg kan ændre sprogindstillingerne.

Men har lige søgt lidt anderledes og fundet denne løsning.. som jeg vil tjekke i morgen ;)

http://askubuntu.com/questions/294736/r ... o-password
Forfatter til Ubuntuguiden: http://www.vidas.dk/guides/ubuntuguiden.html

Kører LTS udgaverne.

"It's always easy if you know how to do it."
AJenbo
Admin
Indlæg: 20861
Tilmeldt: 15. nov 2009, 15:04
IRC nickname: AJenbo
Geografisk sted: Vanløse, København

Re: sudo script som almindelige bruger

Indlæg af AJenbo »

Lad være med at skrive sudo før darktable og så burde det virke fint. Måske er der noget omkring det script du ikke fortælder os, som også bør ændres først.
thj01
Indlæg: 2667
Tilmeldt: 21. nov 2006, 10:06
Geografisk sted: Fredericia

Re: sudo script som almindelige bruger

Indlæg af thj01 »

Nå her er det ufærdige script (læs fungerer ikke endnu) som jeg har forsøgt at lave:

Fjern programmet og fjern konfigurationsfiler
Geninstaller og læg vandmærker ind

og så kommer det.

start darktable som ens egen bruger, så programmet opretter konfigurationsfilen ~/.config/darktable/darktablerc, så det programmet bliver engelsk.

Som det er nu virker alt - lige indtil jeg skal starte programmet og initialisere konfigurationsfilen.

Hvis jeg manuelt genstarter daarktable bagefter så virker sed kommandoen fint

Kode: Vælg alt

# Afinstaller darktable


# Foldere darktable anvender
#
# ~/.cache/darktable
# ~/.config/darktable
#
# /usr/lib/darktable
#
# Placering af logo filer
# /usr/share/darktable/watermarks root:root 644
echo "***

Fjern Darktable og dets dependecies

***"

sudo apt-get purge darktable -y
sudo apt-get autoremove -y

#fjern konfigurationsfiler

echo "***

Fjern konfigurationsfiler

***"

rm -R ~/.config/darktable
rm -R ~/.cache/darktable
rm -R /usr/lib/darktable

#geninstaller darktable

echo "***

Gensinstaller darktable

***"
sudo apt-get install darktable -y

#Kopier logofiler og sæt rettigheder.


echo "***

Kopier logofiler, og sæt rettigheder

***"
sudo cp ~/Billeder/Logo/*.svg /usr/share/darktable/watermarks/
sudo chown root:root /usr/share/darktable/watermarks/log*.svg
sudo chmod 644 /usr/share/darktable/watermarks/log*.svg

sudo -H -u thoj darktable&

sudo sleep 5

sudo pkill darktable

sudo sleep 2

sed -i s/language=/language=C/ ~/.config/darktable/darktablerc
Forfatter til Ubuntuguiden: http://www.vidas.dk/guides/ubuntuguiden.html

Kører LTS udgaverne.

"It's always easy if you know how to do it."
AJenbo
Admin
Indlæg: 20861
Tilmeldt: 15. nov 2009, 15:04
IRC nickname: AJenbo
Geografisk sted: Vanløse, København

Re: sudo script som almindelige bruger

Indlæg af AJenbo »

Prøv dette:

Kode: Vælg alt

# Afinstaller darktable


# Foldere darktable anvender
#
# ~/.cache/darktable
# ~/.config/darktable
#
# /usr/lib/darktable
#
# Placering af logo filer
# /usr/share/darktable/watermarks root:root 644
echo "***

Fjern Darktable og dets afhængiheder

***"

sudo apt-get purge darktable -y
sudo apt-get autoremove --purge -y

#fjern konfigurationsfiler

echo "***

Fjern konfigurationsfiler

***"

rm -R ~/.config/darktable
rm -R ~/.cache/darktable
rm -R /usr/lib/darktable

#geninstaller darktable

echo "***

Gensinstaller darktable

***"
sudo apt-get install darktable -y

#Kopier logofiler og sæt rettigheder.


echo "***

Kopier logofiler, og sæt rettigheder

***"
sudo cp ~/Billeder/Logo/*.svg /usr/share/darktable/watermarks/
sudo chown root:root /usr/share/darktable/watermarks/log*.svg
sudo chmod 644 /usr/share/darktable/watermarks/log*.svg

darktable&

sleep 5

killall darktable

sed -i s/language=/language=C/ ~/.config/darktable/darktablerc

Brug som sagt kun sudo når det er nødvendigt (det er det helt bestemt ikke med sleep), og nu heller ikke noget med at køre scriptet via sudo :)

Når du alligevel har et backup af dine vandmærker kunne du jo egentlig også have et af din config fil som du så kopierede frem for at starte og dræbe programmet.
thj01
Indlæg: 2667
Tilmeldt: 21. nov 2006, 10:06
Geografisk sted: Fredericia

Re: sudo script som almindelige bruger

Indlæg af thj01 »

Jeg har kørt scriptet som du foreslog... og på flere andre måder. Men af en eller anden årsag så starter programmet med andre parametre fra kommandollinien end fra HUD'en. Ihvertfald dannes konfigurationsfilen først efter at Darktable er startet fra HUD'en...

Hvor kan man finde de parametre som HUD genvejene starter med?

@lath

Jeg skal lige have genlæst dit indlæg en dag jeg har god tid ... for jeg er ikke helt sikker på hvad det er det siger.
Forfatter til Ubuntuguiden: http://www.vidas.dk/guides/ubuntuguiden.html

Kører LTS udgaverne.

"It's always easy if you know how to do it."
AJenbo
Admin
Indlæg: 20861
Tilmeldt: 15. nov 2009, 15:04
IRC nickname: AJenbo
Geografisk sted: Vanløse, København

Re: sudo script som almindelige bruger

Indlæg af AJenbo »

thj01
Indlæg: 2667
Tilmeldt: 21. nov 2006, 10:06
Geografisk sted: Fredericia

Re: sudo script som almindelige bruger

Indlæg af thj01 »

tak.
Forfatter til Ubuntuguiden: http://www.vidas.dk/guides/ubuntuguiden.html

Kører LTS udgaverne.

"It's always easy if you know how to do it."