IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

script bash lister droits et permissions sur répertoire sous repertoire et fichiers


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 129
    Par défaut script bash lister droits et permissions sur répertoire sous repertoire et fichiers
    Bonjour tout le monde,

    Voila je souhaiterai réalisé un script qui permettrait dans un premier temps de lister, sur une arborescence, de répertoires-sous répertoires-fichiers, donnée les droits et permissions et si nécessaire les modifier ou non. De manière massive.

    Dans l'idée du script souhaité :
    -1 : faire afficher une question : Quelle arborescence souhaitez-vous vérifier ? taper l'arborescence : exemple /opt/anaconda3/

    -2 : faire afficher une question : Quels droits souhaitez-vous vérifier pour user ? taper les droits : exemple user : rwx ou r ou w ou x ou rw ou rx ou rien

    -3 : faire afficher une question : Quels droits souhaitez-vous vérifier pour group ? taper les droits : exemple group : rwx ou r ou w ou x ou rw ou rx ou rien

    -4 : faire afficher une question : Quels droits souhaitez-vous vérifier pour group ? taper les droits : exemple other : rwx ou r ou w ou x ou rw ou rx ou rien

    -5 : procéder à la vérification avec envoi dans un fichier .txt

    -6 : procéder à la modification
    modifier les droits sur user : oui ou non si oui que voulez-vous modifier ? Taper les droits : soit rwx ou r ou w ou x ou rw ou rx si non passer au suivant
    modifier les droits sur group : oui ou non si oui que voulez-vous modifier ? Taper les droits : soit rwx ou r ou w ou x ou rw ou rx si non passer au suivant
    modifier les droits sur other : oui ou non si oui que voulez-vous modifier ? Taper les droits : soit rwx ou r ou w ou x ou rw ou rx si non fin du script envoi du résultat dans un fichier .txt


    Je précise n'avoir aucune connaissance en bash.

    J'ai pu réaliser le travail qu'on m'avait demandé mais de manière manuelle avec une commande linux mais ceci était assez rébarbatif et je voudrais donc simplifier les choses pour plus tard.

    Voici la commande que j'avais trouvée pour lister les fichiers et répertoires dans le répertoire suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /opt/anaconda3/ -perm -o=w  -type f -exec ls -lh -R  {} \; > droits-anaconda3
    Voici la commande que j'ai réalisée pour modifier en masse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /opt/anaconda3/ -perm -o=w  -type f -exec chmod o-w {} \;

    Malheureusement je ne sais pas appliquer ceci dans un script d'où ma demande d'aide auprès de vous.

    Par avance je vous remercie de votre précieuse aide.

    Guibs

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par saga974 Voir le message
    Voila je souhaiterai réalisé un script qui permettrait dans un premier temps de lister, sur une arborescence, de répertoires-sous répertoires-fichiers, donnée les droits et permissions et si nécessaire les modifier ou non. De manière massive.
    Pourquoi faire ? Un exercice? Un TP?
    Si c'est pour le travail de tous les jours c'est inutile, parce que d'une part quand un droit est positionné il est rare qu'il doive changer, d'autre part le umask est justement là pour que tout nouveau fichier soit créé avec les bons droits et surtout si c'est vraiment nécessaire, alors tu remplaces simplement ton find /opt/anaconda3/ -perm -o=w -type f -exec chmod o-w {} \; par chmod -R o-w /opt/anaconda3 et basta. Pas besoin d'un script pour ça (remplacer une commande qui prend 3 arguments par un script qui n'en prendra que 2 c'est peu pertinent).

    Citation Envoyé par saga974 Voir le message
    Dans l'idée du script souhaité :
    -1 : faire afficher une question : Quelle arborescence souhaitez-vous vérifier ? taper l'arborescence : exemple /opt/anaconda3/
    Mouais, ok, juste pour l'exemple => read -p "Quelle arborescence souhaitez-vous vérifier ?" arbo; echo "arbo=[$arbo]".

    Citation Envoyé par saga974 Voir le message
    -2 : faire afficher une question : Quels droits souhaitez-vous vérifier pour user ? taper les droits : exemple user : rwx ou r ou w ou x ou rw ou rx ou rien
    -3 : faire afficher une question : Quels droits souhaitez-vous vérifier pour group ? taper les droits : exemple group : rwx ou r ou w ou x ou rw ou rx ou rien
    read -p "Quels droits souhaitez-vous vérifier pour user ?" user; echo "user=[$user]".
    read -p "Quels droits souhaitez-vous vérifier pour group?" group; echo "group=[$group]".
    Puis ensuite des test -n "$user" et test -z "$group" pourront te dire si les variables sont ou ne sont pas remplies/vides. Ensuite pour analyser chaque lettre "r", "w", et "x"... On peut isoler une lettre "n" d'un variable "v" via echo "$v" |cut -cn ou bien cut -cn <<< "$v" si ça te tente...

    Citation Envoyé par saga974 Voir le message
    -5 : procéder à la vérification avec envoi dans un fichier .txt
    Tu penses ça simple mais pense à la collision (ton script appelé plusieurs fois en parallèle, qu'est-ce que cela va donner dans le fichier). N'oublie pas que Linux est multi-user (même si on est généralement le seul) et aussi multitaches.
    Et donc généralement on essaye d'éviter de créer des fichiers pour rien, surtout que dans l'immense majorité des cas, on peut bosser en mémoire.

    Citation Envoyé par saga974 Voir le message
    -6 : procéder à la modification
    modifier les droits sur user : oui ou non si oui que voulez-vous modifier ? Taper les droits : soit rwx ou r ou w ou x ou rw ou rx si non passer au suivant
    modifier les droits sur group : oui ou non si oui que voulez-vous modifier ? Taper les droits : soit rwx ou r ou w ou x ou rw ou rx si non passer au suivant
    modifier les droits sur other : oui ou non si oui que voulez-vous modifier ? Taper les droits : soit rwx ou r ou w ou x ou rw ou rx si non fin du script envoi du résultat dans un fichier .txt
    Ok là on arrête. Franchement tu ne trouves pas tout ça un peu lourd? Tu penses vraiment que tu vas apprécier d'exécuter un script dans lequel on te pose (tu te poses en réalité) 100 000 questions avant de s'exécuter? Et oups tu as mal répondu à la question 17, faut tout recommencer !!!
    Prends exemple sur les commandes Unix. Dans leur immense majorité, elles ne demandent rien. On les appelle, on leur passe les éléments à utiliser sous forme d'option (l'option y est l'élément est traité, l'option n'y est pas l'élément est sauté) et c'est fini. L'utilisateur y gagne en souplesse et rapidité. Jamais un utilisateur habituel de Linux n'acceptera un programme avec toutes ces questions.
    A mon avis, tu t'es créé artificiellement un souci qui n'existe en réalité que dans ton imagination (cf ma première phrase de ce post).

    Citation Envoyé par saga974 Voir le message
    Je précise n'avoir aucune connaissance en bash.
    Ca aussi c'est foireux. Parce que quelque part ça me semble être un très sérieux handicap pour un truc qui, malgré la simplicité du cahier des charges, est en réalité déjà plutôt complexe ne penses-tu pas ?
    Analyser une chaine style "rwx", redemander si erreur etc c'est franchement pas évident à faire en shell qui n'a à l'origine pas été prévu pour ça...

    Citation Envoyé par saga974 Voir le message
    mais ceci était assez rébarbatif
    Pour moi c'est ton script qui est vraiment rébarbatif. Parce que la commande "find", une fois comprise, devient super simple, à mon avis tu devrais te concentrer dessus. Je vais te l'expliquer
    find /opt/anaconda3/ -perm -o=w -type f -exec ls -lh -R {} \; > droits-anaconda3
    • Le premier argument "/opt/anaconda3" est le point de départ de la recherche. Ici il n'y en a qu'un mais on pourrait en mettre plusieurs style find /opt/anaconda3 /home /usr ....
    • L'option "-perm" indique que tu cherches des droits particuliers. Ces droits cherchés sont tous ceux qui autorisent le "w(rite)" sur other. Effectivement c'est pas une super chose en matière de sécurité que de savoir que tout le monde peut foutre la dawa dans les fichiers de ta machine. J'ajouterai que le simple fait de trouver un seul fichier dans ce cas m'amènerait moi à me poser des questions sur les compétences de l'admin de la machine car comme je l'ai dit, un umask bien foutu (et le umask par défaut l'est) ne donne jamais de droit "w" à other.
    • L'option "-type f" indique que tu ne cherches que les fichiers de type "fichier régulier" (par opposition aux fichiers de type "dossier", "lien symbolique", "pipe", "bloc" et "caractère" car sous Unix/Linux, on n'a que des fichiers)
    • L'option "-exec" indique que tu veux exécuter une commande sur les fichiers trouvés. Et cette commande c'est "ls -lh -R". Et dans cette commande, le fichier à afficher est symbolisé par les accolades. Et "find" ne sachant pas où se termine la commande, il faut alors le lui indiquer via le point-virgule, point-virgule qui étant un caractère spécial du shell, doit être alors protégé par un backslash pour qu'il soit reçu tel quel par "find".

    Et voilà, une fois expliqué n'est-ce pas plus simple? Juste un détail: la commande "find" étant récursive, elle traitera toute l'arborescence. Nul besoin donc de demander un ls -R qui lui aussi liste toute l'arborescence car dans ce cas, l'arborescence est alors listée deux fois pour chaque dossier trouvé (et comme en plus tu ne cibles que les fichiers, il n'y a alors en fait pas d'arborescence qui nécessite le "-R")...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 129
    Par défaut
    Bonjour à toi,

    Merci pour ton retour c'est super cool et tu expliques tout très bien.

    En effet c'est pour le travail. Je cherchais juste à aller plus loin dans ce que l'on me demandais. Je pensais que ca pourrait être utile d'avoir ce script pour vérifier pas à pas et décomposer la recherche pour une personne ne connaissant pas linux mais si tu estimes non productif alors je comprendrais il n'y a pas de souci. En tout cas merci d'avoir pris le temps d'expliquer.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par saga974 Voir le message
    Je pensais que ca pourrait être utile d'avoir ce script pour vérifier pas à pas et décomposer la recherche pour une personne ne connaissant pas linux
    Vu que tu cibles /opt, tu cibles des fichiers systèmes modifiables seulement par l'administrateur de ta machine. Et un admin qui ne connaitrait pas Linux... Enfin il y en a, j'en ai déjà croisés mais dans ce cas, la machine part rapidement en couilles et ton script n'y changera rien. Parce que Linux c'est très robuste (perso je dis "invulnérable") mais à la seule condition impérative qu'il n'y ait aucune négligence. Une seule faille dans le travail de l'admin et tout le système devient suspect/corrompu.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 129
    Par défaut
    Moi je fais parti des admin qui n'y connaissent rien

    Citation Envoyé par Sve@r Voir le message
    Vu que tu cibles /opt, tu cibles des fichiers systèmes modifiables seulement par l'administrateur de ta machine. Et un admin qui ne connaitrait pas Linux... Enfin il y en a, j'en ai déjà croisés mais dans ce cas, la machine part rapidement en couilles et ton script n'y changera rien. Parce que Linux c'est très robuste (perso je dis "invulnérable") mais à la seule condition impérative qu'il n'y ait aucune négligence. Une seule faille dans le travail de l'admin et tout le système devient suspect/corrompu.

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par saga974 Voir le message
    Moi je fais parti des admin qui n'y connaissent rien
    Alors pas d'intiative. Tu as une machine par défaut fiable, vérifies par principe ton umask (commande umask qui doit afficher 0002 ou au pire 0022 et surtout pas de "0", "1", "4" ou "5" en dernier chiffre) et ensuite tu ne touches plus à rien, elle restera intègre.
    Et ensuite tu ne travailles jamais sous root. Tu dois avoir un compte à ton nom, comme n'importe quel user, et tu travailles depuis ce compte. Tu ne passes root (via sudo ou su) que pour de petites actions ponctuelles seulement quand c'est nécessaire et si tu es entré root via su alors tu ressors via exit quand c'est terminé.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 129
    Par défaut
    En effet, j'ai du 0022. Et actuellement je travaille en tant que user donc tout va bien.

    Citation Envoyé par Sve@r Voir le message
    Alors pas d'intiative. Tu as une machine par défaut fiable, vérifies par principe ton umask (commande umask qui doit afficher 0002 ou au pire 0022 et surtout pas de "0", "1", "4" ou "5" en dernier chiffre) et ensuite tu ne touches plus à rien, elle restera intègre.
    Et ensuite tu ne travailles jamais sous root. Tu dois avoir un compte à ton nom, comme n'importe quel user, et tu travailles depuis ce compte. Tu ne passes root (via sudo ou su) que pour de petites actions ponctuelles seulement quand c'est nécessaire et si tu es entré root via su alors tu ressors via exit quand c'est terminé.

  8. #8
    Membre Expert Avatar de Ti-Slackeux
    Homme Profil pro
    Robotique
    Inscrit en
    Août 2007
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Robotique

    Informations forums :
    Inscription : Août 2007
    Messages : 874
    Par défaut
    Citation Envoyé par saga974 Voir le message
    Moi je fais parti des admin qui n'y connaissent rien
    "Il y a deux sortes d'administrateurs, ceux qui ont déjà fait une connerie sous root et ceux qui ne vont pas tarder à en faire une"


Discussions similaires

  1. Réponses: 1
    Dernier message: 10/05/2010, 09h17
  2. Script Bash pour exécuter requete SQL sur une base Oracle
    Par Flipmode dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 28/11/2008, 17h18
  3. Droits d'accès sur répertoire
    Par belote dans le forum VB.NET
    Réponses: 6
    Dernier message: 20/11/2007, 10h51
  4. Authentification et permissions sur répertoires
    Par superjoe dans le forum Apache
    Réponses: 1
    Dernier message: 09/05/2007, 20h43
  5. API pour droit d'accès sur répertoire
    Par swirtel dans le forum Windows
    Réponses: 1
    Dernier message: 03/05/2006, 13h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo