Wie verwenden Sie newgrp in ein Skript, dann bleiben in dieser Gruppe, wenn das Skript beendet
Bin ich mit einem Skript auf einer solaris-Box. speziell SunOS-5.7. Ich bin nicht als root. Ich bin versucht, ein Skript auszuführen die der folgenden ähnelt:
newgrp thegroup <<
FOO
Quelle .login_stuff
echo "Hallo Welt"
FOO
Wird das Skript ausgeführt. Das problem ist, gibt es zurück an den aufrufenden Prozess, die bringt mich in die alte Gruppe mit der Quelle .login_stuff nicht bezogen werden. Ich verstehe dieses Verhalten. Was ich Suche, ist ein Weg, um zu bleiben in der sub-shell. Jetzt weiß ich, ich könnte ein xterm& (siehe unten) in das Skript und das würde es tun, aber nachdem Sie ein neues xterm ist unerwünscht.
Indem Sie Ihre aktuelle pid als parameter.
newgrp thegroup <<
FOO
Quelle .login_stuff
xterm&
echo $1
kill -9 $1
FOO
Ich habe keine sg zur Verfügung.
Auch, newgrp notwendig ist.
InformationsquelleAutor |
Du musst angemeldet sein, um einen Kommentar abzugeben.
..wird die Ausgabe:
Seien Sie vorsichtig-Stellen Sie sicher, dass Sie escape '$' mit einem Schrägstrich. Die Interaktionen sind ein wenig komisch, denn es erweitert auch single-quotes, bevor er ausgeführt, die shell als die andere Gruppe. also, wenn Ihre primäre Gruppe "users" (Benutzer und die Gruppe, die Sie versuchen zu verwenden ist 'adm', dann:
..wird die Ausgabe:
..weil 'id -gn' wurde von der aktuellen shell, dann an die, von denen einer als adm.
Na ja, ich weiß, dieser Beitrag ist uralt, aber hoffe, dies ist nützlich, um jemanden.
<<
soll das tun, wasANYNAME
darstellen soll, das gleiche gilt fürEND
.InformationsquelleAutor
Folgende Werke schön; setzen Sie die folgenden bit an der Spitze der (Bourne-oder Bash -) Skript:
Dies funktioniert gut auf Linuxen. Ein Nachteil: die Argumente, die Leerzeichen enthalten, sind auseinander gebrochen. Ich schlage vor, Sie verwenden die
env arg1='Wert 1' arg2='Wert 2' script.sh konstruieren Sie zu übergeben (ich konnte es nicht zu funktionieren mit $@ aus irgendeinem Grund)
Ich weiß nicht, warum eine Antwort für Linuxen wurde angenommen, wenn die Frage war, tagged Solaris. Ich bin in der gleichen situation, und "sg" existiert nicht auf meiner Solaris-Kiste.
InformationsquelleAutor
Den
newgrp
Befehl kann nur sinnvoll eingesetzt werden, eine interaktive shell, AFAICT. In der Tat, gab ich es auf, über ... naja, sagen wir mal lange genug her, dass der Ersatz, die ich schrieb, ist jetzt die Wahlberechtigten in Großbritannien und den USA.Beachten Sie, dass
newgrp
ist ein spezieller Befehl 'built in' der shell. Streng, es ist ein Befehl, der außerhalb der Schale, aber die Schale hat built-in wissen darüber, wie es zu handhaben. Die shell eigentlichexec
's das Programm, so erhalten Sie eine neue Schale unmittelbar danach. Es ist auch ein setuid-root-Programm. Auf Solaris, zumindestnewgrp
scheint auch zu ignorieren, die SHELL-Umgebungsvariablen.Ich habe eine Vielzahl von Programmen, die das Problem umgehen, dass
newgrp
bestimmt war, die Adresse. Denken Sie daran, den Befehl pre-dates, die Fähigkeit der Benutzer zu mehreren Gruppen gehören, die auf einmal (siehe die Version 7 Unix-Handbücher). Danewgrp
bieten keinen Mechanismus, um Befehle auszuführen, nachdem es ausgeführt wird, im Gegensatz zusu
odersudo
schrieb ich ein Programmnewgid
die, wienewgrp
ist ein setuid-root-Programm und erlaubt Ihnen das wechseln von einer Gruppe zur anderen. Es ist ziemlich einfach - einfach main() plus eine Reihe von standardisierten Fehler-reporting-Funktionen verwendet. Kontaktieren Sie mich (Erster Punkt letzten at gmail dot com) für die Quelle. Ich habe auch ein sehr gefährlicher Befehl namens 'asroot
" das können Sie mir (aber nur mir - unter der Standard-Zusammenstellung) zu optimieren, Benutzer-und Gruppen-Listen sehr gründlich.(Dieses Programm um: waren, habe ich es nochmal von vorne anfangen, würde ich das akzeptieren Benutzer-ID oder Benutzer-Namen, ohne dass die andere option Buchstaben; dasselbe gilt für Gruppen-ID oder name der Gruppe.)
Kann es schwierig sein, die Genehmigung zur Installation von setuid-root-Programme. Es gibt einige Problemumgehungen, die jetzt wegen der multi-group Anlagen. Eine Technik, die möglicherweise funktionieren, ist die Einstellung der setgid-bit auf Verzeichnisse, in denen Sie möchten, dass die Dateien erstellt. Dies bedeutet, dass unabhängig davon, wer die Datei erstellt, wird die Datei gehört zu der Gruppe, die Eigentümer des Verzeichnis. Diese oft erreicht den Effekt, den Sie brauchen - aber ich kenne wenige Menschen, die konsequent zu verwenden.
Sengende Antwort! Solaris 10 ist newgrp(1) (mindestens) bewahrt die shell des Benutzers, und tatsächlich zu überprüfen, $SHELL (habe ich überprüft, OpenSolaris source).
InformationsquelleAutor
Diesem Beispiel wurde erweitert von plinjzaad Antwort; es behandelt eine Befehlszeile, die enthält die zitierten Parameter, die Leerzeichen enthalten.
Ich diese verwendet, um zu demonstrieren, dass es funktioniert.
InformationsquelleAutor
Vielleicht
würde den trick tun?
NÖ...das funktioniert nicht.
InformationsquelleAutor
Könnten Sie sch& (oder welche shell du verwenden willst) anstelle von xterm&
Oder man könnte auch über einen alias (wenn Ihr shell unterstützt diese), so dass Sie bleiben würde, in den Kontext der aktuellen shell.
InformationsquelleAutor
In einer script-Datei, z.B. tst.ksh:
In der Kommandozeile:
InformationsquelleAutor
Sollte den trick tun 🙂
InformationsquelleAutor