系统安全与应用

目录

1. 系统账户清理

2. 密码安全性控制

2.1 密码复杂性

2.2 密码时限

3 命令历史查看限制

4. 终端自动注销

5. su权限以及sudo提权

5.1 su权限

5.2 sudo提权

6. 限制更改GRUB引导

7. 网络端口扫描


那天不知道为什么,心血来潮看了一下passwd配置文件,发现里面有巨多的用户名,也不知道是什么时候创建的,看了一下很多都已经不用了,甚至很多用户里面都是空的。刚好之前发现有人在问关于用户安全的一些问题,我想起来我好像写过关于用户管理的博客,貌似还没有将关于用户账号安全或者权限这方面的博客。所以今天索性来讲一讲系统安全方面的东西。

1. 系统账户清理

首先讲一下开头提到的,系统中有太多太多没人用,甚至创建了之后都没用登录过的账户,那么该如何将这些账户删除呢?

很简单粗暴的方法就是直接删除

userdel -r 用户名         直接将用户删除,这里加-r是要递归删除用户名下的目录

那假如,万一存在这种可能性,虽然一个账户很久没登了,但不确定这是谁的,万一是老板的怎么办,话有说回来,那万一是图谋不轨的人留下的怎么办,这时候我们需要用到

grep "/sbin/nologin$" /etc/passwd          检索出nologin 账户

usermod -s /sbin/nologin 用户名        将某些用户的shell设置为/sbin/nologin 可以防止他们登录到系统。

同样的,我们可以用

usermod -L 来锁定用户

关于usermod 的用法,在我之前的一篇博客中有写,这里就不再细说了

Linux命令基础(三(用户和组))-CSDN博客

我突然想起来,假如系统里没什么重要的东西,那也没必要禁止或者删除那些用户,又占不了多大空间,或者说怕误删误封,那我们可以把系统中为数不多的重要文件上锁就可以了

chattr +i /etc/passwd /etc/shadow     --锁定文件

lsattr /etc/passwd /etc/shadow          --查看为锁定的状态

锁定后我们切换用户对文件进行修改

可以看到最下方提示无法修改

注意:只是不能修改,不代表不能查看。如果想要只有创建者能看那就要用到 chmod 600

2. 密码安全性控制

2.1 密码复杂性

然后我们开始讲系统安全,首先从最基础也是最直白的用户密码说起,我们设置一个密码的时候,会涉及到密码的复杂性(就是由数字,大小写字母,符号,如果仅由数字构成那么复杂度就是1),长度。那么,如何强制用户设置密码的时候,必须要有大小写或者字符,如何必须要由多少位组成呢?

我们用vim编辑器,编辑文件 /etc/pam.d/system-auth

然后在 password    requisite 那一行的 type=后面添加如下内容

minlen=8 ucredit=-2 lcredit=-4 dcredit=-1 ocredit=-1

minlen=8     用户密码长度不得低于8位

ucredit=-1   用户密码中至少有1个大写字母 (数字为负数,表示至少有多少个大写字母;数字为正数,表示至多有多少个大写字母)

lcredit=-1    用户密码中最少有1个小写字母

dcredit=-1   用户密码中最少有1个数字

ocredit=-1   用户密码中最少有1个特殊字符

还有一个参数是remember,我没有加在上面,意思是防止旧密码
如 remember=5 修改用户密码时最近5次用过的旧密码就不能重用了

设置完成后我们保存退出,然后验证一下。

我输的是123456,可以看到,提示密码包含少于1的小写字母。

2.2 密码时限

密码本身自带的属性讲完后,还有密码的时限,这里的时限包括密码有效期;还有我们经常在一些app上遇到的,刚修改完密码需要隔多久才能再次修改密码;除此之外还能设置强制要求用户下次登录时修改密码等。

我们同样用文件编辑器  vim /etc/login.efs

PASS_MAX_DAYS  表示密码有效期多少天 默认99999天

