Linux программирование в примерах
Шрифт:
Наличие символа s в месте, где обычно находится символ x, указывает на присутствие битов setuid/setgid.
Как упоминалось в разделе 8.2.1 «Использование опций монтирования», опция
117
Безопасность для систем GNU/Linux и Unix является глубокой темой сама по себе. Это просто пример. см. раздел 11.9 «Рекомендуемая литература» — Примеч. автора.
Каноническим (и возможно, злоупотребляемым) примером программы с setuid является игровая программа. Представьте, что вы написали по-настоящему крутую игру и хотите позволить пользователям системы играть в нее. Игра содержит файл счета, в котором перечислены высшие достижения.
Если вы не являетесь системным администратором, вы не можете создать отдельную группу только для тех пользователей, которым разрешено играть в игру и тем самым записывать в файл счета. Но если вы сделаете файл доступным для записи любому, чтобы каждый смог поиграть в игру, тогда каждый сможет также сжульничать и поместить наверх любое имя.
Однако, заставив программу устанавливать setuid на вас, пользователи, запускающие игру, получат ваш UID в качестве своего эффективного UID. Игровая программа сможет при этом открывать и обновлять файл счета по мере необходимости, но произвольные пользователи не смогут прийти и отредактировать его. (Вы подвергаете себя также большинству опасностей при программировании setuid; например, если в игровой программе есть дыра, которую можно использовать для запуска оболочки, действующей от вашего имени, все ваши файлы оказываются доступными для удаления или изменения. Это действительно устрашающая мысль.)
Та же логика применяется к программам setgid, хотя на практике программы с setgid используются гораздо реже, чем с setuid (Это также плохо; многие вещи, которые делаются программами с setuid
11.2. Получение ID пользователя и группы
Получение от системы сведений о UID и GID просто. Функции следующие:
118
Одной из программ, разработанных с этой целью, является GNU userv (
Функции:
Возвращает
Возвращает эффективный UID.
Возвращает действительный GID.
Возвращает эффективный GID.
Заполняет до
Возможно, вы заметили, что для получения сохраненных значений set-user ID или set-group ID нет вызовов. Это просто первоначальные значения эффективных UID и GID. Таким образом, для получения шести значений в начале программы вы можете использовать код наподобие этого:
Вот пример получения набора групп. В качестве расширения
Фонтанелла
Проза:
современная проза
рейтинг книги
Последний вздох. Гепталогия
Последний вздох
Фантастика:
героическая фантастика
боевая фантастика
космическая фантастика
рейтинг книги
Лекарь Империи 2
2. Лекарь Империи
Фантастика:
городское фэнтези
аниме
дорама
фэнтези
попаданцы
рейтинг книги
По ту сторону рассвета
Фантастика:
фэнтези
рейтинг книги
Твердь: русская борзая. Дилогия
Твердь: русская борзая
Фантастика:
городское фэнтези
аниме
фэнтези
рейтинг книги
Крестный сын
Фантастика:
фэнтези
рейтинг книги