Книга: Linux программирование в примерах
Упражнения
Упражнения
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
доступной для ваших друзей? Для ваших приятелей студентов или сотрудников? Для каждого пользователя на вашей системе?
- 11.1. Проверка прав доступа
- 11.2. Получение ID пользователя и группы
- 11.3. Проверка для действительного пользователя: access()
- 11.4. Проверка для эффективного пользователя: euidaccess() (GLIBC)
- 11.5. Установка дополнительных битов доступа для каталогов
- 11.6. Установка действительных и эффективных ID
- 11.7. Работа со всеми тремя ID: getresuid() и setresuid() (Linux)
- 11.8. Пересечение минного поля безопасности: setuid root
- 11.9. Рекомендуемая литература
- 11.10. Резюме
- Упражнения