J’ai un dossier avec les permissions suivantes:
drwxrws--x+ 13 myuser www-data 4096 Mar 20 09:57 project-folder
Dans ce dossier, j’ai une archive archive.zip
avec les permissions suivantes:
-rw-rw----+ 1 myuser www-data 10260 Mar 20 09:56 archive.zip
Lorsque je décompresse l’archive en appelant unzip archive.zip
j’ai reçu la liste suivante:
drwxrwx--x+ 3 myuser www-data 4096 May 5 2017 folder-from-archive
Comme nous pouvons le voir, le groupe propriétaire est identique à www-data
pour le dossier de project-folder
dossier parent, mais le folder-from-archive
n’a pas de bit setgid (la partie des permissions) et le contenu de ce dossier ne appartenant au groupe www-data
:
-rw-rw----+ 1 myuser myuser 1083 May 5 2017 LICENSE -rw-rw----+ 1 myuser myuser 2197 May 5 2017 README.md -rw-rw----+ 1 myuser myuser 720 May 5 2017 autoload.php -rw-rw----+ 1 myuser myuser 786 May 5 2017 composer.json drwxrwx--x+ 3 myuser myuser 4096 May 5 2017 source
Mais lorsque j’ai essayé de décompresser cette archive en tant qu’utilisateur root, les permissions et le propriétaire du groupe (ainsi que les fichiers du dossier) étaient corrects:
drwxr-s--x+ 3 root www-data 4096 May 5 2017 folder-from-archive
Fichiers dans le dossier folder-from-archive
:
-rw-r-----+ 1 root www-data 1083 May 5 2017 LICENSE -rw-r-----+ 1 root www-data 2197 May 5 2017 README.md -rw-r-----+ 1 root www-data 720 May 5 2017 autoload.php -rw-r-----+ 1 root www-data 786 May 5 2017 composer.json drwxr-s--x+ 3 root www-data 4096 May 5 2017 source
Comme nous pouvons le voir après décompression par l’utilisateur root, le dossier hérite du sticky bit et définit les www-data
groupe correct pour lui-même et tous les fichiers contenant.
Comment obtenir le même comportement pour l’utilisateur myuser
?
L’utilisateur root
-il membre du groupe www-data
? Si tel est le cas, cela expliquerait pourquoi l’extraction par root
avait le propriétaire de groupe correct pour l’extraction.
De même, si myuser
ne figure pas dans le groupe de www-data
, les fichiers seront extraits en tant que myuser:myuser
Voir man chmod
:
SETUID ET SETGID BITS
chmod efface le bit d’ID de groupe défini d’un fichier régulier si l’ID de groupe du fichier ne correspond pas à l’ID de groupe effectif de l’utilisateur ou à l’un des ID de groupe supplémentaires de l’utilisateur , sauf si l’utilisateur dispose des privilèges appropriés. Des ressortingctions supplémentaires peuvent faire en sorte que les bits MODE-user-ID et set-group-ID de MODE ou RFILE soient ignorés. Ce comportement dépend de la stratégie et des fonctionnalités de l’appel système chmod sous-jacent. En cas de doute, vérifiez le comportement du système sous-jacent.
J’ai eu un rapport d’utilisateur que les fichiers sous un chemin de setgid avaient $ user: $ user pour certains fichiers par opposition au groupe $ user: $ attendu. Je soupçonnais que cela pouvait être dû à une extraction d’archive, car le bit setgid était correct jusqu’au répertoire extrait, où le groupe était correct, mais le setgid manquait.
Mon googler a seulement retourné ce message unique. Étant donné que j’ai décidé de le tester, je suis incapable de reproduire le problème en utilisant unzip
j’ai également effectué un test similaire en utilisant un fichier tar.gz et en extrayant en utilisant tar
:
Créer une archive de test
$ cd ~ && mkdir testdata $ ls -ld testdata drwxrwxr-x 12 flakrat flakrat 512 May 16 11:43 testdata $ cd testdata $ for n in {1..10}; do mkdir $n; for m in {1..10}; do touch $n/$m; done; done $ cd .. $ zip -r -q testdata.zip testdata
Créer /project/mygroup
groupe, espace de travail de groupe avec setgid
$ cd /project $ mkdir mygroup && chgrp mygroup mygroup && chmod g+rwxs mygroup $ ls -ld mygroup drwxrwsr-x 2 flakrat mygroup 512 May 16 11:46 mygroup
Extraire l’archive
$ cd /project/mygroup $ unzip -q ~/testdata.zip
Afficher les résultats, le groupe est intact tout au long de l’arborescence d’extraction complète
$ ls -ld testdata drwxrwsr-x 12 flakrat mygroup 512 May 16 11:43 testdata $ ls -l testdata total 0 drwxrwsr-x 2 flakrat mygroup 512 May 16 11:43 1 drwxrwsr-x 2 flakrat mygroup 512 May 16 11:43 10 ... $ ls -l testdata/1/ total 0 -rw-rw-r-- 1 flakrat mygroup 0 May 16 11:43 1 -rw-rw-r-- 1 flakrat mygroup 0 May 16 11:43 10 ...