Salta al contenuto principale

Accesso ai Pacchetti

È una serie di restrizioni che permettono o limitano l'accesso all'archiviazione locale basandosi su criteri specifici.

Le restrizioni di sicurezza dipendono dal plugin che si sta utilizzando, verdaccio usa di default il plugin htpasswd. Se si usa un plugin differente il funzionamento potrebbe essere diverso. Il plugin predefinito non gestisce direttamente allow_access e allow_publish, ma utilizza un'alternativa interna nel caso in cui il plugin non sia pronto per questo.

Per ulteriori informazioni sui permessi, visita la sezione autenticazione nella wiki.

Utilizzo

packages:
# pacchetti con scope
'@scope/*':
access: $all
publish: $all
proxy: server2

'private-*':
access: $all
publish: $all
proxy: uplink1

'**':
# consenti a tutti gli utenti (inclusi quelli non autenticati) di leggere e
# pubblicare tutti i pacchetti
access: $all
publish: $all
proxy: uplink2

se non ne viene specificato nemmeno uno, rimane quello predefinito

packages:
'**':
access: $all
publish: $authenticated

Ecco l'elenco dei gruppi interni gestiti da verdaccio:

'$all', '$anonymous', '@all', '@anonymous', 'all', 'undefined', 'anonymous'

Tutti gli utenti ricevono tutte queste serie di autorizzazioni indipendentemente dal loro anonimato, inoltre i gruppi forniti dal plugin, nel caso in cui htpasswd restituisca il nome utente come un gruppo. Per esempio, se si è loggati come npmUser l'elenco dei nomi sarà.

// gruppi senza '$' saranno eventualmente deprecati
'$all', '$anonymous', '@all', '@anonymous', 'all', 'undefined', 'anonymous', 'npmUser'

Se si desidera proteggere un insieme specifico di pacchetti dentro al proprio gruppo, è necessario fare qualcosa simile a questo. Utilizziamo un Regex che copra tutti i pacchetti con prefisso npmuser-. Raccomandiamo di utilizzare un prefisso per i pacchetti, in modo che possa essere più semplice proteggerli.

pacchetti:
'npmuser-*':
access: npmuser
publish: npmuser

Riavviare verdaccio e provare ad installare npmuser-core nella console.

$ npm install npmuser-core
npm install npmuser-core
npm ERR! code E403
npm ERR! code E403
npm ERR! 403 Forbidden: npmuser-core@latest

npm ERR! A complete log of this run can be found in:
npm ERR!

È possibile modificare la condotta esistente utilizzando un plugin di autenticazione differente. verdaccio verifica semplicemente che l'utente che ha provato ad accedere o pubblicare un pacchetto specifico appartenga al gruppo corretto.

Sei pregato di notare che se imposti l'autorizzazione d'accesso di un pacchetto a qualcosa che richiede a Verdaccio di controllare la tua identità, ad esempio $authenticated, npm non invia la tua chiave d'accesso di default recuperando i pacchetti. Questo significa che tutte le richieste per scaricare i pacchetti saranno rifiutate essendo rese anonime anche se ti sei connesso. Per far includere la tua chiave d'accesso a npm con tutte le richieste, dovresti impostare l'impostazione npm di always-auth a true a ogni macchina del client. Questo si può compiere eseguendo:

packages:
'jquery':
access: $all
publish: $all
unpublish: root
'my-company-*':
access: $all
publish: $authenticated
unpublish:
'@my-local-scope/*':
access: $all
publish: $authenticated
# unpublish: property commented out
'**':
access: $all
publish: $authenticated
proxy: npmjs

Definire gruppi multipli

Definire gruppi di accesso multipli è abbastanza facile, è sufficiente distinguerli semplicemente con uno spazio bianco tra di essi.

  'company-*':
access: admin internal
publish: admin
proxy: server1
'supersecret-*':
access: secret super-secret-area ultra-secret-area
publish: secret ultra-secret-area
proxy: server1

Bloccare l'accesso a gruppi di pacchetti

Se si desidera bloccare l'accesso/pubblicazione ad uno specifico gruppo di pacchetti. È sufficiente non definire access e publish.

pacchetti:
'old-*':
'**':
access: $all
publish: $authenticated

Bloccare l'inoltro di un gruppo di pacchetti specifici

Vediamo l'esempio seguente:

Descriviamo quello che si desidera con l'esempio precedente:

packages:
'jquery':
access: $all
publish: $all
'my-company-*':
access: $all
publish: $authenticated
'@my-local-scope/*':
access: $all
publish: $authenticated
'**':
access: $all
publish: $authenticated
proxy: npmjs

Descriviamo ciò che vogliamo con l'esempio precedente:

  • Desidero ospitare la mia dipendenza jquery ma ho necessità di evitare il suo inoltro.
  • Desidero tutte le dipendenze che coincidano con my-company-* ma ho necessità di evitare di inoltrarle.
  • Desidero tutte le dipendenze che si trovino nell'ambito my-local-scope ma ho necessità di evitare di inoltrarle.
  • Desidero l'inoltro per tutte le dipendenze rimanenti.

Non dimenticare l'importanza dell'ordine dei pacchetti e di utilizzare sempre il doppio asterisco. Poiché se non lo si include, verdaccio lo includerà per voi e questo inciderà sulla modalità con cui le dipendenze sono risolte.

Nell'esempio precedente, il comportamento verrebbe descritto così:

'**':
access: $all
publish: $authenticated
proxy: npmjs uplink2

Rimozione di Pacchetti Pubblicati

La proprietà publish gestisce le autorizzazioni per npm publish e npm unpublish. Tuttavia, se si vuole essere più specifici, è possibile utilizzare la proprietà unpublish nella sezione di accesso ai pacchetti, per esempio:

packages:
'jquery':
access: $all
publish: $all
unpublish: root
'my-company-*':
access: $all
publish: $authenticated
unpublish:
'@my-local-scope/*':
access: $all
publish: $authenticated
# unpublish: property commented out
'**':
access: $all
publish: $authenticated
proxy: npmjs

Nel precedente esempio, il comportamento sarebbe così descritto:

  • tutti gli utenti possono pubblicare il pacchetto jquery, tuttavia solo l'utente root potrebbe annullare la pubblicazione di ogni versione.
  • solo gli utenti autenticati possono pubblicare i pacchetti my-company-*, tuttavia nessuno sarebbe autorizzato ad annullare la loro pubblicazione.
  • Se unpublish è commentato, l'accesso verrà garantito o negato dalla definizione di publish.

Configurazione

Si possono definire pacchetti multipli ed ognuno di essi deve avere un Regex unico. La sintassi è basata su espressioni minimatch glob.

ProprietàTipoRichiestoEsempioSupportoDescrizione
accessostringaNo$alltuttidefinisce i gruppi autorizzati ad accedere al pacchetto
pubblicazionestringaNo$authenticatedtuttidefinisce i gruppi autorizzati a pubblicare
proxystringaNonpmjstuttilimita le ricerche di un uplink specifico
archiviazionestringaNostringa/some-foldercrea una sottocartella all'interno della cartella di archiviazione per ogni accesso ai pacchetti

Vogliamo rimarcare che non raccomandiamo più l'utilizzo di allow_access/allow_publish e proxy_access che sono superati e saranno presto rimossi, si prega di utilizzare invece la versione breve di ognuna di queste (access/publish/proxy).

Se vuoi ulteriori informazioni su come usare la proprietà storage, sei pregato di fare riferimento a questo commento.