Sto scrivendo uno script per controllare le autorizzazioni dei file nelle directory degli utenti e se non sono accettabili li avvertirò, ma voglio controllare le autorizzazioni non solo del login utente, ma anche gruppo e altri. Come posso fare questo? Mi sembra che .access() in Python possa solo controllare le autorizzazioni per l'utente che esegue lo script.Verifica dei permessi dei file in Linux con Python
risposta
Hai ragione che il os.access, come il sottostante access syscall, verifica la presenza di un utente specifico (ID reale piuttosto che effettivo, per aiutare con situazioni suid).
os.stat è il modo giusto per ottenere informazioni più generali su un file, incluse le autorizzazioni per utente, gruppo e altro. L'attributo st_mode
dell'oggetto restituito da os.stat
contiene i bit di autorizzazione per il file.
Per facilitare l'interpretazione di questi bit, è possibile utilizzare il modulo stat. Nello specifico, vorrai che le maschere di bit siano definite here e utilizzerai l'operatore &
(bit e) per utilizzarle per mascherare i bit rilevanti in quell'attributo st_mode
, ad esempio se hai solo bisogno di Vero/Falso verificare se un certo file è il gruppo-leggibile, un approccio è: cura
import os
import stat
def isgroupreadable(filepath):
st = os.stat(filepath)
return bool(st.st_mode & stat.S_IRGRP)
prendere: la chiamata os.stat
può essere un po 'costosa, quindi assicuratevi di estrarre tutte le informazioni che ti interessano con una singola chiamata, piuttosto che continua a ripetere le chiamate per ogni bit di interesse ;-).
Utilizzare os.access()
con bandiere os.R_OK
, os.W_OK
e os.X_OK
.
Edit: Partenza this related question se si sta testando le autorizzazioni di directory su Windows.
voi non ha ancora leggere la domanda, os.access controlla solo autorizzazioni per l'utente corrente. –
È possibile verificare le autorizzazioni dei file tramite os.stat(path)
insieme al modulo stat
per interpretare i risultati.
solo per aiutare altre persone come me che sono venuti qui per qualcosa di un po 'diverso:
import os
import stat
st = os.stat(yourfile)
oct_perm = oct(st.st_mode)
print(oct_perm)
>>> 0o100664 //the last 3 or 4 digits is probably what you want.
vedere questo per maggiori dettagli: https://stackoverflow.com/a/5337329/1814774
- 1. Regex per i permessi dei file Linux (notazione numerica)
- 2. Python - Verifica permessi directory
- 3. Eliminazione dei permessi di root in Python
- 4. permessi dei file Java per le discussioni
- 5. I permessi dei file non ereditano i permessi delle directory
- 6. EKEventStore prompt dei permessi
- 7. Come garantire i permessi dei file corretti
- 8. imposta i permessi dei file nel file setup.py
- 9. Modifica dei permessi su/vagabondo
- 10. Come posso cambiare i permessi dei file in Ubuntu
- 11. Aggiornamento dei permessi dei file con git-bash su Windows 7
- 12. Come posso impostare i permessi dei file da Perl?
- 13. cmake: come modificare i permessi dei file durante l'installazione?
- 14. Stampa dei permessi dei file come 'ls -l' usando stat (2) in C
- 15. permessi dei file mkfifo non essere eseguiti correttamente
- 16. Impostazione dei permessi sui file sul contenuto del tarfile
- 17. Ordinamento gerarchico dei percorsi dei file in python
- 18. C++ - Come impostare i permessi dei file (multipiattaforma)
- 19. aperti i permessi dei file() non correttamente l'impostazione
- 20. Verifica dei ruoli e autenticazione con Passport.js
- 21. Riavvia il processo di modifica dei file in Linux
- 22. modifica dei permessi per file e cartelle in modo ricorsivo utilizzando il comando shell in mac
- 23. modifica autorizzazione dei file in python
- 24. elenco dei proprietari di file nella cartella su linux
- 25. Linux/opt/* cartella e permessi
- 26. Verifica permessi Android in un metodo
- 27. In che modo Subversion gestisce i permessi dei file e un file .htaccess?
- 28. Linux: output dei risultati DD in un file di testo
- 29. Impossibile impostare i permessi dei file in S3 usando boto e django
- 30. django/file upload permessi
Meraviglioso, questo è esattamente quello che speravo di trovare. Grazie mille. Ho appena iniziato a prendere in mano python per un piccolo progetto al lavoro, quindi puoi dire che sto ancora imparando. Grazie mille! – jphenow
Utilità molto bella. Grazie! – zerocog