J'ai une image ec2 et j'obtiens l'erreur suivante en essayant de créer un nouveau projet laravel.
[ErrorException] mkdir (): autorisation refusée
Voici la commande:
composer create-project laravel/laravel mydir
Je peux écrire dans le dossier avec mon nom d'utilisateur ec2-user mais dois-je ajouter une autorisation pour écrire composer?
Réponse rapide:
Pour des raisons de sécurité, gardons root
comme propriétaire et nous permettons simplement de lire, écrire et exécuter dans la zone dans laquelle nous allons travailler.
Modifier les répertoires
cd /var/www/
Modifier la propriété du groupe
Sudo chown -Rv root:$USER .
Ajoutez des privilèges à notre groupe
Sudo chmod -Rv g+rw .
Pour la grande finale, allez-y et créez votre nouveau projet laravel
composer create-project laravel/laravel
nom du projet--prefer-dist
Félicitations, nous avons terminé. :)
Explication détaillée
Explication derrière la solution: Par défaut, vous avez deux utilisateurs; root
et $USER
(il s'agit de la variable globale, mais le nom réel est celui que vous mettez comme nom d'utilisateur). Chaque utilisateur créé est également accompagné d'un groupe. Donc, si mon nom d'utilisateur est john
, j'ai un groupe appelé john
. Il existe de nombreuses façons de résoudre ce problème, mais je préfère cette route pour plusieurs raisons:
Je souhaite toujours que root
soit le propriétaire des fichiers pour des raisons de sécurité.
Je travaille dans un hôte local, il ne devrait donc pas y avoir d'autres utilisateurs (invités) écrivant sur mes fichiers.
Pour ce faire, nous devrons modifier la propriété du groupe et ajouter les autorisations appropriées. Nous allons laisser le others
tel quel et ne leur permettre que de lire et d'exécuter les fichiers.
Alors, commençons:
J'aime être dans le répertoire dans lequel je fais des changements afin d'éviter les erreurs, nous devons donc d'abord entrer dans le répertoire dans lequel nous travaillerons.
cd /var/www/
Nous devrons changer la propriété du groupe des répertoires dans lesquels nous travaillerons. À partir du répertoire dans lequel nous nous trouvons et de tous les futurs répertoires et fichiers que nous créerons sous ce répertoire. Donc, fondamentalement, tous les répertoires enfants seront désormais la propriété de notre groupe.
Sudo chown -Rv root:$USER .
chown
= commande pour change possédereuh.
-R
= Récursif - Il s'agit essentiellement d'indiquer d'exécuter la même commande sur tous les répertoires de ce répertoire.
-v
= verbeux - nous déclarons ici pour nous tenir au courant en nous montrant ce qui se passe réellement.
root:$USER
= C'est là que nous définissons la propriété. Le premier mot avant les deux points (:) indique que leroot
sera le seul propriétaire. Le deuxième mot après les deux-points (:) indique que le propriétaire du groupe sera$USER
(l'utilisateur actuel).
.
= Cela signifie simplement 'ici, dans ce répertoire'.
root
d'être le propriétaire principal tout en nous autorisant UNIQUEMENT à créer des changements (bien sûr, en plus de root
). Comme je l'ai mentionné précédemment, cela ne permet pas aux autres utilisateurs de créer des modifications quoi qu'il en soit.
Sudo chmod -Rv g+rw .
chmod
= commande pour change moddans ce cas, les privilèges.
-Rv
= Récursif et verbeux
g
= ceci indique qui recevra les modifications. Dans notre cas, g-group Les autres options sont u-user et o-other.
+
= symbolise l'ajout
r
= symbolise la lecture
w
= symbolise l'écriture
composer create-project laravel/laravel
projectName` --prefer-dist
Remarque: Si cela ne fonctionne pas, entrez la commande ls -al | grep $USER
à l'intérieur du /var/www/
répertoire.
Si vous obtenez ceci: drwxrw-r-x
Il vous manque le privilège exécutable (x
) pour le groupe. Le premier x
est pour l'utilisateur et le dernier x
pour les autres. Il devrait y avoir un milieu x
pour le groupe.
Exécutez la commande suivante et vous devriez être prêt à partir:
Sudo chmod -Rv g+x .
Maintenant, si vous exécutez ls -al | grep $USER
, Tu devrais obtenir:
drwxrwxr-x
ajoutez le groupe "www" et ajoutez votre utilisateur à ce groupe
Sudo groupadd www
Sudo usermod -a -G www ec2-user
déconnexion/connexion
définir la propriété et les autorisations d'écriture
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 {} +
Référencement: http://docs.aws.Amazon.com/AWSEC2/latest/UserGuide/install-LAMP.html
J'ai rencontré l'erreur ErrorException similaire lors de la création d'un projet supplémentaire dans l'environnement Homestead/Vagrant. J'avais précédemment ajouté des dossiers et un chemin vers Homestead.yaml.
Les réponses d'Oscar et de Jens A. Koch pointaient dans la bonne direction, mais vont trop loin sur ma machine de développement.
Solution de travail plus étroite à l'intérieur de Homestead-Box:
Sudo mkdir <ProjectDir>
Sudo chgrp vagrant <ProjectDir>
Sudo chmod g+wx <ProjectDir>
composer create-project --prefer-dist laravel/laravel <Project>
Assurez-vous que vous disposez de l'autorisation de lecture/écriture sur le dossier. COMME: Sudo chown -R NOM D'UTILISATEUR: www-data/CHEMIN DE PROJET/NOM D'UTILISATEUR/NOM DE PROJET /
Exemple:
$ Sudo chown -R tubai:www-data /home/tubai/firstlara/
Assurez-vous que vous disposez de l'autorisation de lecture/écriture sur le dossier. Cela fonctionne pour moi.
Comme dans Ubuntu
var/www/html
Donc, si vous voulez créer dir dans le dossier html
, donnez d'abord l'autorisation au dossier html
. Alors vous avez terminé. Merci.
Exécutez les commandes suivantes
cd /var/www
Sudo chown -R $USER:www-data html/
Sudo chmod -R 775 html/
Ce problème avec une boîte Vagrant
Si vous avez essayé d'installer quelque chose avec composer dans une nouvelle boîte vagabonde, il est possible que lors de l'installation du vagabond vous ayez spécifié le chemin que vous êtes autorisé à utiliser.
Vérifiez donc votre fichier .yml personnel afin de le vérifier sous\ansible\vars
là vous avez quelque chose comme ça
vagrant_local:
vm:
name: oxideshop
hostname: oxideshop.local
aliases:
- www.oxideshop.local
app_shared_folder:
source: oxideshop
target: /var/www/oxideshop
Vous devez vous assurer que la cible app_shared_folder est la même que celle que vous utilisez pour l'installation composer.
Exemple:
compositeur create-project ox-esales/oxideshop-project / var/www/oxideshop dev-b-6.1-ce