В версии 4.99.4-alt1 ещё можно было делать `-Z root`, чтоб отключить утрату привилегий. tcpdump(8) отмечает: -Z user --relinquish-privileges=user If tcpdump is running as root, after opening the capture device or input savefile, but before opening any savefiles for output, change the user ID to user and the group ID to the primary group of user. This behavior is enabled by default (-Z tcpdump), and can be dis‐ abled by -Z root. С версии 4.99.5-alt1 это поведение больше невозможно отключить при наличии savefile. root@x86_64:~# tcpdump -Z root -p -w a tcpdump: Chroot without dropping root is insecure root@x86_64:~# echo $? 1 [U+1F481]♂️
Старый патч https://git.altlinux.org/gears/t/tcpdump.git?p=tcpdump.git;a=commit;h=f4d2a85d068ccbf9ae6dd73774c76ed0d81828ab перестал выполнять свою функцию, надо переделать.
Какая-то идиотская история про миллионы мух с гитхаба, которые не могут ошибаться. :( Дело не в том патче, который я выше упомянул, а вот в этом коммите. d6c4b176bab6 ("Skip privilege dropping when using -Z root on --with-user builds") https://github.com/the-tcpdump-group/tcpdump/commit/d6c4b176bab676b4d73dc4b1a9fd8c803db88194 Контейнерные пионеры, вооружённые передовым учением о namespaces, в едином порыве отвергают chroot(2) как буржуазный пережиток прошлого.
Created attachment 18507 [details] Do not chroot if not changing UID Предлагаю вот так сделать при -Z root. Пойдёт? Или лучше совершать chroot и не ругаться?
(In reply to Arseny Maslennikov from comment #3) > Created attachment 18507 [details] > Do not chroot if not changing UID > > Или лучше совершать chroot и не ругаться? Ругань как появилась в 2004, так и не исчезала: author hannes <hannes> Wed Feb 25 14:23:32 2004 +0000 committer hannes <hannes> Wed Feb 25 14:23:32 2004 +0000 from Pekka Savola <pekkas@netcore.fi>: - add compile time option WITH_CHROOT - chroot() when dropping privileges diff --git a/tcpdump.c b/tcpdump.c index 7f751f0e..e3693e73 100644 --- a/tcpdump.c +++ b/tcpdump.c @@ -324,15 +324,26 @@ show_dlts_and_exit(pcap_t *pd) #define U_FLAG #endif -/* Drop root privileges */ +/* Drop root privileges and chroot if necessary */ static void -droproot(const char *username) +droproot(const char *username, const char *chroot_dir) { struct passwd *pw = NULL; + if (chroot_dir && !username) { + fprintf(stderr, "Chroot without dropping root is insecure\n"); + exit(1); + } + pw = getpwnam(username); if (pw) {
1. Версия до 4.99.4-alt1 работала. 2. Пользователь задавая `-Z user` не предлагает делать chroot without dropping root.
(In reply to Vitaly Chikunov from comment #5) > 1. Версия до 4.99.4-alt1 работала. > 2. Пользователь задавая `-Z user` не предлагает делать chroot without > dropping root. Я из этих двух суждений делаю вывод, что предложенный патч OK. Скоро будет сб. задание.
А я и не заметил патч, так как прочел только последний пост. (In reply to Arseny Maslennikov from comment #3) > Created attachment 18507 [details] > Do not chroot if not changing UID > > Предлагаю вот так сделать при -Z root. Пойдёт? Или лучше совершать chroot и > не ругаться? chroot при живом root не имеет смысла в плане security. warning() не нужен так как юзер его (chroot) не заказывал - это внутренняя кухня tcpdump как именно дропать рутовые привилегии. Юзер хочет при `-Z root` всю это логику отключить.
(In reply to Vitaly Chikunov from comment #7) > А я и не заметил патч, так как прочел только последний пост. > > (In reply to Arseny Maslennikov from comment #3) > > Created attachment 18507 [details] > > Do not chroot if not changing UID > > > > Предлагаю вот так сделать при -Z root. Пойдёт? Или лучше совершать chroot и > > не ругаться? > > chroot при живом root не имеет смысла в плане security. warning() не нужен > так как юзер его (chroot) не заказывал - это внутренняя кухня tcpdump как > именно дропать рутовые привилегии. Юзер хочет при `-Z root` всю это логику > отключить. Ладно, уберу warning(). Тем более он вот какой страшный получается: [root@h-e ~]# tcpdump -i enp7s0 -Z root -p -w a tcpdump: WARNING: chroot to /var/resolv disabled tcpdump: listening on enp7s0, link-type EN10MB (Ethernet), snapshot length 262144 bytes ^C233 packets captured 234 packets received by filter 0 packets dropped by kernel
(In reply to Arseny Maslennikov from comment #6) > Скоро будет сб. задание. https://git.altlinux.org/tasks/325444/
tcpdump-1:4.99.5-alt2 -> sisyphus: Wed Apr 02 2025 Arseny Maslennikov <arseny@altlinux> 1:4.99.5-alt2 - Add a patch to not chroot if '-Z root' is present on the command line. That fixes upstream commit 75866fb1db0b ("Skip privilege dropping when using -Z root on --with-user builds") present in tcpdump-4.99.5. (Closes: 53687)
Спасибо.