• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Probleme mit sudo

wbast

Newbie
Halloleallemitanand,

Ich möchte als ganz normaler User(Entwickler) ne DB (postgres)
entwickeln. Dazu habe ich mir gedacht, die DB rauf - und runterfahren
will ich auch als derselbe User. Bisher hab ich das als :
Code:
su -
rcpostgresql start
exit
also root gemacht.
Nun hab ich mir gedacht, machs via sudo.
Falsch gedacht!
rcpostgresql ist ein bashskript das intern einige verbotene Dinge tut
wie touch, chmod und andere Lustigkeiten, außerdem wechselt es intern noch zu einem anderen User(postgres) und schmeißt deshalb mit folgenden Nettigkeiten nur so um sich :
Code:
wbast@jufofun:~> rcpostgresql start
touch: kann „/var/log/postgresql“ nicht berühren: Keine Berechtigung
chmod: Beim Setzen der Zugriffsrechte für „/var/log/postgresql“: Die Operation ist nicht erlaubt
Initializing the PostgreSQL database at location /var/lib/pgsql/datainstall: kann Besitzer und/oder Gruppe von „/var/lib/pgsql/data“ 
nicht ändern.: Die Operation ist nicht erlaubt
install: kann Zugriffsrechte von „/var/lib/pgsql/data“ nicht ändern: Die Operation ist nicht erlaubt
                                                                                                                          failed
You can find a log of the initialisation in ~postgres/initlog.

Tja und jetzt frage ich mich wie ich das umgehen kann, bzw wie ich damit umgehen kann

Achja System ist SuSE 9.1

Gruß Werner
 
A

Anonymous

Gast
einfach nen user erstellen der volle (oder fast volle oder nur die nötigen) rechte auf die geforderten dateien hat, dann mit diesem user per sudo -u USER -s einloggen und das entsprechende machen

touch ist übrigens durchaus legitim, denn wenn ein daemon nur laufen kann wenn eine bestimmte datei existiert dann sollte sie keinesfalls während des betriebs gelöscht werden, und genau das wird ducrh touch verhindert --> unlöschbar solange touch den finger drauf hat :)

chmod kann auch recht legitim sein, denn eine bestimmte datei soll nicht zugänglich sein solange sie nicht aktiv ist, das ist ein sicherheitsaspekt, so kann niemand was daran basteln (ausser root) wenn es nicht läuft
 

TeXpert

Guru
dann richte doch für Deinen User die Rechnte entsprechend in der sudoers ein, dann kannst Du einfach als User ein
Code:
sudo rcpostgres start
machen
 

snaewe

Hacker
Mit solchen Konstrukten habe ich schon des öfteren Probleme gehabt, da per default z.B. /sbin nicht im PATH drin ist. Das 'sudo rcirgendwas start' kann dann fehlschlagen, wenn Befehle aus /sbin ohne Pfadangabe in rcirgendwas benutzt werden.

Ich hab's mir angewöhnt, solche Dinge immer per 'sudo su -' und dann 'rcirgendwas...' zu erledigen.
 
OP
W

wbast

Newbie
Tja, da war ich wieder mal blind.

Merke: wenn du sudo benutzen willst, solltest du sudo auch benutzen.
Ich hatte versucht mir das ganz einfach zu machen und nur /sbin/rcpostgresql in mein persönliches bin-Verzeichnis ( ~/bin) gelinkt, dann /etc/sudoers angepasst und geglaubt damit fertig zu sein. Tja da hatte ich wohl das sudo beim Programmaufruf vergessen. Jetzt läuft alles.

Ich hab mir jetzt ein Skript geschrieben und kann Postgres
via pg_start,pg_status,pg_stop,pg_restart hoch und runterfahren wie ich will
Das Skript sieht so aus:
Code:
#!/bin/bash

rc_arg=`echo $0| sed 's/.*pg_//'`

# Argumente ueberpruefen:
for i in start stop restart status
do
        [ "$rc_arg" = "$i" ] && is_ok=1
done

[ "$is_ok" -eq 1 ] && sudo rcpostgresql $rc_arg
und ist pg_restart,pg_start,pg_status oder pg_stop
je nachdem wie man es aufruft

Gruß Werner
 

TeXpert

Guru
mir kommt diese Lösung mit der FOR-Schleife etwas unschön vor :) (ist latürnich Geschmackssache) daher mal ein Alternativvorschlag:
Code:
#!/bin/bash

rc_arg=`echo $0| sed 's/.*pg_//'`


# Argumente ueberpruefen:
case "$rc_arg" in
  "start" | "stop" | "restart" | "status"  )    
  		sudo rcpostgresql $rc_arg;;
  * ) echo "is nix gut";;
esac
 
A

Anonymous

Gast
TeXpert schrieb:
rc_arg=`echo $0| sed 's/.*pg_//'`

ähm, müsste da nicht noch ein abschliessendes /g sein?? also wenn ich versuche ohne /g zu SEDden geht das nüsch.....oder seh ich jetzt was falsch??
 

taki

Advanced Hacker
tha_specializt schrieb:
TeXpert schrieb:
rc_arg=`echo $0| sed 's/.*pg_//'`

ähm, müsste da nicht noch ein abschliessendes /g sein?? also wenn ich versuche ohne /g zu SEDden geht das nüsch.....oder seh ich jetzt was falsch??


Mit dem 'g' am Ende wird jedes Vorkommen des Suchbegriffs ersetzt. Ohne nur das erste Vorkommen.
Gruß,
Taki
 
A

Anonymous

Gast
achsooooo, na dann.... :)
--> ich musste bisher immer nur ALLE vorkommen ersetzen, deswegen weiss ich dat nüsch :lol:
 

taki

Advanced Hacker
Macht ja nix, ich weis selbst vieles nicht, hatte nur grade meinO'Reillys "Reguläre Ausdrücke" in Griffweite 8)
Ciao,
Taki
 
Oben