PASS_MIN_DAYS   表示自上次修改密码以来,最少隔多少天后用户才能再次修改密码,默认值是 0

PASS_MIN_LEN     密码最小长度,对于root账户无效。现在这个设置不能生效了,因为已经被我们上面讲到的pam模块覆盖了。

PASS_WARN_AGE  表示  密码到期前多少天,系统开始通知用户“密码即将到期”,默认为7

这里做的修改只能适用于我们即将新建的用户,不适用于已经存在于系统中的用户,其实想一想也确实,生活中不乏那种需要重启才能启用功能的案例。

那么如何修改已经在系统中的用户的密码属性呢?

我们可以时chage命令 

比如修改zhangsan 用户的密码时限

chage -M 10 zhangsan       修改zhangsan用户的密码最大有效期为10天,相应的-m 就是修改最小有效期(最小有效期内用户不能更改密码,和上面的PASS_MIN_DAYS意思一样)

chage命令其他操作我也不多讲了,在我的另外一篇博客中有写

Linux命令基础(三(用户和组))-CSDN博客

3 命令历史查看限制

我们都知道Linux有一个命令叫 history 它可以查看你前面输过的1000条命令,1000条这个数字还是蛮大的,假如刚好你配置什么隐秘性的文件,把它放在哪里,那么 history 全都能看见。所以,我们需要对这条命令做一些限制。

我们可以用

export HISTSIZE=15

限制历史命令只显示15条(只针对当前用户,重启后失效)

或者可以history -c 全部清除 ,但同样也是重启后失效。

那么,该如何才能使设置永久生效呢?

我们先查看~目录下,有个隐藏文件叫 .bashrc ,用命令ls -a可以看到,进入文件编辑,在最后一行加上 export HISTSIZE=15 

然后保存退出,重启。可以看到,再次输入history 只显示15条了。同理,如果想要不显示的话,=0就可以了。

特别的,如果需要每个用户登出时都清除输入的命令历史记录,可以在/etc/skel/.bash_logout文件中添加

rm -f $HOME/.bash_history

这样,当用户每次注销时, .bash_history文件都会被删除

4. 终端自动注销

Windows系统中有静止时间长了之后电脑自带休眠或者注销,至于多久注销,注不注销,都可以根据自己的需求设置。Linux自然也有这种也可以进行相应的设置。

比如我需要闲置10秒后自动注销

export TMOUT=10

可以看到,十秒后自动登出了。

这个命令适用于当前用户,切换用户后就不适用了。

unset TMOUT          取消自动注销

5. su权限以及sudo提权

5.1 su权限

我们知道,su命令可以在用户之间进行切换,当一个用户设置了密码,我们再使用su进行切换时就需要输入密码,同样的,别的用户切换至root账户,也需要输入密码,那么这就涉及到一个问题,我普通用户是不是就可以一直su root  然后试密码,我甚至直接可以写一个脚本然后将密码字典导入进去,总会试出来的。所以我们要对系统或者用户进行一些限制。上面讲到密码复杂性中,图片里的那行代码  “type= ”前面有一个retry=3,不知道你们有没有注意看,它的意思就是输错密码后可以重试三次,如果再输错的话需要在文件里进行额外的配置。

我把上面那张图再拿来,方便大家观察。

例如,重输五此后锁定900秒,我们需要在上面的auth那一块 插入以下两行即可。

auth required pam_faillock.so preauth audit silent deny=5 unlock_time=900

auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=900

还有一种方法就是,我们对用户使用su命令进行限制,比如除了root用户外,其他用户都不准使用su命令,或者除了这几个用户外,其他用户都不允许使用su命令。

我们可以通过在/etc/pam.d/su文件里设置禁止用户使用su命令

主要观察框出来的这两行代码

为了方便解释,我们把第一个框直接称作1,第二个框2

1不注释:root用户使用 su 不需要输入密码

1注释:即使是root用户使用 su 命令也需要输入密码

2不注释:只有wheel组内的成员可以使用 su 命令

