Commerzpunk schrieb
Besteht denn trotzdem eine Möglichkeit, sudo Befehle mitzugeben, die nach dem Benutzerwechsel ausgeführt werden, ohne .bashrc anzupassen?
Dafür ist sudo eigentlich da (das "do" für "Switch User and DO" im Gegensatz zu z.B. dem su-Programm.
sudo -iu user_b id
führt den Befehl 'id' als user_b aus. Du kannst allerdings immer nur *einen* Befehl/Kommando als anderer User ausführen , oder du mußt ein Skript starten welches mehrere Kommandos enthält. Oder eben eine Sub-Shell starten, wobei da nur eine interaktive Subshell eine andere .rc-Initdatei zuläßt (siehe unten).
Das funktioniert z.B. *nicht* wie ggf. erwartet:
sudo -iu user_b id;id
(oder)
sudo -iu user_b 'id;id'
(oder)
sudo -iu user_b 'id && id'
(daß aber schon)
sudo -iu user_b sh -c " id ; id"
Ich weiß nur nicht, ob du das so meinst.
Sudo hat (zum Glück) einige Security-Mechanismen, die von seiner speziellen Art und Möglichkeiten herrühren.
Da es dir ja evtl. um die Nutzung einer anderen .rc-Datei als der (bei bash) normalen .bashrc geht, einige Beispiele was geht und was meines Wissens aus nachvollziehbarem Grund nicht so geht:
Ich nutze hier den root-Account als Beispiel für deinen user_b:
Gegeben sei diese /root/.bashrc_a
# cat .bashrc_a
alias kontrolle='echo kontrolle ist gut'
Als User(bei dir user_a) könnte man das gewünschte rc-File jetzt der interaktiven Shell des anderen Users mitgeben:
[gerhard@ws01 ~]$ sudo -iu root /usr/bin/bash --rcfile .bashrc_a
[sudo] Passwort für gerhard:
[root@ws01 ~]# kontrolle
kontrolle ist gut
Mit --rcfile kann also für die Bash eine andere Datei als die normale .bashrc als Init-File mitgegeben werden. Interaktiv wird das auch so funktionieren.
Was nicht funktioniert ist die nicht-interaktive Nutzung eines Befehls/Kommandos welche Teile der anderen rc-Datei nutzen will. Z.B. funktioniert sowas nicht:
gerhard@ws01 ~]$ sudo -iu root /usr/bin/bash --rcfile .bashrc_a -c 'id ; kontrolle'
uid=0(root) gid=0(root) Gruppen=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),19(log)
/usr/bin/bash: kontrolle: Kommando nicht gefunden.
(oder durch explizites sourcen)
gerhard@ws01 ~]$ sudo -iu root /usr/bin/bash --rcfile .bashrc_a -c 'source .bashrc_a && id && kontrolle'
uid=0(root) gid=0(root) Gruppen=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),19(log)
/usr/bin/bash: kontrolle: Kommando nicht gefunden.
D.h. daß das neue/andere rc-File zwar verwendet(--rcfile) und auch gesourced wird, aber in der Subshell die gestartet wird trotzdem nicht verfügbar/aktiv sind.
Sudo ist sehr restriktiv bzgl der Umgebung (Environment) in dem "Befehl" ausgeführt werden darf/kann.
Siehe z.B. für Infos und ggf. weitere Ideen: man sudoers -> Command environment
Weiterhin besteht ebenfalls über die sudoers-Kontrolldatei die Möglichkeit bestimmte Befehlsketten als z.B. neues Kommando zu definieren, dies aber eben nur zu erlauben wenn user_a die sudo-Sitzung startet.
Das sind jetzt so ein paar Gedanken, die ich denke (sic!) das sie mit deinem Problem/Aufgabe zutun haben *könnten* oder die du ausprobieren kannst.
Ansonsten zeige am Besten mal ein konkretes Beispiel was du lösen möchtest, also was du machst und was du eigentlich erwartest als Ergebniss. Evtl. kann man dann andere/bessere Möglichkeiten finden.
(Mich verwirrt z.B. warum du unbedingt ein anderes .rc-Initskript verwenden möchtest bei dem was du "vorhast"...)