Dans quelles circonstances chmod
échouera-t-il?
J'ai regardé la page de manuel mais elle spécifie uniquement l'utilisation et n'entre pas dans les détails sur les circonstances dans lesquelles cela ne fonctionnera pas.
Je suppose que chmod
cela fonctionnera si:
- tu es root
- vous possédez le fichier cible (et définissez un bit de mode banal, c'est-à-dire pas un bit collant, d'autres)
Les utilisateurs peuvent-ils utiliser chmod
pour modifier les autorisations sur un fichier auquel ils ont accès en groupe? Est-ce lié à l'accès en lecture / écriture?
Réponses:
Seul le propriétaire du fichier ou l'utilisateur root peut modifier les autorisations d'un fichier. Les autorisations actuelles sur le fichier ou sur son répertoire parent ne sont pas pertinentes¹. Ceci est spécifié dans POSIX :
Sur la plupart des unités, les «privilèges appropriés» signifient l'exécution en tant que root. Si ces conditions ne sont pas remplies,
chmod
échoue généralement avecEPERM
, bien que d'autres comportements tels que l'interruption du programme en raison d'une violation de la sécurité soient autorisés.De plus, certaines variantes Unix ont des moyens spécifiques au système d'autoriser ou d'interdire
chmod
. Par exemple, Linux a une capacité (CAP_FOWNER
) qui permet aux processus de modifier les autorisations d'un fichier et d'autres métadonnées quel que soit son propriétaire.D'autres raisons
chmod
peuvent échouer même si le fichier existe, est accessible et possède le propriétaire approprié. Les plus courants incluent un système de fichiers en lecture seule ou un système de fichiers qui ne prend pas en charge les autorisations telles que FAT. Les moins courants incluent des restrictions spécifiques au système telles que l' attribut immuable du système de fichiers ext2 et des successeurs de Linux.¹ Sauf dans la mesure où le processus en cours d'exécution
chmod
doit pouvoir accéder au fichier, il doit donc disposer de l'autorisation d'exécution sur le répertoire contenant le fichier et tout autre répertoire qu'il parcourt pour le faire.la source
Les détails souhaités se trouvent dans la page de manuel de l'appel système chmod (). Au lieu d'
man chmod
utilisationman 2 chmod
.man chattr
etman 2 setxattr
vous intéressera également; les attributs de fichier définis par chattr / setxattr () augmentent le comportement des autorisations Unix traditionnelles définies par chmod.la source
Selon la norme UNIX, "l'ID utilisateur effectif du processus doit correspondre au propriétaire du fichier ou le processus doit disposer des privilèges appropriés pour ce faire."
Le morceau sur les privilèges appropriés nécessite quelques explications. Sur les systèmes traditionnels, chmod est autorisé sur tous les fichiers lorsque l'UID effectif (sous Linux, l'UID du système de fichiers, mais voir ci-dessous) du processus est 0 [c'est-à-dire root].
Linux a un système appelé capacités , et le
CAP_FOWNER
bit contrôle la capacité à utiliserchmod
sur tous les fichiers. Par défaut, toutes les capacités sont accordées lorsqu'unexecve()
appel crée un processus racine (soit en exécutant un binaire setuid, soit lorsque l'UID réel est 0) ou lorsque l'UID effectif est défini sur 0 (et supprimé lorsqu'il est défini sur une valeur non nulle) et un ensemble de fonctionnalités, notammentCAP_FOWNER
activées lorsque l’UID du système de fichiers est défini sur 0 (et désactivées lorsqu’il est défini sur une valeur différente de zéro). Lisez la page de manuel pour plus de détails.Vous avez mentionné le bit collant, mais omis le fait que les utilisateurs ne peuvent pas non plus définir le bit setgid sur un fichier lorsqu'ils ne font pas partie du groupe affecté au fichier. Le bit setuid ou setgid peut également être ignoré dans des circonstances supplémentaires définies par l'implémentation.
la source
Pourquoi n'essayez-vous pas de voir?
la source
chmod
, puis vérifier les autorisations sur celui-ci. Si vous vous sentez paranoïaque, faites-lefsync
avant de vérifier.