umask() sets the calling processâs file mode creation mask (umask) to mask & 0777.
4 Réponses :
citant Cet article : P>
Le but de l'umask est d'autoriser les utilisateurs d'influencer les autorisations donné aux fichiers nouvellement créés et répertoires. Les démons ne doivent pas permettre eux-mêmes pour être affectés par cette définir, parce que ce qui était approprié pour l'utilisateur ne sera pas nécessairement Convient au démon. P>
Dans certains cas, il peut être plus pratique pour que l'umask soit réglé sur une valeur non nulle. Ceci est également acceptable: le point important est que le démon a pris le contrôle de la valeur, par opposition à simplement accepter ce qu'il a été donné. p> blockQuote>
@Blagovest Buyukliev, je ne vois toujours pas le but de umask code>, n'est-ce pas déjà disponible dans le paramètre de Ouvrir code>?
Le deuxième argument de Ouvrir code> Spécifie le mode d'ouverture du fichier, c'est-à-dire quelles opérations seront disponibles sur le descripteur renvoyé. umask code>, d'autre part, spécifie les autorisations de système de fichiers qui seront définies pour chaque fichier nouvellement créé.
@Blagovest Buyukliev, n'est-ce pas aussi disponible là-bas? int cree (Const Char * pathname, mode mode_t); code>
Créer CODE> est l'ancien moyen obsolète de créer un nouveau fichier vide. C'est la même chose que Ouvrir code> avec le drapeau o_creat code>.
@Blagovest Buyukliev, je veux dire, soit create code> ou Ouvrir code> a son paramètre pour code> Mode code> et drapeau code>, , umask code> me semble toujours inutile pour moi.
Oui, Ouvrir code> peut être utilisé avec un paramètre code> code>, mais umask code> définit le par défaut pour que vous n'ayez pas à le transmettre à chaque fois .
@Blagovest Buyukliev, selon la réponse de @aaron Digulla, Umask ne fournit pas de valeur par défaut, mais le mode final est une combinaison de mode et ~ umask code>.
L'omasque est appliqué à tous les modes utilisés dans les opérations du système de fichiers. Du manuel Les autorisations du fichier créé sont Donc, avec un seul appel à Umask, vous pouvez influencer le mode de tous Créer des fichiers. P>
Ceci est généralement utilisé lorsqu'un programme souhaite que l'utilisateur autorise à alterner les subventions par défaut pour les fichiers / répertoires qu'il crée. Un utilisateur paranoïaque (ou une racine) peut définir l'umask sur ouvert (2) code>: p>
(mode & ~ umask) code> p>
blockQuote>
0077 code> ce qui signifie que même si vous spécifiez 0777 code> dans ouvert (2) code>, seulement le L'utilisateur actuel aura accès. P>
Et si Umask est 777 code>, personne ne peut le modifier alors?
semble ouvert code> peut également être appelé sans le paramètre code> paramètre code>, int ouvert (const char * pathname, int Drapeaux); code>, quelle sera la permission de fichiers créés dans ce cas?
Oui. Cela n'a pas beaucoup de sens, mais rien ne vous empêche de créer des fichiers que vous ne pouvez pas vous accéder. En fait, j'utilise cela pour arrêter les programmes pour créer / modifier des fichiers et des dossiers indésirables avec chmod 0 .configdir code>
est ouvert sans mode: cela dépend de votre saveur de Unix. Sur My Linux, vous devez spécifier le mode lorsque vous utilisez O_Creat code>. Certaines Unixes construisent le mode à partir du mode du répertoire contenant le nouveau fichier. Pour plus de détails, lisez les documents.
Donc, le umask (0); code> ne fait que réinitialiser l'umask à sa valeur par défaut?
@ Fábiorobertoteodoro Ouais, vous pouvez le regarder de cette façon. Dans mon esprit, il désactive l'effet de umask () code>.
Je sais que c'est et c'est une question ancienne, mais voici mes deux centimes:
autorisations d'objet de mémoire partagée forte> p> J'essayais de faire un objet de mémoire partagé, avec : p> La mémoire partagée résultante n'a pas eu l'autorisation de l'argument du mode, donc j'ai lu la page SHM_OPEN Man qui m'a conduit à la fonction ouverte page et là, il dit: P> Mode spécifie les autorisations à utiliser au cas où un nouveau fichier est créé. Cet argument doit être fourni lorsque O_CREAT est spécifié dans les drapeaux; Si O_Creat n'est pas spécifié, le mode est ignoré. Les autorisations efficaces sont modifiées par l'umask du processus de la manière habituelle: les autorisations du fichier créé sont (mode et ~ umask). Notez que ce mode s'applique uniquement aux accès futurs du fichier nouvellement créé p>
blockquote> J'ai donc essayé de modifier l'umask avec: p> mais il n'a pas fonctionné non plus, donc après plus de Google, j'ai trouvé ce qui recommande : P> Lorsque votre programme doit créer un fichier et contourner l'umask pour ses autorisations d'accès, le moyen le plus simple de le faire est d'utiliser Fchmod après l'ouverture du fichier, plutôt que de changer l'umask. En fait, changer l'umask est généralement effectué uniquement par des coquilles. Ils utilisent la fonction Umask. P>
blockQuote> et avec fchmod ma fonction a fonctionné comme je voulais :) elle est: p>
Vous ne voudrez peut-être pas appeler FCHMOD uniquement sur la création de la mémoire partagée (essayez d'ouvrir avec RDWR, puis de vérifier errno pour Enoent, puis do O_RDWR | O_CREAT et FCHMOD), car vous ne pouvez pas FCHMOD de la mémoire partagée d'un autre utilisateur, même avec 777 autorisations. Sinon, si vous essayez d'ouvrir un objet de mémoire partagé créé par un autre utilisateur, vous obtiendrez une erreur d'autorisations.
la plupart des développeurs MAC (et par extension de la plupart des testeurs de logiciels), à partir du moment où ils étaient bébés, mettez ceci dans leur fichier .CSHRC Cependant, la plupart des utilisateurs finaux ne savent pas sur Umask , Donc, s'ils créent un nouvel utilisateur sur la machine et exécutez votre application, vous êtes susceptible de créer un tas de fichiers journaux et de ne pas les autorisations de lecture / écriture de groupe.
Ensuite, ils changent à nouveau les utilisateurs et soudainement votre application ne fonctionne pas.
Pour cette raison, nous en ajoutant ceci à toutes nos applications.
Notre règle de base en matière de sécurité est que "nous voulons que les utilisateurs puissent utiliser notre logiciel". P> #import <sys/types.h>
#import <sys/stat.h>
int main(int argc, char *argv[])
{
// set permissions for newly created files to ug+rwX,o+rX
umask(0002);
Dupliqué possible de Pourquoi utiliseriez-vous Umask?