每次我运行作曲家(例如,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/composer
over的所有者切换到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)
由于您已经至少执行了一次root
composer 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
我已经处理这个问题好几个星期了。
我认为解决方案是使用 -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 中似乎没有定义