[sisyphus] dist-upgrade -> /bin/zsh: Permission denied

Eugene Prokopiev =?iso-8859-1?q?prokopiev_=CE=C1_stc=2Edonpac=2Eru?=
Ср Мар 22 17:21:45 MSK 2006


Написал такую программу :)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <unistd.h>

int main(int argc, char **argv)
{
         setuid(500);
         execve("/bin/sh", 0, 0);
         return 0;
}

strace при ее выполнении выдает:

execve("./setuid", ["./setuid"], [/* 27 vars */]) = 0
uname({sys="Linux", node="test.stc.donpac.ru", ...}) = 0
brk(0)                                  = 0x804a000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or 
directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=10388, ...}) = 0
mmap2(NULL, 10388, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f09000
close(3)                                = 0
open("/lib/libc.so.6", O_RDONLY)        = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\240U\1"..., 
512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1140208, ...}) = 0
mmap2(NULL, 1146964, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 
0) = 0xb7df0000
mmap2(0xb7f02000, 16384, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x112) = 0xb7f02000
mmap2(0xb7f06000, 8276, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7f06000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 
0) = 0xb7def000
mprotect(0xb7f02000, 4096, PROT_READ)   = 0
munmap(0xb7f09000, 10388)               = 0
setuid32(500)                           = 0
execve("/bin/sh", [0], [/* 0 vars */])  = -1 EACCES (Permission denied)
exit_group(0)                           = ?
Process 4619 detached

Файл /etc/ld.so.preload действительно отсутствует, однако из вывода 
strace не следует, что это является причиной проблем. Более того, до 
dist-upgrade этого файла тоже не было, но все работало. Вывод strace 
выглядел так:

execve("./setuid", ["./setuid"], [/* 27 vars */]) = 0
uname({sys="Linux", node="test.stc.donpac.ru", ...}) = 0
brk(0)                                  = 0x804a000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or 
directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=10526, ...}) = 0
mmap2(NULL, 10526, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7eed000
close(3)                                = 0
open("/lib/libc.so.6", O_RDONLY)        = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\240U\1"..., 
512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1140208, ...}) = 0
mmap2(NULL, 1146964, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 
0) = 0xb7dd4000
mmap2(0xb7ee6000, 16384, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x112) = 0xb7ee6000
mmap2(0xb7eea000, 8276, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7eea000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 
0) = 0xb7dd3000
mprotect(0xb7ee6000, 4096, PROT_READ)   = 0
munmap(0xb7eed000, 10526)               = 0
setuid32(500)                           = 0
execve("/bin/sh", [0], [/* 0 vars */])  = 0
...
Process 4657 detached

Т.е., причины отказа выполнить /bin/sh совершенно непонятны. Что бы еще 
такое написать в тестовой программе, чтобы узнать причину проблемы?

-- 
С уважением, Прокопьев Евгений




Подробная информация о списке рассылки Sisyphus