li_nux
Anmeldungsdatum: 15. April 2008
Beiträge: Zähle...
|
Hallo, in meiner Firma habe ich das Recht, mich mittels "sudo su - andereruser" zu einem anderen User zu verwandeln. Nun würde ich gerne Umgebungsvariablen automatisch in die neue User-Session übernehmen, möchte aber nicht die .profile oder .bashrc von andereruser anpassen, da ich nicht der einzige bin, der diesen andern Benutzer verwendet. Als Lösung habe ich mir folgendes überlegt, allerdings macht die Bash hier einen automatischen "exit": | meinuser@server:~$ sudo su - andereruser << EOF
export VIMINIT="set nu"
bash -i
EOF
andereruser@server:~$ exit
meinuser@server:~$
|
Den "exit"-Befehl habe ich nicht selbst eingegeben! Was muss ich am Aufruf von "bash -i" ändern, damit nicht automatisch ein "exit" ausgeführt wird, sondern die interaktive Session aktiv bleibt? Oder fällt euch noch eine andere Möglichkeit ein, eine Umgebungsvariable in die neue Session zu schleusen? Bitte bei der Antwort berücksichtigen, dass ich ausschließlich mittels "sudo su - andereruser" die andere Usersession öffnen kann. Ich habe weder root-Rechte, noch ist die Option "sudo -E" erlaubt, noch kann ich "sudo su andereruser" (ohne "-") ausführen. Und wie gesagt, im Profil von "andereruser" möchte bzw. kann ich nichts ändern, weil es ein gemeinsamer Benutzer ist. Danke für eure Hilfe!
|
kB
Supporter, Wikiteam
Anmeldungsdatum: 4. Oktober 2007
Beiträge: 8554
Wohnort: Münster
|
li_nux schrieb: […] fällt euch noch eine andere Möglichkeit ein, eine Umgebungsvariable in die neue Session zu schleusen?
Wenn Du erst mal als der andere Benutzer angemeldet bist, kannst Du ein Skript aus Deinem eigenen Home-Verzeichnis ausführen oder einlesen. Dazu musst Du nur dem anderen Benutzer erlauben, auf diese Datei zuzugreifen.
|
li_nux
(Themenstarter)
Anmeldungsdatum: 15. April 2008
Beiträge: 9
|
kB schrieb: li_nux schrieb: […] fällt euch noch eine andere Möglichkeit ein, eine Umgebungsvariable in die neue Session zu schleusen?
Wenn Du erst mal als der andere Benutzer angemeldet bist, kannst Du ein Skript aus Deinem eigenen Home-Verzeichnis ausführen oder einlesen. Dazu musst Du nur dem anderen Benutzer erlauben, auf diese Datei zuzugreifen.
Ja, das ist schon klar, das ist auch eine Notlösung, die ich allerdings gerne vermeiden möchte, da ich häufig auf verschiedenen Servern auf verschiedene User mit einem solchen Setup switchen muss. Daher würde ich eine Lösung (mit einem alias) in meinem Benutzerkontext bevorzugen. Ich will nicht unbedingt 100 mal täglich dieses Script von Hand nach jeder Anmeldung manuell starten.
Mein aktueller Ansatz sieht ja bereits relativ viel versprechend aus, aber ich versehe nicht ganz, warum ich auf diese Weise keine interaktive Session starten kann, die nicht gleich wieder beendet wird. Hoffe, das es eine Möglichkeit gibt, dieses "auto-exit" zu vermeiden...
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
Wie wäre es denn, wenn du Umgebungsvariablen aus deiner Session übernimmst - Option -E für sudo, damit die durchgereicht werden und dann ein explizites Whitelisting für su mit -w VARIABLE ?
export VIMINIT="set nu"
sudo -E su - anderuser -w VIMINIT
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12801
|
Das Muster sudo su - andereruser ist nicht nötig. Das kann man einfacher mit sudo -iu andereruser haben. Wenn du eine fixe Menge an Umgebungsvariablen mitnehmen willst, dann kannst Du das so machen: | #!/bin/sh
sudo -iu andereruser "FOO=$FOO" "BAR=$BAR"
|
Oder Du nimmst das Environment komplett mit, wie seahawk1986 vorgeschlagen hat: | #!/bin/sh
sudo -iu andereruser -E
|
Das kannst Du natürlich auch statt mit einem separaten Skript in der ~/.bash_aliases als Alias oder Shell-Funktion definieren.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
li_nux schrieb: Ich habe weder root-Rechte, noch ist die Option "sudo -E" erlaubt, noch kann ich "sudo su andereruser" (ohne "-") ausführen. Und wie gesagt, im Profil von "andereruser" möchte bzw. kann ich nichts ändern, weil es ein gemeinsamer Benutzer ist.
Ah, sudo -E ist nicht erlaubt, dann ginge das noch so, wenn der vor rklm vorgeschlagene Weg mit sudo -iu andereruser "FOO=$FOO" "BAR=$BAR" nicht klappt:
| sudo VIMINIT="set nu" su - andereruser -w VIMINIT
|
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12801
|
seahawk1986 schrieb: li_nux schrieb: Ich habe weder root-Rechte, noch ist die Option "sudo -E" erlaubt, noch kann ich "sudo su andereruser" (ohne "-") ausführen. Und wie gesagt, im Profil von "andereruser" möchte bzw. kann ich nichts ändern, weil es ein gemeinsamer Benutzer ist.
Ah, sudo -E ist nicht erlaubt,
Was ist das denn für ein Setup? Ist der Nutzer nicht in der Admin-Gruppe ("adm")? Aber dann kannst Du doch auch nicht sudo su machen. Irgendwas ist da seltsam. Kannst Du bitte mal die Ausgabe von sudo -u andereruser id posten? Die Lösung aus dem Eingangsposting mit dem Here-Dokument kann natürlich nicht funktionieren, weil Stdin dann belegt ist und die Shell nicht interaktiv werden kann.
|
li_nux
(Themenstarter)
Anmeldungsdatum: 15. April 2008
Beiträge: 9
|
seahawk1986 schrieb: Ah, sudo -E ist nicht erlaubt, dann ginge das noch so, wenn der vor rklm vorgeschlagene Weg mit sudo -iu andereruser "FOO=$FOO" "BAR=$BAR" nicht klappt:
| sudo VIMINIT="set nu" su - andereruser -w VIMINIT
|
Das geht leider nicht, weil es auf den Servern (es ist zugegebensermaßen kein Ubuntu) eine andere Implementierung von "su" vorhanden ist, welche den Parameter "-w" nicht kennt. rklm schrieb: Was ist das denn für ein Setup? Ist der Nutzer nicht in der Admin-Gruppe ("adm")? Aber dann kannst Du doch auch nicht sudo su machen. Irgendwas ist da seltsam. Kannst Du bitte mal die Ausgabe von sudo -u andereruser id posten? Die Lösung aus dem Eingangsposting mit dem Here-Dokument kann natürlich nicht funktionieren, weil Stdin dann belegt ist und die Shell nicht interaktiv werden kann.
Ah, ok also komme ich mit dem Here-Dokument gar nicht weiter. Gut zu wissen. Da ist übrigens nichts seltsam. Der Benutzer ist in keiner Admin-Gruppe, sondern in der /etc/sudoers wurde dediziert festgelegt, dass man "su - andereruser" als root ausführen kann. Auszug von "sudo -l"
| (root) NOPASSWD: /bin/su - andereruser
|
Aber dadurch dass ich jetzt "sudo -l" ausgeführt habe, ist mir aufgefallen, dass mittlerweile auch ein direktes sudo als "andereruser" erlaubt ist (was zum Zeitpunkt der Eröffnung des Threads noch nicht der Fall war):
| (userxyz, andereruser) NOPASSWD: ALL
|
Somit habe ich nun die folgende von dir vorgeschlagene Möglichkeit:
| sudo -iu andereruser "FOO=$FOO" "BAR=$BAR"
|
Was jetzt noch ganz nett wäre, wenn ich nicht nur Umgebnungsvariablen in die Usersession übernehmen könnte, sondern beim Userwechsel gleich das Souercen eines eigenen Init-Scripts antriggern könnte. Aktuell mache ich nach dem Userwechsel (manuell) ein
| source /pfad/zu/my_env.sh
|
Dies schreibe ich bewusst nicht in die .bashrc oder .profile, weil auch andere Kollegen diesen Benutzer verwenden. Ich hab schon ein bisschen rumprobiert aber bin irgendwie noch zu keiner Lösung gekommen, um beim Wechsel in die Usersession von "andereruser" mit "sudo -iu andereruser" das Sourcen eines eigenen Scripts (automatisch) zu triggern (ohne etwas an der Konfig von "andereruser" zu verändern). Habt ihr da eine Idee?
|
li_nux
(Themenstarter)
Anmeldungsdatum: 15. April 2008
Beiträge: 9
|
Es hilft unglaublich, man-pages zu lesen 😉 | sudo -iu andereruser bash --rcfile /pfad/zu/my_env.sh
|
macht so ziemlich das, was ich mir vorgestellt habe. Am Ende meines Scripts habe ich aber noch "source ~/.bashrc" eingebaut, um auch die Defaulteinstellungen des Users (wie z. B. den Prompt) zu haben. VIM macht zwar noch nicht ganz das, was ich mir vorgestellt habe, aber da muss ich noch ein sisschen experimentieren...
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12801
|
li_nux schrieb: Es hilft unglaublich, man-pages zu lesen 😉
Unbedingt!
macht so ziemlich das, was ich mir vorgestellt habe. Am Ende meines Scripts habe ich aber noch "source ~/.bashrc" eingebaut, um auch die Defaulteinstellungen des Users (wie z. B. den Prompt) zu haben.
Ich würde das vermutlich umgekehrt machen: die ~/.bashrc am Anfang sourcen, damit Standardeinstellungen Deine speziellen nicht überschreiben.
|
chilidude
Anmeldungsdatum: 18. Februar 2010
Beiträge: 867
|
So ist es aber auch cool:
echo "echo hallo \$USER; sleep 5; echo jetzt interaktiv weiter; bash -i <&1;" | sudo -iu andereruser
|
li_nux
(Themenstarter)
Anmeldungsdatum: 15. April 2008
Beiträge: 9
|
rklm schrieb: Ich würde das vermutlich umgekehrt machen: die ~/.bashrc am Anfang sourcen, damit Standardeinstellungen Deine speziellen nicht überschreiben.
Stimmt, das ist mir dann auch schnell klar geworden, dass das sinnvoller ist 😉 chilidude schrieb: So ist es aber auch cool:
echo "echo hallo \$USER; sleep 5; echo jetzt interaktiv weiter; bash -i <&1;" | sudo -iu andereruser
Danke, das ist eigentlich das, was ich ursprünglich wollte und es klappt sogar mit "sudo su - andereruser". 👍 Wie beschrieben, wurde zwar zwischenzeitlich die Voraussetzung für "sudo -iu andereruser" geschaffen, aber grundsätzlich schön, verschiedene Varianten für den Fall der Fälle zu kennen.
|