Je n'ai jamais vraiment eu comment chmod
travaillé jusqu'à aujourd'hui. J'ai suivi un tutoriel qui m'a expliqué un gros problème.
Par exemple, j'ai lu que vous avez 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 identique au 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 ne fait pas partie du groupe, l'autre autorisation est utilisée.
J'ai également appris que vous disposiez des autorisations suivantes:
- read (
r
) - écrire (
w
) - execute (
x
)
J'ai créé un répertoire pour tester mes connaissances nouvellement acquises:
mkdir test
Puis j'ai fait des tests:
chmod u+rwx test/
# drwx------
chmod g+rx test/
# drwxr-x---
chmod u-x test/
# drw-r-x---
Après avoir passé du bon temps pendant un certain temps, je pense que j'ai enfin compris chmod
comment vous définissez les autorisations à l'aide de cette commande.
Mais...
J'ai encore quelques questions:
- Que signifie le
d
début? - Quels sont le nom et l'utilisation de l'emplacement contenant et quelles autres valeurs peut-il contenir?
- Comment puis-je le définir et le désactiver?
- Quelle est la valeur pour cela
d
? (Comme vous avez seulement 7 = 4 + 2 + 1 7 = 4 + 2 + 1 7 = 4 + 2 + 1) - Pourquoi les gens utilisent-ils parfois
0777
au lieu de777
définir leurs autorisations?
Mais comme je ne devrais pas poser plusieurs questions, je vais essayer de le faire en une seule question.
Dans les systèmes UNIX tels que toutes les distributions Linux, en ce qui concerne les autorisations, que signifie la première partie ( d
) et quelle est l'utilisation de cette partie des autorisations?
la source
S_IFDIR
. Vous ne l'utilisez pas lorsque vous définissez le mode de fichier, mais lastat()
fonction renvoie la valeur 040750 pourdrwxr-x---
.Réponses:
Je répondrai à vos questions en trois parties: types de fichiers, autorisations et cas d'utilisation pour les différentes formes de fichiers
chmod
.Types de fichier
Le premier caractère de la
ls -l
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 manière dont le fichier a été créé. Vous pouvez trouver la liste complète des types de fichiers dans la documentation de ls ; ceux que vous êtes susceptible de rencontrer sont-
: Fichier “normal”, créé avec n'importe quel programme capable d'écrire un fichierb
: bloquer un fichier spécial, généralement un disque ou une partition, peut être créé avecmknod
c
: fichier spécial de caractère, peut également être créé avecmknod
(voir/dev
des exemples)d
: répertoire, peut être créé avecmkdir
l
: lien symbolique, peut être créé avecln -s
p
: pipe nommée, peut être créée avecmkfifo
s
: socket, peut être créé avecnc -U
D
: door , créé par certains processus serveur sous Solaris / openindiana.Les permissions
chmod 0777
est utilisé pour définir toutes les autorisations dans unechmod
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)La valeur octale est calculée comme la somme des autorisations:
Pour le premier chiffre:
suid
est 4; les binaires avec ce bit sont exécutés en tant que propriétaire (généralementroot
)sgid
est 2; les fichiers binaires avec ce jeu de bits sont gérés en tant que groupe propriétaire (utilisé pour les jeux afin que les scores élevés puissent être partagés, mais cela constitue souvent un risque pour la sécurité lorsqu'il est combiné à des vulnérabilités dans les jeux), et les fichiers créés dans les répertoires avec ce jeu de bits appartiennent à la liste. le groupe de propriétaires du répertoire par défaut (c'est pratique pour créer des dossiers partagés)root
(voir/tmp
un exemple courant).Voir la
chmod
page de manuel 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, etc.).Les bits spéciaux sont traités différemment selon le type de fichier (fichier ou répertoire standard) et le système sous-jacent. (Ceci est mentionné dans la
chmod
page de manuel.) Sur le système que j'avais l'habitude de tester (aveccoreutils
8.23 sur unext4
système de fichiers, le noyau Linux exécutant 3.16.7-ckt2), le comportement est le suivant. Pour un fichier, les bits spéciaux sont toujours effacés, sauf s'ils sont définis explicitement. Celachmod 0777
équivaut àchmod 777
, et les deux commandes effacent les bits spéciaux et accordent à tous des autorisations complètes sur le fichier. Pour un répertoire, les bits spéciaux ne sont jamais complètement effacés à l’aide de la forme numérique à quatre chiffres. Par conséquent, celachmod 0777
équivaut également àchmod 777
mais c'est trompeur, car certains des éléments 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 utiliseru-s
,g-s
et / ouo-t
explicitement ou spécifier une valeur numérique négative, ainsichmod -7000
effacerez tous les bits spéciaux d'un répertoire.En
ls -l
sortie,suid
,sgid
et « collant » apparaît à la place de l'x
entrée:suid
ests
ou auS
lieu de de l'utilisateurx
,sgid
ests
ou auS
lieu de ce groupex
, et « collant » estt
ouT
plutôt que d'autresx
. 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 entiers
chmod
peut être source de confusion (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 de permission; sinon, les bits sont effacés si vous manipulez un fichier, conservés si vous manipulez un répertoire. Donc,chmod 2750
assure que vous aurez au moinssgid
et exactementu=rwx,g=rx,o=
; maischmod 0750
ne sera pas nécessairement effacer les bits spéciaux.Utiliser des modes numériques au lieu de 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 spécifier simplement le mode complet. et il est utile de pouvoir penser aux autorisations à l'aide de 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, vous
chmod a+x
le ferez, 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 des autorisations globalement sans avoir à utiliser des fichiers de cas spéciaux v. des répertoires. Celachmod -R ug=rX,u+w,o=
revient donc à appliquerchmod -R 750
à tous les répertoires et fichiers exécutables etchmod -R 640
à tous les autres fichiers.la source
sgid
bit était toujours activé, quelle que soit sa valeur réelle. Sous FreeBSD, lesuid
bit peut être configuré pour agir de manière analoguesgid
(les fichiers et les sous-répertoires créés à l'intérieur du même propriétaire auront le même propriétaire que le répertoire), à condition que le système de fichiers sous-jacent le supporte et qu'il soit monté avec l'suiddir
option.+X
n’ajoute l’autorisation d’exécution que si l’une des autorisations d’exécution est déjà définie ou si le fichier est un répertoire" merci @ stephen-kitt de ne pas avoir "est déjà défini" la documentation m’a vraiment jeté pour une boucle!Donc, les permissions sous Linux sont très importantes. Je vais essayer de faire une courte 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. L'exécution de ls -l affiche les autorisations. Voici un exemple d'un tel affichage:
Je joins une image de morceaux d'un mode de 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:
Pour chmod 777 vs 0777
La
chmod
commande s'attend généralement à ce que l'entrée soit un nombre octal, le zéro à gauche fait référence à la valeur du triplet de bits sticky / sgid / suid. En C cependant, cela ferait une différence, car777
serait traduit en01411
(octal), définissant ainsi le bit collant (voir lachmod(2)
page de manuel), les autorisations de lecture sur le propriétaire et le bit exécutable pour le groupe et les autres (combinaison plutôt étrange) .EDIT 1
J'ai trouvé une autre image sur les autorisations Linux et je vais attacher pour comprendre plus facilement:
la source
chmod(777)
cela équivaut en fait à exécuterchmod 1411
(c'est-à-dire lachmod
commande avec argument1411
).0x1FF
, binaire:0b111111111
ou octal:0o777
. PYTHON POWERd
signifie que c'est un répertoire, si vous avez un fichier c'est-
et si c'est un lien vous allez trouver un fichierl
. Il ne peut pas être activé / désactivé.Si vous utilisez les autorisations 0777, vous accordez un contrôle total (lecture + écriture + exécution) à chaque utilisateur / groupe du système. C'est un moyen paresseux de résoudre des 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 a 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
la source
Après avoir obtenu une réponse à ma question ici et effectué quelques recherches sur les résultats, j'ai trouvé un article qui explique très bien tout. Je voudrais partager certaines parties de cet article ici pour des références futures.
Voir les autorisations
Pour pouvoir
chmod
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 terminalcd
dans ce répertoire, puis utiliser:Le
-l
commutateur est important car son utilisationls
sans afficher uniquement les noms de fichiers ou de dossiers du répertoire.Voici un exemple d'utilisation
ls -l
de mon répertoire personnel:Que signifient les colonnes
La première colonne est le type de chaque fichier:
-
dénote un fichier normal.d
désigne un répertoire, c’est-à-dire un dossier contenant d’autres fichiers ou dossiers.p
désigne un tube nommé (ou FIFO).l
dénote un lien symbolique.Les lettres qui suivent sont les permissions, 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 qui possède le 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
-
oud
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 série de trois lettres est composée de
r
w
etx
.r
toujours en première position,w
toujours en deuxième position etx
toujours en troisième position.r
est l'autorisation de lecture,w
l'autorisation d'écriture etx
l'autorisation d'exécution. S'il y a un trait d'union (-
) à la place de l'une de ces lettres, cela signifie que la permission 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) signifie la capacité de lire la table des matières du répertoire donné,w
(write) 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 permission n'a pas de sens.x
(execute) 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: - à base de texte - à base de
chmod
nombrechmod
Méthode de texte
Pour changer le mode de permissions ou d'accès d'un fichier, nous utilisons la commande chmod dans un terminal. Vous trouverez ci-dessous la structure générale de la commande:
Where Who is any, parmi une série de lettres, chacune désignant à qui vous allez donner la permission. Ils sont comme suit:
Les autorisations sont les mêmes que déjà discuté (
r
,w
etx
).La commande chmod nous permet d'ajouter et de soustraire des autorisations d'un ensemble existant en utilisant + ou - au lieu de =. Ceci diffère des commandes ci-dessus, qui consistent essentiellement à réécrire les autorisations (c.-à-d. Pour modifier une autorisation de
r--
enrw-
, vous devez toujours inclurer
aussi bienw
qu'après=
lachmod
commande. Si vous ratez la finr
, cela vousr
priverait de ils sont en train d'être réécrits avec le =. Utiliser + et - pour éviter cela en ajoutant ou en supprimant l'ensemble actuel des permissions).Méthode du nombre
chmod
peut également définir des autorisations à l'aide de nombres.L'utilisation de nombres 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:
Où xxx est un nombre à 3 chiffres où chaque chiffre peut aller de 1 à 7. Le premier chiffre concerne les autorisations pour le propriétaire, le deuxième chiffre concerne les autorisations pour le groupe et le troisième chiffre concerne les autorisations pour tous les autres.
Dans cette notation numérique, les valeurs r, w et x ont leur propre valeur numérique:
Pour obtenir un nombre à trois chiffres, vous devez déterminer les autorisations que vous souhaitez attribuer à un propriétaire, à un groupe et à un utilisateur, puis faire le total de leurs valeurs. Par exemple, supposons que je souhaite accorder au propriétaire d’un répertoire des autorisations d’exécution, de lecture et d’écriture, et que je souhaite regrouper, ainsi que tous les autres utilisateurs, les autorisations de lecture et d’exécution. Je viendrais avec les valeurs numériques comme suit:
Ceci équivaut à utiliser les éléments suivants:
La plupart des dossiers / répertoires sont réglés sur 755 pour autoriser la lecture et l'écriture et l'exécution pour le propriétaire, mais refusent l'écriture à tout le monde, et les fichiers 644 pour autoriser la lecture et l'écriture pour le propriétaire mais uniquement pour la lecture par remarque sur le manque d'autorisations x avec des fichiers non exécutables - c'est la même affaire ici.
la source
Pour les d questions
Cela vous indique le type de fichier Unix. Par défaut, Unix n'a que 3 types de fichiers. Elles sont:
-
- Dossier régulierd
- Répertoireb
- Fichier blocc
- Fichier de périphérique de caractèrep
- Fichier de pipe nommé ou simplement fichier de pipel
- Fichier de lien symboliques
- Fichier de socketLisez plus ici: Les types de fichiers sous Linux / Unix expliqués en détail
0777
contre777
Peu 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 sticky bit défini, tout utilisateur disposant des 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 les autorisations de fichier 777 et le bit collant sur 0 - aucun mode spécial.777
définit les autorisations de fichier 777, sans changer le bit collant.En savoir plus: sticky bit et chmod
la source
chmod 777
ne pas effacer les bits setuid, setgid et sticky? L'essayer