web-dev-qa-db-fra.com

Pourquoi n'ai-je pas de mot de passe pour "su"? Problèmes avec "Sudo"

J'ai installé Ubuntu en utilisant l'interface graphique, en me donnant un mot de passe et tout. Je ne me souviens pas du processus de manière complexe. Cependant, ce qui m'inquiète, c'est que je ne connais pas le mot de passe suivant:

$ su
Password: <the only password I've ever created on this machine>
su: Authentication failure

Je ne sais juste pas quoi faire. Je ne suis pas en difficulté, mais je veux juste savoir ce qui se passe ici. Je peux aussi me verrouiller hors des répertoires:

starkers@ubuntu:~/Desktop$ mkdir foobs
starkers@ubuntu:~/Desktop$ Sudo chmod 777 -R foobs
Sudo: /var/lib/Sudo writable by non-owner (040777), should be mode 0700
[Sudo] password for starkers: <the only password I've ever created on this machine> 
starkers@ubuntu:~/Desktop$ cd foobs
bash: cd: foobs: Permission denied

Je suis juste un peu confus. Comment puis-je m'enfermer comme ça? Je pense que Sudoest la commande clé ici. Mais je rends le fichier foobsaussi ouvert que possible via le chmodname__, alors pourquoi me verrouille-t-il?

34
Starkers

Par défaut, le compte superutilisateur (root) est désactivé et n’a aucun mot de passe. Vous pouvez en créer un en exécutant:

$ Sudo passwd root

Vous pourrez alors vous connecter en tant que root en exécutant su en utilisant ce mot de passe.

En ce qui concerne chmod, la commande correcte serait:

$ chmod 777 -R foobs

Vous pouvez aussi utiliser:

$ Sudo -i

pour vous connecter en tant que root en utilisant votre mot de passe (sans créer de mot de passe root comme décrit ci-dessus).

49
Oli

1. Pourquoi vous n'avez pas de mot de passe root

Tandis que vous pouvez créer un mot de passe pour le compte superutilisateur vous permettant de vous connecter en tant que root avec suname__, il convient de mentionner que ce n'est pas "Ubuntu". façon de faire les choses. Ubuntu a spécifiquement choisi et non de donner un nom d'utilisateur et un mot de passe root par défaut pour une raison. Au lieu de cela, une installation Ubuntu par défaut utilisera Sudoname__.

Sudo est une alternative à donner aux gens un mot de passe root pour effectuer des tâches de superutilisateur. Dans une installation par défaut d’Ubuntu, la personne qui a installé le système d’exploitation reçoit par défaut l’autorisation "Sudo".

Toute personne disposant de l'autorisation "Sudo" peut effectuer quelque chose "en tant que superutilisateur" en mettant en attente Sudodans sa commande. Par exemple, pour exécuter apt-get dist-upgrade en tant que superutilisateur, vous pouvez utiliser:

Sudo apt-get dist-upgrade

Vous verrez cette utilisation de Sudo à peu près partout où vous lirez un tutoriel sur Ubuntu sur le Web. C'est une alternative à cela.

su
apt-get dist-upgrade
exit

Avec Sudo, vous choisissez à l’avance quels utilisateurs ont accès à Sudo. Ils n'ont pas besoin de se souvenir d'un mot de passe root car ils utilisent leur propre mot de passe. Si vous avez plusieurs utilisateurs, vous pouvez révoquer son accès superutilisateur en supprimant simplement leur autorisation Sudo, sans qu'il soit nécessaire de changer le mot de passe root et d'informer tout le monde d'un nouveau mot de passe. Vous pouvez même choisir les commandes qu'un utilisateur est autorisé à exécuter à l'aide de Sudo et celles qui sont interdites pour cet utilisateur. Enfin, en cas d’infraction à la sécurité, une meilleure trace d’audit peut dans certains cas laisser apparaître le compte d’utilisateur compromis.

Sudo facilite l'exécution d'une commande unique avec les privilèges de superutilisateur. Avec suname__, vous accédez définitivement à un super-utilisateur Shell à quitter avec exitou logoutname__. Cela peut amener les utilisateurs à rester dans le superutilisateur Shell plus longtemps que nécessaire simplement parce que cela est plus pratique que de se déconnecter et de se reconnecter plus tard.

