Ich kann nicht empfehlen, Eigentümer von zu werden /usr/local
. In den meisten Situationen ist es wahrscheinlich weniger sicher als die Verwendung sudo
.
Ihre Frage schlägt zwei Gründe vor, die Sie vielleicht möchten chown
/usr/local
.
Die erste besteht darin, die sudo
Installation von Software zu vermeiden . Dies könnte einigen (wie dem Autor dieser Antwort ) als Hinweis darauf dienen, dass Sie effizient arbeiten möchten, oder als Hinweis darauf, dass Sie die zum sudo
Eingeben und Eingeben Ihres Kennworts erforderlichen Tastatureingaben speichern möchten . Aber wahrscheinlich beziehen Sie sich, wenn Sie "unnötig" sagen, stattdessen auf das Prinzip des geringsten Privilegs :
Standardmäßig root
besitzt das Verzeichnis. Dies bedeutet, dass Sie zum Installieren dort verwenden müssen sudo
. Für einen Einzelbenutzer- oder Entwicklercomputer scheint dies eine unnötige zusätzliche Verwendung des Befehls zu sein
Ich höre / lese ziemlich oft Leute, die nach dem Motto "Ich bin der Einzige, der dieses System benutzt, also sollte ich kein sudo
Passwort verwenden und eingeben müssen." Für Leser, die dieser Ansicht sind, und weil es hier relevant ist, wollen wir uns an einen grundlegenden Sicherheitsgrund erinnern, aus dem root Dinge besitzt.
Die meisten Programmdateien, die auf einem Ubuntu-System installiert sind, haben den Dateimodus 755 oder in symbolischer Notation rwxr-xr-x
, was bedeutet, dass jeder Benutzer oder jedes Programm sie ausführen kann , aber nur der Eigentümer der Dateien, root, kann sie ändern. (Technisch erfordert dies auch, dass niemand außer root die w
Berechtigung für das Verzeichnis hat, das sie enthält, damit andere Benutzer sie nicht löschen oder verschieben können.)
Dies bedeutet, dass Sie als bescheidener Benutzer jedes Programm ausführen können. Wenn Sie versuchen, ein Programm zu verwenden, um etwas zu tun, für das Sie keine Berechtigung haben, z. B. einen Schreibvorgang für eine Datei im Besitz von root, tritt ein Fehler auf. Dadurch ist es weniger wahrscheinlich, dass ein Tippfehler in einem Befehl, einer fehlerhaften Anwendung oder einem bösartigen Code Ihr System durcheinander bringt. Solange es nicht als root ausgeführt wird, hat es keine Berechtigung dazu. Dies ist besonders nützlich, wenn Sie Programme ausführen, die mit dem Internet interagieren.
Wenn Sie dies tun chown
/usr/local
, kann jedes Programm, das mit Ihren Berechtigungen ausgeführt wird, Dateien dort schreiben, die später möglicherweise als root ausgeführt werden, z. B. durch Ersetzen eines anderen Befehls mit demselben Namen. /usr/local/bin
ist in der Standardeinstellung $PATH
und in sudo
's secure_path
und steht vor anderen Speicherorten in beiden. Also, wenn ich zwei ausführbare Dateien habe
/usr/local/bin/chown
/bin/chown
wenn ich ausführen sudo chown ...
, die chown
in /usr/local/bin
wird ausgeführt .
Aber das wussten Sie wahrscheinlich schon, denn Ihr zweiter Grund ist die Sicherheit:
Wenn Sie lokal kompilierte Software installiert haben /usr/local
, benötigt die Software derzeit root, um sich selbst zu ändern oder Plugins zu installieren. Dies scheint unsicher - ich möchte nur verwenden, sudo
wenn ich genau weiß, was passieren wird.
Nur für den Fall, dass es notwendig ist, dies hier zu erwähnen, ist es absolut richtig (laut FHS sowieso), lokal kompilierte Software zu installieren /usr/local
, aber das Kompilieren selbst sollte irgendwo in Ihrem $HOME
, ohne sudo
, bis zum letzten Schritt, wenn Sie sudo make install
oder Äquivalent eingeben, erfolgen.
Ich denke, Sie schlagen vor, dass Sie durch Ausführen eines Programms, das /usr/local
als nicht privilegierter Eigentümer installiert ist , bestimmte Berechtigungsfehler verwenden könnten, wenn es versucht, sich selbst zu aktualisieren, um festzustellen, ob es versucht, einen anderen Dateisystemspeicherort zu ändern, dessen Eigentümer Sie nicht sind Ich will nicht, damit du es daran hindern kannst.
Das könnte hilfreich sein. Die Implikation ist, dass Sie dem Programm vertrauen, alles zu tun, was es möchte /usr/local
, aber nicht woanders. Wenn erhöhte Berechtigungen angefordert werden, können Sie die Aktualisierung oder Deinstallation verweigern. Das ergibt für mich einen Sinn. Aber ich denke /usr/local
, es ist wahrscheinlich keine gute Idee, auf diese Weise eine Art Sandbox zu verwenden , oder es ist zumindest unwahrscheinlich, dass dies die sicherste Lösung ist. Es ist kein richtig isolierter Ort ( /opt
ist etwas isolierter, da dies nicht die Standardeinstellung ist $PATH
). Das Programm könnte etwas schreiben oder löschen /usr/local
, um Schaden zu verursachen. Andere (möglicherweise schlecht geschriebene) Programme, die Sie ausführen, können dort Code schreiben und ausführen, von dem Sie nichts wissen.
Wenn Sie befürchten, dass sich ein Programm selbst sicher aktualisiert, sollten Sie nach Alternativen suchen (möglicherweise programmspezifisch, wie z. B. bei Python, oder Sie könnten nach einem Snap oder einer ähnlichen Implementierung suchen, die Ihren Anforderungen entspricht oder diese verwendet Container oder eine VM, um potenziell unsichere Software zu testen), bevor ein Systemspeicherort (auch ein relativ benutzerfreundlicher) bereitgestellt wird, auf den Programme schreiben, die von einem normalen Benutzer ausgeführt werden. Das scheint mir ebenso unvorhersehbare Auswirkungen zu haben wie das Zulassen von Programmen mit vorübergehend erhöhten Berechtigungen sudo
.
/usr/local/bin
diesem Root (und auch in anderen Benutzern) ausgeführt werden. Müssten sie nicht im Besitz von root sein? Darüber/usr/local/sbin
hinaus hängen die Befehle, die root verwendet - einschließlich der Befehle in - möglicherweise von gemeinsam genutzten Bibliotheken in ab/usr/local/lib
. Das Ändern dieser Bibliotheken kann zu willkürlichen Änderungen des Verhaltens der Befehle führen, die sie verwenden. Das Beharren darauf, nur/usr/local/sbin
im Besitz von root zu bleiben, scheint völlig willkürlich.Verwenden Sie für Software, die nur Sie benötigen, Ihr Basisverzeichnis anstelle von
/usr/local
.Anstatt den Besitz von
/usr/local
Befehlen zu ändern oder Befehle als root ausführen zu müssen, wenn Sie dies nicht möchten, sollten Sie Ihre Builds nur so konfigurieren, dass sie in Ihrem Ausgangsverzeichnis installiert werden, anstatt/usr/local
. Hiermit werden alle potenziellen Probleme beim Ändern des Eigentums an behoben/usr/local
, einschließlich der Artbin
und Weise, in der sich diesbin
Verzeichnisse und Unterverzeichnisse imroot
Pfad befinden.Wenn Sie anderen Benutzern erlauben müssen, Ihre Software auszuführen, können Sie ihnen Zugriff gewähren. In der Tat werden sie wahrscheinlich bereits in der Lage sein, da Ihr Home-Verzeichnis standardmäßig über einen zulässigen Lese- und Ausführungszugriff verfügt . (Wenn Sie das nicht möchten, können Sie es ganz einfach ändern, indem
chmod
Sie die Dateien oder Verzeichnisse verwenden, die Sie als privat kennzeichnen möchten, und möglicherweise auch Ihre ändernumask
.)Wenn die Software in Ihrem Ausgangsverzeichnis installiert ist,
/usr/local/bin
werden stattdessen Binärdateien verwendet, die eingegangen wären . Sie erhalten andere Unterverzeichnisse Ihres Home-Verzeichnisses, die den Unterverzeichnissen der von Ihnen installierten Software entsprechen. Dies geschieht normalerweise automatisch, wenn Sie Software aus dem Quellcode installieren./home/username/bin
/usr/local
Konfigurieren Ihrer Builds
Die meiste Software, die Sie aus Quellcode erstellen, hat einen Schritt, in dem Sie Folgendes ausführen:
Für die große Mehrheit der Software, die mit einem
configure
Skript geliefert wird, das so ausgeführt werden kann, wird standardmäßig der Build für die Installation konfiguriert,/usr/local
wenn Sie ihn schließlich ausführensudo make install
, um ihn zu installieren. Der Grund ist, dass es implizit gleichbedeutend mit dem Ausführen von:Verwenden Sie stattdessen Folgendes, um einen Build für die Installation in Ihrem Ausgangsverzeichnis zu konfigurieren:
In der Praxis enthalten Homeverzeichnis-Pfade in Ubuntu keine Leerzeichen, andere Leerzeichen oder andere Zeichen, die von der Shell speziell behandelt
*
werden. Wenn Sie also Ihr Benutzerkonto nicht recht merkwürdig eingerichtet haben, können Sie einfach Folgendes eingeben:(Ich empfehle jedoch nicht, sich daran zu gewöhnen, Skripte zu schreiben . Bei einigen anderen Betriebssystemen, wie z. B. macOS, ist es weniger ungewöhnlich, dass die Pfade zu den Basisverzeichnissen der Benutzer Leerzeichen enthalten.)
Wenn Sie möchten, können Sie auch Ihren vollständigen Pfad zum Basisverzeichnis eingeben:
(Ersetzen
username
Sie dies natürlich durch Ihren tatsächlichen Benutzernamen. Wenn Ihr Ausgangsverzeichnis aus irgendeinem Grund nicht vorhanden/home
ist, müssen Sie es entsprechend anpassen.)Installieren Ihrer Builds
Nachdem Sie ausgeführt haben
make
, sind Sie möglicherweise an das Ausführen gewöhntsudo make install
, aber wenn Sie in Ihrem eigenen Ausgangsverzeichnis installieren, müssen Sie es nicht als Root ausführen, sodass Sie es beenden können und solltensudo
. Lauf einfach:Ebenso für Software, die ein
uninstall
Ziel unterstützt :Dies ist genau das, wonach Sie gefragt haben ... nur in Ihrem Home-Verzeichnis, nicht
/usr/local
.Ausführen Ihrer Programme
Wahrscheinlich ist das
bin
Unterverzeichnis Ihres Home-Verzeichnisses entweder:$PATH
, oder$PATH
wenn Sie sich nur aus- und wieder anmelden.Der Grund dafür ist, dass die
.profile
Datei in Ihrem Ausgangsverzeichnis , die Befehle enthält, die beim Anmelden ausgeführt werden, diese standardmäßig für Benutzerkonten enthält, die in den meisten Versionen von Ubuntu erstellt wurden (einschließlich des ersten Administratorkontos, das beim Installieren des Betriebssystems erstellt wurde):Dieser Code wird ausgeführt, wenn Sie sich anmelden (weil er angemeldet ist
.profile
) und legt Ihr persönlichesbin
Verzeichnis$PATH
nur dann ab, wenn es zu diesem Zeitpunkt vorhanden ist. Deshalb müssen Sie sich möglicherweise abmelden und wieder anmelden.Ältere Releases wie Ubuntu 14.04 sowie neuere Releases wie Ubuntu 17.10 sind ebenfalls enthalten. Ubuntu 16.04, das zum Zeitpunkt des Schreibens wahrscheinlich beliebteste Release, hat jedoch stattdessen Folgendes:
Das fügt einfach das
bin
Unterverzeichnis Ihres Home-Verzeichnisses - sowie das.local/bin
Unterverzeichnis - zu Ihrem hinzu$PATH
, ohne zu überprüfen, ob diese Verzeichnisse tatsächlich existieren. Wenn Sie also 16.04 verwenden oder ein Upgrade von einem System durchführen, das 16.04 war, als Ihr Benutzerkonto erstellt wurde, befindet sich dasbin
Unterverzeichnis Ihres Home-Verzeichnisses wahrscheinlich bereits in Ihrem$PATH
.Ihre
.profile
Datei wird aus dem/etc/skel
Verzeichnis kopiert, wenn Ihr Benutzerkonto erstellt wird. Wenn Ihr Benutzerkonto mit einer älteren Ubuntu-Version erstellt wurde, hat es diese Version von erhalten.profile
und wurde für Ihr Benutzerkonto durch ein Upgrade auf eine neuere Version nicht geändert.Sobald sich das
bin
Unterverzeichnis Ihres Home-Verzeichnisses in Ihrem befindet$PATH
, können Sie Programme ausführen, deren ausführbare Dateien dort installiert sind, indem Sie einfach deren Namen eingeben, genau wie Sie es mit Programmen tun könnten, die vom Ubuntu-Paketmanager installiert oder in diesem installiert wurden/usr/local
.Die
.local
OptionMöglicherweise haben Sie bemerkt, dass die Standarddatei
.profile
für Benutzerkonten, die in einigen Ubuntu-Versionen erstellt wurden, einschließlich 16.04, wie oben beschrieben, nicht nur$HOME/bin
Ihren Pfad erweitert, sondern auch$HOME/.local/bin
. Wenn Sie.profile
das nicht hinzufügen, aber möchten , können Sie es einfach bearbeiten.Obwohl häufig zum Speichern von Einstellungen und zwischengespeicherten Daten verwendet , können Sie Software auch im
.local
Unterverzeichnis Ihres Basisverzeichnisses installieren . Sie sollten sich dabei ungehemmt fühlen, da dies in Bezug auf Benutzerfreundlichkeit und Sicherheit--prefix="$HOME/.local"
ähnlich ist wie--prefix="$HOME"
.Denken Sie daran, dass Dateien und Verzeichnisse, die mit beginnen
.
, in grafischen Dateibrowsern nicht standardmäßig angezeigt werden (verwenden Sie Ctrl+, Hum sie ein- und auszublenden) oder über denls
Befehl (übergeben Sie das Flag-A
oder-a
, um sie anzuzeigen ). Dies ist möglicherweise nicht das, was Sie möchten, oder es ist möglicherweise genau das, was Sie möchten. Dies ist eine Frage der persönlichen Präferenz.Ich habe jedoch beobachtet, dass einige automatisierte quellbasierte Paketmanager, die Software im eigenen Heimverzeichnis erstellen und installieren, diese verwenden
$HOME/.local
. Ich weiß nicht genau, wie häufig dies vorkommt - ich hoffe, dass ich es weiter untersuchen und diese Antwort aktualisieren kann -, aber vielleicht bevorzugen Sie es, sie nur$HOME
für manuell kompilierte Aufgaben zu verwenden. Auf diese Weise wird klar, woher die Dinge kamen. Und wenn es zu einer Kollision kommt, ist es wahrscheinlich, dass die Software weiterhin akzeptabel koexistiert.Sie können auch absichtlich Software in
$HOME/.local
und andere Software in installieren$HOME
. Es liegt an dir. Dasbin
Verzeichnis, das zuerst in Ihrer$PATH
Umgebungsvariablen angezeigt wird, ist dasjenige, von dem aus ein Befehl ausgeführt wird, falls in beiden Befehlen derselbe Name vorhanden ist.Kredit geht an Zanna und Videonauth für den Hinweis auf Fehler in einer früheren Version dieser Antwort in Bezug auf die Ubuntu - Releases , die Standard - Code in
.profile
und hilft mir zu korrigieren sie (siehe auch hier ).quelle
Wenn sudo eine solche Unannehmlichkeit ist, aktualisieren Sie einfach / etc / sudoers, damit Sie Ihr Passwort nicht eingeben müssen, wenn Sie sudo ausführen. Ich glaube, das ist eine bessere Lösung als den Besitzer von / usr / local zu ändern.
quelle
/usr/local
wenn Sie sudo verwenden, was potenziell gefährlich ist.