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:
u
)g
)o
)Sur la base de ces trois groupes, je sais maintenant que:
J'ai également appris que vous disposez des autorisations suivantes:
r
)w
)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.
J'ai encore quelques questions:
d
au départ?d
? (Comme vous n'avez que 7 = 4 + 2 + 1 7 = 4 + 2 + 1 7 = 4 + 2 + 1)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?
Je répondrai à vos questions en trois parties: types de fichiers, autorisations et cas d'utilisation pour les différentes formes de chmod
.
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 fichierb
: 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.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)La valeur octale est calculée comme la somme des autorisations:
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)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é.
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.
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:
Le type peut être différent. Par exemple:
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:
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
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.
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
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.
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 r
w
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.
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.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
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).
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.
Cela vous indique le type de fichier Unix. Par défaut, Unix n'a que 3 types de fichiers. Elles sont:
-
- Fichier régulierd
- Fichier répertoireb
- Fichier de blocagec
- Fichier de périphérique de caractèresp
- Fichier de canal nommé ou simplement fichier de canall
- Fichier de lien symboliques
- Fichier de socketEn 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
Deux choses liées que j'ai toujours trouvées déroutantes, et non abordées ci-dessus, sont:
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.
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:
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.