LINUX.ORG.RU

Бит SUID не работает

 ,


1

1

Программа read выполняет команду cat tech.txt:

int main () {
        system ("cat tech.txt");
        return 0;
}
Права доступа следующие:
-rwsrws--- 1 techmint techmint 7368 янв.   2 12:38 read
-rwxrwx--- 1 techmint techmint    6 янв.   1 20:55 tech.txt
В системе есть следующие пользователи:
techmint:x:1004:1004::/home/techmint:/bin/bash
mintol:x:1006:1005:mintol,,,:/home/mintol:/bin/bash
При выполнении команды от имени mintol:
mintol@mirror:/home/techmint$ ./read
-su: ./read: Отказано в доступе
Правильно ли я понимаю, что бит SUID не работает?

Так там же нет прав на выполнение от mintol, только от techmint и от его группы.
Сделай chmod 6755 read

mittorn ★★★★★
()
Ответ на: комментарий от mittorn

Разве бит SUID не должен расширять права пользователя до прав владельца файла? Какой тогда смысл в бите, если я просто могу указать chmod 757 read

Sublimee
() автор топика

suid:
1. Позволяет бинарнику выполнять операцию setuid, тем самым повышая привелегии
2. Запрещает другим процессам (пускай даже от этого же пользователя) вмешиваться в память, чтобы они не могли повлиять на действия с повышенными привелегиями

Например, su/sudo. Он имеет флаг suid. запускается от текущего пользователя, запрашивает пароль, поднимает привелегии, читает хэш пароля, проверяет его и выставляет привелегии при правильном пароле, после чего запускает дочерний процесс. Защита от ваимодействия как раз чтобы другие процессы не могли к примеру повлиять на проверку пароля.

mittorn ★★★★★
()
Последнее исправление: mittorn (всего исправлений: 1)
int main () {
        execl("/bin/cat","cat","hello.txt", NULL);
        return 0;
}

/* потенциально стрелям в ногу из-за шелкода */
int main () {
        setreuid(geteuid(), getuid());
        system("/bin/cat hello.txt");
        return 0;
}

-rwsr-x--x 1 techmint techmint 6728 Jan  2 13:35 read
anonymous
()

При выполнении команды от имени mintol

Другие пользователи не имеют прав на этот файл, поэтому бит SUID бесполезен.

Когда ты запускаешь процесс, он выполняется с правами пользователя, который этот процесс запустил. К каждому файлу у пользователей есть определённые права, и для каждого файла пользователь попадает в одну из трёх категорий: владелец файла, члены группы, все остальные. Для каждой категории могут быть установлены свои права, разумеется.

Теперь про SUID/SGID. Его роль заключается в том, чтобы при запуске файла подставить UID/GID не пользователя, а файла, то есть файл как бы запускался владельцем или группой. Заметь, речь идёт о запуске, значит, права на запуск должны быть.

В чём разница между SUID/SGID и chmod XX7? При chmod XX7 ты разрешаешь всем остальным делать что угодно с файлом, и только с ним. При использовании SUID/SGID меняются соответствующие ID при запуске, что даёт права пользователя на всю систему (при этом к файлу доступа по-прежнему может и не быть, например chmod 005)

XMs ★★★★★
()
Ответ на: комментарий от mittorn

К сожалению man по suid в моей системе нет. То есть для того, чтобы обратиться к файлу, мне нужно либо состоять в одной группе с владельцем файла (и установить chmod 2070 read), либо, если я простой пользователь, то права на файл должны быть установлены так: chmod 4707 read, что даст мне обратиться к файлу (последняя семерка) и даст мне права владельца (4 и первая 7).

Sublimee
() автор топика
Ответ на: комментарий от mittorn

1. Позволяет бинарнику выполнять операцию setuid, тем самым повышая привелегии

Нет, бинарник сразу запускается с правами владельца файла (то есть с повышенными привилегиями в случае рута), а за возможность выполнять setuid(2) отвечает CAP_SETUID.

А касательно делающего setuid процесса sudo:

	    /* Become full root (not just setuid) so user cannot kill us. */
	    if (setuid(ROOT_UID) == -1)
		sudo_warn("setuid(%d)", ROOT_UID);

Вызов setuid при euid=0 выставляет ещё и ruid=0.

devsdc ★★
()

system() вызывает bash, а bash при запуске сбрасывает последствия setuid.

vzzo ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.