
Ich habe mich mit Benutzer1 in einer UNIX-Umgebung angemeldet. In dieser Umgebung habe ich ein Shell-Skript, das einige Aufgaben enthält, die unter einem anderen Pfad mit einem anderen Benutzer ausgeführt werden müssen, beispielsweise Benutzer2, da Benutzer1 keinen Zugriff auf diesen Pfad hat.
Um diese Aufgabe auszuführen, möchte ich im Shell-Skript von Benutzer1 zu Benutzer2 wechseln und nach Abschluss der Aufgabe erneut von Benutzer2 zu Benutzer1 wechseln.
Bitte geben Sie mir Vorschläge, wie ich dieses Szenario erreichen kann.
Ich rufe Shell-Skript mit Java auf. Wenn Sie also eine andere Möglichkeit haben, schlagen Sie bitte vor
Antwort1
Mit können Sie erreichen, was Sie möchten sudo
: Sie können Benutzer2 erlauben, das benötigte Skript als Benutzer1 auszuführen,nurdas Skript ausgeführt werden kann, wodurch die Sicherheit Ihres Systems gewahrt wird (Benutzer2 kann nicht unberechtigt eine Shell als Benutzer1 verwenden). Sie können dies folgendermaßen tun:
sudo visudo
(um die Sudo-Konfigurationsdatei zu bearbeiten)- Fügen Sie Folgendes am Ende der Datei hinzu:
user2 ALL = (user1) NOPASSWD:/path/to/your/script.sh
- Speichern und schließen Sie die Datei.
Wenn Sie jetzt eine Shell als Benutzer2 öffnen, können Sie sudo -u user1 /path/to/your/script.sh
sie als Benutzer1 ausführen. Sie können denselben Befehl aus Java verwenden. Die Sicherheit bleibt gewahrt, da Benutzer2 eine Shell nicht als Benutzer1 ausführen kann: sudo -u user1 bash
wird verweigert.
Jedoch, ich denke, eine noch sauberere Lösung wäre, wenn man einfach eine Gruppe erstellt, die von Benutzer1 und Benutzer2 gemeinsam genutzt wird, und diese Gruppe verwendet, um die Ausführungsberechtigung für die Datei zu verwalten. Abhängig von Ihren Anforderungen sollten Sie auch ACLs oder das Setuid-Bit (z. B. chmod 4700 /path/to/your/script.sh
) in Betracht ziehen, wenn davon ausgegangen wird, dass mehrere Benutzer dieses Skript als Benutzer1 ausführen.
Antwort2
Ich gehe davon aus, dass Benutzer1 keinen passwortlosen Sudo-Zugriff hat, richtig? Wenn ja, können Sie den Befehl runuser verwenden.
runuser -l user2 -c 'whoami'
Sie können einfach su/sudo verwenden, wenn Sie Sudo-Berechtigungen eingerichtet haben.
su - user2 -c 'whoami'
Ich gehe jedoch davon aus, dass Sie kein passwortloses Sudo haben und/oder möglicherweise nicht das Passwort für Benutzer2. Sie könnten es trickreich angehen, indem Sie ein RSA-Schlüsselpaar für Benutzer1 generieren und dann den Schlüssel id_rsa.pub an die Datei $HOME/.ssh/authorized_keys von Benutzer2 anhängen, um die RSA-Public-Key-Authentifizierung zu aktivieren, und dann SSH verwenden, um dies ohne Passwort durchzuführen.
Führen Sie als Benutzer1 Folgendes aus: ssh keygen Drücken Sie einfach die Eingabetaste während der Eingabeaufforderungen Führen Sie dann Folgendes aus, um den Schlüssel automatisch hinzuzufügen (Sie können dies auch manuell tun). Wenn Sie diesen Befehl verwenden, benötigen Sie das Passwort von Benutzer2 nur beim ersten Mal.
ssh-copy-id -i $HOME/.ssh/id_rsa.pub Benutzer2@Hostname
Wenn dies funktioniert, sollten Sie sich als Benutzer1 anmelden können. Führen Sie dann ssh user2@localhost aus, um sich als Benutzer2 ohne Kennwort anzumelden. Stellen Sie sicher, dass /etc/ssh/sshd_config auf dem Server die PublicKey-Authentifizierung aktiviert hat.
Um den Befehl dann remote auszuführen, können Sie etwas wie Folgendes ausführen:
ssh Benutzer2@localhost "Remote-Befehl1;Remote-Befehl2"