[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

chroot ? libc6 ? bugs ?



Bonjour,

J'ai un petit problème avec chroot :
par exemple :

$ chroot /var/cvs/ /bin/bash
chroot: cannot execute /bin/bash: No such file or directory

donc j'ai fait du google : problème déjà vu mais j'ai pas trouvé de
solutions...

donc, sans me défiler, j'ai fait un strace :

___
execve("/usr/sbin/chroot", ["chroot", "/var/cvs", "/bin/bash"], [/* 17 vars */]) = 0
uname({sys="Linux", node="pascalou", ...}) = 0
brk(0)                                  = 0x804b444
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40015000open("/etc/ld.so.preload", O_RDONLY)    = 3
fstat64(0x3, 0xbffff7b4)                = -1 ENOSYS (Function not implemented)
fstat(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
close(3)                                = 0
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=43267, ...}) = 0
old_mmap(NULL, 43267, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40016000
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\250\323"..., 1024) = 1024
fstat(3, {st_mode=S_IFREG|0755, st_size=1104456, ...}) = 0
old_mmap(NULL, 1120932, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x40021000
mprotect(0x40129000, 39588, PROT_NONE)  = 0
old_mmap(0x40129000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x107000) = 0x40129000
old_mmap(0x4012f000, 15012, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x4012f000
close(3)                                = 0
munmap(0x40016000, 43267)               = 0
getpid()                                = 8556
brk(0)                                  = 0x804b444
brk(0x804b46c)                          = 0x804b46c
brk(0x804c000)                          = 0x804c000
chroot("./")                            = 0
chdir("/")                              = 0
execve("/bin/bash", ["/bin/bash", "-i"], [/* 17 vars */]) = -1 ENOENT (No such file or directory)
write(2, "chroot: ", 8chroot: )                 = 8
write(2, "cannot execute /bin/bash", 24cannot execute /bin/bash) = 24
write(2, ": No such file or directory", 27: No such file or directory) = 27
write(2, "\n", 1
)                       = 1
_exit(1)                                = ?
___

(mon /bin/bash existe).

je tourne en testing avec un noyau 2.2.17.
(libc6 du paquet debian). (je pense pas que chroot soit buggué). 

Pour tout vous dire, je voudrais faire du cvs-ssh-chrooté:

et pour ce faire je lance un petit fichier C :

___
	uid = getuid();

	res = chdir(BASE);
	if ( res ) exit(1);
	printf("\nchdir ok\n");

	res = chroot(BASE);
	if ( res ) exit(2);
	printf("\nchroot ok\n");

	res = setuid(uid);
	if ( res ) exit(4);
	printf("\nuid ok\n");

	execl("/bin/cvs", "cvs",
	"server",
	NULL);
___

Bien sûr, /bin/cvs existe, meme dans le nouveau chroot.
Et si je fait un strace de ce fichier compilé :

___
execve("./cvs", ["./cvs"], [/* 17 vars */]) = 0
uname({sys="Linux", node="pascalou", ...}) = 0
brk(0)                                  = 0x804998c
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40015000open("/etc/ld.so.preload", O_RDONLY)    = 3
fstat64(0x3, 0xbffff7c4)                = -1 ENOSYS (Function not implemented)
fstat(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
close(3)                                = 0
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=43267, ...}) = 0
old_mmap(NULL, 43267, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40016000
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\250\323"..., 1024) = 1024
fstat(3, {st_mode=S_IFREG|0755, st_size=1104456, ...}) = 0
old_mmap(NULL, 1120932, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x40021000
mprotect(0x40129000, 39588, PROT_NONE)  = 0
old_mmap(0x40129000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x107000) = 0x40129000
old_mmap(0x4012f000, 15012, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x4012f000
close(3)                                = 0
munmap(0x40016000, 43267)               = 0
getpid()                                = 8581
open("/run-cvs.debug", O_RDONLY)        = 3
close(3)                                = 0
SYS_199(0x4012db4c, 0, 0x4012e860, 0x4012c2d0, 0xbffffda4) = -1 ENOSYS (Function not implemented)
getuid()                                = 0
chdir("/var/cvs/yyyy/chrooted-cvs")     = 0
fstat64(0x1, 0xbffff5bc)                = -1 ENOSYS (Function not implemented)
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40016000ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0
write(1, "\n", 1
)                       = 1
chroot("/var/cvs/yyyy/chrooted-cvs")    = 0
setuid(0)                               = 0
execve("/bin/strace", ["-tc", "-f", "/tmp/strace.out", "/bin/cvs", "cvs", "server"], [/* 17 vars */]) = -1 ENOENT (No such file or directory)
munmap(0x40016000, 4096)                = 0
_exit(3)                                = ?
___

Le chroot a l'air d'avoir marché, mail il ne me lance pas ma la dernière
commande.  Le chemin est encore bon ! 

Si le fstat64 qui bugue me dérange, il faut peut-etre que je recompile la
glibc, du moins la librairie io avec l'option  -D_FILE_OFFSET_BITS=64 comme le
dit son auteur :

"i've written stat64, lstat64, fstat64, getdents64, mmap2 and fcntl64
syscalls.  With a rebuilt glibc, these calls work fine with userspace
compiled with -D_FILE_OFFSET_BITS=64, as per the LFS standard."
willy@ldl.fc.hp.com (Matthew Wilcox)

mais avant de faire ce genre de connerie, j'aimerais avoir un avis plus éclairé
sur ce bug qui m'a déjà bouffé 3 jours.

merci.

A+

ps: j'ai le présentiment que c'est juste un petit truc.
ps2: ca ne marche pas sur toutes mes stations hétérogènes tournant sur testing.
-- 
Pascal Pucci : Pascal@deenoo.com
Recommander un site à ses amis : http://www.BeeTell.com
Participer à la promotion du logiciel libre : http://www.linuxpien.org
http://www.pascalou.org, sur le mobil : mobil@pascalou.org



Reply to: