每次我运行 composer(例如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
?
编辑:
Composer 的权限目前为。我尝试将-rwxr-xr-x
的所有者切换为 并将权限设置为 775,但如果不运行 ,我仍然无法运行 Composer 。/usr/local/bin/composer
www-data:www-data
sudo
答案1
如果允许“每个人”读取和执行 composer,则不需要使用 sudo:
sudo chmod 755 /var/local/bin/composer
由于您已至少执行过一次 composer root
,因此 composers(每个用户)缓存目录现在归 root 所有,因此普通用户无法写入。
sudo chown -R lamp:lamp /home/lamp/.composer
将修复文件所有者。
答案2
我发现这个命令对于以 www-data 形式运行 composer 很有用:
sudo su -l www-data -s /bin/bash -c "cd $PWD; composer install"
参考:https://commandroll.com/command/run-command-as-www-data-using-su
答案3
我已经处理这个问题好几个星期了。
我认为解决方案是使用 -H 运行 Composer 自我更新
sudo -H composer self-update
在执行此操作之前,请务必删除根目录中的 .composer 目录以及您希望执行 Composer 的用户的主目录。
sudo rm -rf /root/.composer
sudo rm -rf /home/ubuntu/.composer
运行不带 -H 标志的 sudo composer self-update 将创建由 root 拥有的 ~/.composer,并将阻止其他 composer 命令出现权限错误。
composer config
composer install
在我看来,调用 sudo composer self-update 不应该在当前用户主目录中创建 root 拥有的文件。
请注意,如果您按照 Ubuntu 14.04 上的这些说明操作,Composer 将把缓存放置在:
~/.cache/composer
而不是:
~/.composer/cache
这是因为 XDG_RUNTIME_DIR 环境变量在 Ubuntu 14.04 中定义,但似乎没有在 Ubuntu 12.04 中定义