Sudoers pour un jour par semaine?

10

J'ai été proposé par mon patron pour être l'administrateur système de notre serveur de production redhat. Il m'a demandé de renforcer la sécurité pour éviter rm -f *que de tels incidents ne se produisent il n'y a pas longtemps.

À l'heure actuelle, nous avons 53 utilisateurs qui entrent dans la machine et c'est un cauchemar d'audit. Je me demande s'il est possible d'autoriser l'accès des utilisateurs uniquement certains jours de la semaine.

Par exemple, puis-je autoriser l'utilisateur «Joe» à se connecter les mardis et jeudis UNIQUEMENT et «Jane» uniquement le dimanche? Peut etc/sudoersêtre personnalisé pour permettre cela?

Existe-t-il un meilleur moyen au lieu d'utiliser des sudoers?

Chris
la source
10
Je recommanderais de NE PAS lire la page de manuel. Voir xkcd # 1343
user60684
3
Non, je lui dis de ne pas lire le manuel car il est impossible de lire à mon humble avis. Le PO trouverait probablement une réponse dans la page de manuel s'il était plus facile à lire.
user60684
10
Vous pouvez le faire, mais gardez à l'esprit que les utilisateurs peuvent se redonner tout le temps un accès sudo quel que soit le jour où ils ont root.
Nick Matteo
2
@ Mark0978 si vous connaissiez le nom de l'entreprise, vous mourriez probablement en riant la tête. C'est une honte qu'il soit permis ... sur un serveur de production.
Chris
3
Cela semble un peu idiot. Cela signifie simplement que Bill devra attendre la fin de son créneau horaire du mercredi matin rm -rf /.
Michael Hampton

Réponses:

21

sudo fait son authentification via PAM, comme à peu près tout le reste sur une boîte Linux.

Vous devriez donc pouvoir l'utiliser pam_time.sopour cela.

Par défaut sur Debian au moins, ce module n'est pas activé. Vous devez ajouter une ligne qui ressemble à ceci:

account    requisite  pam_time.so

soit /etc/pam.d/sudopour activer uniquement sudo, soit pour /etc/pam.d/common-account(après le bloc pam-auth-update) activer pour tous les programmes du système.

Modifiez ensuite /etc/security/time.confpour définir vos restrictions. Le nom du service doit être sudo. Par exemple, pour autoriser Fred à n'utiliser sudoqu'entre 15 h et 17 h le vendredi:

sudo;*;fred;Fr1500-1700

