Esecuzione di Composer senza usare sudo (provato a cambiare proprietario e autorizzazioni)


12

Ogni volta che eseguo compositore (ad esempio, sudo composer install, sudo composer self-updateecc.) Ho bisogno di eseguirlo con sudo poiché il proprietario del file è root.

Tuttavia, ogni volta che uso il compositore con sudo root è proprietario della cartella del fornitore e quindi devo cambiare il proprietario di quella cartella / privilegi da root a www-data.

Qual è il modo migliore per risolvere questo problema, quindi non devo eseguire sudo ogni volta?

Cambiare il proprietario di /usr/local/bin/composerda root a www-data?

È questo il modo ideale per gestirlo per evitare di dover cambiare proprietà e assegnare l'autorizzazione ogni volta che utilizzo sudo composer install?

Modifica: le autorizzazioni per il compositore sono attualmente -rwxr-xr-x. E ho provato a cambiare il proprietario di /usr/local/bin/composerover www-data:www-datacon autorizzazioni impostate su 775, e ancora non riesco a eseguire il compositore senza eseguirlo sudo.

Risposte:


8

Se "Everyone" è autorizzato a leggere ed eseguire il compositore, non è necessario utilizzare sudo:

sudo chmod 755 /var/local/bin/composer

Dato che hai già eseguito il compositore almeno una volta root, la directory della cache dei compositori (per utente) è ora di proprietà di root e quindi non è scrivibile dal tuo normale utente.

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

riparerà il proprietario del file.


Ci ho provato e non riesco ancora a correre composer self-updatesenza usare sudo. Devo usare 775?
cavalca i turbinii il

Bene, l'auto-aggiornamento non funzionerà con 755 ma è importante? l'auto-aggiornamento non è nulla che dovrai eseguire ogni giorno, basta aggiornarlo una volta ogni 2 settimane circa (con sudo ovviamente).
tkausl

Ho provato composer updatee anche questo non funziona con quelle autorizzazioni. Devo ancora usare prima sudo. Questo è l'errore che ricevofile_put_contents(/home/lamp/.composer/cache/repo/https---packagist.org/packages.json): failed to open stream: Permission denied
cavalca il turbine il

ooh, sì, hai già usato "sudo" per aggiornare alcuni dei tuoi deps, penso che "/home/lamp/.composer/" sia di proprietà di root, basta eliminare questa cartella (è solo una cache), quindi dovrebbe funzionare senza sudo. (O cambio di proprietà: chown -R lamp:lamp /home/lamp/.composer)
tkausl

Questo ha funzionato, cambiando il proprietario in lampada. Puoi aggiornare la tua risposta e la accetterò? Grazie takusl
cavalca i

5

Ho affrontato questo problema per settimane.

Penso che la soluzione sia eseguire l'auto-aggiornamento del compositore con -H

sudo -H composer self-update

Prima di fare ciò assicurati di rimuovere le directory .composer in root e la home directory dell'utente che desideri eseguire compositore.

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

L'esecuzione dell'aggiornamento automatico sudo compositore senza il flag -H creerà ~ / .composer di proprietà di root e impedirà ad altri comandi del compositore di avere errori di autorizzazione.

composer config
composer install 

A mio avviso, chiamare l'auto-aggiornamento di sudo compositore non dovrebbe creare file di proprietà di root nella home directory degli utenti correnti.

Nota se segui queste istruzioni su Ubuntu 14.04 compositore inserirà la cache in:

 ~/.cache/composer

Piuttosto che:

~/.composer/cache

Ciò è dovuto alla variabile d'ambiente XDG_RUNTIME_DIR definita in Ubuntu 14.04 ma non sembra essere definita in Ubuntu 12.04

Una discussione correlata qui


Questo non aiuta se stai già eseguendo la versione più recente di compositore. $ sudo -H composer self-update $ You are already using composer version 1.3.0 (stable channel).
Cragmonkey,

@Cragmonkey - Stavo eseguendo l'ultima versione di compositore ma la semplice rimozione della ~/.composercartella sembra risolvere il problema.
ciclico
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.