Comment changer les autorisations de l'utilisateur pi sudo; comment ajouter d'autres comptes avec des autorisations différentes?

14

Depuis que j'utilise occasionnellement mon Pi sur SSH, j'ai appris qu'il est dangereux d'autoriser SSH à accéder aux commandes sudo. Ainsi, je prévois de désactiver cette autorisation dans un proche avenir. Mais, lorsque j'installe des packages, je dois généralement redémarrer. Actuellement, cela n'est autorisé que via le superutilisateur.

sudo reboot

Existe-t-il un moyen de modifier les autorisations de l'utilisateur pi pour lui permettre de redémarrer (et d'installer) des packages?

Puis-je avoir plusieurs comptes avec des autorisations différentes?

Merci

xxmbabanexx
la source
1
L'une des réponses données a-t-elle été utile? L'un d'entre eux est-il la réponse que vous cherchiez? Veuillez ensuite marquer cela comme répondu.
Anders
Oui. Si vous êtes toujours intéressé, je les ai mis à jour en juin 2017 - cette question a été posée il y a 4 ans et 2 mois, et m'a conduit à la manière de résoudre le problème aujourd'hui. Découvrez les réponses ci-dessous:
SDsolar

Réponses:

22

Pour clarifier un peu: il n'y a pas de "commandes sudo", il n'y a que des commandes qui ont besoin des privilèges root pour fonctionner correctement et sudoest la commande pour les obtenir pour une commande: sudoexécute simplement la commande donnée en tant que root (lire "sudo" comme impératif phrase "superutilisateur, fais quelque chose!"). Les règles concernant les utilisateurs autorisés à le faire sont consignées dans /etc/sudoers. Sur une installation Raspbian par défaut, l'utilisateur par défaut "pi" a obtenu ses autorisations sur cette ligne:

pi ALL=(ALL) NOPASSWD: ALL

