Come visualizzare le autorizzazioni per i file a 6 cifre?


3

Ho un'applicazione che si lamenta delle autorizzazioni della sua directory all'interno di / Applicazioni. Vuole essere impostato su 040775. Posso correggerlo eseguendo chmod 040775, ma non capisco cosa significano le prime 2 cifre. La sola esecuzione chmod 775non funziona, quindi apparentemente queste prime 2 cifre sono errate. Cosa sono queste 2 cifre e come posso visualizzarle in macOS? Sto cercando qualcosa di simile ls -l. Sto correndo High Sierra.


Non credo che 040775in chmod 040775sia un permesso valido. Ti suggerirei di leggere la MODESsezione del man pagefor chmod. Probabilmente vuoi:chmod 4775
user3439894

Ho letto la pagina man e descriveva solo 4 cifre. Anche questo mi ha sorpreso, ma perché il comando che ho scritto risolve il problema?
Elliott,

Senza sapere quello che il permesso fosse prima di eseguire il chmod comando non posso dire specificamente, però 04di 040775viene ignorato e 0775imposta le autorizzazioni per rwxrwxr-xe normali applicazioni in bundle e normali file eseguibili sono solitamente impostato a rwxr-xr-x.
user3439894,

Le prime due cifre sono il tipo di file e le restanti quattro sono i bit di autorizzazione.
f0

Risposte:


1

La risposta breve è stat e richiede il campo autorizzazioni:

stat -f "%p" file

Quell'applicazione o le istruzioni o la memoria sono probabilmente errate. Dalla pagina del manuale, ci sono 4 cifre nella rappresentazione ottale per le modalità su macOS:

 Modes may be absolute or symbolic.  An absolute mode is an octal number
 constructed from the sum of one or more of the following values:

       4000    (the set-user-ID-on-execution bit) Executable files with
               this bit set will run with effective uid set to the uid of
               the file owner.  Directories with the set-user-id bit set
               will force all files and sub-directories created in them to
               be owned by the directory owner and not by the uid of the
               creating process, if the underlying file system supports
               this feature: see chmod(2) and the suiddir option to
               mount(8).
       2000    (the set-group-ID-on-execution bit) Executable files with
               this bit set will run with effective gid set to the gid of
               the file owner.
       1000    (the sticky bit) See chmod(2) and sticky(8).
       0400    Allow read by owner.
       0200    Allow write by owner.
       0100    For files, allow execution by owner.  For directories,
               allow the owner to search in the directory.
       0040    Allow read by group members.
       0020    Allow write by group members.
       0010    For files, allow execution by group members.  For directo-
               ries, allow group members to search in the directory.
       0004    Allow read by others.
       0002    Allow write by others.
       0001    For files, allow execution by others.  For directories
               allow others to search in the directory.

 For example, the absolute mode that permits read, write and execute by
 the owner, read and execute by group members, read and execute by others,
 and no set-uid or set-gid behaviour is 755 (400+200+100+040+010+004+001).

Ho creato un file convenientemente chiamato 040775 e ho applicato le autorizzazioni: puoi vedere lo 040 cancellare tutti gli sticky (poiché conta la parte 0775), setUID, setGID in modo da ottenere 0775 se provi a impostare 040775.

mac:foo me$ touch 040775
mac:foo me$ stat -f "%p" 040775 
100644
mac:foo me$ chmod 040775 040775
mac:foo me$ stat -f "%p" 040775 
100775
mac:foo me$ chmod 4775 040775 
mac:foo me$ ls -l
-rwsrwxr-x  1 me  wheel  0 May 10 20:30 040775
mac:foo me$ chmod 040775 040775
mac:foo me$ ls -l
-rwxrwxr-x  1 me  wheel  0 May 10 20:30 040775

Ho modificato il sopra un po 'e non ho fatto tutte le state lsma dovrebbe aiutare a frugare a file esistenti e testare sapere se la mia esperienza che solo le ultime 4 cifre sono interpretati come una maschera di bit ottale per impostare le autorizzazioni come documentato nella pagina man di chmod.


Lei ha detto, "si può vedere la 040 azzera tutto appiccicoso ..." e io credo che si sbagli in questa affermazione e di fatto è la 0in 0775questo è cancella tutto appiccicoso. 04of 040775viene ignorato e lo dico perché, se prima si imposta eg 4775e poi si usa 010775, fa lo stesso di 040775do e il 01of 010775viene ignorato proprio come il 04of 040775viene ignorato e chmodlo elabora come 0775in entrambi gli esempi.
user3439894,

Vale la pena notare che si tratta di numeri ottali (tre bit / cifra con un valore di 0-7). Quando ho visto i numeri decimali per i permessi sui file, penso che Disk Utility lo faccia, convertendoli in ottali dà ciò che considero valori ragionevoli per il permesso.
Ɱark Ƭ

@ user3439894 Chiarirò il post. Grazie. Sono d'accordo e intendo mettere in relazione che il primo 0 e i primi 4 vengono scartati. È lo 0 prima del 775 che esegue la compensazione. Con il senno di poi usare 1 sarebbe meglio di 4 per mostrare che 1 imposta e 0 cancella.
bmike

Si scopre che le prime due cifre sono la modalità file, che può essere vista con stat -f %p filename. "04" significa che è una directory. Forse in questo caso chmod 0775avrebbe lo stesso effetto. Ma chmod sembra esserne alquanto consapevole perché chmod 240775dà un errore, mentre chmod 140775non lo è. systutorials.com/docs/linux/man/2-stat
Elliott

1
@Elliott: 240775genera un errore perché questo valore non può essere memorizzato in un numero intero a 16 bit, dove as 140775può essere memorizzato.
David Anderson,
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.