Le autorizzazioni in genere non vengono propagate dalla directory in cui vengono copiati i file, ma le nuove autorizzazioni sono controllate dall'utente umask
. Tuttavia, quando si copia un file da un percorso a un altro, è un po 'un caso speciale in cui l'utente umask
viene sostanzialmente ignorato e le autorizzazioni esistenti sul file vengono conservate. Comprendere questo concetto è la chiave per ottenere ciò che vuoi.
Quindi per copiare un file ma "rilasciare" le sue autorizzazioni correnti puoi dire cp
di "non conservare" usando l' --no-preserve=all
opzione.
Esempio
Di 'che ho il seguente file come te.
$ mkdir -m 744 somedir
$ touch afile
$ chmod 400 afile
$ ll
total 0
-r--------. 1 saml saml 0 Feb 14 15:20 afile
E come hai confermato se lo copiamo semplicemente alla cieca usando cp
, otteniamo questo:
$ cp afile somedir/
$ ls -l somedir/
total 0
-r--------. 1 saml saml 0 Feb 14 15:20 afile
Ora ripetiamolo, ma questa volta diciamo cp
di "rilasciare le autorizzazioni":
$ rm -f somedir/afile
$ cp --no-preserve=all afile somedir/
$ ls -l somedir/
total 0
-rw-rw-r--. 1 saml saml 0 Feb 14 15:21 afile
Quindi il file copiato ora ha i permessi impostati su 664, dove li ha ottenuti?
$ umask
0002
Se ho cambiato il mio umask
in qualcos'altro, possiamo ripetere questo test una terza volta e vedere gli effetti che umask
ha sul non conservato cp
:
$ umask 037
$ rm somedir/afile
$ cp --no-preserve=all afile somedir/
$ ls -l somedir/
total 0
-rw-r-----. 1 saml saml 0 Feb 14 15:29 afile
Notare che le autorizzazioni non sono più 664, ma sono 640? Ciò è stato dettato dal umask
. Stava dicendo a tutti i comandi che creano un file di disabilitare i 5 bit inferiori nelle autorizzazioni ... questi ragazzi: ( ----wxrwx
).
setfacl
comando hai provato? Qual è stato il suo output?