2注释:任何用户包括wheel 组内的成员使用 su 命令需要输入密码

这里简单做一下演示吧,我在配置文件里注释了 1 ,那么这也就应该意味着root用户使用 su 命令也需要输入密码,我们来切换看看,可以看到,需要输入密码了。其他我就不一一验证了。

5.2 sudo提权

其实通过很多地方都可以看出来了,root用户总是拥有特权,所以,在生产环境中的Linux服务器,它的root账户的密码就十分重要,我们上面进行的一些列操作,都是在保护root账户的安全性。但是有些时候,因为特殊原因,不得不让一些普通用户来登录root用户完成一些权限较高的任务,要知道,root账户的密码,多传播一次就多n份风险,那么我们该如何既不要告知对方root密码,又能让对方账户拥有相应的权限呢?

这里就涉及到了对用户提权,一般使用visudo来对文件进行编辑,完成相应的提权操作。

visudo编辑界面↑

这里提权的格式为

[用户名] [主机]=[需要提权的命令]

可能不太好理解,我们通过一个例子来解释,比如,我要让rose 用户能够执行用户的增删改

我们先切换到rose,试着新增一个用户,可以看到,直截了当地告诉你权限不够。

好,我们回到root账户,进入visudo编辑页面,在最底下加上

rose ALL=(ALL)/usr/sbin/useradd, /usr/sbin/userdel

rose是用户名不用多说了吧

ALL 表示可以在任何主机上执行这些命令

(ALL) 表示可以以任何用户的身份执行这些命令

后面是命令地绝对路径

配置完成了之后我们可以用切换到该用户 ,然后用  sudo -l   列出用户在主机上可用的和被禁止的命令。

可以看到,rose用户皇权特批

接下来useradd不用我多说了吧,指定能成功的,我就不进行演示了。但是强调一点,我们切换到提权后的用户,直接使用命令依然会提示权限不够,我们需要在前面加上sudo前缀

sudo useradd zhangsan    就可以了

不仅针对用户新增还是删除的提权,其他命令同样也能提权,照猫画虎就可以了。

6. 限制更改GRUB引导

我前面的博客也讲到过,假如系统开机后显示>grub,然后黑屏无法开机,可以通过修改GRUB菜单来进行修复。但是,细想那波操作,貌似人人都可以进入到那个操作进行修改,如果系统里存在比较重要的数据的话,那是相当不安全的。所以,我们可以为GRUB菜单设置一个密码

grub2-mkpasswd-pbkdf2    根据提示设置GRUB菜单的密码

我这里是123123,复制这一长段

cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak

cp /etc/grub.d/00_header /etc/grub.d/00_header.bak

vim /etc/grub.d/00_header

在四十多行的位置输入

grub2-mkconfig        生成新的 grub.cfg 配置文件

grub2-mkconfig -o /boot/grub2/grub.cfg      生成新的 grub.cfg 文件

然后我们重启机器,按e键进入grub菜单,可以看到,需要输入账户和密码才行了。

也可以更简单的,直接

grub2-setpassword

来设置密码

7. 网络端口扫描

络端口扫描是一种常见的网络安全测试方法,用于确定计算机或网络设备上哪些端口是开放的和可访问的。端口扫描可以帮助管理员发现潜在的安全漏洞或配置错误,从而及时采取措施加以修复。

我们常用的命令 nmap

首先用   rpm -qa |grep nmap    检测一下有没有下载nmap命令

如果没有下载的话用   yum install -y nmap   进行下载

接下来我们就可以使用nmap命令来进行扫描了

nmap命令常用的选项有

-p:分别用来指定扫描的端口

-sS:TCP SYN 扫描(半开扫描):只向目标发出 SYN 数据包,如果收到 SYN/ACK响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口并未开放。 tcp确定三次握手 -sT,TCP 连接扫描:这是完整的 TCP 扫描方式,用来建立一个 TCP 连接,如果 成功则认为目标端口正在监听服务,否则认为目标端口并未开放。

