web-dev-qa-db-fra.com

Comprendre les autorisations UNIX et les types de fichiers

Je n'ai jamais vraiment compris comment chmod fonctionnait jusqu'à aujourd'hui. J'ai suivi un tutoriel qui m'a beaucoup expliqué.

Par exemple, j'ai lu que vous disposez de trois groupes d'autorisations différents:

  • propriétaire (u)
  • groupe (g)
  • tout le monde (o)

Sur la base de ces trois groupes, je sais maintenant que:

  • Si le fichier appartient à l'utilisateur, les autorisations de l'utilisateur déterminent l'accès.
  • Si le groupe du fichier est le même que le groupe de l'utilisateur, l'autorisation de groupe détermine l'accès.
  • Si l'utilisateur n'est pas le propriétaire du fichier et n'est pas dans le groupe, l'autre autorisation est utilisée.

J'ai également appris que vous disposez des autorisations suivantes:

  • lire (r)
  • écrire (w)
  • exécuter (x)

J'ai créé un répertoire pour tester mes connaissances nouvellement acquises:

mkdir test

Ensuite, j'ai fait quelques tests:

chmod u+rwx test/
# drwx------
chmod g+rx test/
# drwxr-x---
chmod u-x test/
# drw-r-x---

Après avoir couché pendant un certain temps, je pense que j'ai finalement compris chmod et la façon dont vous définissez l'autorisation à l'aide de cette commande.


Mais...

J'ai encore quelques questions:

  • Que signifie le d au départ?
  • Quel est le nom et l'utilisation de l'emplacement contenant et quelles autres valeurs peut-il contenir?
  • Comment puis-je l'activer et le désactiver?
  • Quelle est la valeur de ce d? (Comme vous n'avez que 7 = 4 + 2 + 1 7 = 4 + 2 + 1 7 = 4 + 2 + 1)
  • Pourquoi les gens utilisent-ils parfois 0777 au lieu de 777 pour définir leurs autorisations?

Mais comme je ne devrais pas poser plusieurs questions, je vais essayer de le poser en une seule question.

Dans un système basé sur UNIX tel que toutes les distributions Linux, concernant les autorisations, que représente la première partie (d) et à quoi sert cette partie des autorisations?

74
Peter

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

Types de fichier

Le premier caractère dans ls -l la sortie représente le type de fichier; d signifie qu'il s'agit d'un répertoire. Il ne peut pas être défini 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 rencontrerez probablement 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 disques ou des partitions, peut être créé avec mknod
  • c: fichier spécial de caractères, peut également ê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: canal 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 autorisations dans une seule 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 "sticky" (voir ci-dessous)
  • autorisations utilisateur
  • autorisations de groupe
  • "Autres" autorisations

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

  • "Lire" est 4
  • "Écrire" vaut 2
  • "Exécuter" est 1

Pour le premier chiffre:

  • suid vaut 4; les binaires avec cet ensemble de bits s'exécutent en tant qu'utilisateur propriétaire (généralement root)
  • sgid vaut 2; les binaires avec cet ensemble de bits sont exécutés 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 pour la sécurité lorsqu'ils sont combinés avec des vulnérabilités dans les jeux), et les fichiers créés dans les répertoires avec cet ensemble de bits appartiennent à la le groupe propriétaire du répertoire par défaut (c'est pratique pour créer des dossiers partagés)
  • "Collant" (ou "suppression restreinte") est égal à 1; les fichiers des 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 la page de manuel chmod pour plus de détails. Notez que dans tout cela, j'ignore d'autres fonctionnalités de sécurité qui peuvent modifier les autorisations des utilisateurs sur les fichiers (SELinux, ACL de fichiers ...).

