Чтение онлайн

на главную - закладки

Жанры

Linux программирование в примерах
Шрифт:

• Концепции сохраненных set-user ID и set-group ID пришли из System V и были приняты POSIX с полной поддержкой в GNU/Linux. Наличие этих отдельных значений ID дает возможность легко и безошибочно переключать при необходимости действительные и эффективные UID (и GID).

• Программы setuid и setgid создают процессы, в которых действительные и эффективные ID различаются. Программы как таковые помечаются дополнительными битами прав доступа к файлу. Биты setuid и setgid должны быть добавлены к файлу после его создания.

• 

getuid
и
geteuid
получают значения действительного и эффективного UID соответственно, a
getgid
и
getegid
получают значения действительного и эффективного GID соответственно,
getgroups
получает набор дополнительных групп, а в среде POSIX может запросить у системы, сколько членов содержит набор групп.

• Функция

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

• Функция GLIBC

euidaccess
сходна с
access
, но осуществляет проверку на основе значений эффективных UID и GID.

• «Липкий» бит и бит setgid при использовании с каталогами привносят дополнительную семантику. Когда для каталога установлен бит setgid, новые файлы в этом каталоге наследуют группу этого каталога. Новые каталоги делают то же самое, они также автоматически наследуют установку бита setgid. Без установленного бита setgid новые файлы и каталоги получают эффективный GID создающего их процесса. «Липкий» бит, установленный для каталогов, в которые в других отношениях разрешена запись, ограничивает право на удаление файла владельцем файла, владельцем каталога и

root
.

• Набор групп изменяется с помощью

setgroups
. Эта функция не стандартизована POSIX, но существует на всех современных системах Unix. Ее может использовать лишь
root
.

• Изменение UID и GID довольно сложно. Семантика различных системных вызовов с течением времени изменилась. Новые приложения, которые будут изменять лишь свои эффективные UID/GID, должны использовать

seteuid
и
setegid
. Приложения, не действующие от имени
root
, могут также устанавливать свои эффективные ID с помощью
setuid
и
setgid
. Вызовы
setreuid
и
setregid
от BSD были предназначены для обмена значениями UID и GID; их использование в новых программах не рекомендуется.

• Приложения, действующие как

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

• Функции Linux

setresuid
и
setresgid
следует использовать всегда, когда они доступны, поскольку они обеспечивают самое чистое и наиболее надежное поведение

• Написание приложений setuid-

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

Упражнения

1. Напишите простую версию команды

id
. Ее назначением является отображение в стандартный вывод ID пользователя
и группы с указанием имен групп. Когда эффективный и действительный ID различаются, выводятся оба. Например:

$ id

uid=2076(arnold) gid=42(devel) groups=19(floppy), 42(devel), 2076(arnold)

Ее использование:

id [ пользователь ]

id -G [ -nr ] [ пользователь ]

id -g [ -nr ] [ пользователь ]

id -u [ -nr ] [ пользователь ]

При указанном пользователе выводятся сведения об этом пользователе; в противном случае

id
выводит сведения о пользователе, вызвавшем программу. Опции следующие:

 -G
Выводит все значения групп в виде чисел, без имен.

 -n
Выводит лишь имена, без числовых значений. Применяется с значениями пользователя и группы.

 -g
Выводит лишь эффективный GID.

 -u
Выводит лишь эффективный UID.

2. Напишите простую программу с именем

sume
и установите setuid на себя. Она должна запрашивать пароль (см. getpass(3)), который в целях данного примера может быть жестко вшит в исходный код программы. Если лицо, запустившее программу, вводит пароль правильно,
sume
должна выполнить exec оболочки. Попросите другого пользователя помочь вам ее протестировать.

3. Как вы относитесь к тому, чтобы сделать

sume
доступной для ваших друзей? Для ваших приятелей студентов или сотрудников? Для каждого пользователя на вашей системе?

Глава 12 Общие библиотечные интерфейсы — часть 2

В главе 6, «Общие библиотечные интерфейсы — часть 1», был представлен первый набор API библиотеки общего пользования. В некотором смысле, эти API поддерживают работу с фундаментальными объектами, которыми управляют системы Linux и Unix: время дня, пользователи и группы для файлов, сортировка и поиск.

Данная глава более эклектична; функции API, рассмотренные здесь, не особо связаны друг с другом. Однако, все они полезны в повседневном программировании под Linux/Unix. Наше представление движется от простых, более общих функций API к более сложным и более специализированным.

12.1. Операторы проверки:

assert

Оператор проверки (assertion) является утверждением, которое вы делаете о состоянии своей программы в определенный момент времени ее исполнения. Использование операторов проверок для программирования было первоначально разработано Хоаром (C.A.R. Hoare) [121] . Общая идея является частью «верификации программы»: так же, как вы проектируете и разрабатываете программу, вы можете показать, что она правильна, делая тщательно аргументированные утверждения о проявлениях кода вашей программы. Часто такие утверждения делаются об инвариантах — фактах о состоянии программы, которые, как предполагается, остаются верными на протяжении исполнения куска программы.

121

Однако, в своей лекции в честь присуждения премии Тьюринга Ассоциации по вычислительной технике в 1981 г. д-р Хоар утверждает, что эту идею выдвинул сам Алан Тьюринг — Примеч. автора.

Поделиться:
Популярные книги

MARVEL: Небесный Кузнец

Expero
Фантастика:
эпическая фантастика
фэнтези
5.00
рейтинг книги
MARVEL: Небесный Кузнец

Рыцарь

Андрижески Дж. С.
5. Мост и Меч
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Рыцарь

Миф

Серый Александр
Фантастика:
научная фантастика
5.00
рейтинг книги
Миф

Опыты (Том 1)

Монтень Мишель
Научно-образовательная:
философия
6.25
рейтинг книги
Опыты (Том 1)

Шерлок Холмс. Большой сборник

Дойл Артур Конан
Детективы:
классические детективы
8.34
рейтинг книги
Шерлок Холмс. Большой сборник

Высоцкий

Новиков Владимир Иванович
829. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
5.20
рейтинг книги
Высоцкий

Я снова князь. Книга XXIII

Дрейк Сириус
23. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я снова князь. Книга XXIII

Отморозок 1

Поповский Андрей Владимирович
1. Отморозок
Фантастика:
попаданцы
5.00
рейтинг книги
Отморозок 1

Сталин

Рыбас Святослав Юрьевич
1190. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
4.50
рейтинг книги
Сталин

Варяжская сталь: Герой. Язычник. Княжья Русь

Мазин Александр Владимирович
Варяг
Фантастика:
боевая фантастика
попаданцы
альтернативная история
8.67
рейтинг книги
Варяжская сталь: Герой. Язычник. Княжья Русь

Тунгусский Робинзон

Шляпин Александр
Детективы:
боевики
крутой детектив
5.75
рейтинг книги
Тунгусский Робинзон

Методы статистического анализа исторических текстов (часть 2)

Фоменко Анатолий Тимофеевич
Научно-образовательная:
история
5.00
рейтинг книги
Методы статистического анализа исторических текстов (часть 2)

Кодекс Охотника. Книга XXVII

Винокуров Юрий
27. Кодекс Охотника
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XXVII

Стрелок. Извлечение троих. Бесплодные земли

Кинг Стивен
Фантастика:
фэнтези
5.00
рейтинг книги
Стрелок. Извлечение троих. Бесплодные земли