Различия между версиями 5 и 6
Версия 5 от 2008-07-26 19:27:53
Размер: 6735
Редактор: MaximByshevskiKonopko
Комментарий:
Версия 6 от 2008-07-26 21:18:11
Размер: 7362
Редактор: MaximByshevskiKonopko
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 3: Строка 3:
При доступе процесса к польз определяется id файла и определяется список групп, в которые входит пользователь-владелец процесса. ## При доступе процесса к польз определяется id файла и определяется список групп, в которые входит пользователь-владелец процесса.
Строка 5: Строка 5:
Сответственно, алгоритм простой:
 * Если идентификатор пользовалеля процесса равен id пользователя файла, то права определяются по первому триплету.
При доступе процесса к файлу необходимо выяснить, какое отношение имеет данный процесс к данному файлу, и какие действия в итоге он может совершать.

А
лгоритм простой:
 * Если идентификатор пользователя процесса равен id пользователя файла, то права определяются по первому триплету.
Строка 10: Строка 12:
Изменять права доступа к файлам может только владелец. uid сменить нельзя, gid можно менять только на группу из списка своих групп. Изменять права доступа к файлам может только владелец. UID сменить нельзя, GID можно менять только на группу из списка своих групп.
Строка 12: Строка 14:
Среди всех uid в системе выделяется один, процессы, выполняемые от лица которого, не используют права доступа (система с доверенным субъектом). Если uid процесса равен 0, то он выполняется от лица суперпользователя и при доступе файла он его получает. Соответственно, root может поставить права доступа чему угодно. Среди всех UID в системе выделяется один, процессы, выполняемые от лица которого, не используют права доступа (система с доверенным субъектом). Если UID процесса равен 0, то он выполняется от лица суперпользователя и при доступе файла он его получает. Соответственно, root может поставить права доступа чему угодно.
Строка 16: Строка 18:
Впрос: может ли поменять себе процесс uid? да, тлько если у него сначала был uid = 0. Для этго существует вызов setuid. Зачем это использовать: для логина используется login или *dm. Они выполняются от лица суперпользователя. После логина порождается новый процесс, меняется uid и запускается шелл. Получается стройная система: какие-то программы запускаются под рутом, дальше они запущены от лица пользователей. А дальше уже uid наследуется. По этой причине пользователь, что бы он не делал, не может повысить себе права. Впрос: может ли поменять себе процесс UID? да, но только если у него сначала был UID = 0. Для этго существует вызов setuid. Зачем это использовать: для логина используется login или *dm. Они выполняются от лица суперпользователя. После логина порождается новый процесс, меняется UID и запускается шелл. Получается стройная система: какие-то программы запускаются под рутом, дальше они работают от лица пользователей. А дальше уже UID наследуется. По этой причине пользователь, что бы он не делал, не может повысить себе права.
Строка 18: Строка 20:
У этой стрйной арзитектуры есть один изъян --- пользователю бывает необходимо совершать действия от лица суперпользователя. При этом логиниться как рут очень не хочется, хочется всего лишь запустить пд рутом программу. Ещё одно типичное действие --- смена пароля, настройка. Ответ --- существует механизм получения прав суперпользователя обычным пользователем. При запуске процесса наследуется uid рдительскго прцесса за одним исключением --- если у файла установлен setuid-бит, и этот файл запускемый, то получаемый процесс получает uid не пользователя, а файла. Программа sudo позволяет определить список команд, который мжно выполнять пользователю с несвоими правами. Естественно, команда sudo должна выполняться с правами рута. Есть более простая программа, su, которая позволяет запустить процесс с чужими правами. У этой стройной архитектуры есть один изъян --- пользователю бывает необходимо совершать действия от лица суперпользователя. При этом логиниться как рут очень не хочется, хочется всего лишь запустить как суперпользователь программу. Ещё одно типичное действие --- смена пароля, настройка. Ответ --- существует механизм получения прав суперпользователя обычным пользователем. При запуске процесса наследуется UID родительского процесса за одним исключением --- если у файла установлен setuid-бит, и этот файл исполнимый, то получаемый процесс получает UID не пользователя, а файла. Программа sudo позволяет определить список команд, который можно выполнять пользователю от лица другого пользователя. Естественно, команда sudo должна выполняться с правами рута. Есть более простая программа, su, которая позволяет изменить ID пользователя.
Строка 20: Строка 22:
Есть некоторое количесвто программ, которым необходимо в процессе работы изменять свой uid. Поэтму эти прграммы при старте должны плучить uid 0. В ls -l символ s означает, что есть x-бит и есть бит setuid. Есть некоторое количество программ, которым необходимо в процессе работы изменять свой UID. Поэтму эти программы при старте должны получить UID 0. В ls -l символ s означает, что есть x-бит и есть бит setuid.
Строка 22: Строка 24:
Аналогично setgid --- добавление gid для процесса из gid файла. Типичные usecases --- passwd в альте и игры. Аналогично setgid --- добавление GID для процесса из GID файла. Типичные usecases --- passwd в альте и игры (файл, в котором сохраняются highscores, доступен на запись только той группе, setgid на которую стоит у исполняемого файла игры).
Строка 24: Строка 26:
Из всего сказанного: вы можете удалить файл из своего каталога, даже если он чужой. Таким образом появляется опасное место --- /tmp. Если бы не одно извращение, то омжно было бы удалить чужой файл. Извращение --- sticky bit --- нельзя удалять чужие файлы. Из всего сказанного: вы можете удалить файл из своего каталога, даже если он чужой. Таким образом появляется опасное место --- /tmp. Если бы не одно извращение, то можно было бы удалить чужой файл. Извращение --- sticky bit --- в каталоге, для которого он установлен, и в его подкаталогах, нельзя удалять чужие файлы.
Строка 32: Строка 34:
|| 11 || 1 || 1 || 1 || || 1 || MaximByshevskiKonopko, VladimirLysikov, MaximByshevskiKonopko || || || || 16 || 1 || 1 || 1 || || 1 || MaximByshevskiKonopko, VladimirLysikov, MaximByshevskiKonopko || || ||

