GNU/Linux >> Tutoriels Linux >  >> Linux

Comprendre les autorisations UNIX et les types de fichiers

Je vais répondre à vos questions en trois parties :types de fichiers, autorisations et cas d'utilisation pour les différentes formes de chmod .

Types de fichiers

Le premier caractère de ls -l la sortie représente le type de fichier ; d signifie que c'est un répertoire. Il ne peut pas être activé ou désactivé, cela dépend de la façon dont le fichier a été créé. Vous pouvez trouver la liste complète des types de fichiers dans la documentation ls; ceux que vous êtes susceptible de rencontrer sont

  • - :fichier "normal", créé avec n'importe quel programme capable d'écrire un fichier
  • b  :un fichier spécial de bloc, généralement des périphériques de disque ou de partition, peut être créé avec mknod
  • c :fichier spécial caractère, peut aussi être créé avec mknod (voir /dev pour des exemples)
  • d :répertoire, peut être créé avec mkdir
  • l :lien symbolique, peut être créé avec ln -s
  • p :tube nommé, peut être créé avec mkfifo
  • s :socket, peut être créé avec nc -U
  • D :porte, créé par certains processus serveur sur Solaris/openindiana.

Autorisations

chmod 0777 est utilisé pour définir toutes les permissions en un seul chmod exécution, plutôt que de combiner les modifications avec u+ etc. Chacun des quatre chiffres est une valeur octale représentant un ensemble d'autorisations :

  • suid , sgid et "collant" (voir ci-dessous)
  • autorisations utilisateur
  • autorisations de groupe
  • "Autres" autorisations

La valeur octale est calculée comme la somme des autorisations :

  • "lire" vaut 4
  • "écrire" vaut 2
  • "exécuter" vaut 1

Pour le premier chiffre :

  • suid est 4 ; les binaires avec ce jeu de bits s'exécutent en tant qu'utilisateur propriétaire (généralement root )
  • sgid est 2 ; les binaires avec ce jeu de bits s'exécutent en tant que groupe propriétaire (cela a été utilisé pour les jeux afin que les scores élevés puissent être partagés, mais c'est souvent un risque de sécurité lorsqu'il est combiné avec des vulnérabilités dans les jeux), et les fichiers créés dans des répertoires avec ce jeu de bits appartiennent au groupe propriétaire du répertoire par défaut (c'est pratique pour créer des dossiers partagés)
  • "collant" (ou "suppression restreinte") vaut 1 ; les fichiers dans les répertoires avec ce bit défini ne peuvent être supprimés que par leur propriétaire, le propriétaire du répertoire ou root (voir /tmp pour un exemple courant).

Voir le chmod page de manuel pour plus de détails. Notez que dans tout cela, j'ignore les autres fonctionnalités de sécurité qui peuvent modifier les autorisations des utilisateurs sur les fichiers (SELinux, fichiers ACL...).

Les bits spéciaux sont gérés différemment selon le type de fichier (fichier normal ou répertoire) et le système sous-jacent. (Ceci est mentionné dans le chmod manpage.) Sur le système que j'ai utilisé pour tester ceci (avec coreutils 8.23 sur un ext4 filesystem, exécutant le noyau Linux 3.16.7-ckt2), le comportement est le suivant. Pour un fichier, les bits spéciaux sont toujours effacés sauf s'ils sont explicitement définis, donc chmod 0777 est équivalent à chmod 777 , et les deux commandes effacent les bits spéciaux et donnent à tout le monde des autorisations complètes sur le fichier. Pour un répertoire, les bits spéciaux ne sont jamais complètement effacés en utilisant la forme numérique à quatre chiffres, donc en fait chmod 0777 est également équivalent à chmod 777 mais c'est trompeur car certains des bits spéciaux resteront tels quels. (Une version précédente de cette réponse s'est trompée.) Pour effacer des bits spéciaux sur les répertoires, vous devez utiliser u-s , g-s et/ou o-t explicitement ou spécifiez une valeur numérique négative, donc chmod -7000 effacera tous les bits spéciaux d'un répertoire.

En ls -l sortie, suid , sgid et "collant" apparaissent à la place du x entrée :suid est s ou S au lieu du x de l'utilisateur , sgid est s ou S au lieu du x du groupe , et "collant" est t ou T au lieu du x des autres . Une lettre minuscule indique que le bit spécial et le bit exécutable sont activés ; une lettre majuscule indique que seul le bit spécial est activé.

Les différentes formes de chmod

En raison du comportement décrit ci-dessus, l'utilisation des quatre chiffres complets dans chmod peut être déroutant (au moins il s'avère que j'étais confus). C'est utile lorsque vous souhaitez définir des bits spéciaux ainsi que des bits d'autorisation ; sinon les bits sont effacés si vous manipulez un fichier, conservés si vous manipulez un répertoire. Donc chmod 2750 garantit que vous obtiendrez au moins sgid et exactement u=rwx,g=rx,o=; mais chmod 0750 n'effacera pas nécessairement les bits spéciaux.

