首页 > 系统相关 >Linux系统安全限制:禁用或限制用户ssh登录(sshd_config、hosts.allow、hosts.deny、nologin、passwd)

Linux系统安全限制:禁用或限制用户ssh登录(sshd_config、hosts.allow、hosts.deny、nologin、passwd)

时间:2023-07-12 14:55:37浏览次数:39  
标签:deny 用户 sshd echo etc hosts ssh

    我们知道Linux系统安全性设置有很多方式。常见的有通过firewall防火墙、或者iptables规则实现放行、拦截屏蔽某些特征的网络请求。示例:iptables限制ssh链接服务器
    还有一种办法是机房运维常用的权限管控手段:管控服务器登录权限、管控账号执行操作权限。这种手段主要管控的目标对象是运维人员,即操作者。
    下面通过实验验证如何通过 /etc/ssh/sshd_config、/etc/hosts.allow、/etc/hosts.deny、/sbin/nologin、/etc/passwd 实现禁止用户ssh登录。

/sbin/nologin、/etc/passwd 设置用户 拒绝通过ssh登录

    Linux系统是基于文件系统的,每个用户都必须明确有一个用于解释执行shell命令解释器位置,即“环境变量”,一般是 “/bin/bash”
    我们可以通过设置用户的解释器为 “/sbin/nologin” 来禁止该用户执行登录。

  1. 创建非登录用户,可以在创建新用户时指定禁止ssh登录:useradd -s /sbin/nologin <new username>
  2. 已存在的用户设置为禁止ssh登录:usermod -s /sbin/nologin <username>
  3. 直接修改/etc/passwd系统文件,将该用户解释器修改为/sbin/nologin

通过以上方法1、2设置后底层其实还是到/etc/passwd里面的。示例:

root:x:0:0:root:/root:/bin/bash
# myname:x:1000:1000::/home/myname:x:/bin/bash
myname:x:1000:1000::/home/myname:x:/sbin/nologin

实验:

sshd_config 设置用户或属组 允许或拒绝通过ssh登录

     /etc/ssh/sshd_config文件是sshd服务的配置文件,里面的配置项专门管控ssh登录。常见的有:指定ssh端口、地址来源、用户默认的证书加密方式、AuthorizedKeysFile、登录日志筛选、登录日志级别、最大登录数、自定义Authentication、密码格式、密码过期期限、密码等级等等所有与ssh相关的设置项。
    这里我们单说允许或限制用户名、属组的登录权限设置。

  1. AllowUsers设置允许登录的用户白名单:echo "AllowUsers myname" >> /etc/ssh/sshd_config
  2. AllowGroups设置允许登录的属组白名单:echo "AllowGroups myGroup" >> /etc/ssh/sshd_config
  3. DenyUsers设置禁止登录的用户黑名单:echo "DenyUsers myname" >> /etc/ssh/sshd_config
  4. DenyGroups设置禁止登录的属组黑名单:echo "DenyGroups myGroup" >> /etc/ssh/sshd_config

注意:

  • 设置AllowUsers、AllowGroups时,该用户或属组允许登录,其他均禁止ssh登录!!!
  • 同时设置AllowUsers、DenyUsers时,AllowUsers优先级高,其他均禁止ssh登录!!!

即:有AllowUsers、AllowGroups时,系统只看AllowUsers、AllowGroups不管其他设置。

被禁止的用户登录时,默认提示信息:Permission denied, please try again. 权限被拒绝,请重试。

实验对照表:

阻止创建新用户

    注意:以上方法目前只能针对已经存在的用户/组 设置白名单/黑名单,一般还需要禁止普通用户的创建新用户/新组的权限,防止新建用户私自篡改规则。

  • 锁定文件 chattr +i /etc/gshadow /etc/group /etc/shadow /etc/passwd
  • 解锁文件 chattr -i /etc/gshadow /etc/group /etc/shadow /etc/passwd

可以通过命令查看权限:

  • lsattr /etc/gshadow /etc/group /etc/shadow /etc/passwd
  • ls -lt /etc/gshadow /etc/group /etc/shadow /etc/passwd

hosts.allow、hosts.deny 设置IP或IP段或IP范围 允许或拒绝通过ssh登录

通过/etc/hosts.allow 设置允许建立连接的地址来源。这里仅演示ssh服务配置(其他服务sftp、telnet等也可以哦)。

  1. 允许特定IP echo "sshd:192.168.0.1:allow" >> /etc/hosts.allow
  2. 允许特定IP段 echo "sshd:192.168.0.1/24:allow" >> /etc/hosts.allow
  3. 允许特定IP段 echo "sshd:192.168..:allow" >> /etc/hosts.allow
  4. 允许全部地址 echo "sshd:ALL" >> /etc/hosts.allow