-sF:TCP FIN 扫描:开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对 SYN 数据包进行简单过滤,而忽略了其他形式的 TCP 攻 击包。这种类型的扫描可间接检测防火墙的健壮性。

-sU:UDP 扫描:探测目标主机提供哪些 UDP 服务,UDP扫描的速度会比较慢。

-sP:ICMP 扫描:类似于 ping 检测,快速判断目标主机是否存活,不做其他扫描。

-P0:跳过 ping 检测:这种方式认为所有的目标主机是存活的,当对方不响应 ICMP 请求时,使用这种方式可以避免因无法 ping 通而放弃扫描。

以上就是我能想到的比较基础的系统安全相关的操作,如有补偿或者讲错的地方恳请留言指正,谢谢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/778139.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在 PostgreSQL 中,如何处理大规模的文本数据以提高查询性能?

文章目录 一、引言二、理解 PostgreSQL 中的文本数据类型三、数据建模策略四、索引选择与优化五、查询优化技巧六、示例场景与性能对比七、分区表八、数据压缩九、定期维护十、总结 在 PostgreSQL 中处理大规模文本数据以提高查询性能 一、引言 在当今的数据驱动的世界中&…

Android 集成OpenCV

记录自己在学习使用OpenCV的过程 我使用的是4.10.0 版本 Android 集成OpenCV 步骤 下载OpenCV新建工程依赖OpenCV初始化及逻辑处理 1、下载OpenCV 并解压到自己的电脑 官网 地址:https://opencv.org/releases/ 个人地址:https://pan.baidu.com/s/19f…

前端必修技能:高手进阶核心知识分享 - CSS mix-blend-mode 图片混合模式详解

标签定义及使用说明 mix-blend-mode 属性描述了元素的内容应该与元素的直系父元素的内容和元素的背景如何混合。 语法 mix-blend-mod: 使用mix-blend-mode 各种混合模式实例 注意: Internet Explorer 或 Edge 浏览器不支持 mix-blend-mode 属性。 (还是那个熟…

收银系统源码-千呼新零售2.0

千呼新零售2.0系统是零售行业连锁店一体化收银系统,包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体,线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

24-7-6-读书笔记(八)-《蒙田随笔集》[法]蒙田 [译]潘丽珍

文章目录 《蒙田随笔集》阅读笔记记录总结 《蒙田随笔集》 《蒙田随笔集》蒙田(1533-1592),是个大神人,这本书就是250页的样子,但是却看了好长好长时间,体会还是挺深的,但看的也是不大仔细&…

【Oracle】Oracle常用函数

目录 聚合函数数字函数1. ABS函数:返回一个数的绝对值。2. CEIL函数:返回大于等于给定数的最小整数。3. FLOOR函数:返回小于等于给定数的最大整数。4. ROUND函数:将一个数四舍五入到指定的小数位。5. MOD函数:返回两个…

Ubuntu固定虚拟机的ip地址

1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安装时报错W: Target CNF (multiverse/cnf/Commands-all) is configured multiple times in /etc/apt/sources.list:10, 检查 /etc/apt/sources.list…

SpringBoot新手快速入门系列教程二:MySql5.7.44的免安装版本下载和配置,以及简单的Mysql生存指令指南。

我们要如何选择MySql 目前主流的Mysql有5.0、8.0、9.0 主要区别 MySQL 5.0 发布年份:2005年特性: 基础事务支持存储过程、触发器、视图基础存储引擎(如MyISAM、InnoDB)外键支持基本的全文搜索性能和扩展性: 相对较…

HTML+CSS+JavaScript入门学习

目录 1. 前言2. HTML2.1 HTML简介2.2 HTML标签 3. CSS3.1 CSS知识整理及总结3.2 CSS之flex布局 4. JavaScript4.1 JavaScript知识整理及总结1-基础篇4.2 JavaScript知识整理及总结2-进阶篇 1. 前言 本文主要采用转载的形式,偶尔发现了一个比较不错的博客站点&#…

华为ENSP防火墙+路由器+交换机的常规配置

(防火墙区域DHCP基于接口DHCP中继服务器区域有线区域无线区域)配置 一、适用场景: 1、普通企业级网络无冗余网络环境,防火墙作为边界安全设备,分trust(内部网络信任区域)、untrust(外部网络非信…

计算机网络-IP组播基础

一、概述 在前面的学习交换机和路由协议,二层通信是数据链路层间通信,在同一个广播域间通过源MAC地址和目的MAC地址进行通信,当两台主机第一次通信由于不清楚目的MAC地址需要进行广播泛洪,目的主机回复自身MAC地址,然后…

JSP WEB开发(一) JSP语言基础

目录 JSP JSP简介: JSP页面 JSP运行原理 JSP脚本元素 JAVA程序片 局部变量 全局变量和方法的声明 全局变量 方法的声明 程序片执行特点 synchronized关键字 表达式 JSP指令标记 page指令 include指令 JSP动作标记 JSP动作元素include和include指令的…

【C++】B树及其实现

写目录 一、B树的基本概念1.引入2.B树的概念 二、B树的实现1.B树的定义2.B树的查找3.B树的插入操作4.B树的删除5.B树的遍历6.B树的高度7.整体代码 三、B树和B*树1.B树2.B*树3.总结 一、B树的基本概念 1.引入 我们已经学习过二叉排序树、AVL树和红黑树三种树形查找结构&#x…

1-3 NLP为什么这么难做

1-3 NLP为什么这么难做 主目录点这里 字词结构的复杂性 中文以汉字为基础单位,一个词通常由一个或多个汉字组成,而不像英语词汇单元由字母构成。这使得中文分词(切分句子为词语)成为一个具有挑战性的任务。语言歧义性 中文中常…

Mysql-常见DML-DQL-语句语法用法总结

1、常见DML语句 1.1 INSERT语句 说明:将数据插入到数据库表中。 INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...); 实例:添加C罗信息到数据库表中 insert into employee (ID, name, gender, entrydate, age) values …

eclipse断点调试(用图说话)

eclipse断点调试(用图说话) debug方式启动项目,后端调试bug调试 前端代码调试,请参考浏览器断点调试(用图说话) 1、前端 选中一条数据,点击删除按钮 2、后端接口打断点 断点按钮 介绍 resu…

python如何设计窗口

PyQt是一个基于Qt的接口包,可以直接拖拽控件设计UI界面,下面我简单介绍一下这个包的安装和使用,感兴趣的朋友可以自己尝试一下: 1、首先,安装PyQt模块,这个直接在cmd窗口输入命令“pip install pyqt5”就行…

Hugging Face 全球政策负责人首次参加WAIC 2024 前沿 AI 安全和治理论坛

Hugging Face 全球政策负责人艾琳-索莱曼 ( Irene Solaiman )将参加7月5日在上海举办的WAIC-前沿人工智能安全和治理论坛,并在现场进行主旨演讲和参加圆桌讨论。具体时间信息如下:主旨演讲:开源治理的国际影响时间 &am…

YOLOv8改进 添加轻量级注意力机制ELAttention

一、ELA论文 论文地址:2403.01123 (arxiv.org) 二、Efficient Local Attention结构 ELA (Efficient Local Attention) 被用于处理自然语言处理任务中的序列数据。它旨在提高传统注意力机制的效率,并减少其计算和存储成本。 在传统的注意力机制中,计算每个输入位置与所有其…

fastadmin 如何给页面添加水印

偶然发现fastadmin框架有个水印插件&#xff0c;看起来漂亮&#xff0c;就想也实现这样的功能&#xff0c;看到需要费用。但是现成的插件需要费用&#xff0c;自己动手丰衣足食。说干就干。 1. 找到watermark.js &#xff0c;放到assets/js/ 下面 2.具体页面引入 <script…