Comme je l'ai découvert, lorsque vous utilisez umask, les autorisations les plus élevées que vous pouvez accorder aux fichiers sont 666. Ce qui est fait par umask 0000
. C'est à cause des autorisations de création de fichiers par défaut, qui semblent être 666 sur tous les systèmes que je connais.
Je sais que pour les fichiers, nous avons besoin de droits exécutables pour afficher leur contenu.
Mais pourquoi limitons-nous les autorisations de création de fichiers par défaut sur 666?
permissions
filesystems
files
Peter
la source
la source
umask
j'ai rencontré était toujours 0022, créant l'autorisation par défaut 644.umask 0000
- ce qui limite toujours les autorisations de fichiers de 666. (Mais apparemment, les dossiers utilisent 777)Réponses:
Pour autant que je sache, cela est codé en dur dans les utilitaires standard. Je
strace
souhaitais à la foistouch
créer un nouveau fichier etmkdir
créer un nouveau répertoire.La
touch
trace a produit ceci:tandis que la
mkdir
trace a produit ceci:À moins de coder le processus de création de fichier / répertoire en C, je ne vois pas de moyen de modifier les autorisations par défaut. Il me semble cependant que ne pas rendre les fichiers exécutables par défaut est logique: vous ne voulez pas qu'un texte aléatoire soit mal interprété par erreur comme des commandes shell.
Mise à jour
Pour vous donner un exemple de la façon dont les bits d'autorisation sont codés en dur dans les utilitaires standard. Voici quelques lignes pertinentes de deux fichiers du
coreutils
package qui contiennent le code source pour les deuxtouch(1)
etmkdir(1)
, entre autres:mkdir.c
:En d'autres termes, si le mode n'est pas spécifié, réglez-le sur
S_IRWXUGO
(lire: 0777) modifié par leumask_value
.touch.c
est encore plus clair:Autrement dit, donnez des autorisations de lecture et d'écriture à tout le monde (lire: 0666), qui seront
umask
bien sûr modifiées par le processus de création de fichiers.Vous pouvez peut-être contourner ce problème uniquement par programme: c'est-à-dire lors de la création de fichiers à partir d'un programme C, où vous effectuez les appels système directement ou à partir d'un langage qui vous permet de faire un appel système de bas niveau (voir par exemple Perl
sysopen
sousperldoc -f sysopen
).la source
umask file
etumask dir
. Définissez deux valeurs par défaut différentes et bien. Mais maintenant, je n'ai aucun moyen de créer des fichiers avec des perms exec.mkdir(1)
vous propose un-m
commutateur pour spécifier le mode du répertoire au moment de la création. Avec les fichiers, cependant, puisque la création de fichiers utilise l'appelopen(2)
système, l'outil que vous utilisez pour créer le fichier est celui qui est chargé de transmettre les bits de modeopen
et vous n'avez pas votre mot à dire.install(1)
par défaut copie votre fichier vers un nouvel emplacement et définit les bits d'exécution, mais cela ne se produit toujours pas au moment de la création.touch
par exemple, est responsable de définir les bonnes valeurs. Savez-vous où il stocke les valeurs? Peut-être qu'ils sont définis à l'échelle du système - afin que nous puissions les modifier? Parce que je veux me libérer ;)Tout d'abord, il n'y a pas de valeur par défaut globale, les autorisations dépendent de l'application qui crée le fichier. Par exemple, ce petit programme C créera un fichier '/ tmp / foo' avec les permissions 0777 si umask vaut 0000 (en tout cas les permissions seront 0777 & ~ umask):
Cela étant dit, de nombreuses applications créent des fichiers avec des autorisations de 0666. Cela a deux raisons:
la source