rsh主机信任
安装rsh-server
# 安装rsh-server:
dnf install -y rsh rsh-server xinetd
# 启动服务
systemctl enable --now rsh.socket rlogin.socket rexec.socket xinetd
修改配置
cd /etc/xinetd.d/
# 创建配置文件
touch rsh rlogin rexec
| 文件名 | 功能 | 对应服务 | 默认端口 | 认证方式 | 功能描述 |
|---|---|---|---|---|---|
| rsh | 远程执行单条命令 | in.rshd | 514/tcp | 基于 hosts.equiv 或 ~/.rhosts | 远程 Shell(Remote Shell),允许在远程主机执行命令(类似 ssh,但不加密)。 |
| rlogin | 远程交互式登录(类似SSH) | in.rlogind | 513/tcp | 基于 hosts.equiv 或 ~/.rhosts | 远程登录(Remote Login),允许登录到远程主机的终端(类似 ssh,但不加密)。 |
| rexec | 远程执行命令(类似rsh) | in.rexecd | 512/tcp | 基于 hosts.equiv 或 ~/.rhosts | 远程执行(Remote Execute),用于在远程主机执行命令(类似 rsh,但使用不同协议)。 |
修改/etc/xinetd.d/rsh
vim /etc/xinetd.d/rsh
service shell {
disable = no # 启用服务
socket_type = stream # 使用 TCP 流
wait = no # 非守护进程模式
user = root # 以 root 身份运行
server = /usr/sbin/in.rshd # 服务二进制文件路径
log_on_success += HOST PID DURATION # 成功时记录IP、进程ID和持续时间
log_on_failure += USERID # 记录失败日志,用户id
# only_from = 192.168.1.0/24 # (可选)限制允许访问的 IP 范围
}
修改/etc/xinetd.d/rlogin
vim /etc/xinetd.d/rlogin
service shell {
disable = no
socket_type = stream
wait = no
user = root
log_on_success += USERID
log_on_failure += USERID
server = /usr/sbin/in.rlogind
}
修改/etc/xinetd.d/rexec
vim /etc/xinetd.d/rexec
service shell {
disable = no
socket_type = stream
wait = no
user = root
log_on_success += USERID
log_on_failure += USERID
server = /usr/sbin/in.rexecd
}
修改/etc/securetty
/etc/securetty 是一个 Linux 安全配置文件,主要用于 控制 root 用户可以从哪些终端(TTY)登录。
rhel8没有这个文件,可创建.
# 使用 sed 在文件末尾追加内容(需 root 权限)
# /etc/securetty 添加 rexec rlogin rsh
# 端口对应说明:
# rexec <--> Tcp.512
# rlogin <--> Tcp.513
# rsh <--> Tcp.514
# 允许rsh终端
echo rsh >> /etc/securetty
# 允许 rlogin
echo rlogin >> /etc/securetty
# 允许 远程执行命令
echo rexec >> /etc/securetty
配置远程主机信任机制

在/etc/hosts中编辑好IP地址和 主机名的对应关系;
192.168.50.148 el8

rsh配置文件 | 作用范围 | 解释 |
|---|---|---|
| /etc/hosts.equiv | [普通用户],即所有非root用户 | 全局信任主机列表 |
| $HOME/.rhosts | 指定信任用户 | 用户级信任配置(优先级更高)。 |
配置非root用户rsh远程主机信任机制

# 配置远程主机信任机制
vim /etc/hosts.equiv
远程主机信任列表
# 主机名
el8
或者
#主机名 用户名
el8 zhangsan

非root登录验证
# 安装rsh客户端
dnf install -y rsh
# 非root用户登录
su zhangsan
# 以张三用户登录
rsh 192.168.50.149

配置root用户rsh远程主机信任机制
# 配置root的远程主机信任机制
vim /root/.rhosts

root登录验证
# 安装rsh客户端
dnf install -y rsh
# root登录
rsh 192.168.50.149

允许任意主机登录–危险操作
允许任何非root登录
# 配置远程主机信任机制
vim /etc/hosts.equiv
配置内容如下:
# 允许所有主机和用户登录(安全性极低!)
## + 表示允许所有主机
## + 表示所有用户。
+ +

允许任意主机root登录
# 配置root的远程主机信任机制
vim /root/.rhosts
配置内容如下:
# 允许所有主机和用户登录(安全性极低!)
## + 表示允许所有主机
## + 表示所有用户。
+ +

