Ich habe Schwierigkeiten herauszufinden, warum bestimmte Dinge auf einem Mac-Terminal viel komplizierter sind als auf einer Standard-Linux-Shell.
locate
Angenommen, ich habe zwei lokale Konten, einen Administrator namens "adm" und einen Standardbenutzer "usracc", und ich möchte die Datenbank mit dem Befehl aktualisieren können updatedb
. Ich muss einfach ausführen sudo updatedb
, außer dass usracc nicht in der sudoers-Liste steht.
Ok, sage ich und su adm
dann sudo updatedb
sagt mir das, dass der updatedb
Befehl nicht gefunden wird. Also zur Wiederholung:
mein normales Benutzerkonto ist nicht auf der sudoers-Liste (das ist eigentlich beabsichtigt, da ich das System nicht kompromittieren möchte, wenn das Passwort für dieses Konto kompromittiert wird).
Mein Admin-Konto kann sudo, aber anscheinend nicht diesen bestimmten Befehl, der aus irgendeinem Grund nicht gefunden werden kann.
Wenn ich su
zu meinem Admin-Konto gehe, sehe ich; shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied
was jedes Mal wiederholt wird, wenn ich versuche, mit der Tabulatortaste eine Inhaltshilfe zu erhalten.
Wenn also das Root-Konto deaktiviert ist, zwingt Apple Sie dazu, Benutzerkonten sudo-Privilegien zu erteilen, um einfache Dinge tun zu können. Wie genau hilft das bei der Sicherheit? Oder habe ich hier etwas komplett falsch verstanden?
Sie übertragen Ihre Shell-Umgebung nicht in die su adm
Sitzung. Wenn Sie sich also echo $PATH
im usracc-Konto und im adm-Konto befinden, werden Sie feststellen, dass sie nicht gleich sind (weshalb adm den updatedb-Befehl nicht finden kann). Alles, was Sie tun müssen, ist su mitzuteilen, dass Sie Ihre env übertragen möchten ( su -m adm
sollte es tun) oder einfach den Pfad zu updatedb hinzufügen.
Obwohl auf meiner Box updatedb heißt /usr/libexec/locate.updatedb
und ein Skript ist.