2016-03-09 3 views
-6

Я пытаюсь отключить пользователя от открытия файла. Цель состоит в том, что, когда пользователь попытается открыть конкретный файл, он не сможет.Как запретить доступ к файлу для одного пользователя?

Кроме того, я хочу иметь возможность вернуть разрешения и позволить пользователю открыть файл.

Я только нашел способы включить отправку: os.chmod(path, 0444), но я не могу понять, как отключить разрешения.

+1

Не могли бы вы показать нам, что вы пытались с 'os.chmod'? – L3viathan

+1

Добро пожаловать в переполнение стека! Не могли бы вы прояснить, в чем проблема? «Это не работает» не очень полезно. Что именно вы пробовали? Что случилось? Вы получаете какие-либо ошибки? Пожалуйста, найдите минутку, чтобы прочитать [Как задать хороший вопрос?] (Http://stackoverflow.com/help/how-to-ask). – Carpetsmoker

+0

Я только нашел способы, позволяющие отправлять сообщения: 'os.chmod (path, 0444)' – jonathan

ответ

7

Unix разрешение праймер:

Каждый файл имеет user. Это пользователь в системе. В каждом файле также есть group. Это группа в системе. A user может быть в одном или нескольких group с. Файл имеет ровно один user и один group, который «владеет» файлом.

Так что же такое число 0444 означает?

Первое число используется для некоторых специальных флагов, таких как sticky, setuid, setgid. Нам не нужно беспокоиться об этом прямо сейчас. Только не забудьте установить его на 0

Следующие три цифры обозначают три разрешения: один для user, group и other (всем, что не user или group), в таком порядке.

Для установки разрешений мы используем число от нуля до семи (восьмеричное число). На самом деле это bitmask. 1 для execute, 2 предназначенный для write, 4 для read.

В таблице это выглядит следующим образом:

N Description     ls output 

0 No read, no write, no execute --- 
1 No read, no write, execute  --x 
2 No read, write, no execute  -w- 
3 No read, write, execute   -wx 
4 Read, no write, no execute  r-- 
5 Read, no write, execute   r-x 
6 Read, write, no execute   rw- 
7 Read, write, execute    rwx 

read и write должны быть понятны. execute означает, что вы можете запустить файл с ./ls (это не мера безопасности, и кстати можно обойти). Обратите внимание, что каталоги - это также файлов в Unix-системах, таких как Linux. В каталоге должен быть установлен бит execute, если вы хотите, чтобы в него входил cd.

Номер, который вы будете использовать чаще всего являются:

  • 7, для полного доступа
  • 6, для полного доступа, за исключением выполнения
  • 4, только для чтения.

Так что, если вы посмотрите на команду os.chmod(path, 0444) мы видим, что вы установили доступ только для чтения для всех пользователей. Это не то, что вы хотите.

Правильные разрешения зависят от того, где user и group принадлежит файл. Если файл не принадлежат пользователю требуется запретить доступ, и не в группе, которая принадлежит, вы можете использовать файл:

os.chmod(path, 0440) 

Если мы посмотрим на таблицу выше , мы видим, что это означает:

  • Прочитать, написать, не выполнить для user.
  • Прочитать, написать, не выполнить для group.
  • НЕТ разрешений для other.

Если файл не принадлежат пользователю нужно запретить доступ и в группе, которая принадлежит, вы можете использовать файл:

os.chmod(path, 0400) 

Это будет сделать его доступным для userтолько. Обратите внимание, что у этого могут быть есть побочные эффекты, так как все остальные в группе также не могут его прочитать.

Однако, если файл принадлежит пользователю, тогда вам необходимо изменить файл user. Это можно сделать с помощью функции os.chown(). например:

os.chown(path, 'martin') 
os.chmod(path, 0400) 

: Вы можете использовать списки контроля доступа, если вы хотите назначить большее количество пользователей или групп к файлу, но в> 95% нет необходимости, и это только добавляет сложность, может быть трудно справиться. По умолчанию он отключен.

: Таблица снят с FreeBSD handbook

+0

спасибо, но я предполагаю, что я не был ясным enoght. Моя цель - создать систему, которая работает таким образом: когда кто-либо пытается открыть определенную папку, она не открывается и появится графический интерфейс пользователя, который я создал. Не могли бы вы мне помочь? – jonathan

+0

@jonathan. Способ сделать это - запретить доступ к файлу для пользователя, желающего получить к нему доступ, и запустить фоновый процесс (демон) как другого пользователя, который * имеет * доступ к этим файлам, которые будут создавать такие диалоги и при необходимости отправьте файлы. Вы можете контролировать доступ к файлам с помощью inotify или gamin. Это требует некоторого количества программирования, и полный ответ на это несколько выходит за рамки ответа SO ... Такие программы, вероятно, уже существуют в той или иной форме. – Carpetsmoker

Смежные вопросы