我对 sshd 如何丢弃传入连接的 privs 感到困惑。我发现这个页面在高层次上提供了非常丰富的信息:
http://www.citi.umich.edu/u/provos/ssh/privsep.html
但是我不明白特权 sshd 的孩子是如何没有特权的。
在我下面的调试中,特权 sshd 是 28389,并调用 clone() 来创建 29266,即无特权的孩子。当我使用 ps 显示 pids 29268 的 UID/EUID 时,正如预期的那样,UID 为 1002,但 29266,sshd 的非特权子项为零,这似乎与上面的链接相矛盾,上面的链接说“这是通过更改其 uid/ 来实现的” gid 给未使用的用户”。
woOt@host:~$ sudo strace -p 28389 -e trace=clone
Process 28389 attached - interrupt to quit
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fb7076d5a90) = 29266
^CProcess 28389 detached
woOt@host:~$
woOt@host:~$
woOt@host:~$ ps auxf | grep sshd
root 28389 0.0 0.0 49944 1244 ? Ss 18:15 0:00 /usr/sbin/sshd
root 29266 0.0 0.2 54576 3308 ? Ss 18:37 0:00 \_ sshd: test [priv]
test 29268 0.0 0.0 54576 1440 ? S 18:37 0:00 \_ sshd: test@pts/2
woOt@host:~$
woOt@host:~$
woOt@host:~$ ps -eo pid,uid,euid | egrep 'PID|28389|29266|29268'
PID UID EUID
28389 0 0
29266 0 0
29268 1002 1002
woOt@host:~$
woOt@host:~$
woOt@host:~$ grep 1002 /etc/passwd
test:x:1002:1003:,,,:/home/test:/bin/bash
woOt@host:~$
编辑问题以正确说明:
监控进程 (2405) 的非特权子 (2406)
根 2370 0.0 1.1 55592 5524 ?SS 00:12 0:00 /usr/sbin/sshd -D 根 2405 0.0 1.1 59008 5720 ?Ss 00:12 0:00 \_ sshd:测试 [priv] sshd 2406 0.0 0.6 56936 3072 ? S 00:12 0:00 \_ sshd:测试 [网络]
和监控进程认证后的用户特权子 (2419):
根 2370 0.0 1.1 55592 5524 ?SS 00:12 0:00 /usr/sbin/sshd -D 根 2405 0.0 1.1 60224 5756 ?Ss 00:12 0:00 \_ sshd:测试 [priv] 测试 2419 0.0 0.7 60224 3888 ? S 00:12 0:00 \_ sshd: test@pts/1
感谢回答,谢谢