Бит setuid имеет различное поведение в зависимости от каталога
Я тестировал разрешение setuid, и у меня возникли проблемы с его настройкой.
Допустим, я делаю тесты с двумя пользователями owneruser
а также otheruser
,
Я написал простую программу на C, все, что она делает, это вызывает system()
для отображения текущего пользователя.
testid.c:
int main(void)
{
setresgid(222, 222, 222); // To simplify, this numbers represent just harcoded
setresuid(222, 222, 222); // values for the owneruser id and owneruser group id
system("whoami");
}
пользователь owneruser
компилирует программу в два разных каталога и устанавливает бит setuid, который owneruser
владеет, а другой для примера к /tmp
каталог, команды выглядят примерно так:
gcc testid.c -o /tmp/testid
gcc testid.c -o /home/owneruser/testid
chmod 4755 /tmp/testid
chmod 4755 /home/owneruser/testid
Теперь когда otheruser
запускает программы, в /home/owneruser/testid
Я получаю вывод:
owneruser
И в /tmp/testid
Я получаю вывод:
otheruser
Что вызывает это другое поведение?