Comprendre les autorisations UNIX et les types de fichiers

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 de 777 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

  • Veuillez essayer la prochaine fois de ne poser quune seule question, plusieurs questions sont généralement mauvaises pour le référencement et presque jamais adressé à tous en même temps.
  • @Kiwy Je ‘ désolé, je pensais que je ‘ faire il aime ça car il concerne le même sujet. Si vous le souhaitez, vous pouvez suggérer un meilleur titre pour ma question afin de laméliorer ‘ référence.
  • Dailleurs, la valeur de  » d  » est 040000 – il peut être trouvé dans les fichiers den-tête sous le nom S_IFDIR. Vous ne lutilisez pas ‘ lors de la définition du mode fichier, mais la fonction stat() renvoie en fait la valeur 040750 pour drwxr-x---.
  • @jamesqf En fait, maintenant que je comprends comment les codes octaux sont mappés, il est ‘ plus simple pour moi de penser de cette façon .
  • @Peter: il ny a pas de questions stupides – juste des stupides qui ‘ napprennent pas parce quils ‘ re peur de demander.

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éé 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: tube nommé, peut être créé avec mkfifo
  • s: socket, peut être créé avec nc -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éralement root)
  • 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 bit suid 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 loption suiddir.
  •  » +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:

entrez la description de limage ici

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: Droits daccès aux fichiers UNIX

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écuter chmod 1411 (cest-à-dire le chmod avec largument 1411).
  • … 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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *