系统及应用安全

引导语

系统安全及应用是现代信息系统的核心组成部分,它不仅关乎信息安全,更直接影响到企业的运营效率、财务状况乃至品牌信誉。通过不断改进和强化系统的安全性,可以为企业创造一个更加可靠、高效的信息化环境。

一、账号安全的基本措施

(一)系统账号的清理

对一些无法登录的、长期不使用,或者无用的用户账号进行限制登录、锁定、删除等操作

1.设定用户无法登录

在/etc/passwd/文件里是可以看到哪些用户可以登录,哪些用户不可以登录的

如果我们想查看某一个用户的信息,可以通过cat  /etc/passwd | grep 用户名 过滤

或者查看哪些用户是无法登录,哪些用户可以登录,哪些用户不可以登录

/sbin/nologin 是Linux系统中的一种特殊shell,它不是一个真正的shell程序,而是一个“伪”shell,其功能是拒绝用户登录。当一个用户的默认shell设置为/sbin/nologin 时,尝试通过SSH或其他终端服务登录该账户的用户将会收到错误提示并被拒绝登录。

通常情况下,管理员会将某些不打算提供交互式登录权限的账户(如系统服务账户)的shell设置为 /sbin/nologin,这样可以防止误操作或恶意登录这些账户,并确保它们仅用于执行后台任务或作为守护进程运行,而不是进行人工操作。

我们可以通过chsh命令修改用户属性,比如将kysw1用户设置成无法

也可以使用usermod -s命令修改shell属性

2.锁定用户

使用passwd  - l 或者 usermod -L 命令都可以锁定

解锁用户  passwd  -u  或者 usermod  -L 

 

3.删除用户

可以使用userdel命令

userdel  -r 连家目录一起删除

4.锁定配置文件

可以通过chattr命令锁定配置文件,来保证文件的安全性,防止恶意修改

输入:chattr +i /etc/passwd ,使用lsattr命令查看修改信息

取消权限输入-i即可

(二)密码安全控制

设定密码规则

1.对新建用户

可以修改 /etc/login.defs 文件里的内容来设置密码规则,创建新用户时,就会默认已规则创建用户密码属性

2.对已有用户

可以使用chage命令修改

语法:chage 【选项】 用户名

选项:

-m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。
-M:密码保持有效的最大天数。
-w:用户密码到期前,提前收到警告信息的天数。
-E:帐号到期的日期。过了这天,此帐号将不可用。
-d:上一次更改的日期。
-i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。

比如我们想设置用户kysw2的密码有效期为10天,密码到期前5天提醒

可以输入chage  -M 10 -W 5  kysw 来设置

如果我们想使一个用户每次登录都需要改密码可以输入 -d 0来设置

而且重新设置密码需要符合密码复杂性要求,需包含大小写字母、特殊符号、数字。

(三)历史命令

Shell 环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在 的风险。只要获得用户的命令历史文件,该用户的命令操作过程将会一览无余,如果曾经在 命令行输入明文的密码,则无意之中服务器的安全壁垒又多了一个缺口。 Bash 终端环境中,历史命令的记录条数由变量 HISTSIZE 控制,默认为 1000 条。通 过修改/etc/profile 文件中的 HISTSIZE 变量值,可以影响系统中的所有用户

输入history可以看到所有的历史命令

使用history命令可以清除历史命令,上下键也不可以翻阅命令了

通过修改/etc/profile 文件中的 HISTSIZE 变量值,可以影响系统中的所有用户

重新加载一下文件

(四)切换用户

使用su命令,可以实现用户之间的切换

su  用户名:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换

su - 用户名:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换

注意:su 切换新用户后,使用 exit 退回至旧的用户身份,而不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱

二、PAM认证

PAM(Pluggable Authentication Modules,可插入认证模块)是Linux和类Unix操作系统中的一种灵活的认证框架。PAM允许系统管理员在不修改应用程序代码的情况下自定义系统的身份验证、授权和会话管理策略。

通过PAM,系统可以采用不同的模块组合来处理各种认证相关的操作,例如本地密码验证、Kerberos身份验证、智能卡认证等。PAM的配置文件通常位于/etc/pam.d/目录下,每个应用服务(如sshd、login、su等)都有对应的配置文件,这些文件描述了当用户尝试登录或执行特定操作时应调用哪些PAM模块以及如何调用。

(一)工作原理

PAM框架的基本流程包括四个主要阶段:

1.Authentication:验证用户的身份,比如检查用户名和密码是否匹配。

2.Account Management:确定账户是否有效,例如检查账户是否被禁用或过期

3.Authorization:决定用户是否有权限进行特定的操作。

4.Session Management:在用户登录前后的会话管理操作,如记录登录日志、设置环境变量等。

(二)相关文件

下面我们通过例子来讲解一下

