zathura 및 /proc/PID의 파일 소유권

zathura 및 /proc/PID의 파일 소유권

어제 답글을 쓰던 중에열려 있는 모든 PDF 파일의 전체 경로 이름을 얻는 방법(zathura에서) - rofi와 마찬가지로, zathura 프로세스의 /proc/PID/ 디렉토리에 있는 파일 소유권에 대해 이상한 점을 발견했습니다.대부분은 사용자(cas)가 아닌 루트가 소유하고 있으며, 나는 zathura를 다음과 같이 실행합니다..

예를 들어:

$ cd ~/Manuals
$ zathura X399\ Taichi.pdf &
[1] 4055396

$ ls -lF /proc/4055396/fd
ls: cannot open directory '/proc/4055396/fd': Permission denied
$ ls -lFd /proc/4055396/fd
dr-x------ 2 root root 0 Mar 31 13:04 /proc/4055396/fd/

음? 왜 속합니까 root? 으로 실행했습니다 cas.

/proc/4055396에 있는 대부분의(전부는 아님) 파일/디렉토리는 루트가 소유합니다.

$ ls -lF /proc/4055396
ls: cannot read symbolic link '/proc/4055396/cwd': Permission denied
ls: cannot read symbolic link '/proc/4055396/root': Permission denied
ls: cannot read symbolic link '/proc/4055396/exe': Permission denied
total 0
-r--r--r--  1 root root 0 Mar 31 13:04 arch_status
dr-xr-xr-x  2 cas  cas  0 Mar 31 13:04 attr/
-rw-r--r--  1 root root 0 Mar 31 13:04 autogroup
-r--------  1 root root 0 Mar 31 13:04 auxv
-r--r--r--  1 root root 0 Mar 31 13:04 cgroup
--w-------  1 root root 0 Mar 31 13:04 clear_refs
-r--r--r--  1 root root 0 Mar 31 13:02 cmdline
-rw-r--r--  1 root root 0 Mar 31 13:04 comm
-rw-r--r--  1 root root 0 Mar 31 13:04 coredump_filter
-r--r--r--  1 root root 0 Mar 31 13:04 cpu_resctrl_groups
-r--r--r--  1 root root 0 Mar 31 13:04 cpuset
lrwxrwxrwx  1 root root 0 Mar 31 13:04 cwd
-r--------  1 root root 0 Mar 31 13:04 environ
lrwxrwxrwx  1 root root 0 Mar 31 13:02 exe
dr-x------  2 root root 0 Mar 31 13:04 fd/
dr-xr-xr-x  2 cas  cas  0 Mar 31 13:04 fdinfo/
-rw-r--r--  1 root root 0 Mar 31 13:04 gid_map
-r--------  1 root root 0 Mar 31 13:04 io
-r--------  1 root root 0 Mar 31 13:04 ksm_merging_pages
-r--------  1 root root 0 Mar 31 13:04 ksm_stat
-r--r--r--  1 root root 0 Mar 31 13:04 limits
-rw-r--r--  1 root root 0 Mar 31 13:04 loginuid
dr-x------  2 root root 0 Mar 31 13:04 map_files/
-r--r--r--  1 root root 0 Mar 31 13:04 maps
-rw-------  1 root root 0 Mar 31 13:04 mem
-r--r--r--  1 root root 0 Mar 31 13:04 mountinfo
-r--r--r--  1 root root 0 Mar 31 13:04 mounts
-r--------  1 root root 0 Mar 31 13:04 mountstats
dr-xr-xr-x 57 cas  cas  0 Mar 31 13:04 net/
dr-x--x--x  2 root root 0 Mar 31 13:04 ns/
-r--r--r--  1 root root 0 Mar 31 13:04 numa_maps
-rw-r--r--  1 root root 0 Mar 31 13:04 oom_adj
-r--r--r--  1 root root 0 Mar 31 13:04 oom_score
-rw-r--r--  1 root root 0 Mar 31 13:04 oom_score_adj
-r--------  1 root root 0 Mar 31 13:04 pagemap
-r--------  1 root root 0 Mar 31 13:04 patch_state
-r--------  1 root root 0 Mar 31 13:04 personality
-rw-r--r--  1 root root 0 Mar 31 13:04 projid_map
lrwxrwxrwx  1 root root 0 Mar 31 13:04 root
-rw-r--r--  1 root root 0 Mar 31 13:04 sched
-r--r--r--  1 root root 0 Mar 31 13:04 schedstat
-r--r--r--  1 root root 0 Mar 31 13:04 sessionid
-rw-r--r--  1 root root 0 Mar 31 13:04 setgroups
-r--r--r--  1 root root 0 Mar 31 13:04 smaps
-r--r--r--  1 root root 0 Mar 31 13:04 smaps_rollup
-r--------  1 root root 0 Mar 31 13:04 stack
-r--r--r--  1 root root 0 Mar 31 13:02 stat
-r--r--r--  1 root root 0 Mar 31 13:04 statm
-r--r--r--  1 root root 0 Mar 31 13:04 status
-r--------  1 root root 0 Mar 31 13:04 syscall
dr-xr-xr-x  6 cas  cas  0 Mar 31 13:04 task/
-rw-r--r--  1 root root 0 Mar 31 13:04 timens_offsets
-r--r--r--  1 root root 0 Mar 31 13:04 timers
-rw-rw-rw-  1 root root 0 Mar 31 13:04 timerslack_ns
-rw-r--r--  1 root root 0 Mar 31 13:04 uid_map
-r--r--r--  1 root root 0 Mar 31 13:04 wchan

