我们知道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. 权限被拒绝,请重试。

实验对照表:

查看属组与用户的关系:
  1. 查看Linux系统里有哪些组:cat /etc/group
  2. 查看某组里有哪些用户:getent group 组名称 或者 cat /etc/group | grep 属组名称
  3. 查看用户信息:cat /etc/passwd |grep 用户ID

阻止创建新用户

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

  • 锁定文件 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

Linux系统安全限制:禁用或限制用户ssh登录(sshd_config、hosts.allow、hosts.deny、nologin、passwd)的更多相关文章

  1. Linux—禁止用户SSH登录方法总结

    Linux-禁止用户SSH登录方法总结 一.禁止用户登录 1.修改用户配置文件/etc/shadow       将第二栏设置为"*",如下.那么该用户就无法登录.但是使用这种方式 ...

  2. KingbaseES V8R6C5禁用root用户ssh登录图形化部署集群案例

    案例说明: 对于KingbaseES V8R6C5版本在部集群时,需要建立kingbase.root用户在节点间的ssh互信,如果在生产环境禁用root用户ssh登录,则通过ssh部署会失败:在图形化 ...

  3. linux服务器加入AD域(sssd)~ 通过域用户ssh登录加域的linux服务器

    搭建域控:参考 https://www.cnblogs.com/taosiyu/p/12009120.html 域控计算机全名: WIN-3PLKM2PLE6E.zhihu.test.com 域:zh ...

  4. linux系统状态网络、权限、用户大杂烩

    来来来,我们聊一下liunx系统相关的知识!! 首先从查询网络配置开始 ifconfig 查询.设置网卡和ip等参数 ifup,ifdown 脚本命令,更简单的方式启动关闭网络 ip命令是结合了ifc ...

  5. 『学了就忘』Linux启动引导与修复 — 72、Linux系统的修复模式(单用户模式)

    目录 1.单用户模式常见的错误修复 2.通过单用户模式修改系统密码 (1)进入grub启动引导程序中 (2)编辑相应的系统启动内容 (3)编辑grub配置文件内容 (4)启动系统 (5)修改root用 ...

  6. Linux系统应用管理:增加普通用户(密码管理等)

    1. 查看当前Linux系统的版本.内核等信息 [root@oldboy ~]# cat /etc/redhat-release CentOS release 6.7 (Final) . # 系统版本 ...

  7. linux系统搭建ftp服务器及创建用户使用

    linux 系统下搭建ftp服务器 ftp是什么 FTP是 File Transfer Protocol 文件传输协议的英文名称,用于在Internet上控制文件的双向传输. 同时它也是一个应用程序. ...

  8. Linux系统救援模式应用:单用户模式找回密码

    利用Linux系统救援模式找回密码 方法一: 开机时手要快按任意键,因为默认时间5s grub菜单,只有一个内核,没什么好上下选的,按e键.升级了系统或安装了Xen虚拟化后,就会有多个显示. 接下来显 ...

  9. VM下的linux系统上不了网?? 使用putty远程登录不上linux的解决方法?

    背景:昨晚想尝试一下用putty远程登录我的linux系统,悲剧的是,我竟然连接不上,显示 connection refused   ,连接被拒绝.于是我就想看看能不能在linux下看看能不能访问百度 ...

  10. Debian9安装SSH并允许root用户SSH登录

    安装SSH # apt install openssh-server openssh-client 启动SSH服务 # /etc/init.d/ssh start 添加SSH开机启动 # update ...

随机推荐

  1. 2023NOIP A层联测25 T2 游戏

    2023NOIP A层联测25 T2 游戏 优秀且新颖的期望题. 思路 分析问题,由于双方都是最优策略,所以可以说学生知道老师会选择那些教室设置概率(概率设置好就不能改变),老师也知道学生会怎样选择教 ...

  2. 人形机器人-强化学习算法-PPO算法的实现细节是否会对算法性能有大的影响.

    PPO算法是强化学习算法中目前应用最广的算法,虽然这个算法是2017年发表的,但是至今在整个AI领域下的agent子领域中这个算法都是最主要的强化学习算法(至少目前还没有之一),这个算法尤其在Chat ...

  3. java swing 学习

    JSplitPane固定分割比例和禁止拖动分割条 有知友问JSplitPane的问题,在写代码的时候不想让分割条拖动,结果找不到方法,百度了 居然也找不到... 后来在一个犄角旮旯里发现了 ,,  就 ...

  4. 如何正确使用 RMQ

    序列分块.设块长为 \(B\).每块预处理出最大值.对于询问 \([l, r]\),答案就是整块最大值和散块最大值拼起来.答案显然是 \(O(n) \sim O(\dfrac{n}{B} + B)\) ...

  5. 使用 wireshark 捕获 请求包

    1.出错场景 今天遇到一个问题,在用户登录时,发现用户在登录的时候,一个用户登录正常,一个用户登录报错,报错的原因时400错误,分析对比发现一个用户的分配用户组多,一个分配的少,其中多的那个出错了. ...

  6. JPAAS整合宝蓝德

    现在软件国产化的需求成了刚需了,因此在实施的过程中,我们整合了宝蓝德,我将过程写一下. 1.宝蓝德提供的程序包. 包名 说明 bes-actuator-spring-boot-2.x-starter- ...

  7. 使用七牛云上传文件报错incorrect region, please use up-z1.qiniup.com-迷恋自留地

    最近用Git提交代码时,一直报如标题所示的错误.百度了很多都无法解决,包括改更改配置,SSh等.最后在一个论坛上,说可能之前输入的账号或密码有误.尝试后,完美解决. 解决方法: 找到如下图的位置: 可 ...

  8. Qt 在线程中invokeMethod采用QueuedConnection模式,调用带指针参数槽,实际不会调用

    widgetObject有操函数Test: void Test(int *v); 在线程中调用Test,会被忽略,实际不会调用. QMetaObject::invokeMethod(widgetObj ...

  9. 2024-12-14:K 周期字符串需要的最少操作次数。用go语言,给定一个长度为n的字符串 word 和一个整数k,k是n的因数。每次操作可以选择两个下标i和j,使得i和j都可以被k整除,然后用从j

    2024-12-14:K 周期字符串需要的最少操作次数.用go语言,给定一个长度为n的字符串 word 和一个整数k,k是n的因数.每次操作可以选择两个下标i和j,使得i和j都可以被k整除,然后用从j ...

  10. Go 内存管理

    操作系统内存管理 操作系统管理内存的存储单元是页(page),在 linux 中一般是 4KB.而且,操作系统还会使用 虚拟内存 来管理内存,在用户程序中,我们看到的内存是不是真实的内存,而是虚拟内存 ...