以非 root 用户身份解压文件时是否可以保留 setgid 位?

以非 root 用户身份解压文件时是否可以保留 setgid 位?

我有一个具有以下权限的文件夹:

drwxrws--x+ 13 myuser  www-data      4096 Mar 20 09:57 project-folder

archive.zip在此文件夹中,我有一个具有以下权限的档案:

-rw-rw----+    1 myuser www-data  10260 Mar 20 09:56 archive.zip

当我通过调用解压档案时,unzip archive.zip我得到了以下文件列表:

drwxrwx--x+    3 myuser www-data   4096 May  5  2017 folder-from-archive

我们可以看到,所有者组www-data与父文件夹相同project-folder,但folder-from-archive没有设置组ID位(s权限字符串中的)并且此文件夹的内容不属于组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

但是,当我尝试以 root 用户身份解压该存档时,权限和组所有者(以及文件夹中的文件)是正确的:

drwxr-s--x+    3 root www-data   4096 May  5  2017 folder-from-archive

文件夹中的文件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

我们可以看到,通过 root 用户解压后,文件夹继承了 setgid 位,并www-data为其自身和所有包含的文件设置了正确的组。

如何让用户获得相同的行为myuser

答案1

该行为是默认行为,但后来开始被视为安全问题(CVE-2005-0602)。

unzip --help显示有帮助的参数:-K keep setuid/setgid/tacky permissions。因此命令应该是unzip -K archive.zip

相关内容