我有一个ec2映像,在尝试创建新的laravel项目时出现以下错误。
[ErrorException]mkdir((:权限被拒绝
这是命令:
composer create-project laravel/laravel mydir
我可以用我的ec2用户用户名写入文件夹,但我需要添加composer的写入权限吗?
快速答案:
出于安全考虑,让root
作为所有者,只允许我们在将要工作的区域内读取、写入和执行
-
更改目录
cd /var/www/
-
更改集团所有权
sudo chown -Rv root:$USER .
-
将特权添加到我们的组
sudo chmod -Rv g+rw .
-
对于大结局,继续创建您的新laravel项目
composer create-project laravel/laravel
项目名称--prefer-dist
祝贺你,我们完成了。:(
深入解释
解决方案背后的解释:默认情况下,您有两个用户;root
和$USER
(这是全局变量,但实际名称是您输入的用户名(。创建的每个用户都有一个组。因此,如果我的用户名是john
,那么我有一个名为john
的组。有很多方法可以解决这个问题,但我之所以选择这条路线,有几个原因:
-
出于安全考虑,我仍然希望
root
成为这些文件的所有者。 -
我在本地主机上工作,所以不应该有任何其他(来宾(用户在我的文件上写东西。
为了实现这一点,我们需要编辑组所有权并添加适当的权限。我们将保持others
的原样,只允许它们读取和执行文件。
让我们开始吧:
-
我喜欢在我正在进行更改的目录中,以避免错误,所以首先我们需要输入我们将要工作的目录。
cd /var/www/
-
我们需要更改我们将要工作的目录的组所有权。从我们所在的目录开始,以及我们将在该目录下创建的所有未来目录和文件。因此,从现在起,基本上任何子目录都将由我们的小组所有。
sudo chown -Rv root:$USER .
chown
=命令changeowner。
-R
=递归-这基本上是指对该目录中的所有目录执行相同的命令。
-v
=详细-我们在这里说明是为了通过向我们展示实际发生的事情来保持更新。
root:$USER
=这是我们正在设置所有权的情况。冒号(:(前的第一个单词表示root
将是单个所有者。冒号(:(后的第二个单词表示组所有者将是$USER
(当前用户(。
.
=这只是表示"在这里,在这个目录中"。
- 现在,我们将为我们的组添加正确的特权。请记住,这是我们允许
root
作为主要所有者的地方,而只允许自己创建更改(当然,除了root
之外(。正如我之前提到的,这不允许其他用户创建任何更改。sudo chmod -Rv g+rw .
chmod
=对changemod指令的命令,在本例中为特权。CCD_ 26=递归&详细
g
=这说明谁将接收修改。在我们的例子中,g-group其他选项是u-user和o-Other。
+
=象征添加
r
=象征读取
w
=象征写入
- 现在我们完成了。尝试创建一个新的laravel项目。
composer create-project laravel/laravel
项目名称`--首选dist
注意:如果不起作用,请在/var/www/
目录中输入命令ls -al | grep $USER
。
如果你得到这个:drwxrw-r-x
您缺少该组的可执行文件(x
(权限。第一个CCD_ 36用于用户,最后一个x
用于其他用户。组应该有中间的x
。
运行以下命令,您应该已经做好了准备:
sudo chmod -Rv g+x .
现在,如果你运行ls -al | grep $USER
,你应该得到:
drwxrwxr-x
-
添加"www"组并将您的用户添加到此组
sudo groupadd www sudo usermod -a -G www ec2-user
-
注销/登录
-
设置所有权和写入权限
sudo chown -R root:www /var/www sudo chmod 2775 /var/www find /var/www -type d -exec sudo chmod 2775 {} + find /var/www -type f -exec sudo chmod 0664 {} +
引用:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-LAMP.html
在Homestead/Vagrant环境中创建额外项目时,我遇到了类似的ErrorException。我之前添加了Homestead.yaml.的文件夹和路径
Oscar和Jens A.Koch的回答指向了正确的方向,但在我的开发机器上走得太远了。
Homestead Box内部的工作范围较窄的解决方案:
sudo mkdir <ProjectDir>
sudo chgrp vagrant <ProjectDir>
sudo chmod g+wx <ProjectDir>
composer create-project --prefer-dist laravel/laravel <Project>
问题的要点
在/var/www/html
文件夹中安装Laravel是一个常见的要求。但是,系统默认值通常会将此文件夹及其父文件夹(www
(的用户和组设置为root
。如果您将其作为root
运行,则composer
将抱怨。
解决方案
-
查找与您的apache/nginx服务器对应的用户。它通常有
www
、www-data
等名称。您可以运行以下命令来获得线索cat /etc/group | grep www
-
有了服务器用户的知识(从上面(,您可以运行以下命令。我假设您的服务器用户是
www-data
# Under your user account, change directories cd /var/www/ # Change group ownership sudo chown -Rv root:www-data . # Give all the privileges to the group sudo chmod -Rv g+rwx . # Add your user name to www-data group, use 'who' command to get your username sudo usermod -a -G www-data your_user_name # Verify that your user name is in the www-data group by typing group your_user_name # Very important, logout of the system and come back to this folder # Do the the laravel install composer create-project --prefer-dist laravel/laravel projectName # Not finished yet! recursive make the www-data the group owner of projecName which the folder in which Laravel site resides by now sudo chown -R :www-data projectName
确保您具有读/写文件夹权限。它对我有用。
就像在ubuntu
var/www/html
因此,如果您想在html
文件夹中创建dir,请首先授予html
文件夹权限。那你就完了。谢谢
这个带有模糊框的问题
如果你试图在一个新的流浪者盒子里安装一些带有composer的东西,那么在安装流浪者时,你可能已经指定了允许使用的路径。
因此,请检查您的个人.yml文件,以便在\ansible\vars
你有这样的
vagrant_local:
vm:
name: oxideshop
hostname: oxideshop.local
aliases:
- www.oxideshop.local
app_shared_folder:
source: oxideshop
target: /var/www/oxideshop
您必须确保app_shared_folder目标与您用于composer安装的目标相同。
示例:
composer创建项目oxide-sales/oxideshop项目/var/www/oxideshopdev-b-6.1-ce
确保您具有读/写文件夹权限。喜欢:sudo chown-R用户名:www数据/项目路径/用户名/项目名称/
示例:
$ sudo chown -R tubai:www-data /home/tubai/firstlara/
运行以下命令
cd /var/www
sudo chown -R $USER:www-data html/
sudo chmod -R 775 html/
我也遇到了同样的问题,使用sudo执行命令对我来说很有效:
sudo composer create-project laravel/laravel mydir
cd到当前要安装laravel的目录,并使用更改目录访问
sudo chmod -R 777 ./
键入您的密码,您就可以继续安装