2016-07-02 7 views
0

ich ein Skript machen möchten, die Bildschirmhelligkeit verändert und unter anderem müssen diesen Befehl ein:sudo innerhalb eines Skripts mit einem Befehl, der Eingang (bash) benötigt

echo "$number" | sudo tee /sys/class/backlight/intel_backlight/brightness 

Das Skript fragt mich nach meiner Wurzel Passwort, das ich für unnötig halte, ändert nur die Helligkeit. Ich versuchte, sudo -S hinzuzufügen und das Kennwort zu wiederholen, aber ich verwirrte mich nicht nur mit, welcher Eingang wohin geht, aber das Skript schreibt die [sudo] password for user: Aufforderung aus, die anying ist. Wie mache ich das Skript für alle ausführbar (sowohl innerhalb als auch außerhalb des Skripts, um mehr zu erfahren)?

Antwort

3

Sie könnten Ihr System so konfigurieren, dass sudo nicht nach einem Passwort fragt. Ich empfehle das nicht (setzen Sie ALL=NOPASSWD: in Ihre /etc/sudoers Datei an geeigneter Stelle), da es ein Sicherheitsloch ist.

Aber was Sie wirklich wollen, wäre eine setuid ausführbare Datei (BTW /usr/bin/sudo ist selbst eine ausführbare setuid). Es ist schwierig zu verstehen, und Sie können große Fehler machen (große Sicherheitslöcher öffnen). Lesen Sie auch sorgfältig execve(2) & Advanced Linux Programming. Verbringen Sie mehrere Stunden, um die setuid Sache zu verstehen (wenn Sie es falsch verstehen, haben Sie Sicherheitsprobleme). Siehe auch credentials(7) & capabilities(7).

Aus Sicherheitsgründen können Shellskripts nicht erstellt werden setuid. So können Sie einen kleinen Wrapper in C, die das Skript durch execve nach entsprechenden Aufrufen (z. B. zu setresuid(2) und Freunde) führen, kompilieren, dass C-Programm als ausführbare Datei setuid (so chown root und chmod u+s Ihre ausführbare Datei). In Ihrem speziellen Fall brauchen Sie nicht einmal ein C-Programm zu programmieren, das einen Shell-Befehl startet (Sie sollten nur die Pseudo-Datei /sys/class/backlight/intel_backlight/brightness dann fprintf hinein und fclose es).

Eigentlich glaube ich nicht, dass das alles tun notwendig ist, weil Sie in der Lage sein sollten, Ihr System so zu konfigurieren, dass Ihre Bildschirmhelligkeit von nicht root gesetzt wird. Ich habe keine Ahnung, wie ich das genau machen soll (aber das ist eine andere Frage).

+2

Sie können 'sudo' auch so konfigurieren, dass nur der Befehl' tee/sys/class/backlight/intel_backlight/hellity' als root ohne Passwort ausgeführt wird. – chepner