通过/etc/hosts.deny 设置禁止建立连接的地址来源。这里仅演示ssh服务配置(其他服务sftp、telnet等也可以哦)。

  1. 拒绝特定IP echo "sshd:192.168.0.2:deny" >> /etc/hosts.deny
  2. 拒绝特定IP段 echo "sshd:192.168.0.2/24:deny" >> /etc/hosts.deny
  3. 拒绝特定IP段 echo "sshd:192.168..:deny" >> /etc/hosts.deny
  4. 拒绝全部地址 echo "sshd:ALL" >> /etc/hosts.deny

注意:

  • 设置allow时,该地址允许建立连接,其他均禁止!!!
  • 同时设置allow、deny时,allow优先级高!!!

被禁止的用户登录时,默认提示信息:
Connecting to 10.99.5.132:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Connection closing...Socket close.

Connection closed by foreign host.

Disconnected from remote host(10.99.5.132:22) at 10:56:08.

Type `help' to learn how to use Xshell prompt.

实验对照表:

重启ssh服务

编辑/修改后,必须重启ssh服务后生效!
systemctl restart sshd

service restart sshd


实验脚本: sshd_config-myrules.sh:

#! /bin/bash
# author: xiongzaiqiren
# date: 2023-03-20
# usage: sh sshd_config-myrules.sh

### 默认情况下,Linux中创建用户帐户时用户具有shell访问权限。在某些情况下不需要用户帐户登录shell。下面示例如何设置已存在的用户禁止shell登录、创建用户时禁止shell登录。
### 默认情况下,创建用户时,将按照/etc/default/useradd文件中定义的为用户分配shell。Linux中附带了一个/sbin/nologinshell,当用户尝试连接时,它会显示一条消息“This account is current not available”。这是禁止用户登录shell的一种方法。下面是使用方式:
### 您可以直接查看/编辑 /etc/passwd,文件哦
########## nologin(黑名单) ##########
#示例六:创建用户时禁用shell登录
#格式 useradd -s /sbin/nologin {username}
#示例 useradd user01 -s /sbin/nologin

echo '禁用shell登录:'
cat /etc/passwd | grep -i nologin


### 设置服务器安全,允许特定用户/组通过ssh连接服务器。
### 注意:目前只能针对已经存在的用户/组 设置白名单/黑名单,还需要禁止普通用户的创建新用户/新组的权限,防止其他用户私自建立新用户/组 跳过该规则。
### 您可以直接查看/编辑 /etc/ssh/sshd_config 文件哦

########## AllowUsers(用户白名单) ##########
#示例一:允许 user3用户 使用ssh登录
# echo "AllowUsers user3" >> /etc/ssh/sshd_config

echo '允许ssh的用户:'
cat /etc/ssh/sshd_config | grep -i allowusers

########## AllowGroups(组白名单) ##########
#示例二:允许 2g-admin组 使用ssh登录
# echo "AllowGroups 2g-admin" >> /etc/ssh/sshd_config

echo '允许ssh的组:'
cat /etc/ssh/sshd_config | grep -i allowgroups

########## DenyUsers(用户黑名单) ##########
#示例三:禁用 user3 使用ssh登录
# echo "DenyUsers user1" >> /etc/ssh/sshd_config

echo '禁用ssh的用户:'
cat /etc/ssh/sshd_config | grep -i denyusers

########## DenyGroups(组黑名单)  ##########
#示例四:禁用 2g-admin组 使用ssh登录
# echo "DenyGroups 2g-admin" >> /etc/ssh/sshd_config

echo '禁用ssh的用户组:'
cat /etc/ssh/sshd_config | grep -i denygroups

### 注意:以上方法目前只能针对已经存在的用户/组 设置白名单/黑名单,还需要禁止普通用户的创建新用户/新组的权限,防止其他用户私自建立新用户/组 跳过该规则。
#锁定文件 chattr +i /etc/gshadow /etc/group /etc/shadow /etc/passwd
#解锁文件 chattr -i /etc/gshadow /etc/group /etc/shadow /etc/passwd


### 设置服务器安全,允许特定IP/段通过ssh连接服务器。
### 您可以直接查看/编辑 /etc/hosts.allow,/etc/hosts.deny,文件哦
### 优先级:hosts.allow > hosts.deny
########## hosts.allow(IP白名单) ##########
#示例五:允许 192.168.0.1 使用ssh登录
#允许特定IP echo "sshd:192.168.0.1:allow" >> /etc/hosts.allow
#允许特定IP段 echo "sshd:192.168.0.1/24:allow" >> /etc/hosts.allow
#允许全部地址 echo "sshd:ALL" >> /etc/hosts.allow

echo '允许ssh的IP:'
cat /etc/hosts.allow | grep -i ssh

########## hosts.deny(IP黑名单) ##########
#示例六:拒绝 192.168.0.2 使用ssh登录
#拒绝特定IP echo "sshd:192.168.0.2:deny" >> /etc/hosts.deny
#拒绝特定IP段 echo "sshd:192.168.0.2/24:deny" >> /etc/hosts.deny
#拒绝全部地址 echo "sshd:ALL" >> /etc/hosts.deny

echo '拒绝ssh的IP:'
cat /etc/hosts.deny | grep -i ssh



########## 编辑/修改后,必须重启ssh服务后生效!##########
# systemctl restart sshd
#或 service restart sshd

标签:deny,用户,sshd,echo,etc,hosts,ssh
From: https://www.cnblogs.com/xiongzaiqiren/p/sshlogin.html

相关文章

  • mysql 出现 mysqladmin flush-hosts
    【1】报错信息messagefromserver:"Host'xx.xx.xx.xx'isblockedbecauseofmanyconnectionerrors;unblockwith'mysqladminflush-hosts'"主机xx.xx.xx.xx被锁,因为许多连接错误;【2】快速解决mysql出现mysqladminflush-hosts,是因为其他客户机连接错误次数过......
  • sshd服务部署
    sshd服务部署软件安装修改配置文件启动使用​1、搭建所有服务的套路关闭防火墙和selinux(实验环境都先关闭掉)配置yum源(公网源或者本地源)软件安装和检查了解并修改配置文件启动服务检查运行状态并设置开机自启动2、搭建SSH服务这部分内容可以参考于超老师......
  • CentOS 7 下/etc/ssh/sshd_config 文件解释
    CentOS7下/etc/ssh/sshd_config文件详解SSH由客户端和服务端的软件组成,在客户端可以使用的软件有SecureCRT、putty、Xshell等,而在服务器端运行的是一个sshd的服务,通过使用SSH,可以把所有传输的数据进行加密,而且也能够防止dns和IP欺骗,此外,SSH传输的数据是经过压缩的,可以加快传输......
  • 给ansible的hosts文件加密及使用方法
    转: https://blog.csdn.net/Li_haiyu/article/details/125774440  ......
  • 08异步短信发送,注册功能,补充【1.为什么要写media才能访问,2.debug作用,3.ALLOWED_HOSTS
    1异步发送短信#原来的发送短信,是同步 -前端输入手机号---》点击发送短信---》前端发送ajax请求----》到咱们后端接口---》取出手机号----》调用腾讯发送短信---》腾讯去发短信---》发完后----》回复给我们后端发送成功---》我们后端收到发送成功---》给我们前端返回发送成功......
  • linux中,如何在/etc/hosts中将一个域名解析为多个IP地址?工作原理是什么?
    可以在/etc/hosts文件中,将一个域名配置多个IP地址 比如:[root@nccztsjb-node-23yamls]#cat/etc/hosts127.0.0.1localhostlocalhost.localdomainlocalhost4localhost4.localdomain4::1localhostlocalhost.localdomainlocalhost6localhost6.localdomain......
  • sshd服务端配置
    目录sshd服务端配置文件:/etc/ssh/sshd_config参数说明:sshd客户端配置客户端配置文件客户端配置文件:/etc/ssh/ssh_config客户端的使用方式远程登录推送上行复制拉取下行复制sftp命令sftp命令格式:sftp连接后的常用命令:sftp和ftp的区别:免密码登录认证方式设置免密码登录(创建密钥对......
  • 查看nebula版本号 console里show hosts graph
    (root@nebula)[(none)]>showhostsgraph+-------------+------+----------+---------+--------------+---------+|Host|Port|Status|Role|GitInfoSha|Version|+-------------+------+----------+---------+--------------+---------+|&q......
  • https:imnks.com369.html hosts处理
    https:imnks.com369.htmlhosts处理sudo-i#手动筛选的ip,2022.11.1更新curlhttp://code.imnks.com/hosts.sh|bash#自动筛选的ipcurlhttp://code.imnks.com/hosts-auto.sh|bash​​......
  • macOS 上修改 hosts 文件后刷新DNS
    打开终端:在Launchpad中打开"终端"应用程序,或者通过在Spotlight中搜索"终端"并打开它。输入刷新命令:在终端中输入以下命令并按下回车键:sudokillall-HUPmDNSResponder这将发送刷新DNS缓存的信号。输入密码:您可能需要输入管理员密码来执行sudo命令。在输......