LINUX.ORG.RU

geteuid() == 0, but operation not permitted


0

0

void CHS::GetRoot(void) { #define FUNC "CHS::GetRoot" log3(": IN: uid = %d, euid = %d, gid = %d, egid = %d", getuid(), geteuid(), getgid(), getegid()); if(seteuid(0)) { log3s(FUNC ": seteuid(%d)", 0); throw ... } log3(": IN1: uid = %d, euid = %d, gid = %d, egid = %d", getuid(), geteuid(), getgid(), getegid()); if(setgid(0)) { log3s(FUNC ": setgid(%d)", 0); throw ... } log3(FH_LOG_DEBUG, FUNC ": OUT: uid = %d, euid = %d, gid = %d, egid = %d", getuid(), geteuid(), getgid(), getegid()); #undef FUNC }

IN: uid = 0, euid = 500, gid = 500, egid = 500 IN1: uid = 0, euid = 0, gid = 500, egid = 500 OUT: uid = 0, euid = 0, gid = 0, egid = 0

IN: uid = 0, euid = 500, gid = 500, egid = 500 IN1: uid = 0, euid = 0, gid = 500, egid = 500 OUT: uid = 0, euid = 0, gid = 0, egid = 0

IN: uid = 0, euid = 502, gid = 500, egid = 500 IN1: uid = 0, euid = 0, gid = 500, egid = 500 OUT: uid = 0, euid = 0, gid = 0, egid = 0

IN: uid = 0, euid = 502, gid = 500, egid = 500 IN1: uid = 0, euid = 0, gid = 500, egid = 500 setgid(0), error = Operation not permitted

пробовал вместо setgid() делать setegid(), setregid - тоже самое, если пропускал этот кусок с ошибкой, то дальше шел вызов chmod() - operation not permitted, то есть получалось, что хотя geteuid() == 0, реально он не рутовый процесс в этот момент получился

функция эта и противоположная вызывается очень часто

проверял на redhat 7.1, 2.4.2-2 и на redhat 9, 2.4.20-8

на freebsd 4.8, 5.0 все работает стабильно ...

кто-нить знает как исправить?

anonymous

В Linux нельзя устанавливать egid для процесса, если он отличен от gid и sgid. Обладатель же CAP_SETGID capability может устанавливать любую группу.

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

судя по логам я этой капабилити обладаю в этот момент

еще выяснил что когда эта функция срабатывала suid == 0 был, а когда suid == 502, то ошибка и возникает, но все равно странно setresuid(0,0,0); вызов срабатывает, и все ruid, euid, suid равны 0 после этого, но после него все равно operation not permitted, как будто я uid != 0

что за приколы?

anonymous
()
Ответ на: комментарий от lg

не то, работает эта функция нормально пока в нее заходят с suid == 0, иначе глюкиссс

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