Utilisation des modes numériques au lieu des commandes textuelles ([ugo][=+-][rwxXst] ) est probablement plus un cas d'habitude et le but de la commande. Une fois que vous êtes habitué à utiliser les modes numériques, il est souvent plus facile de spécifier simplement le mode complet de cette façon ; et il est utile de pouvoir penser aux permissions en utilisant des modes numériques, car de nombreuses autres commandes peuvent les utiliser (install , mknod ...).

Certaines variantes de texte peuvent être utiles :si vous voulez simplement vous assurer qu'un fichier peut être exécuté par n'importe qui, chmod a+x le fera, quelles que soient les autres autorisations. De même, +X ajoute l'autorisation d'exécution uniquement si l'une des autorisations d'exécution est déjà définie ou si le fichier est un répertoire ; cela peut être pratique pour restaurer les autorisations globalement sans avoir à cas particulier les fichiers par rapport aux répertoires. Ainsi, chmod -R ug=rX,u+w,o= équivaut à appliquer chmod -R 750 à tous les répertoires et fichiers exécutables et chmod -R 640 à tous les autres fichiers.


Ainsi, les autorisations sous Linux sont très importantes. Je vais essayer de faire une petite explication.

Pour les morceaux d'un mode fichier

Chaque fichier Unix possède un ensemble d'autorisations qui déterminent si vous pouvez lire, écrire ou exécuter le fichier. Runningls -l affiche les autorisations. Voici un exemple d'un tel affichage :

-rw-r--r-- 1 user somegroup 7041 Mar 26 19:34 somefile

Je joins une image de morceaux d'un fichier mode :

Le type peut être différent. Par exemple :

  • d (répertoire)
  • c (appareil de caractère)
  • l (lien symbolique)
  • p (tube nommé)
  • s (prise)
  • b (bloquer l'appareil)
  • D (porte, pas courant sur les systèmes Linux, mais a été porté)

Si vous souhaitez définir des autorisations pour tous les répertoires, vous pouvez utiliser l'attribut R, par exemple :

chmod -R 777 /some/directory/

Pour chmod 777 contre 0777

Le chmod attend généralement que l'entrée soit un nombre octal, le zéro non significatif fait référence à la valeur du triplet de bits sticky/sgid/suid. En C cependant, cela ferait une différence, puisque 777 serait traduit en 01411 (octal), définissant ainsi le sticky bit (voir le chmod(2) page de manuel), lire les autorisations pour le propriétaire et le bit exécutable pour le groupe et les autres (ce qui est une combinaison plutôt étrange).

MODIFICATION 1

J'ai trouvé une autre image sur les autorisations Linux et je vais joindre pour comprendre plus facilement:


d signifie que c'est un répertoire, si vous avez un fichier c'est - et si c'est un lien vous trouverez un l . Il ne peut pas être activé/désactivé.

Si vous utilisez 0777 comme autorisations, vous donnez un contrôle total (lecture + écriture + exécution) à chaque utilisateur/groupe du système. C'est une façon paresseuse de résoudre les problèmes lorsque vous avez des utilisateurs/groupes qui ne peuvent pas accéder aux répertoires/fichiers.

Par exemple, si vous listez le contenu d'un répertoire et obtenez ceci :

-rw-r--r-- 1 root root 42596 jun 7 2012 preloadable_libintl.so

preloadable_libintl.so est un fichier appartenant à l'utilisateur root et au groupe root. Le propriétaire dispose d'un accès en lecture et en écriture, le groupe n'a qu'un accès en lecture et tout autre utilisateur dispose d'un accès en lecture. Cela peut être traduit par 644.

Si je le change en 777, il ressemblera à ceci :

-rwxrwxrwx 1 root root 42596 jun 7 2012 preloadable_libintl.so


Linux
  1. Linux - Comprendre les autorisations Unix et les types de fichiers ?

  2. Priorité de l'utilisateur et du propriétaire du groupe dans les autorisations de fichier ?

  3. Autorisations de fichiers et sauvegarde ?

  4. UNIX / Linux :Guide du débutant sur les autorisations de fichiers et de répertoires (umask, chmod, lecture, écriture, exécution)

  5. Tableau des autorisations pour les types d'utilisateurs d'un fichier/répertoire et d'un système de fichiers

Commande Chmod sous Linux (autorisations de fichiers)

Commande Chmod - Comment modifier les autorisations de fichiers sous Linux

Comprendre les autorisations de fichiers Linux

Exemples de commandes Linux chmod

Gérer les autorisations de répertoire et de fichier avec chmod Recursive

Comprendre les autorisations de fichiers de base et la propriété sous Linux