Ich starte meinen GNU/Linux-Laptop immer im Konsolenmodus. Aber manchmal muss ich den GUI-Modus aufrufen. Dazu muss ich immer das Root-Passwort eingeben. Also habe ich das folgende Skript „gogui.sh“ geschrieben und eingefügt /usr/bin
:
#!/bin/bash
echo "mypassword" | sudo service lightdm start
Das ist eine wirklich dumme Idee, denn wenn jemand die Datei liest, kann er problemlos mein Passwort sehen.
Gibt es dazu eine Alternative?
Antwort1
Es ist völlig sinnlos, in einem Skript ein Passwort an sudo zu übergeben. Fügen Sie stattdessen eine sudo-Regel hinzuNOPASSWD
Fügen Sie den bestimmten Befehl hinzu, den Sie mit dem Tag ausführen möchten. Achten Sie darauf, dass die befehlsspezifische NOPASSWD
Regel nach jeder allgemeinen Regel stehen muss.
saeid ALL = (ALL:ALL) ALL
saeid ALL = (root) NOPASSWD: service lightdm start
Aber das ist wahrscheinlich sowieso nicht nützlich. lightdm start
startet eine Anmeldeaufforderung, aber Sie brauchen das nur, wenn Sie anderen Benutzern die grafische Anmeldung ermöglichen möchten. Sie brauchen es nicht, wenn Sie nur eine GUI-Sitzung starten möchten. Rufen Sie stattdessen aufstartx
um eine GUI-Sitzung aus Ihrer Textmodus-Sitzung zu starten. Dies erfordert keine zusätzlichen Berechtigungen.
Möglicherweise müssen Sie Ihren Fenstermanager oder Ihre Desktopumgebung explizit angeben, da startx
möglicherweise nicht derselbe Standard-Sitzungstyp ausgewählt wird, den Lightdm verwendet.
startx -- gnome-session
Antwort2
Es gibt einige Optionen und eine davon besteht darin, den spezifischen Befehl visudo
mit dem Flag NOPASSWD hinzuzufügen:
%wheel ALL=(ALL) NOPASSWD: /path/to/myscript
cat /path/to/myscript
#!/bin/bash
service lightdm start
Antwort3
BEARBEITEN
Ich habe gerade bemerkt, dass Sie in Ihren Kommentaren Unity erwähnen, also scheint es, als würden Sie Ubuntu verwenden. Meine ursprüngliche Antwort war ausgerichtet aufSysVinitSysteme, aber Befehle wietelinit
sind weiterhin vorhanden und funktionieren auf Distributionen mitSystemdoderEmporkömmling.
SysV-Weg
telinit 5
Auf modernen Systemd-Systementelinit
wird weitergeleitet zusystemctl
.
Systemd-Weg
systemctl isolate runlevel5.target
oder
systemctl isolate graphical.target
Ursprüngliche Antwort:
Bei älteren Nicht-Systemd-Distributionen (z. B. RHEL/CentOS 6 und älter) ist der einfachste Weg, vom Konsolenmodus zur GUI zu wechseln, die Verwendung destelinit
Befehl. Bei den RHEL/Centos-Distributionen wird beispielsweise der textbasierte Mehrbenutzermodus auf Level 3 und der Mehrbenutzer-GUI-Modus auf Level 5 ausgeführt. Der Wechsel vom Konsolen- in den GUI-Modus erfolgt folgendermaßen: Standardmäßig sind telinit
Root-Berechtigungen erforderlich. Um dies als normaler Benutzer ohne Kennwort auszuführen, benötigen Sie einen sudoers
Eintrag oder setzen das Setuid-Flag in der ausführbaren Datei Telinit. Diese sudo
Methode ist der bevorzugte Ansatz, da sie auf Ihr Konto beschränkt werden kann.
Antwort4
Da Sie sich speziell auf beziehen sudo
, bleiben Sie beiGilles' Antwort. Da es in Ihrem Fragentitel jedoch lediglich darum ging, ein Passwort für ein Programm zu erhalten, stdin
und ich vor kurzem eine ähnliche Situation hatte:
echo $(read -sp "Password: " password; echo $password) | yourcommand
Wahrscheinlich werde ich dafür einiges an Kritik ernten, aber es hat funktioniert.
Apropos bash
, dort können Sie wahrscheinlich auch verwenden
yourcommand <$(read -sp "Password: " password; echo $password)