Les bits spéciaux sont traités différemment selon le type de fichier (fichier normal ou répertoire) et le système sous-jacent. (Ceci est mentionné dans la page de manuel chmod.) Sur le système que j'ai utilisé pour tester cela (avec coreutils 8.23 ​​sur un ext4 système de fichiers, 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 accordent à tous les droits d'accès sur le fichier. Pour un répertoire, les bits spéciaux ne sont jamais entièrement effacés en utilisant la forme numérique à quatre chiffres, donc en effet 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 les bits spéciaux des 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.

Dans ls -l sortie, suid, sgid et "collant" apparaissent à la place de l'entrée x: suid est s ou S au lieu de l'utilisateur x, sgid est s ou S au lieu du x du groupe, et "collant" est t ou T au lieu des autres x. Une lettre minuscule indique que le bit spécial et le bit exécutable sont définis; 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 source de confusion (au moins, il s'est avéré que j'étais confus). Il 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, préservé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 de texte ([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 simplement spécifier le mode complet de cette façon; et il est utile de pouvoir penser aux autorisations en utilisant les 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. Également, +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 à utiliser des fichiers spéciaux dans des répertoires. Donc, 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.

124
Stephen Kitt

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

Pour les morceaux d'un mode fichier

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

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

J'attache une image de morceaux d'un mode fichier:

enter image description here

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

  • d (directory)
  • c (character device)
  • l (symlink)
  • p (named pipe)
  • s (socket)
  • b (block device)
  • D (door, not common on Linux systems, but has been ported)

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 vs 0777

La commande chmod s'attend généralement à ce que l'entrée soit un nombre octal, le zéro de tête fait référence à la valeur du triplet de bits sticky/sgid/suid. En C cependant, cela ferait une différence, car 777 Serait traduit en 01411 (Octal), définissant ainsi le bit collant (voir la page de manuel chmod(2)), 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).

MODIFIER 1

J'ai trouvé une autre image sur les autorisations Linux et je vais l'attacher pour comprendre plus facilement: UNIX file permissions

43
ValeriRangelov

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

Si vous utilisez 0777 en tant qu'autorisations, vous donnez un contrôle total (lecture + écriture + exécution) à chaque utilisateur/groupe du système. C'est un moyen paresseux 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 répertoriez 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 a un accès en lecture et en écriture, le groupe n'a qu'un accès en lecture et n'importe quel autre utilisateur a un accès en lecture. Cela peut être traduit par 644.

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

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

10
jcbermu

Après avoir répondu à ma question ici et fait des recherches sur le résultat, j'ai trouvé un article qui l'explique très bien. Je voudrais partager certaines parties de cet article ici pour de futures références.

Affichage des autorisations

Afin d'utiliser chmod pour modifier les autorisations d'un fichier ou d'un répertoire, vous devez d'abord connaître le mode d'accès actuel. Vous pouvez afficher le contenu d'un répertoire du terminal par cd dans ce répertoire, puis utiliser:

$ ls -l

Le -l switch est important car l'utilisation de ls sans lui n'affichera que les noms des fichiers ou dossiers du répertoire.

Voici un exemple d'utilisation de ls -l sur mon répertoire personnel:

total 128
drwxr-xr-x 2 peter users  4096 Jul  5 21:03 Desktop
drwxr-xr-x 6 peter users  4096 Jul  5 17:37 Documents
drwxr-xr-x 2 peter users  4096 Jul  5 13:45 Downloads
drwxr-xr-x 2 peter users  4096 Jun 24 03:36 Movies
drwxr-xr-x 2 peter users  4096 Jun 24 03:38 Music
drwxr-xr-x 2 peter users  4096 Jun 26 00:09 Pictures
-rw-r--r-- 1 peter users   354 Jul  6 17:15 chmodtest

Signification des colonnes

La première colonne est le type de chaque fichier:

  • - désigne un fichier normal.
  • d désigne un répertoire, c'est-à-dire un dossier contenant d'autres fichiers ou dossiers.
  • p désigne un canal nommé (alias FIFO).
  • l désigne un lien symbolique.

Les lettres qui suivent sont les autorisations, cette première colonne est ce qui nous intéressera le plus. La seconde est le nombre de liens dans un fichier, nous pouvons l'ignorer en toute sécurité. La troisième colonne a deux valeurs/noms: La première (dans mon exemple "peter") est le nom de l'utilisateur propriétaire du fichier. La deuxième valeur ("utilisateurs" dans l'exemple) est le groupe auquel appartient le propriétaire (En savoir plus sur les groupes).

La colonne suivante est la taille du fichier ou du répertoire en octets et les informations qui suivent sont les dates et heures de la dernière modification du fichier ou du répertoire, et bien sûr le nom du fichier ou du répertoire.

Que signifient les autorisations

Les trois premières lettres, après la première - ou d, sont les autorisations dont dispose le propriétaire. Les trois lettres suivantes sont des autorisations qui s'appliquent au groupe. Les trois dernières lettres sont les autorisations qui s'appliquent à tout le monde.

Chaque ensemble de trois lettres est composé de rw et x. r est toujours en première position, w est toujours en deuxième position et x est toujours en troisième position. r est l'autorisation de lecture, w est l'autorisation d'écriture et x est l'autorisation d'exécution. S'il y a un trait d'union (-) à la place de l'une de ces lettres, cela signifie que l'autorisation n'est pas accordée, et si la lettre est présente, elle est accordée.

Dossiers

Dans le cas de dossiers, les bits de mode peuvent être interprétés comme suit:

  • r (read) représente la possibilité de lire la table des matières du répertoire donné,
  • w (écriture) signifie la possibilité d'écrire la table des matières du répertoire donné (créer de nouveaux fichiers, dossiers; renommer, supprimer des fichiers existants, dossiers) si et seulement si le bit d'exécution est défini. Sinon, cette autorisation n'a aucun sens.
  • x (exécuter) signifie la possibilité d'entrer dans le répertoire donné avec la commande cd et d'accéder aux fichiers, dossiers de ce répertoire.

Modification des autorisations à l'aide de la commande chmod

chmod est une commande sous Linux et d'autres systèmes d'exploitation de type Unix. Il vous permet de modifier les autorisations (ou le mode d'accès) d'un fichier ou d'un répertoire.

Vous pouvez modifier les autorisations de deux manières différentes: - basée sur le texte chmod - basée sur le nombre chmod

Méthode texte

Pour modifier les autorisations ou le mode d'accès d'un fichier, nous utilisons la commande chmod dans un terminal. Voici la structure générale de la commande:

chmod who=permissions filename

Où Qui est l'un d'une gamme de lettres, et chacun signifie à qui vous allez donner la permission. Ils sont les suivants:

u - The user that owns the file.
g - The group the file belongs to.
o - The other users i.e. everyone else.
a - all of the above - use this instead of having to type ugo.

Les autorisations sont les mêmes que celles décrites précédemment (r, w et x).

La commande chmod nous permet d'ajouter et de soustraire des autorisations d'un ensemble existant en utilisant + ou - au lieu de =. Ceci est différent des commandes ci-dessus, qui réécrivent essentiellement les autorisations (c'est-à-dire pour changer une autorisation de r-- à rw-, vous devez toujours inclure r ainsi que w après le = dans la commande chmod. Si vous avez manqué r, cela supprimerait l'autorisation r car ils sont en cours de réécriture avec le =. Utilisez + et - évitez cela en ajoutant ou en supprimant l'ensemble actuel d'autorisations).

Méthode numérique

chmod peut également définir des autorisations à l'aide de chiffres.

L'utilisation de chiffres est une autre méthode qui vous permet de modifier les autorisations pour les trois propriétaires, groupes et autres en même temps. Cette structure de base du code est la suivante:

chmod xxx file/directory

Où xxx est un nombre à 3 chiffres où chaque chiffre peut être compris entre 1 et 7. Le premier chiffre s'applique aux autorisations pour le propriétaire, le deuxième chiffre s'applique aux autorisations pour le groupe et le troisième chiffre s'applique aux autorisations pour tous les autres.

Dans cette notation numérique, les valeurs r, w et x ont leur propre valeur numérique:

r=4
w=2
x=1

Pour trouver un nombre à trois chiffres, vous devez considérer les autorisations que vous souhaitez qu'un propriétaire, un groupe et un utilisateur aient, puis additionner leurs valeurs. Par exemple, disons que je voulais accorder au propriétaire d'un répertoire des autorisations de lecture-écriture et d'exécution, et que je voulais grouper et tout le monde pour avoir juste des autorisations de lecture et d'exécution. Je trouverais les valeurs numériques comme ceci:

Owner: rwx = 4+2+1=7
Group: r-x = 4+0+1=5 (or just 4+1=5)
Other: r-x = 4+0+1=5 (or just 4+1=5)

Final number = 755

$ chmod 755 filename

Cela équivaut à utiliser les éléments suivants:

chmod u=rwx filename
chmod go=rx filename

La plupart des dossiers/répertoires sont définis sur 755 pour permettre la lecture et l'écriture et l'exécution au propriétaire, mais refusent l'écriture à tout le monde, et les fichiers sont normalement 644 pour permettre la lecture et l'écriture pour le propriétaire mais simplement la lecture pour tout le monde, reportez-vous au dernier note sur le manque d'autorisations x avec les fichiers non exécutables - c'est la même chose ici.

7
Peter

Pour les questions d

Cela vous indique le type de fichier Unix. Par défaut, Unix n'a que 3 types de fichiers. Elles sont:

  • - - Fichier régulier
  • d - Fichier répertoire
  • Fichier spécial (avec 5 sous-types):
    • b - Fichier de blocage
    • c - Fichier de périphérique de caractères
    • p - Fichier de canal nommé ou simplement fichier de canal
    • l - Fichier de lien symbolique
    • s - Fichier de socket

En savoir plus ici: Les types de fichiers sous Linux/Unix expliqués en détail

0777 contre 777

Mors collant spécifié ou non. Lorsque le bit collant d'un répertoire est défini, le système de fichiers traite les fichiers de ces répertoires d'une manière spéciale afin que seul le propriétaire du fichier, le propriétaire du répertoire ou l'utilisateur root puisse renommer ou supprimer le fichier. Sans le bit collant défini, tout utilisateur disposant d'autorisations d'écriture et d'exécution pour le répertoire peut renommer ou supprimer des fichiers contenus, quel que soit le propriétaire du fichier.

0777 définit 777 autorisations de fichier et le bit collant à 0 - pas de modes spéciaux.

777 définit 777 autorisations de fichier, sans changer le bit collant.

En savoir plus: bit collant et chmod

0
csny

Deux choses liées que j'ai toujours trouvées déroutantes, et non abordées ci-dessus, sont:


I) ce que fait un --- 1:

Dans chmod: chaque '1' en permet une permission, par ex. chmod 777 en tout capable, mais attention car
dans umask: chaque '1' dis permet une autorisation, par ex. umask 777 dis tout capable.


II) fichier 'propriétaires' vs fichier 'utilisateurs':

En d'autres termes, il y a tilisateurs qui "possèdent", et tilisateurs qui "utilisent".

Chaque fichier est déten, en même temps, par deux entités:

  • un seul, spécifique tilisateur, et
  • un seul, spécifique groupe (d'un ou plusieurs utilisateurs).

Par conséquent, chaque fichier peut être tilisé par un utilisateur spécifique de trois manières:

1) Directement, en tant qu'utilisateur propriétaire du fichier,
2) in directement, en tant que membre du groupe propriétaire du fichier, et
3) éventuellement, comme quelqu'un d'autre.


Sinon , les réponses ci-dessus, faites un excellent travail! Merci à tous.

0
Elliptical view