Книга: Программирование для Linux. Профессиональный подход
Листинг 10.3. (setuid-test.c) Проверка идентификаторов
Листинг 10.3. (setuid-test.c) Проверка идентификаторов
#include <stdio.h>
#include <unistd.h>
int main() {
printf("uid=%d euid=%dn", (int)getuid(), (int)geteuid());
return 0;
}
Теперь предположим, что у программы установлен бит SUID и она принадлежит пользователю root
. В этом случае вывод команды ls
будет примерно таким:
-rwsrws--x 1 root root 11931 Jan 24 18:25 setuid-test
Буквы s в строке режима означают, что этот файл не только является исполняемым, но для него установлены также биты SUID и SGID. Результат работы программы будет таким:
% whoami
mitchell
% ./setuid-test
uid=501 euid=0
Обратите внимание на то, что эффективный идентификатор стал равным нулю. Устанавливать биты SUID и SGID позволяют команда chmod u+s
и chmod g+s
соответственно. Приведем пример:
% ls -l program
-rwxr-xr-x 1 samuel csl 0 Jan 30 23:38 program
% chmod g+s program
% ls -l program
-rwxr-sr-x 1 samuel csl 0 Jan 30 23:38 program
% chmod u+s program
% ls -l program
-rwsr-sr-x 1 samuel csl 0 Jan 30 23:38 program
Аналогичным целям служат флаги S_ISUID
и S_ISGID
функции chmod()
.
Именно так работает команда su
. Ее эффективный идентификатор пользователя равен нулю. Если введенный пароль совпадает с паролем пользователя root, команда меняет свой реальный идентификатор на root, после чего запускает новый интерпретатор команд. В противном случае ничего не происходит.
Рассмотрим атрибуты программы su
:
% ls -l /bin/su
-rwsr-xr-x 1 root root 14188 Mar 7 2000 /bin/su
Как видите, она принадлежит пользователю root
и для нее установлен бит SUID. Обратите внимание на то, что команда su
не меняет идентификатор интерпретатора команд, в котором она была вызвана, а запускает новый интерпретатор с измененным идентификатором. Первоначальный интерпретатор будет заблокирован до тех пор, пока пользователь не введет exit
.
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- rc.test-iptables.txt
- Листинг 15.11. Код для загрузки файла с Web-сервера
- Example rc.test-iptables script
- 5. Null-значения и проверка условий
- Testing the Project
- Testing Wdm2 Power Capabilities
- Test Driver Code
- Листинг 3.1. Конфигурационный файл lilo.conf
- Листинг 3.2. Файл настройки программы inittab
- Листинг 3.3. Файл
- Листинг 3.4. Информация о конфигурации и состоянии сети