Процессы, права доступа

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

Алгоритм простой:

  • Если идентификатор пользователя процесса равен id пользователя файла, то права определяются по первому триплету.
  • Если идентификаторы не совпадают, то проверяется, нет ли среди списка групп, в которые входит пользователь, группа файла. Если есть, то используется второй триплет
  • Во всех остальных случаях используется третий триплет.

Изменять права доступа к файлам может только владелец. UID сменить нельзя, GID можно менять только на группу из списка своих групп.

Среди всех UID в системе выделяется один, процессы, выполняемые от лица которого, не используют права доступа (система с доверенным субъектом). Если UID процесса равен 0, то он выполняется от лица суперпользователя и при доступе файла он его получает. Соответственно, root может поставить права доступа чему угодно.

По этой причине крайне не рекомендуется выполнять обыденные действия от лица рута. Зачем нужен суперпользователь? Для административных действий. Второе --- некие процессы, которые что-то с системой делают. Соответственно, использование root'а стараются (особенно в OWL и ALT Linux) минимизировать.

Впрос: может ли поменять себе процесс UID? да, но только если у него сначала был UID = 0. Для этго существует вызов setuid. Зачем это использовать: для логина используется login или *dm. Они выполняются от лица суперпользователя. После логина порождается новый процесс, меняется UID и запускается шелл. Получается стройная система: какие-то программы запускаются под рутом, дальше они работают от лица пользователей. А дальше уже UID наследуется. По этой причине пользователь, что бы он не делал, не может повысить себе права.

У этой стройной архитектуры есть один изъян --- пользователю бывает необходимо совершать действия от лица суперпользователя. При этом логиниться как рут очень не хочется, хочется всего лишь запустить как суперпользователь программу. Ещё одно типичное действие --- смена пароля, настройка. Ответ --- существует механизм получения прав суперпользователя обычным пользователем. При запуске процесса наследуется UID родительского процесса за одним исключением --- если у файла установлен setuid-бит, и этот файл исполнимый, то получаемый процесс получает UID не пользователя, а файла. Программа sudo позволяет определить список команд, который можно выполнять пользователю от лица другого пользователя. Естественно, команда sudo должна выполняться с правами рута. Есть более простая программа, su, которая позволяет изменить ID пользователя.

Есть некоторое количество программ, которым необходимо в процессе работы изменять свой UID. Поэтму эти программы при старте должны получить UID 0. В ls -l символ s означает, что есть x-бит и есть бит setuid.

Аналогично setgid --- добавление GID для процесса из GID файла. Типичные usecases --- passwd в альте и игры (файл, в котором сохраняются highscores, доступен на запись только той группе, setgid на которую стоит у исполняемого файла игры).

Из всего сказанного: вы можете удалить файл из своего каталога, даже если он чужой. Таким образом появляется опасное место --- /tmp. Если бы не одно извращение, то можно было бы удалить чужой файл. Извращение --- sticky bit --- в каталоге, для которого он установлен, и в его подкаталогах, нельзя удалять чужие файлы.


Сведения о ресурсах

Готовность (%)

Продолжительность (ак. ч.)

Подготовка (календ. ч.)

Полный текст (раб. д.)

Предварительные знания

Level

Maintainer

Start date

End date

16

1

1

1

1

MaximByshevskiKonopko, VladimirLysikov, MaximByshevskiKonopko


CategoryLectures CategoryPspo CategoryMpgu CategoryUneex

PspoClasses/080718/04Rights (последним исправлял пользователь MaximByshevskiKonopko 2008-10-09 21:43:51)