在不使用sudo的情况下运行Composer(尝试更改所有者和权限)


13

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

但是,每次我在sudo上使用composer时,root拥有vendor文件夹,然后我必须将该文件夹/特权的所有者从root更改为www-data。

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

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

这是处理此问题的理想方法,以避免每次我使用sudo时都不必更改所有权和分配权限composer install吗?

编辑: 作曲者的权限当前为-rwxr-xr-x。我已经试过的所有者切换/usr/local/bin/composerwww-data:www-data设置为775权限,我仍然无法不运行运行作曲家sudo

Answers:


9

如果允许“每个人”读取和执行作曲家,则无需使用sudo:

sudo chmod 755 /var/local/bin/composer

由于您至少已经以as身份执行过composer一次root,因此composers(每用户-)缓存目录现在由root拥有,因此普通用户无法写入。

sudo chown -R lamp:lamp /home/lamp/.composer

将修复文件所有者。


我已经尝试过了,但是composer self-update如果不使用sudo 仍然无法运行。我需要使用775吗?
乘坐旋风

好的自我更新不适用于755,但这有关系吗?自我更新不需要每天执行任何操作,只需每2周左右更新一次(当然需要sudo)。
tkausl

尝试过composer update,这也不适用于那些权限。我仍然必须先使用sudo。这是我遇到的错误file_put_contents(/home/lamp/.composer/cache/repo/https---packagist.org/packages.json): failed to open stream: Permission denied
绕着旋风

哦,是的,您已经使用过“ sudo”来更新您的一些部门,我认为“ /home/lamp/.composer/”是根用户所有,只需删除此文件夹(它只是一个缓存),然后它就可以正常工作了须藤 (或更改所有权:chown -R lamp:lamp /home/lamp/.composer
tkausl

这样就成功了,将所有者改为灯。您可以更新答案,我会接受吗?谢谢takusl
乘着旋风

5

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

我认为解决方案是使用-H运行作曲家自我更新

sudo -H composer self-update

在执行此操作之前,请确保删除根目录中的.composer目录和要执行作曲家的用户的主目录。

sudo rm -rf /root/.composer
sudo rm -rf /home/ubuntu/.composer

在不使用-H标志的情况下运行sudo composer自我更新将创建〜/ .composer,该文件由root拥有,并防止其他composer命令出现权限错误。

composer config
composer install 

我认为调用sudo composer self-update不应在当前用户主目录中创建root拥有的文件。

请注意,如果您在Ubuntu 14.04 composer上遵循这些说明,则会将缓存放入:

 ~/.cache/composer

而不是:

~/.composer/cache

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

这里的相关讨论


如果您已经在运行最新版本的composer,这将无济于事。 $ sudo -H composer self-update $ You are already using composer version 1.3.0 (stable channel).
Cragmonkey

@Cragmonkey-我正在运行最新版本的composer,但只需删除~/.composer文件夹似乎可以解决问题。
Cyclonecode
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.