Je nai jamais vraiment compris comment chmod
fonctionnait jusquà aujourdhui. Jai suivi un tutoriel qui ma expliqué un gros problème.
Par exemple, jai lu que vous avez trois groupes dautorisations différents:
- owner (
u
) - groupe (
g
) - tout le monde (
o
)
Sur la base de ces trois groupes, je sais maintenant que:
- Si le fichier appartient à lutilisateur, les permissions de lutilisateur déterminent laccès .
- Si le groupe du fichier est le même que le groupe de lutilisateur, lautorisation de groupe détermine laccès.
- Si lutilisateur nest pas le propriétaire du fichier et ne lest pas dans le groupe, alors lautre autorisation est utilisée.
Jai également appris que vous avez les autorisations suivantes:
- read (
r
) - write (
w
) - execute ()
Jai créé un répertoire pour tester mes nouvelles connaissances acquises:
mkdir test
Ensuite Jai fait quelques tests:
chmod u+rwx test/ # drwx------ chmod g+rx test/ # drwxr-x--- chmod u-x test/ # drw-r-x---
Après avoir batifolé pendant un certain temps, je pense que jai enfin maîtrisé chmod
et la façon dont vous définissez lautorisation à laide de cette commande.
Mais …
Jai encore quelques questions:
- Que signifie le
d
au début représente-t-il? - Quel est le nom et lutilisation du slot contenant et quelles autres valeurs peut-il contenir?
- Comment puis-je le définir et le désactiver?
- Quelle est la valeur de ce
d
? (Comme vous navez que 7 = 4 + 2 + 1 7 = 4 + 2 + 1 7 = 4 + 2 + 1) - Pourquoi les gens utilisent parfois
0777
au lieu de777
pour définir leurs autorisations?
Mais comme je ne devrais pas poser plusieurs questions, je vais essayer de les poser dans une question.
Dans les systèmes basés sur UNIX comme toutes les distributions Linux, concernant les permissions, que signifie la première partie (d
) et quel est le utiliser pour cette partie des autorisations?
Commentaires
Réponse
Je répondrai à vos questions en trois parties: types de fichiers, autorisations, et des cas dutilisation des différentes formes de chmod
.
Types de fichiers
Le premier caractère de ls -l
output représente le type de fichier; d
signifie quil sagit dun répertoire. Il ne peut pas être défini ou annulé, 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 ls ; ceux que vous rencontrerez probablement sont
-
-
: fichier «normal», créé avec nimporte 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éé avecmknod
-
c
: fichier spécial de caractères, peut également être créé avecmknod
(voir/dev
pour des exemples) -
d
: répertoire, peut être créé avecmkdir
-
l
: lien symbolique, peut être créé avecln -s
-
p
: tube nommé, peut être créé avecmkfifo
-
s
: socket, peut être créé avecnc -U
-
D
: porte , créée par certains processus serveur sur Solaris / openindiana.
Autorisations
chmod 0777
est utilisé pour définir toutes les autorisations dans une exécution chmod
, plutôt que de combiner les modifications avec u+
etc.Chacun des quatre chiffres est une valeur octale représentant un ensemble dautorisations:
-
suid
,sgid
et «collant» (voir ci-dessous) - autorisations utilisateur
- autorisations de groupe
- autorisations «autres»
Loctal la valeur est calculée comme la somme des permissions:
- «read» vaut 4
- «write» vaut 2
- «execute» vaut 1
Pour le premier chiffre:
-
suid
vaut 4; les binaires avec cet ensemble de bits sexécutent en tant quutilisateur propriétaire (généralementroot
) -
sgid
vaut 2; les binaires avec cet ensemble de bits sexé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 cest souvent un risque de sécurité lorsquil est combiné avec des vulnérabilités dans les jeux), et les fichiers créés dans les répertoires avec cet ensemble de bits appartiennent le groupe de propriétaires du répertoire par défaut (cela est pratique pour créer des dossiers partagés) - «sticky» (ou «restriction de suppression») est 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 la page de manuel chmod
pour plus de détails. Notez que dans tout cela, jignore 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 traités différemment selon le type de fichier (standard fichier ou répertoire) et le système sous-jacent. (Ceci est mentionné dans la page de manuel chmod
.) Sur le système que jai 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 sils sont explicitement définis, donc chmod 0777
équivaut à chmod 777
, et les deux commandes effacent les bits spéciaux et accordez à chacun 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 effet chmod 0777
équivaut également à chmod 777
mais cest trompeur car certains des bits spéciaux resteront tels quels. (Une version précédente de cette réponse se trompait.) 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 dun répertoire.
Dans la sortie ls -l
, suid
, sgid
et « sticky » apparaissent à la place de x
entrée: suid
est s
ou S
au lieu de x
, sgid
est s
ou S
au lieu de x
du groupe, et » sticky « est t
ou T
au lieu des x
des autres. 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 défini.
Les différentes formes de chmod
En raison du comportement décrit ci-dessus, utiliser les quatre chiffres complets de chmod
peut être déroutant (au moins il savè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. Ainsi, chmod 2750
garantit que vous obtiendrez au moins sgid
et exactement u=rwx,g=rx,o=
; mais chmod 0750
neffacera pas nécessairement les bits spéciaux.
Utilisation de modes numériques au lieu de commandes texte ([ugo][=+-][rwxXst]
) est probablement plus un cas dhabitude 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 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 quun fichier peut être exécuté par nimporte qui, chmod a+x
le fera, quoi quil en soit les autres autorisations sont. De même, +X
ajoute lautorisation dexécution uniquement si lune des autorisations dexé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 à des fichiers de cas spéciaux v. des 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.
Commentaires
- Bien que les autres réponses soient plutôt bonnes, vous avez vraiment passé du temps à répondre à cette question. Merci.
- Sur * les répertoires BSD se comportent comme si leur bit
sgid
était toujours défini, quelle que soit sa valeur réelle. Sur FreeBSD, le bitsuid
peut être configuré pour agir de manière analogue àsgid
(cest-à-dire que les fichiers et sous-répertoires créés à lintérieur auront le même propriétaire que le répertoire ), à condition que le système de fichiers sous-jacent le prenne en charge et quil soit monté avec loptionsuiddir
. - »
+X
ajoute lautorisation dexécution uniquement si lune des autorisations dexécution est déjà définie ou si le fichier est un répertoire » merci vous @ stephen-kitt manquant le » est déjà défini » la documentation me jetait vraiment pour une boucle!
Réponse
Les permissions sous Linux sont donc très importantes. Je vais essayer de faire une brève explication.
Pour des morceaux dun mode fichier
Chaque fichier Unix a un ensemble dautorisations qui déterminent si vous pouvez lire, écrire ou exécuter le fichier. Lexécution de ls -l affiche les autorisations. Voici un exemple dun tel affichage:
-rw-r--r-- 1 user somegroup 7041 Mar 26 19:34 somefile
Je joins une image de morceaux dun mode fichier:
Le type peut être différent. Par exemple:
- d (répertoire)
- c (périphérique de caractères)
- l (lien symbolique)
- p (nommé pipe)
- s (socket)
- b (périphérique de bloc)
- 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 lattribut R, par exemple:
chmod -R 777 /some/directory/
Pour chmod 777 vs 0777
La commande chmod
attend généralement lentrée pour être 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 bit sticky (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 assez étrange).
EDIT 1
Jai trouvé une autre image sur les permissions Linux et je vais joindre pour comprendre plus facilement:
Commentaires
- Vous vous trompez sur le 777 vs 0777. Les deux sont octaux (la décimale na de toute façon aucun sens dans ce cas), mais sous la forme de quatre caractères, le premier chiffre définit les bits spéciaux (sticky & setuid).
- @orion Parfois, cest vrai, par exemple dans un code de type C
chmod(777)
équivaudrait en fait à exécuterchmod 1411
(cest-à-dire lechmod
avec largument1411
). - … qui dans le cas du syscall (ou de son wrapper) et du binaire portant le même nom peuvent être un peu déroutant.
- Python Master Race a résolu ce problème à lenvers en interdisant tous les » numéros » commençant par 0 , forçant lutilisateur à être explicite sil veut autre chose que la décimale, par exemple hex:
0x1FF
, binaire:0b111111111
ou octal:0o777
. PYTHON POWER - Source de limage?
Réponse
d
signifie quil sagit dun répertoire, si vous avez un fichier, cest -
et sil sagit dun lien, vous trouverez un l
. Il ne peut pas être défini / annulé.
Si vous utilisez 0777 comme autorisations, vous donnez un contrôle total (lecture + écriture + exécution) à chaque utilisateur / groupe du système. Cest une manière paresseuse de résoudre 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 dun 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 à lutilisateur root et group root. Le propriétaire a un accès en lecture et en écriture, le groupe na quun 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, cela ressemblera à ceci:
-rwxrwxrwx 1 root root 42596 jun 7 2012 preloadable_libintl.so
Réponse
Après avoir obtenu la réponse à ma question ici et fait quelques recherches sur le résultat, jai trouvé un article qui explique tout très bien. Jaimerais partager quelques parties de cet article ici pour de futures références.
Autorisations daffichage
Pour utiliser chmod
pour modifier les autorisations dun fichier ou dun répertoire, vous devez dabord savoir ce que le courant le mode daccès est. Vous pouvez afficher le contenu dun répertoire dans le terminal par cd
dans ce répertoire, puis utiliser:
$ ls -l
Le commutateur -l
est important car lutilisation de ls
sans elle affichera uniquement les noms des fichiers ou des dossiers dans le répertoire.
Voici un exemple dutilisation 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
Ce que signifient les colonnes
La première colonne est le type de chaque fichier:
-
-
désigne un fichier normal. -
d
désigne un répertoire, cest-à-dire un dossier contenant dautres fichiers ou dossiers. -
p
désigne un tube nommé (aka FIFO ). -
l
désigne un lien symbolique.
Les lettres après cela sont les autorisations, cette première colonne est ce que nous serons les plus intéressés. Le deuxième est le nombre de liens quil y a dans un fichier, nous pouvons ignorez-le en toute sécurité. La troisième colonne a deux valeurs / noms: La première (dans mon exemple « peter ») est le nom de lutilisateur qui possède le fichier. La deuxième valeur (« utilisateurs » dans lexemple) est le groupe auquel appartient le propriétaire (En savoir plus sur les groupes).
La colonne suivante indique la taille du fichier ou du répertoire en octets et des informations après cela 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.
Ce 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 sappliquent au groupe. Les trois dernières lettres sont les autorisations qui sappliquent à 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 lautorisation de lecture, w
est lautorisation décriture et x
est lexécution autorisation. Sil y a un tiret (-
) à la place de lune de ces lettres, cela signifie que lautorisation nest 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
(lecture) signifie pour la capacité de lire la table des matières du répertoire donné, -
w
(écriture) signifie la capacité décrire la table des matières du répertoire donné (créer de nouveaux fichiers, dossiers; renommer, supprimer des fichiers, dossiers existants) si et seulement si le bit dexécution est défini. Sinon, cette permission na pas de sens. -
x
(exécuter) signifie la possibilité dentrer dans le répertoire donné avec la commande cd et daccéder aux fichiers, dossiers dans ce répertoire.
Changer les permissions à laide de la commande chmod
chmod
est une commande sous Linux et dautres systèmes dexploitation de type Unix. Il vous permet de changer les permissions (ou le mode d’accès) d’un fichier ou d’un répertoire.
Vous pouvez modifier les permissions de deux manières différentes: – Text-based chmod
– Méthode numérique chmod
Text
Pour modifier les permissions ou le mode daccès dun fichier, nous utilisons la commande chmod dans un terminal. Voici la structure générale de la commande:
chmod who=permissions filename
Où Qui fait partie dune plage de lettres, et chacun indique à 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 permissions sont les mêmes que celles déjà décrites (r
, w
, et x
).
La commande chmod nous permet dajouter et de soustraire des autorisations à un ensemble existant en utilisant plutôt + ou – of =. Ceci est différent des commandes ci-dessus, qui réécrivent essentiellement les permissions (cest-à-dire pour changer une permission de r--
à rw-
, vous devez toujours inclure r
ainsi que w
après =
dans le chmod
. Si vous avez manqué r
, cela vous retirerait lautorisation r
car ils sont en cours de réécriture avec le =. Usin g + et – évitez cela en ajoutant ou en supprimant lensemble actuel dautorisations).
Méthode numérique
chmod
peut également définir des autorisations à laide de nombres.
Lutilisation des 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:
chmod xxx file/directory
Où xxx est un nombre à 3 chiffres où chaque chiffre peut être compris entre 1 et 7. Le premier chiffre sapplique aux autorisations du propriétaire, le deuxième chiffre sapplique aux autorisations du groupe et le troisième aux autorisations de tous les autres.
Dans cette notation numérique, les valeurs r, w et x ont leur propre numéro valeur:
r=4 w=2 x=1
Pour trouver un nombre à trois chiffres, vous devez prendre en compte les autorisations que vous voulez quun propriétaire, un groupe et un utilisateur aient, puis le total leurs valeurs à la hausse. Par exemple, disons que je voulais accorder au propriétaire dun répertoire des autorisations de lecture-écriture et dexécution, et que je voulais regrouper et que tout le monde ait juste des autorisations de lecture et dexécution. Je proposerais 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
Cest léquivalent dutiliser ce qui suit:
chmod u=rwx filename chmod go=rx filename
La plupart des dossiers / répertoires sont définis sur 755 pour permettre la lecture, lécriture et lexé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 juste la lecture pour tout le monde, reportez-vous à la dernière note sur le manque dautorisations x avec les fichiers non exécutables – cest la même chose ici.
Commentaires
- Copier simplement le texte dun autre article est – au moins – impoli. Peut-être aussi une violation du droit dauteur. Sil nest pas seulement copié ou si vous avez vraiment utilisé de petites pièces (respectueuses des droits dauteur grâce à une utilisation équitable), veuillez au moins ajouter un lien vers larticle que vous référencez / citez.
Réponse
Pour les d questions
Ceci vous indique le type de fichier Unix. Par défaut, Unix na que 3 types de fichiers. Ce sont:
-
-
– Fichier régulier -
d
– Fichier répertoire - Fichier spécial (avec 5 sous-types):
-
b
– Fichier de bloc -
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
vs 777
Bit fixe spécifié ou non. Lorsque le bit sticky dun répertoire est défini, le système de fichiers traite les fichiers de ces répertoires dune manière spéciale afin que seul le propriétaire du fichier, le propriétaire du répertoire ou lutilisateur 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 les fichiers contenus, quel que soit le propriétaire du fichier.
0777
définit 777 autorisations de fichier , et le sticky bit à 0 – pas de modes spéciaux.
777
définit les autorisations de fichier 777, sans changer le sticky bit.
En savoir plus: sticky bit et chmod
Commentaires
- Mieux: mais il noffre toujours rien que les autres réponses nont ‘ déjà couvert …
- ( 1) Il existe trois types de fichiers de base: les fichiers simples, les répertoires et tout le reste. Quoi? Où allez-vous? Dans le bon ordre des choses, les fichiers simples et les répertoires sont assez similaires. Les tubes nommés et les liens symboliques ressemblent plus à des fichiers et répertoires simples quà des fichiers de périphérique ou à des sockets. (2) Vous pensez que
chmod 777
ne supprime pas les bits setuid, setgid et sticky? Essayez-le. - Unix a 7 types de fichiers, pas 3.
Réponse
Deux choses connexes que jai toujours trouvées déroutantes et que je nai pas abordées ci-dessus sont:
I) what a « 1 » fait:
Dans chmod
: chaque « 1 » fr a une autorisation, par exemple chmod 777 en est capable de tout, mais faites attention car
in umask
: chaque « 1 » dis autorise une autorisation, par exemple umask 777 dis permet tout.
II ) fichier « propriétaires » vs.file « users » :
En dautres termes, il y a utilisateurs qui « possèdent » et utilisateurs qui « utilisent » .
Chaque fichier est détenu , en même temps, par deux entités:
- un seul utilisateur et
- un seul, spécifique group (dun ou plusieurs utilisateurs).
Par conséquent, chaque fichier peut être utilisé par un utilisateur spécifique de trois manières:
1) Directement, en tant quutilisateur propriétaire du file,
2) dans directement, en tant que membre du groupe propriétaire du fichier, et
3 ) éventuellement, comme quelquun dautre.
Sinon , le réponses ci-dessus, faites un excellent travail! Merci à tous.
S_IFDIR
. Vous ne lutilisez pas ‘ lors de la définition du mode fichier, mais la fonctionstat()
renvoie en fait la valeur 040750 pourdrwxr-x---
.