Sur un serveur Linux, je dois supprimer les privilèges root d'un groupe d'utilisateurs. Mais ces utilisateurs ont des raisons légitimes de pouvoir utiliser l'utilitaire "find" pour rechercher des fichiers en fonction des noms de fichiers, des dates de modification et d'autres métadonnées.
Sur le serveur, les noms de fichiers ne sont pas sensibles, mais le contenu du fichier peut l'être.
Je voudrais utiliser sudo pour permettre aux utilisateurs de rechercher des fichiers n'importe où sur le serveur. L'utilitaire "find" est génial, mais il permet toutes sortes d'effets secondaires, comme l'utilisation de "-exec" pour générer des commandes arbitraires.
Puis - je obtenir find
de travailler avec mes restrictions?
Réponses:
Et localiser ?
Ou peut-être même slocate :
la source
locate
n'a pas besoinsudo
; seul sonupdatedb
travail requiert des privilèges spéciaux. Vos utilisateurs ne devraient donc jamais être en cours d'exécution ou pouvoir s'exécutersudo locate
.-d
drapeau ne définit que le chemin de la base de données? Je vous ai peut-être mal compris.Selon
man 7 capabilities
Cela a fonctionné pour moi. (les lignes commençant par '#' sont root, celles avec '$' ne sont pas root) dans ce cas, l'utilisateur non root est dans le
wheel
groupe.Compte tenu de ce que la capacité accorde, elle correspond exactement à ce que vous voulez. Je n'ai pas vérifié de manière exhaustive si
find
une fonctionnalité vous permet de lire des octets à l'intérieur des fichiers, mais des choses évidentes comme lesLD_PRELOAD
attaques de cales de bibliothèque ne devraient pas fonctionner en raison de la nature des vérifications de setuid sous Linux, et les bits de capacité ne sont pas hérité par les processus enfants non plus (contrairement au setuid brut), c'est donc un autre bonus.Gardez à l'esprit que ce que vous voulez faire soulève des problèmes de confidentialité potentiels en ce qui concerne la création de fichiers temporaires ou l'accès, et le programme pourrait être utilisé comme base pour monter une condition de concurrence critique / tentative d'escalade de privilèges (contre les programmes qui créent des noms de fichiers bien connus mais ne faites pas les contrôles de sécurité corrects).
De plus, certaines applications mal écrites peuvent s'appuyer sur des métadonnées de fichier ou une structure arborescente pour transmettre du sens ou masquer des données. Cela pourrait provoquer la divulgation d'informations restreintes ou révéler des documents privilégiés inconnus autrement (la sécurité par l'obscurité, je sais, mais c'est une chose que les fournisseurs de sources fermées en particulier aiment faire, malheureusement).
Par conséquent, soyez prudent et méfiez-vous de le faire et comprenez qu'il y a toujours un risque associé à cela, même si les choses évidentes ne fonctionnent pas.
Oh, et je serais intéressé de voir si quelqu'un a une attaque de preuve de concept qui utilise ce mécanisme comme base pour une élévation de privilèges dans les commentaires!
la source
find
la possibilité d'exécuter directement du code fourni par l'utilisateur, similaire à ce quiawk
peut faire.Je donnerais aux utilisateurs les autorisations appropriées.
Par défaut, si umask l'est
022
, des répertoires sont créés pour que tout le monde puisse y lister et statuer les fichiers. Sinon, vous pouvez modifier manuellement l'autorisation du répertoire pour qu'elle soit au niveau du bit ou de ses anciennes autorisations et0555
:Et si ces utilisateurs ne disposent pas de l'autorisation d'exécution sur tous les parents de ce répertoire (par exemple, le répertoire personnel d'un autre utilisateur), cela signifie probablement que vous devriez placer le premier répertoire ailleurs.
Si vous souhaitez autoriser uniquement certains utilisateurs à lire et exécuter ce répertoire, vous pouvez modifier son mode en
0750
, placer ces utilisateurs dans un groupe et modifier le propriétaire du groupe du répertoire dans ce groupe:la source