web-dev-qa-db-fra.com

Est-il considéré comme une bonne pratique d'éviter d'utiliser `Sudo su`?

Le mot de passe root est désactivé par défaut pour que personne ne puisse se connecter directement au compte root.

Cependant, je peux toujours me connecter à root d'une autre manière en faisant Sudo su et en entrant mon propre mot de passe, étant donné que je suis membre du groupe Sudo dans /etc/group (à ma connaissance, la seule condition nécessaire).

Est-ce considéré comme une mauvaise pratique de "passer par la porte dérobée" pour accéder au compte root en utilisant Sudo su? Est-ce quelque chose à éviter, et plutôt que d'utiliser Sudo command?

2
AJJ

Il est bonne pratique d'éviter d'effectuer plus d'actions que nécessaire par la racine. Sudo facilite cette tâche en permettant vous pouvez exécuter des commandes individuelles en tant que root sans avoir à vous connecter en tant que root et sans avoir besoin d'un shell racine interactif pour les tâches pour lesquelles vous n'exécuteriez sinon aucun shell faire. Mais _Sudo su_ n'est pas un " porte dérobée ", c'est simplement une façon un peu moins élégante de faire ce que Sudo est conçu pour vous permettre de faire avec _Sudo -s_. De même , _Sudo -i_ est le moyen le plus élégant de réaliser ce que _Sudo su -_ vous obtiendrait: un simulateur de connexion initial simulé dont l'environnement est comme ce que vous obtiendriez si vous pouviez vous connecter en tant que root sur la ligne de commande. Voir man Sudo .

Par conséquent, cela revient à lorsque vous choisissez d'exécuter un shell racine interactif et comment vous choisissez de l’utiliser. Si vous l’utilisez pour ne pas avoir à vous soucier de décider d’exécuter ou non des commandes en tant que root, ce serait une mauvaise chose. Si vous y exécutez de nombreuses commandes ne nécessitant pas de privilèges root, vous devez envisager de les exécuter dans un shell non privilégié ou de reconsidérer si vous avez réellement besoin d'un shell racine. Mais l'utilisation d'une racine Shell n'a rien de fondamentalement faux.

Avec ou sans l'ouverture d'un shell racine, il est possible d'utiliser Sudo d'une manière préjudiciable à votre sécurité. Par exemple, veuillez ne pas exécuter Firefox ou LibreOffice avec Sudo. L'exécution d'un shell racine présente généralement des problèmes, notamment le fait que vous pouvez éventuellement exécuter des actions en tant que root, ce qui risque de provoquer des erreurs beaucoup plus dommageables lorsque root les effectue. Par conséquent, il ne suffit pas de décider: "Je vais simplement éviter ce problème en n'exécutant pas un shell racine". Il est tout à fait raisonnable d'éviter d'exécuter des shell racine, mais ce choix de couverture ne supprime toujours pas le besoin d'être attentif lorsque vous faites utilisez Sudo.


Les page de wiki d'aide sur Ubuntu à propos de Sudo == neuf avantages d'utiliser Sudo . La plupart mais pas tous de ces avantages s'appliquent pleinement à l'utilisation de Sudo pour ouvrir un shell, à condition que vous soyez aussi vigilant que ce que vous faites. dans ce shell que vous êtes de ce que vous faites dans les commandes individuelles que vous utilisez avec Sudo. Voici les exceptions - avantages de Sudo dont vous ne profitez pas pleinement lorsque vous l'utilisez pour ouvrir un shell racine:

  1. Sudo ajoute une entrée de journal de la ou des commandes exécutées (dans _/var/log/auth.log_). Si vous vous trompez, vous pouvez revenir en arrière et voir quelles commandes ont été exécutées.

Voir aussi la réponse de bodhi.zazen . La seule commande que vous utilisez pour ouvrir ce shell est toujours connectée à _auth.log_, mais les commandes que vous exécutez à partir de ne le sont pas.

  1. L'authentification expire automatiquement après une courte période (que vous pouvez définir aussi peu que vous le souhaitez ou 0). Par conséquent, si vous vous éloignez du terminal après avoir exécuté des commandes en tant que root à l'aide de Sudo, vous ne laisserez pas un terminal root ouvert indéfiniment.

