Pourquoi n'ai-je pas de mot de passe pour «su»? Problèmes avec “sudo”

34

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 sudoest la commande clé ici. Mais je rends le foobsfichier aussi ouvert que possible via le chmod, alors pourquoi est-ce qu'il me verrouille?

Nu comme un ver
la source
6
Vous ne devriez presque jamais le faire chmod -R 777 whatever, à moins de vouloir causer un risque énorme pour la sécurité.
1
@BroSlow Merci pour le top. En dehors de cette question, comment définir des privilèges d'écriture en lecture sur un répertoire en toute sécurité? 666?
Starkers
1
Certainement mieux, mais cela dépend de ce que vous essayez de faire. Par exemple, avez-vous vraiment besoin que tous les utilisateurs aient accès à tout? Sinon, vous pourriez faire quelque chose comme 644 (à lire uniquement pour tout le monde sauf vous). Et en général, je ferais très attention, lors de la procédure récursive chmod, de ne modifier que les fichiers que vous vouliez.
1
@broslow Êtes-vous élevé? 666 est 1) toujours accessible en écriture mondiale et donc au même degré de risque pour la sécurité, et 2) supprime le bit exécutable, ce qui signifie qu'il ne pourrait plus accéder à ce répertoire.
Shadur
@Starkers Le vrai problème de sécurité que je vois ici est que, pour une raison insensée, le /var/lib/sudomonde est en écriture. Cela ne devrait pas se produire et vous devriez essayer de savoir pourquoi.
Shadur

Réponses:

49

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 ensuite vous connecter en tant que root en suutilisant 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).

Oli
la source
4
@ Oli Peut-être pouvez-vous modifier votre question à ajouter sudo su. Cela donne aussi des droits su permanents sur le terminal.
réveil
13
ne pas utiliser sudo su, car il va foutre en l'air et les choses vont se casser. utilisez plutôt sudo -i.
Strugee
20
Ne définissez pas de mot de passe root. Ne définissez pas de mot de passe root.
wchargin
4
chmod 777 est presque toujours mauvais (sticky bit est exempté, comme utilisé avec / tmp). Cette réponse est un risque de sécurité. De plus, la définition d’un mot de passe root n’est pas la manière dont Ubuntu doit être utilisée; encore une fois invitant un risque de sécurité. Veuillez suivre la réponse de neon_overload.
Rinzwind
4
@WChargin pourquoi suggérez-vous de ne pas avoir de compte / mot de passe root? Je suis vraiment curieux en tant qu'utilisateur d'archlinux.
Rob
67

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

Bien que vous puissiez créer un mot de passe pour le compte superutilisateur vous permettant de vous connecter en tant que root su, il est à noter que ce n'est pas la manière habituelle de faire des choses avec Ubuntu (ou de plus en plus, d'autres distributions). Ubuntu a choisi de ne pas donner de nom d'utilisateur et de mot de passe root par défaut pour une raison. À la place, une installation par défaut d’Ubuntu utilisera les sudoprivilèges 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 d'une autorisation "sudo" complète peut exécuter quelque chose "en tant que superutilisateur" en mettant en attente sudosa commande. Par exemple, pour fonctionner en apt-get dist-upgradetant 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 les utilisateurs qui ont un 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 avoir à changer le mot de passe root et à notifier un nouveau mot de passe à tout le monde. Vous pouvez même choisir quelles commandes un utilisateur est autorisé à utiliser avec sudo et quelles commandes 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 utilisateur compromis.

Sudo facilite l'exécution d'une commande unique avec les privilèges de superutilisateur. Avec su, vous passez définitivement à un shell superutilisateur qui doit être quitté avec exitou logout. Cela peut amener les utilisateurs à rester dans le shell de superutilisateur 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 les privilèges de superutilisateur à la sucommande.

Et de même, au lieu de su -pour un shell de connexion, vous pouvez utiliser sudo su -ou son raccourci 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 limiter 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 procéder de la sorte. Je voulais simplement vous informer de la convention Ubuntu consistant à préférer la sudopréférence 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 êtes prêt /var/lib/sudoà écrire dans le monde entier. J'imagine que vous avez fait cela à un moment donné en utilisant une commande comme 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, et le seul moyen facile de le récupérer consiste à 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 sudo. 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 fichiers pour qu'elles soient accessibles en écriture au monde. 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]ce n'est pas une solution appropriée au problème que vous tentiez de résoudre (et comme je l'ai mentionné ci-dessus, il est prouvé que vous l'avez déjà fait pour les fichiers système dans / var / lib, et je suppose que pour beaucoup d'autres des endroits).

Quelques règles de base:

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

  • Vous ne devez 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 des sudodroits ou des droits de superutilisateur et qu'il ne s'agit pas simplement d'une modification de la configuration dans / etc /, cela signifie que vous faites quelque chose de mal.

thomasrutter
la source
Explication géniale .. Bravo .. :)
Saurav Kumar
7
Je pense que "sudo -i" est le moyen "officiel" d'obtenir un shell racine, plutôt que "sudo su"
Max
3
Oui, vous devriez utiliser sudo -iplus sudo su.
Seth
sudo -i(ou sudo su -) ne sont pas universellement meilleurs mais simplement différents - ils lancent un shell de connexion qui simule un environnement de connexion d'utilisateur root, qui exécute, par exemple, le .profilefichier ou le .loginfichier de l'utilisateur root. Celles-ci sont meilleures si vous voulez que l'environnement dans le shell ressemble davantage à un shell de connexion root qu'à un shell interactif qui concerne les privilèges de superutilisateur. Il est probablement préférable d'utiliser les shells basés sur login si vous utilisez un shell, mais c'est sans intérêt: le point essentiel de la réponse est qu'Ubuntu est principalement conçu pour utiliser sudodes commandes avec des privilèges de super-utilisateur.
thomasrutter