dev*_*sda 2 permissions tcp socket strace rsh
如果我运行 rsh,它可以工作,但会在开头打印一些奇怪的“连接被拒绝”消息:
$ rsh localhost pwd
connect to address 127.0.0.1 port 544: Connection refused
Trying krb4 rsh...
connect to address 127.0.0.1 port 544: Connection refused
trying normal rsh (/usr/bin/rsh)
/home/service
Run Code Online (Sandbox Code Playgroud)
但是如果我在 strace 下运行 rsh,它根本不会连接到服务器:
$ strace -c rsh localhost ulimit -n
connect to address 127.0.0.1 port 544: Connection refused
Trying krb4 rsh...
connect to address 127.0.0.1 port 544: Connection refused
trying normal rsh (/usr/bin/rsh)
rcmd: socket: Permission denied
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
28.39 0.000113 2 58 read
27.64 0.000110 16 7 write
16.83 0.000067 1 47 open
15.33 0.000061 2 27 munmap
11.81 0.000047 1 80 mmap
0.00 0.000000 0 58 close
0.00 0.000000 0 1 stat
0.00 0.000000 0 45 fstat
..........................................
..........................................
..........................................
Run Code Online (Sandbox Code Playgroud)
以下是摘录strace rsh localhost ulimit -n
:
connect(3, {sa_family=AF_INET, sin_port=htons(544), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 ECONNREFUSED (Connection refused)
write(2, "Connection refused\n", 19) = 19
connect(3, {sa_family=AF_INET, sin_port=htons(544), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 ECONNREFUSED (Connection refused)
write(2, "Connection refused\n", 19) = 19
Run Code Online (Sandbox Code Playgroud)
问题
port 544: Connection refused
?rcmd: socket: Permission denied
?它应该显示一些整数值(ulimit -n
远程机器上的输出)。rsh 服务器的正常端口是 514。您的 rsh 客户端支持Kerberos,并且启用 Kerberos 的 rsh 服务器通常侦听端口 544。您的 rsh 客户端首先尝试使用 Kerberos 身份验证登录,可能首先使用 Kerberos 版本 5,然后使用 Kerberos版本 4(简称“krb4”)。错误“连接被拒绝”是由于缺少 Kerberos rsh 服务器(可能还有其他原因,例如防火墙阻止了您,但当服务器位于 localhost 时,这种情况极不可能发生)。除非您打算使用 Kerberos,否则请忽略此错误。
在没有 kerberos 的情况下,rsh 允许两种形式的身份验证:用户必须输入密码,或者用户必须在/etc/rhosts
或 中列入白名单~/.rhosts
。白名单意味着该文件声明允许机器 M 上的用户 U 以用户 V 身份登录服务器。仅当服务器可以相信请求确实来自机器 M 上的用户 U 时,服务器才允许这样做。如果请求来自机器 M 的 IP 地址,则服务器信任来自机器 M 的请求(根据 1980 年代的标准,这是一个有效的假设) )。它相信请求来自用户 U,因为客户端是这么说的。
但是因为客户这样说并不是信任客户的理由,即使按照 1980 年代的标准也是如此。所以有一个附加条件:rsh 请求必须有一个低于 1024 的源端口。在 Unix 机器上,只有 root 可以绑定低于 1024 的 TCP 或 UDP 端口。因此 rsh 客户端以 root 身份运行。由于任何用户都必须能够运行它,因此 rsh 二进制文件是setuid root:无论哪个用户调用它,它都以 root 权限运行。
当您在 strace 下运行程序时,它不会以任何提升的权限运行,而只是以调用用户的权限运行。这是因为跟踪可能会泄露机密数据(实际上相同的机制允许您完全劫持该过程)。所以,当你运行strace rsh …
,在它试图打开低于1024源端口的连接点,它失败:rcmd: socket: Permission denied
。
如果要跟踪rsh
,则必须以strace
root身份运行。要么让它rsh
以 root 身份运行,要么传递该-u
选项,以便程序以从您的帐户启动时通常拥有的权限运行:
strace -o rsh.strace -s9999 -u jhamb rsh localhost pwd
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2815 次 |
最近记录: |