Avec Sudo, vous avez toujours la possibilité d’ouvrir un shell superutilisateur permanent (interactif) avec la commande:

Sudo su

... et cela peut toujours être fait sans mot de passe root, car Sudodonne des privilèges de superutilisateur à la commande suname__.

Et de même, au lieu de su - pour un shell de connexion, vous pouvez utiliser Sudo su - ou même Sudo -i.

Cependant, pour ce faire, vous devez simplement savoir que vous agissez en tant que superutilisateur pour chaque commande. C'est un bon principe de sécurité de ne pas rester super-utilisateur plus longtemps que nécessaire, juste pour réduire les risques d'endommager accidentellement le système (sans lui, vous ne pouvez endommager que les fichiers que votre utilisateur possède).

Juste pour clarifier, vous pouvez , si vous le souhaitez, donner à l'utilisateur root un mot de passe lui permettant de se connecter en tant que root, comme décrit dans la réponse de @ Oli, si vous souhaitez spécifiquement: faire les choses de cette façon à la place. Je voulais simplement vous informer de la convention Ubuntu qui consiste à préférer Sudoà la place et vous faire savoir qu’il existe une alternative.


2. Les problèmes avec votre commande chmod 777 -R

Votre question comporte également une deuxième partie: vos problèmes avec la commande Sudo chmod 777 -R foobs.

Premièrement, l’avertissement suivant indique un problème de sécurité potentiellement sérieux sur votre ordinateur:

Sudo: /var/lib/Sudo writable by non-owner (040777), should be mode 0700

Cela signifie qu'à un moment donné, vous avez défini /var/lib/Sudo pour qu'il soit accessible en écriture. J'imagine que vous avez fait cela à un moment donné en utilisant une commande telle que Sudo chmod 777 -R /. Malheureusement, ce faisant, vous avez probablement quasiment brisé toutes les autorisations de fichiers de votre système. Il est peu probable que ce soit le seul fichier système important dont les autorisations ont été modifiées pour être accessible en écriture. Vous avez essentiellement un système facilement piratable maintenant, et le seul moyen facile de le récupérer serait de le réinstaller.

Deuxièmement, la commande que vous utilisiez:

Sudo chmod 777 -R foobs

Lors de la manipulation de fichiers dans votre répertoire personnel, dans ce cas dans ~/Desktop, vous ne devriez pas avoir à utiliser Sudoname__. Tous les fichiers que vous créez dans votre répertoire personnel doivent être modifiables par vous de toute façon (sinon, quelque chose de drôle se passe).

En outre, vous devez être pleinement conscient des conséquences de la modification en masse des autorisations de fichiers, telles que le faire de manière récursive ou sur un très grand nombre de fichiers. Dans ce cas, vous modifiez avec soin les autorisations de fichier pour qu'elles soient accessibles en écriture. Tout autre utilisateur, ou tout logiciel serveur buggy sur la machine, peut avoir un accès facile pour écraser tous ces fichiers et répertoires.

Il est presque certain que chmod 777 -R [dir] est pas une solution appropriée à tout problème que vous tentiez de résoudre (et comme je l’ai mentionné plus haut, il existe des preuves que vous avez fait cela aussi dans les fichiers système de/var/lib, et je suppose dans beaucoup d’autres endroits).

Quelques règles de base:

  • Si vous vous contentez de manipuler vos propres fichiers dans votre répertoire personnel, votre bureau, etc., vous ne devriez jamais avoir besoin d'utiliser Sudoou des droits de superutilisateur. Si vous le faites, c'est un signe avant-coureur que vous faites quelque chose de mal.

  • Vous ne devriez jamais modifier manuellement les fichiers système appartenant à des packages. Exception: à moins que vous ne le fassiez de manière spécifiquement documentée par ces packages, par exemple en modifiant leur configuration dans /etc. Cela s'applique également à la modification des autorisations de fichiers. Si un didacticiel ou une tentative de résolution du problème nécessite Sudoou les droits de superutilisateur, et qu'il ne s'agit pas simplement d'une modification de la configuration dans/etc /, cela signifie que vous faites une erreur.

67
thomasrutter