2009-12-07 25 views
46

Piszę skrypt, aby sprawdzić uprawnienia plików w katalogach użytkownika, a jeśli nie są akceptowane, będę je ostrzegał, ale chcę sprawdzić uprawnienia nie tylko zalogowanych użytkownik, ale także grupa i inne. Jak mogę to zrobić? Wydaje mi się, że .access() w Pythonie może tylko sprawdzić uprawnienia dla użytkownika uruchamiającego skrypt.Sprawdzanie uprawnień do plików w systemie Linux za pomocą Pythona

Odpowiedz

78

Masz rację, że os.access, podobnie jak bazowy system access, sprawdza konkretnego użytkownika (rzeczywiste, a nie efektywne identyfikatory, aby pomóc w sytuacjach suid).

os.stat to właściwy sposób na uzyskanie bardziej ogólnych informacji o pliku, w tym uprawnień dla użytkownika, grupy i innych osób. Atrybut obiektu zwracany przez ma bity uprawnień dla pliku.

Aby pomóc w interpretacji tych bitów, można użyć modułu stat. W szczególności będziesz chciał zdefiniować maski bitowe here, a użyjesz operatora & (bit-i), aby użyć ich do zamaskowania odpowiednich bitów w tym atrybucie st_mode - na przykład, jeśli potrzebujesz tylko Prawda/Fałsz sprawdzić, czy dany plik jest grupa postaci czytelnej, jedno podejście jest: pielęgnacja

import os 
import stat 

def isgroupreadable(filepath): 
    st = os.stat(filepath) 
    return bool(st.st_mode & stat.S_IRGRP) 

Weź udział: wywołanie os.stat może być nieco kosztowne, więc upewnij się, aby wyodrębnić wszystkie informacje ci zależy z jednej rozmowy, zamiast powtarzaj połączenia dla każdego interesującego ;-).

+0

Cudownie, właśnie to miałem nadzieję znaleźć. Dziękuję Ci bardzo. Właśnie zacząłem zbierać pythona dla małego projektu w pracy, więc możesz powiedzieć, że wciąż się uczę. Dzięki wielkie! – jphenow

+0

Bardzo ładne narzędzie. Dzięki! – zerocog

7

Użyj os.access() z flagami os.R_OK, os.W_OK i os.X_OK.

Edytuj: Jeśli chcesz sprawdzić uprawnienia do katalogów w systemie Windows, sprawdź kod this related question.

+5

Ty zrobił przeczytać pytanie, os.access sprawdza tylko uprawnienia bieżący użytkownik. –

8

Możesz sprawdzić uprawnienia do plików poprzez os.stat(path) w połączeniu z modułem stat w celu interpretacji wyników.

1

Wystarczy, aby pomagać innym ludziom jak ja, którzy przyjechali tu na coś innego:

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. 

to zobaczyć więcej szczegółów: https://stackoverflow.com/a/5337329/1814774

Powiązane problemy