Même si vous devez toujours garder à l’esprit les commandes que vous (ou quelqu'un d’autre) pouvez exécuter alors que vous avez un horodatage Sudo actif, l’utilisation d’un root interactif élève ce besoin, car toute commande exécutée jusqu’à ce que vous quittiez le Shell être exécuté en tant que root sans vous demander un mot de passe.

En outre, l'un des avantages est légèrement atténué lorsque vous utilisez un shell racine, bien que largement intact:

  1. Cela évite la connexion interactive "Je peux tout faire" par défaut. Un mot de passe vous sera demandé avant que des changements majeurs ne puissent se produire, ce qui devrait vous faire réfléchir aux conséquences de ce que vous faites.

Si vous deviez prétendre être root et n'avoir aucun autre compte utilisateur lors de l'utilisation de ce shell racine, vous perdriez bien entendu cet avantage. Cependant, lorsque vous exécutez _Sudo -s_, _Sudo -i_ ou une autre commande qui vous donne un shell, vous vous êtes déjà connecté (e) à une connexion autre que root (à moins que vous ne le fassiez à partir du mode de récupération ou que vous ayez activé les connexions root). , cette tentation est donc beaucoup plus facile à éviter.

C'est-à-dire que si vous vous connectiez en tant que root, vous le feriez probablement de manière anticipant de devoir faire des choses que seul root peut faire. Avec un shell racine, vous commencez vous-même, il est moins tentant de l’utiliser inutilement car, pour quelques commandes seulement, il est en fait plus facile de les exécuter individuellement avec Sudo- -et parce que vous êtes déjà connecté en tant que vous-même.

Et il y a aussi un avantage de Sudo que les gens pensent parfois être perdu quand on utilise un shell racine , mais ils se trompent complètement en pensant ainsi :

  1. Sudo peut être configuré avec une politique de sécurité beaucoup plus fine.

L'exécution d'un shell racine ne diminue en rien cet avantage, car il ne peut être effectué que par des utilisateurs configurés pour pouvoir exécuter des actions. Il ne vous laisse donc pas faire ce que vous ne pouviez pas faire auparavant. (C’est une autre raison, plus profonde que la simple présence des options _-s_ et _-i_ , que _Sudo su_ n’est pas vraiment similaire à une porte dérobée.)

Techniquement, cela pourrait également être effectué par les utilisateurs que vous avez configurés dans sudoers pour "seulement" être autorisés à exécuter des interpréteurs de commandes root et rien d'autre! Mais ce serait une configuration très stupide, car si un utilisateur peut exécuter un shell en tant que root, il peut effectuer toute action en tant que root. (Vous devez entreprendre des actions spécifiques pour créer cette situation stupide et dangereuse pour un utilisateur que vous souhaitez pratiquement restreindre.) Il existe de nombreuses commandes qui présentent un danger inattendu pour permettre à un utilisateur non totalement sécurisé de s'exécuter en tant que root - plus de juste des coquillages et des éditeurs de texte. Toute commande générant un fichier de sortie à un emplacement spécifié par l'utilisateur peut être utilisée pour mener une attaque élévation de privilèges si elle peut être exécutée par un utilisateur que vous n'avez pas l'intention de déjà pouvoir faire. ils choisissent comme racine.


Si vous choisissez d'exécuter un shell interactif en tant que root, soyez très prudent. Déterminez si cela vous aide vraiment et si vous finirez par en faire plus en tant que root. N'oubliez pas que, même sur un système avec un seul utilisateur humain, même si vous pouvez faire des choses mauvaises, comme supprimer tous vos fichiers personnels sans , utilisez Sudo, exécutez des actions en tant que root ne vous permet pas simplement de nuire à votre système Ubuntu de plusieurs manières. Si vous faites des choses en tant que root sans que cela ne soit nécessaire, vous empêchez de raisonner sur les dommages possibles (ou survenus).

Cela dit, il existe de nombreuses alternatives communes à l’utilisation d’un shell racine qui sont tout aussi dangereuses, voire plus. Par exemple, vous pouvez exécuter une commande sans Sudo, mais elle échoue car vous devez l'exécuter en tant que root, puis utilisez extension de l'historique pour l'exécuter avec Sudo. Mais êtes-vous sûr d'avoir exécuté la bonne commande? Avec des constructions d’expansion de l’historique sophistiquées telles que l’espoir que _Sudo !f_ exécute votre dernière commande foo, les erreurs sont extrêmement simples. Mais même avec le _!!_ de base pour exécuter la dernière commande, des erreurs se produisent. Si vous avez exécuté _foo; bar_, puis _Sudo !!_, est-ce que c'est foo ou bar qui s'exécute en tant que root? Si vous allez utiliser l'extension d'historique avec Sudo, il ne suffit pas de connaître la réponse, vous devez réussir à le garder à l'esprit à chaque fois que vous le faites.

Dans la plupart des situations, je vous recommande d'éviter de retaper le texte lorsque vous ajoutez Sudo aux commandes: vous appuyez simplement sur la touche Up Arrow jusqu'à ce que vous obteniez la commande nécessaire pour exécuter Sudo, appuyez sur Home pour obtenir le début de la commande, , lisez-la attentivement pour vous assurer que c'est vraiment ce que vous voulez faire , puis tapez Sudo et un espace. Si les situations qui vous incitent à exécuter un shell racine - ou à utiliser des méthodes plus dangereuses - sont des situations dans lesquelles il est raisonnablement pratique de le faire, vous n'avez pas besoin d'un shell racine. Et si vous oubliez de taper Sudo (comme beaucoup d’entre nous le faisons parfois, y compris moi-même), souvenez-vous que vous pourriez aussi oublier d’autres choses, des choses qui vous rendraient heureux d’oublier d’exécuter la commande en tant que racine.

1
Eliah Kagan

Votre question est plus une opinion qu'autre chose.

La meilleure pratique de l'OMI est d'utiliser Sudo à chaque fois car Sudo enregistrera vos commandes, tandis que Sudo su ne le fera pas (une fois que vous êtes root).

Si cela est trop fastidieux, je suggère Sudo -i pour une meilleure isolation entre les comptes utilisateur et racine (variables d'environnement).

Voir https://help.ubuntu.com/community/RootSudo#Special_notes_on_Sudo_and_shells

2
Panther