Cela signifie: "L'utilisateur 'pi' sur TOUS les hôtes est autorisé à basculer vers TOUS les utilisateurs et n'a PAS à taper son PASSWD lors de l'utilisation de TOUTES (lire: toutes) commandes". (J'ai utilisé une grammaire folle ici pour conserver l'ordre de la ligne ... une note sur la raison pour laquelle il existe un moyen de distinguer les hôtes: de cette façon, le même fichier sudoers peut être distribué sur plusieurs machines sur un réseau afin que l'administrateur du réseau ait moins de travail) .

Il se peut que pouvoir exécuter des commandes à l'aide de sudo sans émettre de mot de passe administrateur soit la raison pour laquelle vous pensez qu'il est dangereux d'utiliser sudo sur SSH (je n'ai pas entendu parler d'un problème général avec cela ... alors pourriez-vous expliquez de quel danger vous parlez exactement?).

Bien sûr, vous pouvez avoir plusieurs utilisateurs avec des autorisations différentes. Mais je crains que l'utilisation de sudo soit toujours le meilleur moyen de gérer ces autorisations.

Donc, j'espère que cette petite recette est ce dont vous avez besoin:

$ sudo adduser admin

Cela va créer un utilisateur "admin", demander un mot de passe, créer son répertoire personnel, etc.

$ sudo adduser admin sudo
$ sudo adduser admin adm

Cela mettra l'utilisateur "admin" dans les groupes d'utilisateurs "sudo" et "adm". Et comme les autorisations sont gérées sous Linux en ajoutant des utilisateurs aux groupes d'utilisateurs, cela donne à l'utilisateur "admin" tous les privilèges et autorisations dont il a besoin. Il y a une ligne /etc/sudoersqui permet à n'importe quel utilisateur du groupe d'utilisateurs "sudo" d'exécuter n'importe quelle commande en tant que root; et ce privilège est ce dont nous avons besoin pour un utilisateur administrateur (l'ajouter à "adm" lui permet de lire certains fichiers journaux /var/logsans utiliser sudoet quelques autres choses). Vous devez toujours utiliser sudolorsque vous êtes connecté en tant qu'administrateur - mais maintenant sudo demande encore et encore le mot de passe de l'administrateur chaque fois que vous n'avez pas utilisé sudo pendant environ cinq minutes.

Maintenant, déconnectez-vous et connectez-vous en tant qu'utilisateur "admin". Vérifier si

$ sudo apt-get update
$ sudo apt-get upgrade

travaux. Si tel est le cas, vous pouvez révoquer certains privilèges de l'utilisateur "pi", car vous êtes maintenant certain que votre utilisateur administrateur dispose des privilèges appropriés:

$ sudo deluser pi sudo
$ sudo deluser pi adm

Cela jette l'utilisateur "pi" du groupe d'utilisateurs "sudo".

$ sudo visudo

Cela lancera un éditeur qui vous permet de modifier /etc/sudoers. Mettez une balise de hachage ( #) avant la ligne commençant par "pi", commentez-la (ou supprimez-la simplement). Ensuite, enregistrez et quittez l'éditeur, visudo rechargera alors immédiatement les règles de privilège. Maintenant, l'utilisateur "pi" n'est plus autorisé à utiliser sudo.

Après cela, vous pouvez vous reconnecter en tant qu'utilisateur "pi". Si vous souhaitez un jour passer à l’administrateur pour certaines commandes, utilisez su("Changer d’utilisateur"):

$ su - admin

Si vous voulez ajouter plus d'utilisateurs: utilisez sudo adduser <name>comme ci-dessus, puis vérifiez la liste des groupes d'utilisateurs que l'utilisateur "pi" a:

$ groups pi
pi : pi dialout cdrom audio video plugdev games users netdev input

Utilisez sudo adduser <username> <groupname>pour ajouter votre nouvel utilisateur à plusieurs de ces groupes d'utilisateurs, lui permettant d'utiliser l'audio, la vidéo accélérée, l'utilisation de périphériques enfichables, etc. En cas de doute, ajoutez-le à tous ces groupes d'utilisateurs (mais pas à "sudo"!).

orithena
la source
2
visudoest une commande qui utilisera votre éditeur par défaut pour modifier le fichier sudoers. Modifier ce fichier sans lui peut être pénible et n'est pas recommandé. Vous pouvez changer votre éditeur préféré en publiantsudo update-alternatives --config editor
earthmeLon
Ou vous pouvez essayer cela VISUAL=vim visudojuste pour cette fois. Mais un excellent exemple de changement de programmes par défaut, comme l'éditeur.
Anders
6

Oui, vous pouvez configurer sudopour autoriser uniquement l'utilisateur à exécuter certaines commandes avec des privilèges supplémentaires. Vous pouvez changer cela dans votre /etc/sudoersfichier, mais il est conseillé de ne pas le faire directement mais d'utiliser la sudo visudocommande pour cela.

Dans l'installation système par défaut, vous devriez trouver une telle ligne:

pi ALL=(ALL) NOPASSWD: ALL

Il indique sudoà l'utilisateur pid'exécuter tous les cammands en tant rootqu'utilisateur sans même fournir de mot de passe. Vous pouvez modifier le dernier ALLet spécifier une liste de commandes séparées par des virgules (avec leur chemin d'accès complet) autorisées à s'exécuter. Dans votre cas, vous devez remplacer cette ligne par:

pi ALL=(ALL) NOPASSWD: /usr/bin/apt-get, /sbin/shutdown

Notez qu'il existe une autre ligne sudoersaffectant l' piutilisateur:

%sudo   ALL=(ALL:ALL) ALL

Cette ligne permet à tous les utilisateurs du groupe sudo(le %caractère devant le nom signifie que c'est un nom de groupe au lieu du nom d'utilisateur) d'exécuter TOUS les mots de passe à condition qu'ils connaissent leur propre mot de passe . Si vous quittez cette ligne, l'utilisateur pipourra exécuter toutes les autres commandes mais il lui sera demandé son mot de passe.

Si vous souhaitez empêcher cela, vous pouvez supprimer cette ligne ou supprimer l'utilisateur pidu sudogroupe.

Après avoir apporté des modifications au /etc/sudoersfichier, vous voudrez peut-être vérifier qu'il fait vraiment ce que vous voulez en appelant la sudo -l -U picommande.

Bien sûr, vous pouvez créer différents comptes et configurer sudoersen leur donnant accès à différentes commandes.

Krzysztof Adamski
la source
1

Mai 2018, ce concept est toujours précis, mais la procédure a changé avec les versions ultérieures:

Premièrement, les fichiers doivent être édités directement dans vi ou nano ou leafpad ou emacs - quel que soit votre éditeur de texte préféré.

Le nom d'utilisateur pi n'est pas mentionné dans ce fichier:

/etc/sudoers

et la dernière ligne du fichier est la suivante:

#includedir /etc/sudoers.d

Ceci est un répertoire qui contient un fichier nommé

010_pi-nopasswd

qui contient cette seule ligne

pi ALL=(ALL) NOPASSWD: ALL

Ce qui a pour effet de ne pas demander de commande sudo tant que je suis connecté en tant qu'utilisateur pi. (notez que la syntaxe doit être exactement de cette façon)

C'est bien.

La ligne de groupe %sudo ALL=(ALL:ALL) ALLest toujours là

Donc pour répondre à la première partie de la question:

Lorsque j'ai déplacé le fichier /etc/sudoers/sudoers.d/010_pi-nopasswd d'un niveau de répertoire pour faire échouer l'inclusion, puis j'ai attendu 15 minutes, mon système Raspbian a demandé mon propre mot de passe lors de l'utilisation de sudo, juste comme le faisait mon système Ubuntu 14.04 LTS.

Ensuite, quand je l'ai replacé là où il devait être, même après 10 minutes, cela ne m'a plus incité.

Aucun redémarrage nécessaire. Voila, pas de demande de mot de passe lors de l'utilisation de sudo

Mon système de test lubuntu 14.04 LTS a la même configuration sauf que le fichier 010_pi-nopasswd n'était pas présent. lubuntu a été installé avec pi en tant qu'utilisateur root. Cela m'a incité à chaque fois que j'utilisais sudo, puis ne m'a pas invité pendant 10 minutes après.

J'ai ajouté ce même fichier au système Ubuntu tout comme la façon dont Raspbian est configuré, (n'oubliez pas de chmod 0440 sur ce fichier pendant que vous êtes encore dans cette fenêtre de 10 minutes) - et

Voila, il ne me demande plus mon propre mot de passe lorsque je suis connecté en tant que pi même après 15 minutes.

Encore une fois, le changement se produit instantanément sans redémarrage nécessaire.

Il s'agit de la réponse de mai 2018 pour savoir comment désactiver et activer l'invite pour l'utilisation de la commande sudo lorsque vous êtes connecté en tant qu'utilisateur root pi. D'autres utilisateurs et groupes peuvent être configurés de la même manière.

--MISE À JOUR pour Ubuntu 16.04 LTS Ce système est également très similaire. Cependant, la plus grande différence est que 16.04 a des autorisations de fichiers beaucoup plus restreintes, donc le travail doit être effectué en sumode. Si vous avez oublié votre mot de passe root, vous pouvez le réinitialiser à partir de votre invite normale en utilisant sudo passwd rootAlors la sucommande fonctionnera et vous pourrez y aller.

SDsolar
la source
Je viens de le trouver via Google - donc si je suis en train de suivre cela, l'utilisateur doit toujours être dans le groupe sudoers, mais /etc/sudo.d contrôle la fréquence à laquelle l'utilisateur spécifique est demandé pour un mot de passe?
lonstar
1
Oui. Vous l'avez. Être membre de sudoersse fait généralement au moment de la création de l'utilisateur. Exemple d'utilisation: vous remarquerez que la chaîne de commande commune sudo apt-get update && sudo apt-get upgradeappelle deux fois sudo, mais est ennuyeuse qu'elle puisse s'arrêter et demander à nouveau le mot de passe avant la mise à niveau. J'ai donc défini le mien pour ne jamais inviter mon nom de connexion (pi) et ensuite l'utiliser sudo apt-get update -y && sudo apt-get upgrade -yafin qu'il ne s'arrête pas non plus pour demander OK pour apporter des modifications importantes. Pour le rendre plus semblable à Unix. Faites ce que je demande et même si je m'éloigne, je veux que ce soit fini.
SDsolar
0

Il est plus sûr d'autoriser l'accès sudo via SSH que d'autoriser n'importe quel utilisateur à installer des packages. Si cela vous inquiète vraiment, changez la ligne /etc/sudoers:

pi ALL=(ALL) NOPASSWD: ALL

à

pi ALL=(ALL) PASSWD: ALL

Cela signifie que vous serez invité à entrer un mot de passe la première fois que vous utilisez sudo dans une session, puis à nouveau après un délai de quelques minutes. Vous ne pouvez pas modifier /etc/sudoersdirectement; utiliser sudo visudopour le faire.

On dirait que Krzysztof est entré avec une réponse juste là. Êtes-vous vraiment sûr de devoir redémarrer chaque fois que vous installez de nouveaux packages? Sauf si vous installez un nouveau noyau ou firmware, pas grand-chose d'autre n'a besoin d'un redémarrage. C'est un système d'exploitation de qualité que nous avons ici ...

scruss
la source
3
Mentionner timestamp timeout est une bonne idée. C'est 15 minutes par défaut, BTW. Notez que PASSWDc'est par défaut (s'il NOPASSWDn'a pas été spécifié plus tôt dans cette liste de commandes). Notez également que vous /etc/sudoerspouvez modifier directement sans problème si vous savez ce que vous faites. L'utilisation de visudomodifications apportées au fichier temporaire empêchant l'écriture automatique du fichier au milieu de la modification (ce qui pourrait introduire des erreurs de syntaxe et / ou des problèmes de sécurité), il verrouille ce fichier contre plusieurs modifications simultanées et effectue quelques vérifications de syntaxe avant d'écrire le fichier.
Krzysztof Adamski
Je pense que l'OP met rarement à jour qu'il obtient toujours un nouveau noyau ... ou un collègue lui a dit de redémarrer à chaque fois, car il ne voulait pas expliquer comment l'OP pouvait repérer un package de noyau dans la liste de mise à jour.
orithena
TNX pour ce commentaire, @Krzysztof. J'ai fait la correction dans ma réponse. Et vous avez raison sur l'édition. En fait, sur ma machine 16.04, je viens de mettre la ligne pi directement dans le fichier sudoers, car sudoers.d contenait juste un readme. Je l'ai laissé juste parce que, mais au moins les autorisations pi sont en cours de traitement. (Mon éditeur préféré est VI / VIM, btw, mais utilise parfois leafpad ou Idle. Je n'ai pas encore maîtrisé emacs - 15 ans, c'est long - et je peux faire beaucoup plus, plus rapidement, en vim que je ne peux en emacs , de loin.) Merci encore.
SDsolar
0

Juste une alternative à ce que Scruss a dit, supprimez le /etc/sudoers.d/010_pi-nopasswdfichier en exécutant sudo rm /etc/sudoers.d/010_pi-nopasswd. Beaucoup plus facile et plus sûr que d'éditer le fichier sudoers principal, ce qui peut casser sudo.


la source