web-dev-qa-db-fra.com

Meilleures pratiques pour durcir sudo?

Chaque guide de renforcement que j'ai lu recommande d'interdire de se connecter au compte root et d'utiliser plutôt Sudo. Je peux comprendre cela si vous définissez un fichier sudoers strict qui active uniquement les commandes nécessaires pour chaque groupe et utilisateur. Mais sur chaque serveur sur lequel je mets le pied, je n'ai été témoin que d'une configuration Sudo non restrictive. Je voudrais savoir si c'est une bonne pratique ou non et pourquoi (toujours, je comprends la raison de la traçabilité)?

Donc, voici mes questions :

  • Suffit-il d'interdire su et d'autoriser Sudo afin de conserver la traçabilité des actions de l'administrateur? (Je peux imaginer un scénario où un utilisateur effectue beaucoup d'actions Sudo avant de supprimer son bash_history)
  • Existe-t-il une autre source à côté de .bash_history utile pour conserver la traçabilité? un tel fichier peut-il être mis à jour par un administrateur (avec Sudo)?
  • Est-il possible de restreindre Sudo -i et Sudo -s dans la configuration?
  • Pouvez Sudo command avoir un utilitaire sans une configuration sudoers forte? Si oui, lesquels?

De plus, pour un seul utilisateur, je ne vois que des avantages pour interdire Sudo et activer su. En effet, se connecter avec l'utilisateur root et normal en utilisant le même mot de passe semble être une mauvaise pratique.

22
MarcelBrouette

Votre question est assez large, touchant plusieurs sujets différents. Il serait peut-être préférable de prendre certains détails et de les poser dans une question distincte.

Suffit-il d'interdire su et d'autoriser Sudo afin de garder la traçabilité des actions de l'administrateur?

... la commande Sudo peut-elle avoir un utilitaire sans une configuration sudoer forte? lesquels ?

Unrestricted Sudo a quelques avantages par rapport à su.

  • Chaque sudoer peut utiliser son mot de passe personnel. De cette façon, vous n'avez pas à redistribuer le mot de passe root s'il est modifié.

  • Sudo peut être configuré pour consigner l'activité. Si votre configuration syslog écrit dans un emplacement distant, il devient alors difficile pour quelqu'un de couvrir ses traces.

Cependant, l'accès illimité root est toujours "illimité".

  • Si vous n'utilisez pas un serveur syslog distant, les pistes peuvent facilement être couvertes.

  • Pour plus de commodité, les gens utilisent souvent Sudo -s pour obtenir un shell interactif. Cela vous permet d'obtenir bash la saisie semi-automatique sur les répertoires restreints. Malheureusement, les avantages de syslog sont annulés si une personne est autorisée à exécuter Sudo -s. Il existe également de nombreuses alternatives à Sudo -s qui peut permettre l'exécution de commandes sans journalisation spécifique.

(Je peux imaginer un scénario où un utilisateur effectue beaucoup d'actions Sudo avant de supprimer son bash_history)

bash_history ne doit pas être utilisé comme outil de suivi d'historique. C'est uniquement pour la commodité de l'utilisateur.

Existe-t-il une autre source à côté de .bash_history utile pour conserver la traçabilité? un tel fichier peut-il être mis à jour par un administrateur (avec Sudo)?

Tous les fichiers du serveur peuvent être mis à jour par une personne disposant d'un accès illimité root. (que ce soit via Sudo ou su)

Comment tracer l'activité d'un utilisateur root peut faire l'objet d'une question différente. Je crois que les configurations avancées de SELinux peuvent le faire, mais ce n'est probablement pas pratique. Je ne connais aucun autre moyen de suivre l'activité d'un utilisateur root.

Comme je l'ai dit, si vous avez une journalisation qui devra être écrite sur un serveur de journalisation distant pour éviter qu'elle ne soit effacée par l'attaquant.

est-il possible de restreindre Sudo -i et Sudo -s dans la configuration?

Pour vous répondre mot pour mot, cela peut être possible, mais dépasse le cadre de cet article. Pensez à créer une nouvelle question.

Cependant, cela ne résoudra pas votre problème. Par exemple, on pourrait utiliser Sudo su au lieu de Sudo -s. On pourrait utiliser Sudo sudoers, ou mettez à jour le crontab, etc.

La seule façon de résoudre ce problème est de "restreindre" les capacités Sudo à l'aide d'une liste blanche. Comme vous l'avez dit, ce n'est pas aussi courant, mais c'est certainement le seul moyen d'atteindre l'objectif de traçabilité fiable avec n'importe quel niveau de détail.

J'espère que cela t'aides. N'hésitez pas à demander des éclaircissements sur ma réponse, ou à poster une question plus spécifique si vous avez de nouvelles questions basées sur ce que vous avez appris jusqu'à présent.

25
Bryan Field

En réponse à votre dernière phrase, je fais en fait quelque chose dans cet esprit sur mon serveur SSH. J'y ai deux utilisateurs: ssh_user et Sudo_user. Seulement ssh_user est autorisé à se connecter, mais il n'est pas dans sudoers et doit émettre un su Sudo_user commande pour faire avancer les choses. Cela fournit une ligne de défense supplémentaire: même si l'attaquant obtient les informations d'identification de ssh_user (par exemple en volant mes fichiers de configuration PuTTY), il n'aura pas immédiatement accès à Sudo ou /etc/shadow sur le serveur et devra forcer le mot de passe de Sudo_user ou exécutez un exploit sur le système pour obtenir un accès root.

Bien sûr, une fois que l'attaquant a accès à ssh_user compte que le serveur est compromis, mais je m'attends à ce que cette astuce me donne un peu plus de temps pour réagir avant que les dégâts ne soient réels.

3
Dmitry Grigoryev

Quant à cela:

Se connecter avec l'utilisateur root et normal en utilisant le même mot de passe semble être une mauvaise pratique.

Sudo peut être configuré pour demander le mot de passe de l'utilisateur "cible", ou un mot de passe root, au lieu du mot de passe de l'utilisateur en cours d'exécution. Ainsi, pour un seul utilisateur, vous pouvez avoir des mots de passe administrateur et non privilégiés distincts. Pour plusieurs administrateurs, qui devraient tous avoir des mots de passe distincts pour un accès non privilégié et administrateur, c'est plus difficile et c'est probablement plus facile en créant des utilisateurs supplémentaires avec l'uid 0.

De sudoers (5) :

[Sudo] valide les informations d'identification de l'utilisateur appelant, et non les informations d'identification de l'utilisateur cible (ou de l'utilisateur racine). Ceci peut être modifié via les drapeaux rootpw, targetpw et runaspw, décrits plus loin.

1
ilkkachu