(REMARQUE: je n'ai pas testé cela.)

edit: Pour être clair, je suis d'accord avec l'autre réponse et les différents commentateurs, vous semblez avoir trop de personnes exécutant trop de commandes en tant que root, et vous avez vraiment besoin de corriger cela. Et bien sûr, s'ils peuvent devenir root, ils peuvent éditer la configuration pam ...

derobert
la source
PAM semble complexe à mettre en œuvre mais permet également un contrôle plus strict sur qui fait quoi et quand. Accepté et voté. Je vous remercie.
Chris
2
Je ne pense pas que l'encourager soit la bonne réponse, IMAO la bonne réponse à cette question est "RUN FOR THE HILLS !!!! 1! 1 !! 1! 1"
o0 '.
Est-ce que cela fonctionne réellement? Je suis capable de contrôler divers mécanismes de connexion tels que "login", "ssh", "gdm", "su" en utilisant pam_time.so, mais cela ne fonctionne pas pour sudo. Je veux empêcher quiconque de devenir root par tout mécanisme normal en dehors des heures de bureau. (Je me rends compte que ce n'est pas à l'épreuve des balles, quelqu'un pourrait préparer un shell setuid ou une porte dérobée à l'avance, mais je ne m'attends pas à ce que cela se produise dans cette situation.)
Sam Watkins
20

Je me demande pourquoi 53 utilisateurs ont besoin de sudo pour faire leur travail quotidien - pour la plupart des utilisateurs (même les développeurs), sudo devrait être une exception rare, pas une chose si routinière que quelqu'un exécuterait une sudo rm -rf *commande avec désinvolture .

Pouvez-vous utiliser des autorisations de groupe (ou même des listes de contrôle d'accès plus avancées) pour donner aux gens l'accès aux fichiers dont ils ont besoin pour faire leur travail, peut-être avec des scripts ou des binaires setuid ou sudo'ed pour leur permettre de faire des choses comme redémarrer les services? (notez qu'il est difficile d'écrire un script setuid / sudo sécurisé, donc c'est plus pour garder les gens honnêtes honnêtes).

Même si vous pouvez restreindre les utilisateurs à un jour par semaine d'accès sudo, cela fait toujours 53 personnes avec accès sudo dans une semaine, donc cela n'aide pas vraiment avec votre problème principal.

D'ailleurs, je me demande si de nombreux utilisateurs ont besoin d'accéder à un serveur de production - pouvez-vous envoyer des journaux ou les données / fichiers dont ils ont besoin à une machine hors production?

Johnny
la source
Ou pouvez-vous publier une sorte d'accès aux fichiers journaux dont ils pourraient avoir besoin, une configuration sftp emprisonnée en chroot.
Boatcoder
@Johnny la majorité du travail effectué sur cet hôte crée / édite et exécute des scripts shell. Les utilisateurs ne devraient pas être autorisés à le faire vi/cp/mv/rm. Seulement cdet more. Rien d'autre.
Chris
@Johnny Si je définis une ACL sur un répertoire, les fichiers de ce répertoire héritent-ils par défaut des attributs de l'ACL?
Chris
@Chris Oui, si vous définissez l'ACL par défaut pour le répertoire.
Michael Hampton
Ce devrait être un commentaire, pas une réponse. Peu importe si le scénario de l'OP est raisonnable, d'autres personnes ont un besoin similaire de verrouiller "sudo" pour certains utilisateurs à certains moments.
Sam Watkins
7

La manière la plus simple serait d'utiliser suders.d (via inludedir) pour votre configuration. Vous pourriez alors avoir des tâches cron qui pourraient placer les règles de chaque utilisateur dans ce répertoire pour les moments que vous désirez.

La directive #includedir peut être utilisée dans / etc / sudoers pour créer un répertoire sudo.d dans lequel vous pouvez déposer des règles sudoers dans le cadre de vos règles. Par exemple, étant donné:

#includedir /etc/sudoers.d

sudo lira chaque fichier dans /etc/sudoers.d, en ignorant les noms de fichiers se terminant par '~' ou contenant un '.' pour éviter de causer des problèmes avec le gestionnaire de packages ou l'éditeur de fichiers temporaires / de sauvegarde. Les fichiers sont analysés dans un ordre lexical trié. Autrement dit, /etc/sudoers.d/01_first sera analysé avant /etc/sudoers.d/10_second. N'oubliez pas que le tri étant lexical et non numérique, /etc/sudoers.d/1_whoops serait chargé après /etc/sudoers.d/10_second. L'utilisation d'un nombre cohérent de zéros non significatifs dans les noms de fichiers peut être utilisée pour éviter de tels problèmes.

Notez que contrairement aux fichiers inclus via #include, visudo ne modifiera pas les fichiers dans un répertoire #includedir sauf si l'un d'eux contient une erreur de syntaxe. Il est toujours possible d'exécuter visudo avec l'indicateur ‑f pour modifier directement les fichiers.

/etc/sudoers.d/joe serait présent lorsque vous souhaitez que joe ait accès et que vous puissiez simplement supprimer le fichier pour lui retirer l'accès.

jamespfinn
la source
1
J'ai eu un problème avec mes fichiers sudoers spécifiques à l'utilisateur: 'sudoers.user1' etc. Vous remarquez à propos des '~' et '.' les personnages ont résolu mon problème. Je suis tellement content que vous ayez lu le manuel! Je vous remercie.
Han
0

Vous pouvez ajouter une crontab pour placer un utilisateur dans un groupe sudo, puis une deuxième crontab pour retirer cet utilisateur.

PolarisUser
la source