rsh主机信任

本文详细介绍了rlogin在不同情况下的认证流程,包括如何通过hosts.equiv和.rhosts文件进行远程主机验证,以及这些文件如何影响用户的登录权限。

安装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.rshd514/tcp基于 hosts.equiv 或 ~/.rhosts远程 Shell(Remote Shell),允许在远程主机执行命令(类似 ssh,但不加密)。
rlogin远程交互式登录(类似SSH)in.rlogind513/tcp基于 hosts.equiv 或 ~/.rhosts远程登录(Remote Login),允许登录到远程主机的终端(类似 ssh,但不加密)。
rexec远程执行命令(类似rsh)in.rexecd512/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/

流程总结:

  1. 首先明确如果有远程主机想rlogin到本机,本机都要做什么

     1)	`rlogind`检查本机`/etc/passwd`中是否有远程的`用户名`,没有则拒绝访问
    
     2)	如果本机`/etc/passwd`中有远程的用户名,并且该用户名`不是root`,则先检查`/etc/hosts.equiv`,看看里面是否存在`远程主机名`,如果存在,则允许访问,如果不存在,则去检查`$HOME/.rhosts`文件.
    
     如果是`root`,则跳过对`etc/hosts.equiv`的检查,只检查"`/.rhosts`"
    
  2. /etc/hosts.equiv中只有远程主机名的话,表示允许远程主机上的所有非root用户可以登录本地主机,并且不需要密码

     `/etc/hosts.equiv` 文件中如果加入了一台远程主机和一个用户,在远程主机上的那个用户(非root用户)就可以用`rlogin`登录本地机上的`所有非root账号`,而且不需要密码。
    
  3. $HOME/.rhosts文件中如果是远程主机名的话,则只信任由远程主机上与.rhosts属主同名的用户,不需要输密码。远程用户启动rlogin访问你的本地主机,此时做如下安全性检查:


hosts.equiv和.rhosts文件详解

  1. /etc/hosts.equiv中的+意味着任意主机,此时与/etc/hosts无关。nettermrloginroot外的所有用户可以成功,solaris下简单的rlogin hostnamenetterm,但是rlogin -l username hostname不成功。这个事实说明nettermrlogin的时候,指定的参数实际上是远程主机的当前用户名。还说明hosts.equiv文件不支持rlogin -l username hostname,不支持rootrlogin
    • 值得注意的是两个+号出现在$HOME/.rhosts中是非常危险的,意味着任意主机任意用户都可以不用口令登录到你的用户上来。.rhosts中的第一个+意味着所有主机,与/etc/hosts文件无关。.rhosts中的第二个+意味着所有用户,与/etc/passwd文件无关。若只有一个+netterm中的rlogin可以成功,但来自sco root下的rlogin -l jhli hostname不成功,来自sco jhlirlogin -l jhli hostnamerlogin 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支持rootrlogin
    • 当这两个文件中没有使用+号代表所有主机时,与/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时,效果则反过来。
  2. rlogin -l username hostnamerlogin hostname的检查有点细微的差别,首先在/etc/passwd的检查中是以-l的参数为准的,没有-l参数才使用远程主机的当前用户名,所谓当前用户名是考虑了su出来的用户。其次,$HOME也是先以-l参数为准。第三,$HOME/.rhosts文件中的用户名不是针对-l参数来的,而是针对远程主机的当前用户名来的,但是对于这个远程主机的当前用户名,并不要求出现在/etc/passwd文件中。这第6条尤其重要,许多不成功的$HOME /.rhost就是因为对第6条的不了解。
  3. $HOME/.rhosts文件的权限问题,chmod 0都没有影响,不过当时是处理root用户。对于一般用户,一定要保证.rhosts文件对于$HOME的属主是可读的。一般来说,这个文件最好 chmod 400。对于root,如果不希望某个用户建立自己的.rhosts或者想替该用户建立.rhosts后不允许该用户自己修改,可以通过chown root .rhosts然后chmod 444 .rhosts实现。除了root,如果$HOME/.rhosts文件的属主和$HOME的属主不一致,检查将失败。
  4. $HOME/.rhosts文件中每行只跟一个用户名,若想多个指定,只好分多行指定用户名。
  5. sco unix$HOME/.rhosts中若用+代表主机,与其他Unix系统不同,这里的+没有任何特殊的意义,所以检查将失败。但是用户名仍然可以用+代表。并且sco unix下若root.rhosts文件go+w,则检查失败。
  6. 建议man rhosts看看,各个系统有许多细微的差别。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

教Linux的李老师

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值