Подтвердить что ты не робот

Проверка разрешений файлов в Linux с помощью Python

Я пишу скрипт для проверки прав доступа к файлам в пользовательских каталогах, и если они неприемлемы, я буду предупреждать их, но я хочу проверить права доступа не только вошедшего в систему пользователя, но и группы и других. Как я могу это сделать? Мне кажется, что os.access() в Python может проверять разрешения только для пользователя, выполняющего скрипт.

4b9b3361

Ответ 1

Вы правы, что os.access, как базовый access, проверяет для конкретного пользователя (реальные, а не эффективные идентификаторы, чтобы справиться с ситуациями suid).

os.stat - это правильный способ получить более общую информацию о файле, включая разрешения для каждого пользователя, группы и других. Атрибут st_mode объекта, возвращаемого os.stat, имеет бит разрешения для файла.

Чтобы интерпретировать эти биты, вы можете использовать модуль stat. В частности, вы захотите, чтобы битмаски определяли здесь, и вы будете использовать оператор & (бит-и), чтобы использовать их для маскировки вывести соответствующие биты в этот атрибут st_mode - например, если вам просто нужна проверка True/False, является ли определенный файл доступным для группы, один из подходов:

import os
import stat

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

Позаботьтесь: вызов os.stat может быть несколько дорогостоящим, поэтому обязательно извлекайте всю информацию, о которой вы заботитесь, с помощью одного вызова, вместо того, чтобы повторять вызовы для каждой части интереса; -).

Ответ 2

Вы можете проверить права доступа к файлам через os.stat(path) в сочетании с stat для интерпретации результатов.

Ответ 3

Используйте os.access() с флагами os.R_OK, os.W_OK и os.X_OK.

Изменить: проверьте этот связанный вопрос, если вы проверяете права на доступ к каталогам в Windows.

Ответ 4

Просто чтобы помочь другим людям, таким как я, которые пришли сюда для чего-то другого:

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.

Смотрите это для более подробной информации: fooobar.com/questions/81886/...

Ответ 6

import os
os.access('my_file', os.R_OK) # Check for read access
os.access('my_file', os.W_OK) # Check for write access
os.access('my_file', os.X_OK) # Check for execution access
os.access('my_file', os.F_OK) # Check for existence of file