Я пытаюсь выборочно изменить разрешения для пользователя, группы или других пользователей одновременно, но всякий раз, когда я использую chmod
, все разрешения перезаписываются.
Я пытался работать вместетекущие права доступа к файлу с новым разрешением, как предлагается в документации chmod
:
ex:
GROUP_RO = S_IRGRP #Group read only
current_permissions = stat.S_IMODE(os.stat(path).st_mode)
os.chmod(path, current_permissions | GROUP_RO)
Я также пытался использовать битовые маски.Я не мог придумать, как объединить битовые маски и где - если я изменяю пользовательские разрешения, я могу защитить / замаскировать как групповые, так и другие разрешения от изменения.
Я пытался использовать битовые маски следующим образом:
GROUP_RO = S_IRGRP #Group read only
USER_MASK = S_IRWXU
os.chmod(path, USER_MASK | GROUP_RO) #this works at preventing User permissions from being modified
Но соединение нескольких масок не дает:
USER_MASK = S_IRWXU
OTHERS_MASK = S_IRWXO
os.chmod(path, USER_MASK | OTHERS_MASK | GROUP_RO) #does not work
Я пробовал бесконечные комбинацииразличных битовых операторов и битовых масок, с текущими разрешениями или без них, и не повезло.
Что я хотел бы сделать:
# current permissions -> U: read only, G: read and write, O: write only
os.chmod(path, [whatever code making this work])
# new permissions -> U: read only, G: read only, O: write only
В любой ситуации,другие объекты не изменены.