web-dev-qa-db-fra.com

Comment réparer l'erreur: mkdir (): autorisation refusée lors de l'exécution composer

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?

15
iliketolearn

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.

  1. Modifier les répertoires

    cd /var/www/

  2. Modifier la propriété du groupe

    Sudo chown -Rv root:$USER .

  3. Ajoutez des privilèges à notre groupe

    Sudo chmod -Rv g+rw .

  4. Pour la grande finale, allez-y et créez votre nouveau projet laravel

    composer create-project laravel/laravelnom 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:

  1. Je souhaite toujours que root soit le propriétaire des fichiers pour des raisons de sécurité.

  2. 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:

  1. 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/

  2. 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 le root 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'.

  1. Nous allons maintenant ajouter les bons privilèges à notre groupe. Gardez à l'esprit que c'est là que nous permettons à 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

  1. Maintenant, nous avons terminé. Essayez de créer un nouveau projet laravel.

    composer create-project laravel/laravelprojectName` --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

21
Oscar
  1. ajoutez le groupe "www" et ajoutez votre utilisateur à ce groupe

    Sudo groupadd www
    Sudo usermod -a -G www ec2-user
    
  2. déconnexion/connexion

  3. 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

16
Jens A. Koch

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>
2
Stefan Hanke

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.

0
Y. Joy Ch. Singha

Exécutez les commandes suivantes

cd /var/www

Sudo chown -R $USER:www-data html/

Sudo chmod -R 775 html/
0

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

0
veritaS