我在我的开发机器上托管一个 Magento 2(在线商店软件)项目。
用户和组设置为:
user -> company
group -> www-data
在 Magento 2 中,一些文件会在运行时自动生成,例如当我重新加载站点时。但是自动生成的文件的权限是这样的:
company@server:/srv/www/vhosts/company_m2/generated/code$ ls -lah
total 64K
drwxrwxr-x 16 company www-data 4,0K Mär 3 14:28 .
drwxrwxr-x 4 company www-data 4,0K Mär 3 13:50 ..
drwxrwxr-x 3 www-data www-data 4,0K Mär 3 14:27 ADM
drwxrwxr-x 8 www-data www-data 4,0K Mär 3 14:28 Amasty
drwxrwxr-x 4 www-data www-data 4,0K Mär 3 14:27 Amazon
drwxrwxr-x 3 black sudo 4,0K Mär 3 14:28 Composer
drwxrwxr-x 3 www-data www-data 4,0K Mär 3 14:27 Dotdigitalgroup
drwxrwxr-x 3 black sudo 4,0K Mär 3 14:28 EthanYehuda
drwxrwxr-x 3 www-data www-data 4,0K Mär 3 14:27 Ho
drwxrwxr-x 107 www-data www-data 4,0K Mär 3 14:28 Magento
drwxrwxr-x 5 black sudo 4,0K Mär 3 14:28 Migration
drwxrwxr-x 3 black sudo 4,0K Mär 3 14:28 PayPal
drwxrwxr-x 3 www-data www-data 4,0K Mär 3 14:27 Psr
drwxrwxr-x 3 black sudo 4,0K Mär 3 14:28 Symfony
drwxrwxr-x 3 www-data www-data 4,0K Mär 3 14:27 Vertex
正如您所看到的,存在三种不同的用户:组组合:
company www-data
www-data www-data
black sudo
我如何更改它以使其始终使用该组合company www-data
?
更新:
我通过覆盖将 apache 用户更改为company
in/etc/apache2/envvars
export APACHE_RUN_USER=company
喜欢看到这里。
我还按照@unxnut的建议,将上层文件夹的权限设置为drwxrwsr-x
with chmod 2775
。
现在,如果生成新文件,它看起来像这样:
drwxrwsr-x 18 company www-data 4,0K Mär 3 18:50 .
drwxrwxr-x 4 company www-data 4,0K Mär 3 18:30 ..
drwxrwsr-x 3 company www-data 4,0K Mär 3 18:50 ADM
drwxrwsr-x 3 company www-data 4,0K Mär 3 18:50 Aheadworks
drwxrwsr-x 13 black www-data 4,0K Mär 3 18:50 Amasty
drwxrwsr-x 4 black www-data 4,0K Mär 3 18:50 Amazon
drwxrwsr-x 3 black www-data 4,0K Mär 3 18:50 Composer
drwxrwsr-x 4 black www-data 4,0K Mär 3 18:50 Dotdigitalgroup
drwxrwsr-x 3 black www-data 4,0K Mär 3 18:50 EthanYehuda
drwxrwsr-x 3 company www-data 4,0K Mär 3 18:50 Ho
drwxrwsr-x 3 company www-data 4,0K Mär 3 18:50 Klarna
drwxrwsr-x 118 black www-data 4,0K Mär 3 18:50 Magento
drwxrwsr-x 5 black www-data 4,0K Mär 3 18:50 Migration
drwxrwsr-x 3 black www-data 4,0K Mär 3 18:50 PayPal
drwxrwsr-x 3 black www-data 4,0K Mär 3 18:50 Psr
drwxrwsr-x 3 black www-data 4,0K Mär 3 18:50 Symfony
drwxrwsr-x 3 company www-data 4,0K Mär 3 18:50 Vertex
不过,用户仍然设置为black
而不是company
许多文件夹。
我觉得这一切都没有必要。一定有更大的根本原因。我有另一台托管在rackspeed 上的服务器,其中根本没有文件夹设置了 sgid 或 suid 位,并且它的工作方式就像一个魅力。
答案1
当任何用户创建新文件或目录时,它们通常由该用户拥有。对于普通用户来说,这是无法更改的。对于root
(或有权访问该CAP_CHOWN
功能的用户)来说,更改文件所有者是可能的......但程序仍然需要显式进行系统调用来更改所有者。通常只有用于批量备份/恢复文件的程序才能执行此操作。
如果普通用户对包含用户仅具有只读访问权限的文件的目录具有写访问权限,则该用户可以通过制作相关文件的副本、删除原始文件并重命名来有效地获得该文件的所有权复制到原来的名字。
如果新文件/目录意外创建为 user 所拥有black
,则可能意味着创建它们的进程正在以该用户身份执行。black
也许某些进程无意中以 user而不是 user 的身份启动company
,或者该用户可能有一个 cron 作业或其他一些自动进程来创建/操作文件。
这是使用标准化服务启动过程可以最大限度地减少错误的情况之一。如果您习惯使用apachectl start
直接启动 Web 服务器进程之类的东西,那么很容易意外地以错误的用户身份运行该进程,从而需要在更正错误后清除不正确的权限。但是,如果您使用诸如 systemd 之类的东西.service
,它明确定义了应该运行服务器进程的用户,或者使用启动脚本来检查服务在启动之前是否以正确的用户身份运行,并且始终使用标准工具来停止并启动服务,这样的错误就可以避免。