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

Re: Konfiguration durch Skript durch "normalen Benutzer"



Hallo,

Am Fri, 26 Jan 2018, Andreas Weber schrieb:
>Da die Liste der Konfigdateien am Anfang noch nicht bekannt sind, würde
>es nichts helfen dem Benutzer genau auf diese Schreibrechte zu geben.
>
>Dem Benutzer "sudo" geben will man auch nicht.

[ ] du hast sudo verstanden

>Wenn ich mir das recht überlege sowas wie sudo nur nicht /etc/sudoers
>sondern die Signatur des Skripts überprüfen.

Nicht sowas wie sudo sondern genau das: sudo.

>Gibt es sowas schon? Wenn nicht gehe ich davon aus, dass es eine
>dämliche Idee ist :-)

Und ob. Du willst sudo nachbauen. Und wirst dabei Fehler machen.

BTW: die Debian default-sudo-config ist kaputt (wie die der meisten
Distros), vielleicht irritiert dich das.

RTFM sudo. Gründlich. Mehrfach!

Sowas wie "sudo geben" gibt's nicht. Sudo ist dazu da, bestimmten(!) 
Usern (und -gruppen[1]) bestimmte(!) Kommandos (und -gruppen[1]) als
anderer User (z.B. als root) ausführen zu lassen, z.B. bei Scripten
bei denen ein suid-bit ja zwecklos ist.

Die Distro-Default-Configs sind traditionell kaputt, ganz besonders
bei denen, bei denen man 'sudo su -' verwenden kann... Hier sieht das
hingegen z.B. so aus:

dh@host[5]: ~ (000)$ sudo su -
root's password:<richtiges_root_PW_eintipper>
Sorry, user dh is not allowed to execute '/bin/su -' as root on host.
dh@host[5]: ~ (001)$

Und so gehört sich das auch! Wenn ich das root-PW kenne, kann ich auch
direkt 'su -' aufrufen!

dh@host[5]: ~ (000)$ su -
Password:<richtiges_root_PW_eintipper>
root@host[5]: ~ (000)# id
uid=0(root) gid=0(root) groups=0(root)
root@host[5]: ~ (000)# exit

Und ohne root-PW per "sudo su -" root werden??? Wer ist nur auf diese
kranke Idee gekommen???

Nochmal: RTFM! Tret die default-config gepflegt in die Tonne (bzw. 
erstmal nur umbenennen ;) und fang bei Null an. Oder hiermit (schon
über "LANG" als "aufzuhebende" Umgebungsvariable läßt sich diskutieren)

====
Defaults targetpw
Defaults always_set_home
Defaults env_reset
Defaults env_keep = "DISPLAY TERM"
Defaults env_check = "DISPLAY TERM"
Defaults passwd_timeout=1
Defaults timestamp_timeout=0
Defaults insults

root    ALL=(ALL) ALL
====

dann sollten IMO nur noch ganz gezielte Einträge für spezifische User
und Kommandos folgen, Schema:

${USER}    ${HOST}=(${TARGET_USER}) [NOPASSWD:]${COMMAND} ...

z.B. hier z.B.:

dh      host=(root) NOPASSWD:/usr/local/sbin/ifup "",/usr/local/sbin/ifdown ""
dh      host=(news) NOPASSWD:/usr/sbin/fetchnews

Man beachte die "" hinter ifup/ifdown bzw. deren fehlen bei fetchnews.

wobei /bin/quit nur ein kl. Wrapper um shutdown/halt ist (bissl
logging).

Bei fetchnews könnte man schon diskutieren. Da will ich halt ggfs.
eben auch mal ein '-f' oder '-P' unterbringen... Leafnode holt (und
postet ggfs. nur) sein Zeugs... Und der user news darf auf der Kiste
eh nix außer leafnode laufen zu lassen und dessen Spool verwalten...

Andererseits darf ich ifup/ifdown[2] so nur mit vollem Pfad und OHNE
jeden Parameter aufrufen! *Alles* andere verlangt das root-PW:

dh@host[5]: ~ (000)$ sudo ifup
root's password:                            # Ctrl-C
dh@host[5]: ~ (001)$ sudo ifup foo
root's password:                            # Ctrl-C
dh@host[5]: ~ (001)$ sudo /usr/local/sbin/ifup foo
root's password:                            # Ctrl-C
dh@host[5]: ~ (001)$ sudo /usr/local/sbin/ifup
[tut, ohne PW]
dh@host[5]: ~ (000)$ 

Als user haut man sich dann eben noch kurz ein
    alias ifup='sudo /usr/local/sbin/ifup'
in die ~/.${SHELL}rc oder so, und fertig ist die Laube :)

Wenn du's also richtig machst, darf dein normal user nur _genau_
spezifizierte Kommandos (wie dein script) auf jew. genau eine Art
aufrufen und sonst gar nichts als ein anderer User (wie root).

Du mußt es nur konfigurieren.

Dummerweise implizieren als Zweck und implementieren die
Default-configs diverser Distris genau Anderes und torpedieren so
letztlich Sinn und Zweck und die Arbeitsweise von sudo... Kein Wunder,
daß die User es dann nicht verstehen und *tada* sind wir bei einem
Fall wie deinem.

*seufz*

-dnh

[1] die man in sudoers definieren kann
[2] ein eigenes Script. Uralt. Lokales eth* zum anderen Rechner.

PS: "env_check" ist etwas unintuitiv:

==== man 5 sudoers [env_check] ====
    Regardless of whether the env_reset option is enabled or disabled,
    variables specified by env_check will be preserved in the environment
    if they pass the aforementioned check.
====

-- 
"The command 'man man' works fine, but 'man woman' produces:
 No manual entry for woman."        -- Constantinos Maltezos


Reply to: