Bug 53687 - tcpdump -Z root immediately exits 1
Summary: tcpdump -Z root immediately exits 1
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: tcpdump (show other bugs)
Version: unstable
Hardware: x86 Linux
: P5 normal
Assignee: Arseny Maslennikov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2025-04-01 06:35 MSK by Vitaly Chikunov
Modified: 2025-05-20 16:43 MSK (History)
3 users (show)

See Also:


Attachments
Do not chroot if not changing UID (699 bytes, patch)
2025-05-19 17:58 MSK, Arseny Maslennikov
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Vitaly Chikunov 2025-04-01 06:35:24 MSK
В версии 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]﷑‍♂️
Comment 1 Arseny Maslennikov 2025-04-02 14:02:06 MSK
Старый патч https://git.altlinux.org/gears/t/tcpdump.git?p=tcpdump.git;a=commit;h=f4d2a85d068ccbf9ae6dd73774c76ed0d81828ab перестал выполнять свою функцию, надо переделать.
Comment 2 Arseny Maslennikov 2025-05-19 17:56:13 MSK
Какая-то идиотская история про миллионы мух с гитхаба, которые не могут ошибаться. :(

Дело не в том патче, который я выше упомянул, а вот в этом коммите.
d6c4b176bab6 ("Skip privilege dropping when using -Z root on --with-user builds")

https://github.com/the-tcpdump-group/tcpdump/commit/d6c4b176bab676b4d73dc4b1a9fd8c803db88194

Контейнерные пионеры, вооружённые передовым учением о namespaces, в едином порыве отвергают chroot(2) как буржуазный пережиток прошлого.
Comment 3 Arseny Maslennikov 2025-05-19 17:58:04 MSK
Created attachment 18507 [details]
Do not chroot if not changing UID

Предлагаю вот так сделать при -Z root. Пойдёт? Или лучше совершать chroot и не ругаться?
Comment 4 Arseny Maslennikov 2025-05-19 18:04:48 MSK
(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) {
Comment 5 Vitaly Chikunov 2025-05-19 18:11:39 MSK
1. Версия до 4.99.4-alt1 работала.
2. Пользователь задавая `-Z user` не предлагает делать chroot without dropping root.
Comment 6 Arseny Maslennikov 2025-05-19 18:36:30 MSK
(In reply to Vitaly Chikunov from comment #5)
> 1. Версия до 4.99.4-alt1 работала.
> 2. Пользователь задавая `-Z user` не предлагает делать chroot without
> dropping root.

Я из этих двух суждений делаю вывод, что предложенный патч OK. Скоро будет сб. задание.
Comment 7 Vitaly Chikunov 2025-05-19 19:03:19 MSK
А я и не заметил патч, так как прочел только последний пост.

(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` всю это логику отключить.
Comment 8 Arseny Maslennikov 2025-05-19 19:16:14 MSK
(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
Comment 9 Arseny Maslennikov 2025-05-19 20:04:51 MSK
(In reply to Arseny Maslennikov from comment #6)
> Скоро будет сб. задание.
https://git.altlinux.org/tasks/325444/
Comment 10 Repository Robot 2025-05-20 16:41:49 MSK
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)
Comment 11 Vitaly Chikunov 2025-05-20 16:43:13 MSK
Спасибо.