Использование setuid? - PullRequest
       3

Использование setuid?

3 голосов
/ 06 января 2012

Я недавно прочитал слайд Powerpoint и не могу получить четкое представление об использовании setuid.Вот содержимое слайда.

Пример Setuid - печать файла

  • Цели
    • Каждый пользователь может ставить в очередь файлы
    • Пользователи не могут удалять файлы других пользователей
  • Решение
    • Каталог очереди, принадлежащий пользовательскому принтеру
    • Программа файла очереди setuid
      • Создатьфайл очереди как пользовательский принтер
      • копирование данных joe как пользователя joe
    • Кроме того, программа удаления файлов setuid
      • Разрешает удаление только тех файлов, которые находятся в очереди
    • Пользовательский доступ к очереди пользователя Джо с помощью принтера.

Вот мои вопросы.У меня нет четкого понимания, как решить эту проблему с помощью "setuid".

  1. Во-первых, если файл создается принтером пользователя, как пользователь может копировать данные в файл, принадлежащийпо принтеру.Имеет ли он какое-то определенное право на этот файл.
  2. Во-вторых, как определить связь между вами и файлом, который вы поставили в очередь.
  3. Показывает ли состояние файла что-то, но файл принадлежитпринтер, который может быть изменен только пользователем root.Это как-то связано с gid файла?Если это так, то с этим файлом может быть связан и заголовок других пользователей.
  4. Показывает ли контекст файла что-либо о том, кто поставил его в очередь?

Мои вопросы беспорядок, и я действительноне имею четкого представления о решении.

1 Ответ

3 голосов
/ 06 января 2012

Предположим, что файлы должны храниться в каталоге /var/spool/pq;разрешения для каталога printer:printgrp:2700 (владелец printer, группа printgrp, режим 2700 - чтение, запись, выполнение только для владельца, а установленный в каталоге бит SGID означает, что все созданные в нем файлы будут принадлежать группе printgrp).

Далее, мы предполагаем, что программа очереди печати, pq, имеет разрешения printer:printgrp:4511 (setuid printer, любой может ее выполнить, но только printer или root можетпосмотрите на это).

Теперь предположим, что Джо запускает pq /home/joe/file, а права доступа к файлу joe:staff:600 (только Джо может читать или записывать в файл).Umask Джо имеет значение 022 (хотя этот файл имеет более ограничивающие разрешения, чем подразумевает umask).

При запуске программы реальный UID процесса равен joe, но эффективный UID равен printer.Поскольку здесь нет необходимости в операции setgid, реальный и эффективный GID равны staff.Список вспомогательных групп Джо не включает printgrp.

Обратите внимание, что это эффективный UID и GID процесса, который контролирует его доступ к файлам.Сам Джо не может видеть, какие задания находятся в очереди на печать;показанные разрешения каталога даже не позволяют ему перечислять файлы или обращаться к файлам в каталоге.Обратите внимание, что применяется обратное;сам пользователь printer (или программа pq, выполняющаяся от имени этого пользователя) не может получить доступ к файлу Джо.

Программа pq может создавать файлы в каталоге очереди принтера;вероятно, он создаст два файла для этого запроса.Один будет контрольным файлом, другой будет копией файла для печати.Он определит номер задания по какому-либо механизму (скажем, 12345) и может создать и открыть два файла для записи (с ограниченными правами - 0600 или даже 0400):

  • /var/spool/pq/c.12345 - контрольный файл
  • /var/spool/pq/d.12345.1 - первый (единственный) файл данных

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

Итак, это касается вопросов 1 (разрешения) и 2 (управляющая информация), а также 4 (управляющая информация снова).

Что касается вопроса 3, root - это всегда подстановочный знак в Unix-подобных системах, потому что он может делать все, что захочет.Однако, как следует из остальной части ответа, контрольный файл содержит информацию о запросе на печать, включая (в частности), кто его отправил.Вы можете использовать программы setgid вместо программ setuid;они работают аналогичным образом.Тем не менее, в системе, которую я постулировал, групповые разрешения по сути не входили в картину.Программа pq установила разрешения для управляющего файла и файла данных так, что группа не может их прочитать, а права доступа к каталогу также запрещают доступ к группе.

Мы можем постулировать еще две программы:

  • pqs - состояние очереди принтера
  • pqr - удаление очереди принтера

Для этих программ также будет установлен printer.Программа pqs может читать контрольные файлы в каталоге и выводить из них соответствующую информацию.Программа pqr может читать контрольные файлы, чтобы гарантировать, что когда Джо отправит задание 12345, когда он запросит удаление задания 12345. Если программа выполнена, то она может удалить файлы.

Отдельно от этих программ, вызываемых пользователем, будет также программа-демон (условно называемая pqd в этой системе), которая будет запущена pq, если она еще не запущена.Он будет отвечать за чтение контрольных файлов в каталоге и использование этой информации для фактической печати файлов данных на соответствующий принтер.Детали того, как обрабатываются разные принтеры и разные форматы данных, являются проблемой для демона.Демон также будет работать с привилегиями printer, а printer будет предоставлен доступ к устройствам принтера (для локально подключенных принтеров) или он настроен для связи по сети с помощью протокола, такого как IPP (Internet Printer Protocol).Джо, вероятно, не сможет использовать устройства принтера напрямую.

Обратите внимание, что программы setuid обладают полномочиями, которых нет у Джо.Они должны быть написаны тщательно, чтобы Джо не мог злоупотреблять этими дополнительными полномочиями.Любая программа setuid несколько опасна;программа setuid root может быть смертельной.В общем, программы setgid менее опасны.Однако для обоих типов программ требуется большая осторожность при написании таких программ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...