Je ne peux pas recommander de devenir propriétaire de /usr/local
; pour la plupart des situations, c'est probablement moins sûr que d'utiliser sudo
.
Votre question suggère deux raisons pour lesquelles vous voudrez peut-être chown
/usr/local
.
Le premier est d'éviter d'avoir à utiliser sudo
pour installer des logiciels. Certains (comme l'auteur de cette réponse ) pourraient lire que vous voulez travailler efficacement ou enregistrer les frappes nécessaires pour taper sudo
et entrer votre mot de passe. Mais probablement quand vous dites «inutile», vous faites plutôt référence au principe du moindre privilège :
Par défaut, root
possède le répertoire. Cela signifie que pour y installer, vous devez utiliser sudo
. Pour une machine mono-utilisateur ou développeur, cela semble être une utilisation supplémentaire inutile de la commande
J'entends / lis souvent des gens qui s'opposent / se plaignent du type "Je suis le seul à utiliser ce système, donc je ne devrais pas avoir besoin d'utiliser sudo
et d'entrer un mot de passe." Pour les lecteurs qui sont de cet avis, et parce que c'est pertinent ici, rappelons-nous une raison de sécurité de base pour que root possède ses propres objets.
La plupart des fichiers programme installés sur un système Ubuntu ont le mode fichier 755, ou en notation symbolique rwxr-xr-x
, ce qui signifie que tout utilisateur ou programme peut les exécuter , mais seul le propriétaire des fichiers, root, peut les modifier. (Techniquement, cela nécessite également que personne d'autre que root n'ait l' w
autorisation sur le répertoire qui les contient, de sorte que les autres utilisateurs ne peuvent pas les supprimer ou les déplacer.)
Cela signifie que vous, l'humble utilisateur, pouvez exécuter n'importe quel programme. Si vous essayez d'utiliser un programme pour faire quelque chose que vous n'avez pas l'autorisation de faire, comme effectuer une opération d'écriture sur un fichier appartenant à root, cela provoquera une erreur. Cela rend une faute de frappe dans une commande, une application boguée ou un code malveillant, moins susceptible de gâcher votre système - à moins qu'il ne s'exécute en tant que root, il ne sera pas autorisé à le faire. Ceci est particulièrement utile lors de l'exécution de programmes qui interagissent avec Internet.
Si vous chown
/usr/local
, n'importe quel programme fonctionnant avec vos privilèges pourrait y écrire des fichiers, qui pourraient plus tard être exécutés en tant que root pour une raison quelconque, par exemple en remplaçant une autre commande du même nom. /usr/local/bin
est par défaut $PATH
, et dans sudo
's secure_path
, et il précède les autres emplacements dans les deux. Donc, si j'ai deux exécutables
/usr/local/bin/chown
/bin/chown
quand j'exécute sudo chown ...
, l' chown
in /usr/local/bin
sera exécuté .
Mais vous saviez probablement déjà tout cela, car votre deuxième raison concerne la sécurité:
De plus, si vous avez installé un logiciel compilé localement /usr/local
, le logiciel a actuellement besoin de root pour se modifier ou installer des plugins. Cela semble dangereux - je ne veux l'utiliser que sudo
lorsque je sais exactement ce qui va se passer.
Juste au cas où il /usr/local
serait nécessaire de le mentionner ici, il est tout à fait correct (selon le FHS de toute façon) d'installer un logiciel compilé localement , mais la compilation elle-même devrait être effectuée quelque part dans votre $HOME
, sans sudo
, jusqu'à la dernière étape lorsque vous tapez sudo make install
ou équivalent.
Je pense que vous suggérez qu'en exécutant un programme installé en /usr/local
tant que propriétaire non privilégié, vous pourriez utiliser des erreurs d'autorisation spécifiques levées lorsqu'il essaie de se mettre à jour pour voir qu'il essaie de modifier un autre emplacement du système de fichiers qui ne vous appartient pas d'une manière que vous je ne veux pas, afin que vous puissiez l'empêcher de le faire.
Cela pourrait être utile. L'implication est que vous faites confiance au programme pour faire tout ce qu'il veut à l'intérieur /usr/local
, mais pas ailleurs. S'il demande des autorisations élevées, vous pouvez refuser de le mettre à jour ou le désinstaller. Cela me semble logique. Mais je pense qu'essayer de l'utiliser /usr/local
comme une sorte de bac à sable de cette manière n'est probablement pas une bonne idée, ou du moins il est peu probable que ce soit la solution la plus sûre. Ce n'est pas un emplacement correctement isolé ( /opt
est un peu plus isolé, car il n'est pas dans la valeur par défaut $PATH
). Le programme peut écrire ou supprimer quelque chose /usr/local
pour causer du tort. D'autres programmes (potentiellement mal écrits) que vous exécutez peuvent y écrire et exécuter du code que vous ne connaissez pas.
Si vous craignez d'autoriser un programme à se mettre à jour en toute sécurité, vous devriez probablement rechercher des alternatives (spécifiques au programme peut-être, comme avec python par exemple, ou vous pouvez rechercher un snap ou une implémentation similaire qui convient à vos besoins, ou utiliser des conteneurs ou une machine virtuelle pour tester des logiciels potentiellement dangereux) avant d'exposer un emplacement système (même relativement utilisateur) auquel les programmes exécutés par un utilisateur normal doivent écrire. Cela me semble aussi susceptible d'avoir des effets imprévisibles que d'autoriser temporairement des programmes avec des autorisations élevées sudo
.
/usr/local/bin
cette racine (et également d'autres utilisateurs)? Ne devraient-ils pas appartenir à root? De plus, les commandes/usr/local/sbin
utilisées par root - y compris les commandes dans - peuvent dépendre des bibliothèques partagées dans/usr/local/lib
. La modification de ces bibliothèques peut introduire des changements arbitraires dans le comportement des commandes qui les utilisent. Insister pour que juste/usr/local/sbin
rester la propriété de root semble complètement arbitraire.Pour les logiciels dont vous avez uniquement besoin, utilisez votre répertoire personnel au lieu de
/usr/local
.Au lieu de changer la propriété de
/usr/local
ou d'avoir à exécuter des commandes en tant que root lorsque vous ne le souhaitez pas, vous devez simplement configurer vos versions afin qu'elles s'installent dans votre répertoire personnel au lieu de/usr/local
. Cette adresse tous les problèmes potentiels liés à l' évolution de la propriété de/usr/local
, y compris la façon dont sesbin
et lessbin
sous - répertoires sont dansroot
le chemin « .Si vous devez autoriser d'autres utilisateurs à exécuter votre logiciel, vous pouvez leur donner accès. En fait, ils le seront probablement déjà, car par défaut votre répertoire personnel a un accès permissif en lecture et en exécution . (Si vous ne le souhaitez pas, vous pouvez le modifier assez facilement, simplement en utilisant
chmod
n'importe quel fichier ou répertoire que vous souhaitez rendre privé et éventuellement en changeant le vôtreumask
.)Avec un logiciel installé dans votre répertoire personnel, les fichiers binaires qui y seraient entrés le
/usr/local/bin
seront à la place . Vous obtiendrez d'autres sous-répertoires de votre répertoire personnel correspondant aux sous-répertoires dont le logiciel que vous installez a besoin. Cela se produit généralement automatiquement lorsque vous installez un logiciel à partir du code source./home/username/bin
/usr/local
Configuration de vos builds
La plupart des logiciels que vous créez à partir du code source ont une étape où vous exécutez:
Pour la grande majorité des logiciels livrés avec un
configure
script pouvant être exécuté de cette manière, la configuration par défaut est configurée pour l'installation à l'intérieur/usr/local
lorsque vous exécutez finalementsudo make install
pour l'installer. La raison en est qu'elle est implicitement équivalente à l'exécution:Pour configurer une build pour l'installation dans votre répertoire personnel, utilisez plutôt ceci:
En pratique, dans Ubuntu, les chemins du répertoire personnel ne contiennent pas d'espaces, d'autres espaces ou d'autres caractères qui seront traités spécialement par le shell comme
*
, donc à moins que vous n'ayez configuré votre compte d'utilisateur de manière assez étrange, vous pouvez simplement taper:(Je ne recommande pas de prendre l'habitude de cela pour écrire des scripts , cependant. En outre, sur certains autres systèmes d'exploitation - tels que macOS - il est moins rare que les chemins vers les répertoires personnels des utilisateurs contiennent des espaces.)
Ou si vous préférez, vous pouvez taper le chemin complet de votre répertoire personnel:
(Remplacez
username
par votre nom d'utilisateur réel, bien sûr. Si, pour une raison quelconque, votre répertoire personnel n'est pas dans,/home
vous devrez vous ajuster en conséquence.)Installer vos builds
Après avoir couru
make
, vous pouvez être habitué à l'exécutersudo make install
, mais lorsque vous installez dans votre propre répertoire personnel, vous n'avez pas besoin de l'exécuter en tant que root, vous pouvez donc - et devriez - omettresudo
. Exécutez simplement:De même, pour les logiciels qui prennent en charge une
uninstall
cible:C'est exactement ce que vous demandiez ... juste dans votre répertoire personnel, non
/usr/local
.Exécuter vos programmes
ProbablementLe
bin
sous - répertoire de votre répertoire personnel est soit:$PATH
, ou$PATH
si vous vous déconnectez et vous reconnectez.La raison en est que le
.profile
fichier de votre répertoire personnel, qui contient des commandes qui s'exécutent lorsque vous vous connectez, contient celui-ci par défaut pour les comptes d'utilisateurs créés dans la plupart des versions d'Ubuntu (y compris le compte d'administrateur initial créé lorsque vous installez le système d'exploitation):Ce code s'exécute lorsque vous vous connectez (car il est présent
.profile
) et place votrebin
répertoire personnel dans$PATH
uniquement s'il existe à ce moment-là. C'est pourquoi vous devrez peut-être vous déconnecter puis vous reconnecter.Les versions plus anciennes comme Ubuntu 14.04, ainsi que les versions plus récentes comme Ubuntu 17.10, viennent avec cela. Cependant, Ubuntu 16.04, qui est probablement la version la plus populaire à ce jour, a ceci à la place:
Cela ajoute simplement le
bin
sous - répertoire de votre répertoire personnel --- ainsi que le.local/bin
sous-répertoire - à votre$PATH
, sans vérifier si ces répertoires existent réellement. Donc, si vous utilisez 16.04, ou si vous avez effectué une mise à niveau à partir d' un système qui était 16.04 lorsque votre compte d'utilisateur a été créé, alors lebin
sous répertoire de votre répertoire personnel est probablement déjà dans votre$PATH
.Votre
.profile
fichier est copié depuis le/etc/skel
répertoire lors création de votre compte utilisateur. Si votre compte d'utilisateur a été créé sur une ancienne version d'Ubuntu, il a obtenu cette version de.profile
, et il n'a pas été modifié - pour votre compte d'utilisateur - par la mise à niveau vers une version plus récente.Une fois le
bin
sous - répertoire de votre répertoire personnel dans votre$PATH
, vous pourrez exécuter des programmes dont les fichiers exécutables y sont installés en tapant simplement leurs noms, tout comme vous pourriez le faire avec des programmes installés par le gestionnaire de paquets d'Ubuntu ou installés à l'intérieur/usr/local
.le
.local
optionVous avez peut-être remarqué que le
.profile
fichier par défaut pour les comptes d'utilisateurs créés dans certaines versions d'Ubuntu, y compris dans 16.04 comme décrit ci-dessus, ajoute non seulement$HOME/bin
à votre chemin, mais aussi$HOME/.local/bin
. Si vous.profile
n'ajoutez pas cela, mais que vous voulez , vous pouvez simplement le modifier dans.Bien que souvent utilisé pour stocker des paramètres et des données en cache , vous pouvez également installer des logiciels dans le
.local
sous - répertoire de votre répertoire personnel. Vous devriez vous sentir libre de le faire, car du point de vue de la convivialité et de la sécurité,--prefix="$HOME/.local"
c'est similaire à--prefix="$HOME"
.N'oubliez pas que les fichiers et répertoires commençant par
.
ne sont pas affichés par défaut dans les navigateurs de fichiers graphiques (utilisez Ctrl+ Hpour les afficher et les afficher à nouveau) ou par lals
commande (passez l' indicateur-A
ou-a
pour les afficher). Ce n'est peut-être pas ce que vous voulez, ou peut-être exactement ce que vous voulez. C'est une question de préférence personnelle.Cependant, j'ai observé que certains gestionnaires de packages automatisés basés sur la source qui construisent et installent des logiciels dans leur répertoire personnel utilisent
$HOME/.local
. Je ne sais pas à quel point cela est courant - j'espère approfondir et mettre à jour cette réponse - mais vous préférerez peut-être simplement l'utiliser$HOME
pour les choses que vous compilez manuellement. De cette façon, il sera clair d'où viennent les choses. Et en cas de collision, le logiciel est susceptible de coexister de manière acceptable.Vous pouvez également installer délibérément certains logiciels dans
$HOME/.local
et d'autres logiciels dans$HOME
. C'est à vous. Lebin
répertoire qui apparaît en premier dans votre$PATH
variable d'environnement est celui à partir duquel une commande sera exécutée, dans le cas où des commandes du même nom existent dans les deux.Le crédit va à Zanna et Videonauth pour signaler les erreurs dans une version précédente de cette réponse, au sujet de laquelle les versions d' Ubuntu ont un code qui par défaut
.profile
et me aider à corriger les (voir aussi ici ).la source
Si sudo est un tel inconvénient, mettez simplement à jour / etc / sudoers pour ne pas avoir à entrer votre mot de passe lorsque vous exécutez sudo. Je pense que c'est une meilleure solution que de changer le propriétaire de / usr / local.
la source
/usr/local
vous devez utiliser sudo, ce qui est potentiellement dangereux.