不使用 sudo 运行 Composer(尝试更改所有者和权限)

rid*_*nds 14 root sudo 14.04

每次我运行作曲家(例如,sudo composer install, sudo composer self-update等)时,我都需要使用 sudo 运行它,因为文件的所有者是 root。

但是,每次我使用带有 sudo 的作曲家时,root 都拥有供应商文件夹,然后我必须将该文件夹/权限的所有者从 root 更改为 www-data。

解决此问题的最佳方法是什么,这样我就不必每次都运行 sudo?

将所有者/usr/local/bin/composer从 root更改为 www-data?

这是避免每次使用 sudo 时都必须更改所有权和分配权限的理想方法composer install吗?

编辑: 作曲家的权限目前是-rwxr-xr-x. 而且我已经尝试将/usr/local/bin/composerover的所有者切换到www-data:www-data权限设置为 775,但如果不运行sudo.

tka*_*usl 11

如果允许“everyone”读取和执行composer,则不需要使用sudo:

sudo chmod 755 /var/local/bin/composer
Run Code Online (Sandbox Code Playgroud)

由于您已经至少执行了一次rootcomposer as , composers (per-user-)cache 目录现在归 root 所有,因此您的普通用户不能写入。

sudo chown -R lamp:lamp /home/lamp/.composer
Run Code Online (Sandbox Code Playgroud)

将修复文件所有者。


小智 6

我发现这个命令对于将 Composer 作为 www-data 运行很有用:

sudo su -l www-data -s /bin/bash -c "cd $PWD; composer install"
Run Code Online (Sandbox Code Playgroud)

参考: https: //commandroll.com/command/run-command-as-www-data-using-su


Ite*_*ate 5

我已经处理这个问题好几个星期了。

我认为解决方案是使用 -H 运行 composer self-update

sudo -H composer self-update
Run Code Online (Sandbox Code Playgroud)

在执行此操作之前,请确保删除根目录中的 .composer 目录以及您希望执行 composer 的用户的主目录。

sudo rm -rf /root/.composer
sudo rm -rf /home/ubuntu/.composer
Run Code Online (Sandbox Code Playgroud)

在没有 -H 标志的情况下运行 sudo composer self-update 将创建由 root 拥有的 ~/.composer 并防止其他 composer 命令出现权限错误。

composer config
composer install 
Run Code Online (Sandbox Code Playgroud)

在我看来,调用 sudo composer self-update 不应该在当前用户的主目录中创建由 root 拥有的文件。

请注意,如果您按照 Ubuntu 14.04 上的这些说明进行操作,composer 会将缓存放置在:

 ~/.cache/composer
Run Code Online (Sandbox Code Playgroud)

而不是:

~/.composer/cache
Run Code Online (Sandbox Code Playgroud)

这是因为在 Ubuntu 14.04 中定义了 XDG_RUNTIME_DIR 环境变量,但在 Ubuntu 12.04 中似乎没有定义

相关讨论here