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.
Возвращает эффективный UID.
Возвращает действительный GID.
Возвращает эффективный GID.
Заполняет до
Возможно, вы заметили, что для получения сохраненных значений set-user ID или set-group ID нет вызовов. Это просто первоначальные значения эффективных UID и GID. Таким образом, для получения шести значений в начале программы вы можете использовать код наподобие этого:
Вот пример получения набора групп. В качестве расширения
Варяги и Русь
Всемирная история в романах
Проза:
историческая проза
рейтинг книги
Сталин
3. Загадки жизни и смерти
Проза:
историческая проза
рейтинг книги
Товарищ "Чума"
1. Товарищ "Чума"
Фантастика:
попаданцы
альтернативная история
рейтинг книги
1941: Время кровавых псов
1. Всеволод Залесский
Приключения:
исторические приключения
рейтинг книги
Неучтенный элемент. Том 2
2. Антимаг. Вне системы
Фантастика:
городское фэнтези
фэнтези
рейтинг книги
Советы по Delphi. Версия 1.4.3 от 1.1.2001
Компьютеры и Интернет:
программирование
рейтинг книги
Тень Нерона
3. Сыщик
Фантастика:
детективная фантастика
рейтинг книги
Сборник.Том 8
8. Отцы-основатели. Весь Азимов
Фантастика:
научная фантастика
рейтинг книги
Ворон
Фантастика:
попаданцы
фэнтези
гаремник
рейтинг книги
Поварское искусство
Дом и Семья:
кулинария
рейтинг книги
Дневник (1887-1910)
Проза:
проза прочее
рейтинг книги