2017-04-24 2 views
0

Lorsque je crée un fichier dans Linux, le propriétaire du groupe par défaut devient le GID du processus qui crée le fichier. Si j'ajoute SGID au fichier de répertoire parent, cela héritera du groupe propriétaire du répertoire parent. Aussi, je peux changer les options de montage fs pour se comporter comme sys5 ou comme BSD. Que dois-je faire si je veux choisir cette option indépendamment des permissions du répertoire et des options de montage fs? Existe-t-il une option de fonction c ou un paramètre syscall qui vous permet de choisir le propriétaire du groupe?Choisir le style BSD ou sys5 lors de la création d'un fichier sous Linux

$ find . -ls 
    262 4 drwxrwxr-x 4 devops devops  4096 Apr 24 18:01 .  
    999 4 drwxrwxr-x 2 devops root   4096 Apr 24 18:03 ./dir1 
    6093 4 drwxrwsr-x 2 devops root   4096 Apr 24 18:03 ./dir2 
$ touch dir1/file dir2/file 
$ find . -ls 
    262 4 drwxrwxr-x 4 devops devops  4096 Apr 24 18:01 . 
    999 4 drwxrwxr-x 2 devops root   4096 Apr 24 18:04 ./dir1 
    5576 0 -rw-rw-r-- 1 devops devops   0 Apr 24 18:04 ./dir1/file 
    6093 4 drwxrwsr-x 2 devops root   4096 Apr 24 18:04 ./dir2 
    6094 0 -rw-rw-r-- 1 devops root   0 Apr 24 18:04 ./dir2/file 
$ 

Et je veux avoir quelque chose comme ça:

$ mytouch -s BSD dir1/file1 
$ mytouch -s sys5 dir1/file2 
$ find dir1 -ls 
    999 4 drwxrwxr-x 2 devops root   4096 Apr 24 18:10 dir1 
    6213 0 -rw-rw-r-- 1 devops root   0 Apr 24 18:10 dir1/file1 
    6214 0 -rw-rw-r-- 1 devops devops   0 Apr 24 18:10 dir1/file2 
$ 
+0

Code, s'il vous plaît. Le contexte est important. Si vous vous souciez vraiment des permissions, 'chown()' et 'chmod()' font la même chose que leurs amis en ligne de commande. En fonction de bits collants est vraiment hacky et je déconseiller fortement. – tadman

Répondre

1

Les chances sont, vous ne pouvez pas.

La mise en œuvre des bits collants existe entièrement dans le noyau, et il n'y a pas d'options à open() ou creat() qui contrôlent son fonctionnement.

Votre programme pourrait éventuellement appeler chown() pour réinitialiser manuellement le groupe du fichier après l'avoir créé. Toutefois, cela ne fonctionnerait de manière fiable que si votre processus s'exécute en tant que root ou en tant que membre du groupe propriétaire du répertoire parent.