首先我们先知道几个文件夹存放的内容

1./usr/lib64/security: 这个路径通常存放着一些安全相关的库文件,尤其是在使用PAM时。对于64位系统,程序的库文件一般存储在/usr/lib64/lib64目录下。在该路径下的security子目录里可能包含用于PAM认证机制的动态链接库(.so文件),这些库实现了各种具体的认证策略

2./etc/pam.d: 这个目录包含了PAM模块的具体应用配置文件,每个应用程序都有一个对应的配置文件,例如/etc/pam.d/sshd对应SSH服务,/etc/pam.d/login对应本地登录等。这些配置文件定义了在用户登录或者执行特定操作时,系统应如何按照顺序调用不同的PAM模块进行身份验证、账户管理和会话管理等操作。

3./etc/security: 此目录则包含了一些高级的安全性配置文件,如限制用户资源使用量的配置文件limits.conf,以及与PAM交互的一些安全设置文件,比如用于密码复杂度检查的passwd配置等。此外,还包括了与sudo权限控制相关的文件以及其他系统级别的安全配置项。

首先,我们找一个文件查看一下

可以看到,该文件内容有大概四个内容

第一列内容:type:指模块类型,即功能

Auth 账号的认证和授权,比如用户登录时,验证你的用户名存不存在
Account 帐户的有效性,与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,限制用户的位置(例如:root用户只能从控制台登录)
Password 用户修改密码时密码复杂度检查机制等功能
Session 用户会话期间的控制,如:最多打开的文件数,最多的进程数等
-type表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用,如图片中-session

第二列内容:control :PAM库该如何处理与该服务相关的PAM模块的成功或失败情况,一个关键词实现

required  一票否决,如果失败,最后一定会失败,但是还会继续执行下面操作验证失败仍然会继续,但返回Fail
requssite  一票否决,如果失败会立即反馈失败信息,并立即结束认证,返回Fail
sufficient  验证成功会立即返回,不再继续,否则忽略结果并继续
optional   不用于验证,只显示信息
include           表示在验证过程中调用其他的 PAM 配置文件。

第三列内容:module-path: 用来指明本模块对应的程序文件的路径名,模块规定了系统的一些程序应该如何有效操作

第四列内容:Arguments: 用来传递给该模块的参数

 (三)shell模块

我们已shell模块举例

shells模块可以看到当前系统支持的shell类型

比如我们可以使/bin/csh类型的shell用户不可以登录。把/bin/csh从文件中删除

创建一个/bin/csh类型的用户

此时还是可以登录的,需要我们手动在su的配置文件中启用shell的PAM认证模块

vim 编辑/etc/pam.d/su

lisi用户将无法登录

(四) limit

功能:在用户级别实现对其可使用的资源的限制,例如:可打开的文件数量,可运行的进程数量,可用内存空间

vim 打开/etc/security/limits.conf这个配置文件,这个文件的内容就是控制进程打开的数量和内存大小

domain用户名
@组名
*表示所有用户和组
typehard:硬限制
soft:软限制
                —:软硬一起,相当于硬限制
