Sous Linux, comment puis-je trouver tous les fichiers et répertoires qui sont accessibles en écriture (ou, en fait, non accessibles en écriture) par un utilisateur particulier?
Edit: Pour clarifier, je voulais dire sous un sous-répertoire particulier, pas à l'échelle du système. Et oui, cela signifie toutes les permutations et combinaisons d'écriture utilisateur, groupe et monde qui permettraient à cet utilisateur d'écrire. Je sais ce que la question implique sémantiquement, j'espérais un ou plusieurs doublons à exécuter pour obtenir une liste de ces fichiers.
Réponses:
Utilisez la commande 'find' si la version 4.3.0 ou supérieure de findutils est installée:
Pour tous les fichiers du répertoire actuel qui sont accessibles en écriture par l'utilisateur actuel:
Pour tous les fichiers du répertoire actuel qui ne sont pas accessibles en écriture par l'utilisateur actuel:
Selon la page de manuel:
la source
2>&1 | grep -v "Permission denied"
êtrefind . -writable 2>&1 | grep -v "Permission denied"
Vous pouvez créer un script Perl (
writable.pl
) comme ceci:puis utilisez ce script, en tant que root, comme suit:
en remplissant
USERNAME
etDIRECTORY
le cas échéant.la source
Êtes-vous sûr que c'est vraiment la question que vous voulez poser?
Dire "Je veux voir tous les fichiers sur lesquels le compte X peut écrire" signifie chaque fichier qui leur appartient avec u + w, chaque fichier appartenant à un groupe auquel ils appartiennent qui est défini g + w, et chaque monde de fichiers accessible en écriture (o + w).
L'inscription en écriture serait encore plus difficile. Vous feriez mieux de faire une liste de chaque fichier, puis d'exclure ceux sur lesquels ils peuvent écrire.
la source
Pour la réponse d'Eddie si vous ajoutez:
Ensuite, il traversera également les répertoires avec des espaces dans leur nom.
la source
Je vais utiliser la syntaxe de recherche gnu pour l'indicateur -perm dans cet exemple:
Fondamentalement - si vous lancez des extensions farfelues comme les ACL, vous avez 3 chocies - propriétaire, groupe et "autre" accès en écriture. Cela ressemble à un travail pour une boucle.
Il y a beaucoup de place pour optimiser ceci mais je laisserai cela à quelqu'un d'autre ... De plus, je ne me souviens jamais de tous les détails de la recherche et du croisement des systèmes de fichiers et de ce genre de non-sens. Assurez-vous également que la sortie des groupes est la même que sur mon système Linux de test
Ceci est un exemple approximatif de la façon dont vous trouveriez des fichiers inscriptibles par un utilisateur. Cela s'exécutera en tant qu'utilisateur, mais si vous l'exécutez en tant qu'utilisateur non uid0, vous ne trouverez que les éléments qui se trouvent dans des répertoires sur lesquels l'utilisateur exécutant le script dispose à la fois des autorisations de lecture et d'exécution.
la source
Cette commande devrait trouver tous les répertoires accessibles en écriture, vous pouvez modifier les autorisations comme bon vous semble:
la source
Je ne sais pas si c'est la meilleure façon, mais devrait faire ce que vous demandez:
la clé est bien sûr dans le
-w
commutateur, qui peut également être annuléeEDIT: En y réfléchissant davantage, ce script imprime ce qui est accessible en écriture par l'utilisateur actuel, il ne fonctionnerait évidemment pas pour un utilisateur donné.
la source