我配置了我的php可执行文件,即/usr/local/bin/php,并带有用于用户deploy
setuid
。因此,如果任何用户调用该 php 二进制文件,它应该仅作为deploy
执行。正如你在下面看到的,php二进制文件是由非root用户deploy
但是当我执行php composer.phar作为root
为什么我会收到警告Do not run Composer as root/super user!
。我不应该收到警告,因为 php 二进制文件归deploy
所有,并且设置了 setuid 位。
> ls -al /usr/local/bin/php
-rwxr-xr-x 1 root root /usr/local/bin/php
> chown deploy:deploy /usr/local/bin/php
> chmod u+s /usr/local/bin/php
> ls -al /usr/local/bin/php
-rwsr-xr-x 1 deploy deploy /usr/local/bin/php
> ls -al composer.phar
-rwxr-xr-x 1 deploy 1000 composer.phar
> whoami
root
> php composer.phar -V
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Composer version 1.7.2 2018-08-16 16:57:12
但是,即使按root
执行php composer.phar install
,创建的供应商目录也归deploy
所有。
事实上,作曲家进程忽略了setuid位,但是当它创建任何文件/目录时,它服从setuid。
我在下面插入 composer.phar 并获取正确的用户deploy
但带有警告Don't call as root
.是作曲家的问题吗?
$processUser = posix_getpwuid(posix_geteuid());
print $processUser['name'];
这似乎是作曲家 https://github.com/composer/composer/issues/7758#issuecomment-434308672 中的一个错误