itemcore :限制核心文件大小(KB)
data :最大数据大小(KB)
fsize :最大文件大小(KB)
memlock :最大锁定在内存中的地址空间(KB)
nofile :打开文件描述符的最大数目
rss :最大常驻集大小(KB)
stack :最大堆栈大小(KB)
cpu :最大cpu时间(MIN)
nproc :最大进程数
as :地址空间限制(KB)
maxlogins :该用户的最大登录数
maxsyslogins :系统上的最大登录数
priority :带锁运行用户进程的优先级
locks :用户可以持有的最大文件数
sigpending :挂起信号的最大数量
msgqueue : POSIX消息队列使用的最大内存(字节)
nice :允许提升的最大优先级:[: 20,19
rtprio :最大实时优先级

如果我们想限制一个用户打开最多进程为5个

我们可以在配置文件里修改,也可以通过ulimit命令修改

-H设置硬件资源限制.
-S设置软件资源限制.
-a显示当前所有的资源限制.
-csize:设置core文件的最大值.单位:blocks
-dsize:设置数据段的最大值.单位:kbytes
-fsize:设置创建文件的最大值.单位:blocks
-lsize:设置在内存中锁定进程的最大值.单位:kbytes
-msize:设置可以使用的常驻内存的最大值.单位:kbytes
-nsize:设置内核可以同时打开的文件描述符的最大值.单位:n
-psize:设置管道缓冲区的最大值.单位:kbytes
-ssize:设置堆栈的最大值.单位:kbytes
-tsize:设置CPU使用时间的最大上限.单位:seconds
-usize:最大用户进程数
-vsize:设置虚拟内存的最大值.单位:kbytes

输入ulimit  -a 查看一下当前显示的所有资源

先来进行一个压力测试  让它同时打开1025个文件  最多打开5000个进行测试

可以看到,会有提示信息,无法同时打开,可以通过 ulimit  -n 来调整

或者在配置文件里加上,表示所有用户最大打开文件数量为100000

现在再来进行测试

这样就通过测试就知道可以同时打开的范围了,不过要注意的是,如果你要使用ab测试工具,使用ab工具的机器,也要调高最大值,比如A 去访问B,A要调整1024 ,B也要调整1024

三、sudo

(一)sudo的简介

sudo是一个在类Unix操作系统中广泛使用的命令,它允许用户以系统管理员(或其它指定用户)的权限执行命令。sudu的全称是 "Superuser DO",意即“以超级用户身份执行。

sudo在Linux和类Unix系统中是一个非常重要的命令,它的主要作用是允许普通用户以系统管理员权限(通常是root权限)执行特定的命令或程序,而无需切换到root用户。通过使用sudo,系统管理员可以对不同用户授予执行特定管理任务的能力,同时保留了对系统安全性和日志记录的控制。

(二)使用方法

首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息,登记在特殊的文件中(通常是/etc/sudoers),即完成对该用户的授权(此时该用户称为“sudoer”);在一般用户需要取得特殊权限时,其可在命令前加上“sudo”,此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的进程以超级用户的权限运行。

例如普通用户是无法使用mount挂载命令的

那么需要在/etc/sudoers里面添加一下权限就可以了

 编辑该文件建议使用visudo命令这个命令会有报错机制,如果你编辑错误会进行提示

现在我们就可以进行操作了,但是命令输入一定要正确

再次执行这个命令的时候5分钟内就不需要输入密码了(默认为5分钟,可在/etc/sudoers自定义),使用sudo不需要再次输入密码。

如果想要取消密码验证,需要加上N0PASSWD:

也可以对组进行设置,将前面的用户名替换为 %组名

输入sudo   -V 可以看到有关的配置信息

输入!取反作用,表示此命令不可执行

比如给一个用户设置/usr/sbin/下的所有命令,但 是其中有一条命令不想給该用户使用,可以用!取反

(三)别名

sudo别名有四种类型:

  • User_Alias(用户)

  • Runas_Alias(代表用户)

  • Host_Alias(登录主机)

  • Cmnd_Alias(命令)

别名格式:必须大写字母,数字可以使用但是不能放在开头

(四)子目录

子目录可以对单个用户进行设置,在/etc/sudoers.d/文件下,建一个文件文件,最好与用户名相同,方便辨认

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

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

相关文章

狮子目标检测数据集VOC格式300张

狮子,作为“丛林之王”,以其威武雄壮的身姿和卓越的狩猎能力闻名于世。 狮子的体型健硕,毛发浓密,通常是金黄色或浅褐色,腹部和腿部的毛发相对较浅。狮子的头部特别大,长有一对威风凛凛的鬃毛,…

玩转Mysql 四(MySQL逻辑架构与数据引擎)

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。 一、MySQL逻辑架构 1、从Oracle收购MySQL后,MySQL逻辑架构受Oracle影响,MySQL8版本中逻辑架构受Oracle的影响逐步完善查询缓存,O…

多线程高级面试题

1. 什么是 ThreadLocal? 参考答案 ThreadLocal 叫做本地线程变量,意思是说,ThreadLocal 中填充的的是当前线程的变量,该变量对其他线程而言是封闭且隔离的,ThreadLocal 为变量在每个线程中创建了一个副本,…

2023年12月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:数的输入和输出 输入一个整数和双精度浮点数,先将浮点数保留2位小数输出,然后输出整数。 时间限制:1000 内存限制:65536 输入 一行两个数,分别为整数N(不超过整型范围),双精度浮点数F,以一个空格分开。 输出 一行两个数,分…

关于“Python”的核心知识点整理大全65

目录 20.2.19 设置 SECRET_KEY 20.2.20 将项目从 Heroku 删除 注意 20.3 小结 附录 A 安装Python A.1.1 确定已安装的版本 A.1.2 在 Linux 系统中安装 Python 3 A.2 在 OS X 系统中安装 Python A.2.1 确定已安装的版本 A.2.2 使用 Homebrew 来安装 Python 3 注意 …

[技术杂谈]使用VLC将视频转成一个可循环rtsp流

通过vlc播放器,将一个视频转成rtsp流,搭建一个rtsp服务器。rtsp客户端可访问这个视频的rtsp流。 1. 打开vlc播放器,使用的版本如下 2. 菜单:媒体 ---> 流 3. 添加视频文件,点击添加一个mp4 文件 4. 选择串流&…

【软件测试】学习笔记-测试覆盖率

测试覆盖率通常被用来衡量测试的充分性和完整性,从广义的角度来讲,测试覆盖率主要分为两大类,一类是面向项目的需求覆盖率,另一类是更偏向技术的代码覆盖率。 需求覆盖率 需求覆盖率是指测试对需求的覆盖程度,通常的做…

LeetCode 每日一题 Day 3334(hard)35 ||二进制枚举/单调栈/链表遍历

2397. 被列覆盖的最多行数 给你一个下标从 0 开始、大小为 m x n 的二进制矩阵 matrix ;另给你一个整数 numSelect,表示你必须从 matrix 中选择的 不同 列的数量。 如果一行中所有的 1 都被你选中的列所覆盖,则认为这一行被 覆盖 了。 形式…

【CANopen】关于STM32中CanFestival的pdo应用

系列文章目录 文章目录 系列文章目录一、发送1、同步传输2、异步传输 二、接收 使用STM32F407单片机 pdo属于过程数据用来传输实时数据,即单向传输,无需接收节点回应。 一、发送 分为同步传输和异步传输。 1、同步传输 分为循环传输(周期…

【Flink精讲】双流Join之Regular Join(即普通Join)

Regular Join 普通Join 通过条件关联两条实时数据流:动态表Join动态表支持Inner Join、Left Join、Right Join、Full Join。 1. Inner Join(Join):只有两边数据流都关联上才输出[L,R] 2. Left Join(Left Outer Join):只要左流有数据即输出[…

我的创作纪念日三年收获和感悟

机缘 我刚开始接触创作也是最近几年开始,当初就是希望自己的收获分享给大家,不仅使自己成长,也可以带着大家一起成长,独乐乐不如众乐乐,人都是自私的以前我都是看到好的知识文章都是自己藏起来,发现收获的…

python类的初始化

问题描述 存在这样的两个类,都在同一个模块a.py内 class YamlGlobal:with open(get_project_path() "/cfg/global.yaml", r, encodingutf-8) as f:glVar yaml.load(f, Loaderyaml.SafeLoader)......class DatabaseGlobal:itd InstanceDao(SQLAlchemy…

qml的操作 -- VS2022开发qml,

在使用VS开发软件的时候一般大型软件都会使用模组的方式。每个模组之间独立开发,关于qml写的UI模组也不例外,如果所有的qml都挤在一个文件夹下也不利于管理,维护起来也比较吃力。比较好的管理方法就是按照功能分布存放在不同的文件夹下。还有…

性能分析与调优: Linux 使用ELRepo升级CentOS内核

目录 一、实验 1.环境 2.agent 服务器使用ELRepo升级CentOS内核 二、问题 1. RHEL-7, SL-7 或者 CentOS-7系统如何安装ELRepo 2.RHEL-8或者RHEL-9系统如何安装ELRepo 一、实验 1.环境 (1)主机 表1-1 主机 主机架构组件IP备注prometheus 监测 系…

Python中的装饰器

顾名思义,函数装饰器就是对这个函数进行了装饰,比如在函数的前后进行日志打印等。在Python中,装饰器是一种特殊的语法,用于简化函数或方法的定义和调用。装饰器允许你在不修改原始函数代码的情况下,通过在其上应用装饰…

Java Swing手搓童年坦克大战游戏(II)

文章目录 0.初衷1.创建游戏窗口2.创建坦克3.实现坦克移动和发射炮弹4.创建地图4.1关于地图瓦片的尺寸遇到的问题 5.坦克与障碍物的碰撞处理5.1碰撞检测5.2坦克与地图中的瓦片碰撞5.3坦克相互碰撞5.4坦克碰见炮弹5.5坦克拐弯 6.道具6.1星星6.2炸弹6.3钟表6.4城堡6.5坦克6.6无敌圈…

React 实现拖放功能

介绍 本篇文章将会使用react实现简单拖放功能。 样例 布局拖放 LayoutResize.js import React, {useState} from "react"; import { Button } from "antd"; import "./LayoutResize.css";export const LayoutResize () > {const [state,…

canvas 实心文字设置(含最大宽度)的示例

查看专栏目录 canvas示例教程100专栏,提供canvas的基础知识,高级动画,相关应用扩展等信息。canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重…

【Docker】docker 服务相关命令

目录 1. 启动docker 服务 2.查看docker 服务的状态 3. 停止docker 服务 4.重启 docker 服务 5.开机自启动命令 1. 启动docker 服务 systemctl start docker 2.查看docker 服务的状态 systemctl status docker 3. 停止docker 服务 systemctl stop docker 此时再使用 syst…

RDD入门——RDD 代码

创建RDD 程序入口 SparkContext val conf new SparkConf().setMaster("local[2]").setAppName(spark_context") val sc: SparkContext new SparkContext(conf) SparkContext 是 spark-core 的入口组件,是一个 Spark 程序的入口,在 Sp…