系统安全与应用

目录

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.mzph.cn/bicheng/39219.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三维家:SaaS的IT规模化降本之道|OceanBase 《DB大咖说》(十一)

OceanBase《DB大咖说》第 11 期,我们邀请到了三维家的技术总监庄建超,来分享他对数据库技术的理解,以及典型 SaaS 场景在数据库如何实现规模化降本的经验与体会。 庄建超,身为三维家的技术总监,独挑大梁,负…

grpc学习golang版( 八、双向流示例 )

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 第五章 多proto文件示例 第六章 服务器流式传输 第七章 客户端流式传输 第八章 双向流示例 文章目录 一、前言二、定义proto文件三、编写server服务端四、编写client客…

中霖教育:环评工程师好考吗?

【中霖教育好吗】【中霖教育怎么样】 在专业领域,环评工程师资格认证考试是一项具有挑战性的考试,考试科目为:《环境影响评价相关法律法规》 《环境影响评价技术导则与标准》《环境影响评价案例分析》《环境影响评价技术方法》。 四个科目…

【Linux】—VMware安装Centos7步骤

文章目录 前言一、虚拟机准备二、CentOS7操作系统安装 前言 本文介绍VMware安装Centos7步骤。 软件准备 软件:VMware Workstation Pro,直接官网安装。镜像:CentOS7,镜像官网下载链接:https://vault.centos.org/&#x…

[C++]——同步异步日志系统(1)

同步异步日志系统 一、项⽬介绍二、开发环境三、核心技术四、环境搭建五、日志系统介绍5.1 为什么需要日志系统5.2 日志系统技术实现5.2.1 同步写日志5.2.2 异步写日志 日志系统: 日志:程序在运行过程中,用来记录程序运行状态信息。 作用&…

【面试系列】机器学习工程师高频面试题及详细解答

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、…

JSONpath语法怎么用?

JSONPath 可以看作定位目标对象位置的语言,适用于 JSON 文档。 JSONPath 与 JSON 的 关系相当于 XPath 与 XML 的关系, JSONPath 参照 XPath 的路径表达式,提供了描述 JSON 文档层次结构的表达式,通过表达式对目标…

红酒与露营:户外时光的好伴侣

在繁忙的都市生活中,人们总是渴望逃离喧嚣,寻找一处宁静的天地,与大自然亲密相拥。露营,作为一种返璞归真的户外生活方式,成为了许多人心中的理想选择。而在露营的浪漫时光里,一瓶雷盛红酒的陪伴&#xff0…

AI图生视频工具测试

环境: 即梦 pika LUMA 可灵 问题描述: AI图生视频工具测试下面是原图 解决方案: 1.即梦 效果 2.pika 生成效果 3.LUMA 生成效果还行 4.可灵 生成效果最好

nginx 只有图片等静态资源时 监听80端口 会404 NOT FOUND

解决方法 删除 /var/nginx/sites-enabled 原因:当nginx没有设置首页路径index时,sites-enabled目录中配置的优先级会高于nginx.conf 导致404 NOT FOUND sites-enabled文件中的default会将80端口索引至默认值:/var/www/html目录下&#xff…

[方法] 为Cinemachine添加碰撞器

选中场景中的Cinemachine物体,在 Inspector 面板的最下方单击 Add Extension 下拉框,选择 CinemachineCollider。 之后在添加的碰撞器组件中选择要与之碰撞的层(Collide Against)和忽略的层(Transparent Layers&#x…

crewAI实践过程中,memory规避openai的使用方法以及(windows下xinferece框架使用踩过的坑)

问题: 在使用crewAI开发项目的过程中,memory开启后报错:openai key is fake 经代码核查,其默认使用了openai的embedding模型。 解决方法 经查阅资料,可以参考其本地部署llm的方法。 本地部署模型可以使用xinference…

【windows】亲测-win11系统跳过联网和微软账户登录,实现本地账户登录

问题原因:现在市面上销售的品牌笔记本和台式机基本上都预装了正版的Windows S11家族中文版操作系统,联网后系统会自动激活。在win11的版本中,隐藏了关闭跳过连接网络的按钮,默认强制需要注册微软账户登录才能正常使用。 一、跳过…

vue3开发过程中遇到的一些问题记录

问题: vue3在使用 defineProps、defineEmits、defineExpose 时不需要import,但是 eslint会报错error defineProps is not defined no-undef 解决方法: 安装 vue-eslint-parser 插件,在 .eslintrc.js 文件中添加配置 parser: vue-e…

Windows 组策略编辑器怎么打开,这两种方法你必须知道

组策略编辑器(Group Policy Editor, 简称 GPEdit.msc)是 Windows 操作系统中一个强大的工具,主要用于管理和配置系统设置、安全选项、用户权限等,尤其适用于企业环境中批量部署和管理策略。 尽管家庭版 Windows(如 Win…

秋招Java后端开发冲刺——并发篇1(线程与进程、多线程)

一、进程 1. 进程 进程是程序的一次动态执行过程,是操作系统资源分配的基本单位。 2. 进程和线程的区别 特性进程线程定义独立运行的程序实例,资源分配的基本单位进程中的一个执行单元,CPU调度的基本单位资源进程拥有独立的内存空间和资源线…

ubuntu安装miniconda、jupyer、ros2

miniconda: 类似于虚拟机 ,可以安装不同版本的python jupyer: python执行、调试命令工具 1.下载安装文件 wget https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.2-0-Linux-x86_64.sh 2.安装minconda bash https://repo.anaconda.com/miniconda/Miniconda3-py…

傅雷家书思维导图的制作方法,分享制作技巧和软件!

在浩如烟海的书海中,《傅雷家书》以其独特的视角和深厚的情感,成为了无数读者心中的经典。那么,如何将这部饱含父爱的书信集转化为清晰易懂的思维导图呢?本文将为您详细解读傅雷家书思维导图的制作技巧,并推荐几款实用…

能自动铲屎的养猫救星?带你了解热门爆款智能猫砂盆的真实体验!

在谈论猫咪的日常生活时,我和朋友最经常聊的话题就是在各种各样的紧急情况下如何狼狈地赶回去给猫咪铲屎,毕竟猫砂盆里的屎但凡停留那么几小时,就要开始发臭了,一下班回去实在受不了那个味道,每次下班在家门口都想带个…

gemma2 vllm和ollama推理部署;openai接口调用、requests调用

参考: https://huggingface.co/google/gemma-2-9b https://ai.google.dev/gemma/docs/model_card_2?hl=zh-cn https://huggingface.co/blog/gemma2 发布了两个型号9B\27B 支持上下文长度有点短:4096 1、 ollama推理部署 升级ollama: curl -fsSL https://ollama.com/…