Red Hat 7.4环境下,如何允许非特权用户通过rsh连接?
解决RHEL 7.4普通用户rsh免密连接报
rcmd: socket: Permission denied的问题 首先先对齐下你的场景:两台RHEL7.4主机HostA和HostB,root用rsh跨机免密完全正常,但普通用户一执行就蹦出rcmd: socket: Permission denied,而且你已经做了基础配置——装了rsh-server/rsh包、开了守护进程、把rsh/rlogin/rexec加进了/etc/securetty、/etc/hosts.equiv也加了两台主机。
这种情况大概率是普通用户专属的权限或者配置没跟上,我给你一步步拆解排查:
1. 先检查普通用户家目录和.rhosts的权限(最常见原因)
root用户靠/etc/hosts.equiv就能走免密,但普通用户的rsh验证逻辑不一样——除了全局的hosts.equiv,还会检查自己家目录下的.rhosts文件,而且对权限要求特别严,稍微松一点就会被拒:
- 先登到目标主机(比如HostB),切换到那个连不上的普通用户(假设叫user1),先看家目录权限:
权限必须是ls -ld ~user1drwx------(700)或者drwxr-xr-x(755),绝对不能有其他用户的写权限(比如777这种完全开放的肯定不行)。 - 如果家目录里没有
.rhosts,直接创建并加信任规则:
格式就是touch ~user1/.rhosts echo "HostA user1" >> ~user1/.rhosts[信任主机名] [信任用户名],要是想让HostA上所有用户都能连过来,可以写HostA +,但这个不安全,不建议这么搞。 - 然后必须把
.rhosts的权限锁死:
权限得是chmod 600 ~user1/.rhosts chown user1:user1 ~user1/.rhosts-rw-------(600),属主属组必须是这个普通用户自己,不然rsh会觉得这个文件不安全,直接跳过读取。
2. 排查SELinux的限制
RHEL7.4默认开着SELinux,它经常会悄咪咪阻止一些跨进程的文件访问:
- 先临时关了SELinux测一下(只是排查用,别一直关):
然后从HostA用普通用户再试一次rsh,如果能连上,那就是SELinux的锅。setenforce 0 - 永久解决的话,开一下rsh相关的SELinux布尔值:
要是是家目录的SELinux上下文乱了,就恢复默认:setsebool -P allow_ypbind on setsebool -P rsh_server onrestorecon -Rv ~user1/
3. 检查PAM配置是否限制了普通用户
/etc/pam.d/rsh里的规则可能会卡普通用户的登录:
- 打开这个文件看看,有没有
auth required pam_securetty.so这一行——这条规则本来是限制root只能从指定tty登录的,但对普通用户来说,/etc/securetty里的条目根本和他们无关,所以会直接拒掉。 - 要是有这条,直接注释掉:
改完PAM配置记得重启rsh相关的守护进程:# auth required pam_securetty.sosystemctl restart rsh.socket rlogin.socket rexec.socket
4. 再确认下/etc/hosts.equiv的格式
虽然root能用,但还是得确认下这个文件的格式对不对:
- 里面的主机名得是两台主机的短主机名(和
hostname输出一致)或者FQDN,而且两台主机的/etc/hosts必须能解析对方的主机名,不然rsh认不出来。 - 每行的格式是
[主机名] [用户名],要是想让某个主机的所有用户都能连,就写HostA +,但还是结合每个用户的.rhosts更安全。
按上面的步骤挨个排查,基本就能搞定普通用户的rsh权限问题了。
内容的提问来源于stack exchange,提问作者ceinmart
相关产品推荐
相关产品推荐