zathurasetuid 루트가 아님:

$ type -p zathura
/usr/bin/zathura

$ ls -l /usr/bin/zathura
-rwxr-xr-x 1 root root 305456 Nov 28 03:34 /usr/bin/zathura

버전은 0.5.2이고 패키지는 작년 11월 28일에 마지막으로 업그레이드되었습니다.

$ zathura --version
zathura 0.5.2
girara 0.3.7 (runtime: 0.4.0)
(plugin) cb (0.1.10) (/usr/lib/x86_64-linux-gnu/zathura/libcb.so)
(plugin) pdf-poppler (0.3.1) (/usr/lib/x86_64-linux-gnu/zathura/libpdf-poppler.so)
(plugin) ps (0.2.7) (/usr/lib/x86_64-linux-gnu/zathura/libps.so)
(plugin) djvu (0.2.9) (/usr/lib/x86_64-linux-gnu/zathura/libdjvu.so)

$ dpkg -l zathura
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version      Architecture Description
+++-==============-============-============-=============================================
ii  zathura        0.5.2-1      amd64        document viewer with a minimalistic interface

$ ls -l /var/cache/apt/archives/zathura_0.5.2-1_amd64.deb 
-rw-r--r-- 1 root root 175712 Nov 28 04:41 /var/cache/apt/archives/zathura_0.5.2-1_amd64.deb

qpdfview, atril또는 okular대신 사용하면 zathura권한이 괜찮습니다.

$ qpdfview X399\ Taichi.pdf 
$ pgrep qpdfview
4071588 qpdfview X399 Taichi.pdf
$ ls -lFd /proc/4071588/fd
dr-x------ 2 cas cas 0 Mar 31 13:16 /proc/4071588/fd/

$ atril X399\ Taichi.pdf &
[1] 4080297
$ ls -lFd /proc/4080297/fd
dr-x------ 2 cas cas 0 Mar 31 13:20 /proc/4080297/fd/

$ okular X399\ Taichi.pdf &
[1] 4081710
$ ls -lFd /proc/4081710/fd
dr-x------ 2 cas cas 0 Mar 31 13:21 /proc/4081710/fd/

위의 모든 것은 동일한 bash 인스턴스, 동일한 환경, 동일한 모든 것에서 실행됩니다. 가상 머신이나 컨테이너 또는 "비정상적인" 곳에 있지 않습니다.

그래서, 무슨 일이야 zathura? 자투라인가? 아니면 systemd나 cgroup 등의 이상한 네임스페이스 관련 동작인가요?

시스템은 Linux hex 6.1.0-6-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.15-1 (2023-03-05) x86_64 GNU/Linux.


참고: 어제 질문에 답변했을 때 동일한 루트 소유권으로 실행되는 인스턴스를 보았는데 atril지금은 복사할 수 없다는 것이 어렴풋이 기억납니다. 제가 잘못 기억하고 있을지도 모르지만, 이미 늦은 밤(새벽 3시)이 되어서 매우 피곤했습니다.

zathura그러나 실행할 때마다 항상 루트가 소유한 /proc/PID/ 항목이 있습니다.

답변1

Zathura는 무엇보다도 잠재적인 악성 콘텐츠로부터 자신과 사용자를 보호하기 위해 다양한 설정을 적용합니다.pctrl(PR_SET_DUMPABLE, SUID_DUMP_DISABLE), 내부 파일의 소유권을 변경합니다./proc/PID:

각 디렉터리의 파일은 /proc/[pid]일반적으로 프로세스의 유효 사용자 및 유효 그룹 ID가 소유합니다. 그러나 보안 조치로 root:root프로세스의 "dumpable" 속성이 1이 아닌 값으로 설정된 경우 소유권을 가져옵니다.

상수의 이름에도 불구하고 이는 Suid가 아닌 바이너리에도 적용됩니다.

가지다이에 대한 예외가 있습니다: 누구나 읽을 수 있고 실행 가능한 디렉토리(현재 pid 디렉토리 자체, 및 attr)는 fdinfo프로세스의 유효 uid 및 gid를 보유합니다. 이는 발신자가 여전히 디렉터리에 액세스할 수 있도록 하기 위해 수행됩니다.nettaskstat/proc/PID

관련 정보