Wenn sich ein Benutzer anmeldet, muss ich einen Befehl ausführen, der erweiterte Berechtigungen erfordert. Ich möchte dem Benutzer für diesen Befehl keinen Sudo-Zugriff erteilen. Ich möchte dieses Skript nur für diesen Benutzer ausführen, nicht für alle Benutzer.
Antwort1
Aus Ihrem Kommentar geht hervor, dass Sie möchten, dass der Benutzer „Fred“ keine normale Shell hat, sondern beim Anmelden das Skript „foo“ ausführt. Dies lässt sich problemlos bewerkstelligen, wenn Sie nicht erwarten, dass Fred sich große Mühe gibt, aus seiner „Sandbox“ zu entkommen.
$ cat ~fred/.bash_login
#!/bin/bash
exec /usr/local/bin/foo
## in ubuntu each user has a group of his "own"
$ sudo chown foo:fred ~fred ~fred/.bash_login /usr/local/bin/foo
## prevent fred from altering the files and directories we care about
$ sudo chmod g-w ~fred ~fred/.bash_login /usr/local/bin/foo
## make script foo run with user foo's privileges
$ sudo chmod u+s /usr/local/bin/foo
Fred wird also jetzt nicht einmal eine Shell-Eingabeaufforderung erhalten, da seine Login-Shell sich als Erstes durch foo ersetzt; wenn das Skript foo beendet wird, wird Fred abgemeldet. Der Grund, warum Fred nicht motiviert sein sollte, aus dieser Sandbox herauszukommen, ist, dass viele Programme das Öffnen untergeordneter Shells ermöglichen, mit denen Fred die hier gezeigte Sperre des armen Mannes rückgängig machen könnte.
Die Verwendung dieser Methode mit „root“ anstelle eines Nicht-Superusers foo kann dazu verwendet werden, root zu kapern. Tun Sie das also nicht.
Antwort2
Ich würde verwenden chmod 6755 filename
(oder 6711, wenn Sie nicht möchten, dass andere Benutzer es lesen) und es dann in cron einfügen ... Das sollte funktionieren, da es die Berechtigung ist, diese Datei als Eigentümer auszuführen. Wenn Sie es also als Root erstellen, sollten Sie es so verwenden können ...