Как безопасно установить флаги с помощью open ()? - PullRequest
0 голосов
/ 11 января 2020

В этом вопросе: Какая связь между флагами и режимом в функции открытия файла в C

В комментариях:

вопрос

Если я создаю файл, используя 'S_IRUSR' в качестве бита режима в первом open (), то другие вызывают open (), используя '' O_RDONLY ", поскольку флаг не сможет прочитать файл

ответ

Один и тот же пользователь сможет прочитать файл. И, просто технически, дело не в том, что другие пользователи победили ' Я не могу прочитать файл, это потому, что они не смогут открыть файл

Поэтому я спросил, в чем смысл устанавливать права доступа при открытии (или создании) нового файла, и вот почему я спрашиваю здесь. Там также упоминается:

Они могут, в качестве крайнего примера, иметь доступ на запись в каталог, что означает, что они могут переименовать ваш файл, скопировать его в исходное имя, иметь доступ к этому, а затем удалить переименованный. Разрешения работают, но вы должны следовать если они настроены правильно (как, например, защита всего пути, ведущего к файлу, а не только самого файла.

Так что я не понимаю, что означает «правильно установить флаги». А также до сих пор не понимаю цель установки разрешений, когда это не безопасно. Может кто-нибудь объяснить немного?

Ответы [ 2 ]

2 голосов
/ 11 января 2020

Итак, я спросил, в чем смысл устанавливать разрешение при открытии (соответственно создании) нового файла, и именно поэтому я спрашиваю здесь. Также упоминается:

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

Комментарии представлены в частично неверная цитата . Это правда, что лицо, имеющее разрешение на запись в каталог, но не имеющее никаких прав на файл, может переименовать файл или удалить его ( в / из этого каталога , см. ниже). Также верно, что, пройдя тем самым путь, один и тот же человек может создать новый файл, доступный для чтения, с оригинальным именем другого. Однако un верно, что такой человек может скопировать исходный файл, с его оригинальным именем или любым другим, или может использовать такой маневр для чтения исходного файла.

Ключевым моментом здесь является то, что запись в каталоге для file F в каталоге D - это просто данные в специальном виде файла: сопоставление имени с записью в базовой файловой системе. Искусство D , не является частью F , поэтому для манипулирования им требуется доступ к D , а не к F . То, что люди обычно называют именем файла, на самом деле не является частью этого файла и не обязательно является уникальным, поскольку один и тот же файл может быть связан с деревом каталогов в нескольких местах с одинаковыми или разными именами.

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

Ответ первая часть вопроса, таким образом, имеет два аспекта:

  • Атрибуты контроля доступа к файлам являются неотъемлемой частью метаданных файловой системы этого файла, поэтому нельзя избежать их установки на что-то при создании файла.
  • Вы не можете отложить настройку разрешения, когда открываете файл (имя), который еще не существует, но который вы хотите создать, поскольку система будет использовать исходный файл разрешения на проверку доступа для открытия вновь созданного файла. Соответствующие разрешения для файла не могут быть получены из запрошенного режима открытия.

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

Я не понимаю, что означает «правильно установить флаги».

Комментарий кажется мне достаточно ясным, особенно в свете прилагаемого к нему примера, но, возможно, вам было бы понятнее, если бы более крупное утверждение, содержащее его, было переписано как «вам нужно принять эти соображения, касающиеся не только самого файла, но и каждого каталога на пути к нему, чтобы гарантировать, что права доступа к файлам соответствуют вашим целям безопасности ".

0 голосов
/ 11 января 2020

Я постараюсь объяснить это как можно короче. Если вы выполните 'ls -la' где-нибудь в вашей файловой системе, вы увидите нечто похожее на список файлов ниже. Он отображает основы разрешений для файловых систем в Linux и аналогичных операционных системах. Запуск man chmod объясняет это подробно; Вы также должны увидеть описание функции 'man 3 chmod'.

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

drwx r-x r-x  2 root root    4096 Dec 14 23:55 .
drwx r-x r-x 24 root root    4096 Dec  5 19:02 ..
-rwx r-x r-x  1 root root 1113504 Jun  7  2019 file1
-rwx r-x r-x  1 root root  748968 Aug 29  2018 file2
-rwx r-x r-x  1 root root   34888 Jul  4  2019 file3
...
-rwx r-x r-x  1 root root   34888 Jul  4  2019 file_n
 ^^^ ^^^  ^^^ 
  |   |   |  
  |   |   +---------------------- permissions other users  
  |   +-------------------------- permissions for group members
  +------------------------------ permissions for owner
  d  - is a directory
  r  - read permission
  w  - write perrmision
  x  - execute permission
...