rcp复制
rcp 本地文件 192.168.50.159:/root/
流程总结:
-
首先明确如果有远程主机想rlogin到本机,本机都要做什么
1) `rlogind`检查本机`/etc/passwd`中是否有远程的`用户名`,没有则拒绝访问 2) 如果本机`/etc/passwd`中有远程的用户名,并且该用户名`不是root`,则先检查`/etc/hosts.equiv`,看看里面是否存在`远程主机名`,如果存在,则允许访问,如果不存在,则去检查`$HOME/.rhosts`文件. 如果是`root`,则跳过对`etc/hosts.equiv`的检查,只检查"`/.rhosts`" -
/etc/hosts.equiv中只有远程主机名的话,表示允许远程主机上的所有非root用户可以登录本地主机,并且不需要密码`/etc/hosts.equiv` 文件中如果加入了一台远程主机和一个用户,在远程主机上的那个用户(非root用户)就可以用`rlogin`登录本地机上的`所有非root账号`,而且不需要密码。 -
$HOME/.rhosts文件中如果是远程主机名的话,则只信任由远程主机上与.rhosts属主同名的用户,不需要输密码。远程用户启动rlogin访问你的本地主机,此时做如下安全性检查:
hosts.equiv和.rhosts文件详解
/etc/hosts.equiv中的+意味着任意主机,此时与/etc/hosts无关。netterm下rlogin除root外的所有用户可以成功,solaris下简单的rlogin hostname同netterm,但是rlogin -l username hostname不成功。这个事实说明netterm下rlogin的时候,指定的参数实际上是远程主机的当前用户名。还说明hosts.equiv文件不支持rlogin -l username hostname,不支持root的rlogin。- 值得注意的是两个
+号出现在$HOME/.rhosts中是非常危险的,意味着任意主机任意用户都可以不用口令登录到你的用户上来。.rhosts中的第一个+意味着所有主机,与/etc/hosts文件无关。.rhosts中的第二个+意味着所有用户,与/etc/passwd文件无关。若只有一个+,netterm中的rlogin可以成功,但来自sco root下的rlogin -l jhli hostname不成功,来自sco jhli的rlogin -l jhli hostname和rlogin hostname都成功。说明当.rhosts文件中只有主机名时,不支持rlogin -l username hostname,这点和/etc/hosts.equiv一样。若+ root,则netterm因无法实现rlogin -l username hostname而失败(只能实现rlogin hostname),来自sco root下的rlogin -l jhli hostname成功。+ +则都成功。注意,$HOME/.rhosts支持root的rlogin。 - 当这两个文件中没有使用+号代表所有主机时,与
/etc/hosts文件有关。这两个文件中指定的hostname必须是/etc/hosts文件中出现的,而且必须是主机名,IP地址和别名无效。在/etc/hosts文件中别名位于第三列。做主机判断时与在远程主机上hostname命令所显示的东西无关,与远程主机上的/etc/hosts定义无关。如果出现与这里讲述不符合的,是因为缓冲没有得到刷新的缘故,可以通过ping相关名字得到检验。此外,若没有使用+号,rlogin localhost、rlogin 127.0.0.1的效果和rlogin 134.*.*.*、rlogin zhuzhou的效果不一样,前者的检查不会通过。当hosts.equiv中定义为localhost时,效果则反过来。
- 值得注意的是两个
rlogin -l username hostname和rlogin hostname的检查有点细微的差别,首先在/etc/passwd的检查中是以-l的参数为准的,没有-l参数才使用远程主机的当前用户名,所谓当前用户名是考虑了su出来的用户。其次,$HOME也是先以-l参数为准。第三,$HOME/.rhosts文件中的用户名不是针对-l参数来的,而是针对远程主机的当前用户名来的,但是对于这个远程主机的当前用户名,并不要求出现在/etc/passwd文件中。这第6条尤其重要,许多不成功的$HOME /.rhost就是因为对第6条的不了解。$HOME/.rhosts文件的权限问题,chmod 0都没有影响,不过当时是处理root用户。对于一般用户,一定要保证.rhosts文件对于$HOME的属主是可读的。一般来说,这个文件最好chmod 400。对于root,如果不希望某个用户建立自己的.rhosts或者想替该用户建立.rhosts后不允许该用户自己修改,可以通过chown root .rhosts然后chmod 444 .rhosts实现。除了root,如果$HOME/.rhosts文件的属主和$HOME的属主不一致,检查将失败。$HOME/.rhosts文件中每行只跟一个用户名,若想多个指定,只好分多行指定用户名。sco unix下$HOME/.rhosts中若用+代表主机,与其他Unix系统不同,这里的+没有任何特殊的意义,所以检查将失败。但是用户名仍然可以用+代表。并且sco unix下若root的.rhosts文件go+w,则检查失败。- 建议
man rhosts看看,各个系统有许多细微的差别。
本文详细介绍了rlogin在不同情况下的认证流程,包括如何通过hosts.equiv和.rhosts文件进行远程主机验证,以及这些文件如何影响用户的登录权限。
1万+

被折叠的 条评论
为什么被折叠?



