linux 系统安全及应用

news2024/11/14 12:34:34

一、账号安全基本措施

1.系统账号清理

1.将用户设置为无法登录 /sbin/nologin

shell——/sbin/nologin却比较特殊,所谓“无法登陆”指的仅是这个用户无法使用bash或其他shell来登陆系统而已,并不是说这个账号就无法使用系统资源。举例来说,各个系统账号中,打印作业有lp这个账号管理,www服务器有apache这个账号管理,他们都可以进行系统程序的工作,但就是无法登陆主机而已。

2.锁定长期不使用的账号

账户锁定:passwd   -l   用户名  或   usermod  -L  用户名

账户解锁:passwd  -u   用户名  或   usermod  -U  用户名

3.删除无用的账户

账户删除:userdel  -r  (并删除家目录)

4.锁定配置文件    chattr

某些特定文件比较重要防止误删除添加锁定文件   

锁定配置文件即锁定配置文件passwd与shadow  

-i     不得任意更动文件或目录
-a     让文件或目录仅供附加用途。只能追加

chattr +i /etc/passwd /etc/shadow           锁定配置文件
chattr -i /etc/passwd /etc/shadow           解锁配置文件
chattr +a /etc/passwd /etc/shadow           让文件或目录仅供附加用途,只能追加
lsattr /etc/passwd /etc/shadow              查看文件状态属性

5.清除历史记录

查看历史输入命令:history 

history记录存放文件:~/.bash_history

临时清空:history   -c

永久清空:echo " ">~/.bash_history

vim .bash_logout    退出后清除

vim .bashrc     自对自己生效    开机后清除

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

2.密码安全控制

1.设置密码规则

  对于新建用户,可以修改 /etc/login.defs 文件里的内容来设置密码规则

小实验:

  2.已创建用户密码管理——chage

chage [选项] 用户名

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

强制用户下一次登录时一定修改密码,此时密码应该符合复杂性的要求  chage -d  0 用户

面试:设置随机密码,每7天改一次,对密码复杂性有要求,区分大小写

你做过哪些系统安全加固?

3.su 命令   切换用户身份

su命令 可以切换用户身份, 并且以指定用户的身份执行命令。

切换用户的方式:

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

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

说明:root su至其他用户无须密码;非root用户切换时需要密码

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

su 与 su-

即有 - 选项,切换用户身份更彻底;反之,只切换了一部分,这会导致某些命令运行出现问题或错误(例如无法使用 service 命令)。

su 不加-:不完全切换

su 加-:完全切换

限制使用su命令的用户?

二、PAM安全认证

PAM提供了对所有服务进行认证的中央机制,适用于本地登录,远程登录,如telnet,rlogin,fsh,ftp,点对点协议PPP,su等应用程序中,系统管理员通过PAM配置文件来制定不同应用程序的不同认证策略;应用程序开发者通过在服务程序中使用PAM API(pam_xxxx( ))来实现对认证方法的调用;而PAM服务模块的开发者则利用PAM SPI来编写模块(主要调用函数pam_sm_xxxx( )供PAM接口库调用,将不同的认证机制加入到系统中;PAM接口库(libpam)则读取配置文件,将应用程序和相应的PAM服务模块联系起来。重复利用别人的开发的功能,不必自己开发,会话,密码验证等功能,已经做好了调用下就可以了未来通用性,所以有了pam框架,类似淘宝 一边普通买家,一边卖家,淘宝上既是买家也是卖家

/usr/lib64/security:存放功能模块

/etc/pam.d:配置文件

特定模块相关的设置文件:/etc/security/

专用配置文件/etc/pam.d/ 格式

PAM相关文件

  • 包名: pam

  • 模块文件目录:/lib64/security/*.so

  • 特定模块相关的设置文件:/etc/security/

  • man 8 加模块名 可以查看帮助

  • 应用程序调用PAM模块的配置文件

  1. 主配置文件:/etc/pam.conf,默认不存在,一般不使用主配置

  2. 为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME

  3. 注意:如/etc/pam.d存在,/etc/pam.conf将失效

PAM工作原理

PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so

PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证

PAM认证过程示例:

1.使用者执行/usr/bin/passwd 程序,并输入密码
2.passwd开始调用PAM模块,PAM模块会搜寻passwd程序的PAM相关设置文件,这个设置文件一般是在/etc/pam.d/里边的与程序同名的文件,即PAM会搜寻/etc/pam.d/passwd此设置文件
3.经由/etc/pam.d/passwd设定文件的数据,取用PAM所提供的相关模块来进行验证
4.将验证结果回传给passwd这个程序,而passwd这个程序会根据PAM回传的结果决定下一个动作(重新输入密码或者通过验证)

type:指模块类型,即功能

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

module-path: 用来指明本模块对应的程序文件的路径名

Arguments: 用来传递给该模块的参数

模块类型(module-type)

  • Auth 账号的认证和授权

  • Account 帐户的有效性,与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,限制用户的位置(例如:root用户只能从控制台登录)

  • Password 用户修改密码时密码复杂度检查机制等功能

  • Session 用户会话期间的控制,如:最多打开的文件数,最多的进程数等

  • -type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用

type:模块类型,即功能

Auth:验证用户身份,按照身份给你相应权限

Account:验证账户是否有效

password:账户密码是否有效

session:管理会话,可以使用多少资源

Control: ( 控制位)

required:一票否决,如果失败,最后一定失败,但是会继续进行验证

requisite:一票否决,如果失败,会立即结束验证,反馈失败

sufficient:验证成功则立即返回结果(前两个有一个失败,则为失败)

optional 可选项

第三列代表PAM模块

默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。 同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。

limit  重要的pam模块   控制进程占用资源 ,控制进程打开的数量

作用:控制进程占用资源

在/etc/security   中的   limits.conf文件

作用:控制进程打开数量

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

ulimit命令

ulimit是linux shell的内置命令,它具有一套参数集,用于对shell进程及其子进程进行资源限制。

ulimit的设定值是 per-process 的,也就是说,每个进程有自己的limits值。使用ulimit进行修改,立即生效。

ulimit只影响shell进程及其子进程,用户登出后失效。

可以在profile中加入ulimit的设置,变相的做到永久生效

-H 设置硬件资源限制.
-S 设置软件资源限制.
-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-u size:最大用户进程数
-v size:设置虚拟内存的最大值.单位:kbytes
unlimited 是一个特殊值,用于表示不限制

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

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

查看下

limits 生产中的 建议设置

使用压力测试工具进行测试  打开的文件数
ab -c1025 -n 2000 http://192.168.246.7/
必须这样写, 包括url 后面的 斜杠/

压力测试:

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

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

要是之后修改的,(reboot )重启会比较麻烦

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

[root@localhost pam.d]#ulimit -a
可以看到系统的相关 资源限制 设置

#使用压力测试工具进行测试  打开的文件数
ab -c1025 -n 2000 http://192.168.91.100/
必须这样写, 包括url 后面的 斜杠/


[root@localhost pam.d]#ulimit -n  10000
修改最大值  临时修改

[root@localhost security]#vim /etc/security/limits.conf 
永久修改不用重启   软硬一起设置可以直接使用 -
zhangsan         -       nproc            5

su  -   zhangsan
切换时  注意要完全切换

三、sudo---提权操作

su root---以管理员身份使用,会造成安全隐患

sudo的配置文件是 sudoers 文件;位置:/etc/sudoers,属性为0440

作用:管理用户的使用权限和使用的主机

1.sudo概念

概念:sudo即superuser do可翻译为以超级管理员身份做,是可以让普通用户在不知道root密码的情况下执行一些或全部的root命令工具。

优点:不需要指定超级管理员密码、可以指定那些组或那些账户可以执行那些特定的命令、提供了丰富的日志,详细记录了每个用户干了什么

2.使用sudo

配置sudo文件:/etc/sudoers直接编辑sudo文件更改完成后必须visudo  -c检查语法

官方推荐配置sudo:visudo 等价于修改sudo的配置文件,但是此命令会自动检查语法是否正确

[root@localhost ~]# visudo
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
 
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

配置语法介绍(可使用通配符):

         root                                              ALL=(ALL)                                                       ALL

用户或组(组前需加%)  登入主机(可写网段)=以什么身份执行(可不写)   运行那些命令(命令的绝对

3.sudo特性

  • sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员

  • sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器

  • sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票

  • sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0440

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

用户    登入主机=(代表用户)  命令
user    host   =(runas)   command
root     ALL    =(ALL)     ALL(绝对路径)  //root可以使用任何主机代表任何用户执行任何命令
%wheel   ALL    =(ALL)     ALL
 
user: 运行命令者的身份
      可以是用户也可以是组(组前应该加%)
      用户可以是用户名或者UID
      组可以是组名或者GID
host: 通过哪些主机 可以写IP地址或主机名 可以有多个主机
runas:以哪个用户的身份
command: 运行哪些命令
     command name  (命令)
     directory     (文件夹里的命令)
     sudoedit      (可以编辑sudoers这个文件,变相变成管理员)
     Cmnd_Alias    (命令别名)

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

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

此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户本人)

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

[root@localhost ~]#gpasswd -a lili wheel
正在将用户“lili”加入到“wheel”组中
wheel组表示管理员组是比较特殊的一个组,在wheel组中的成员可以使用任何命令

4.别名

sudo别名有四种类型:

  • User_Alias(用户)

  • Runas_Alias(代表用户)

  • Host_Alias(登录主机)

  • Cmnd_Alias(命令)

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

上班一般不设置别名

面试题:我有20个项目,如何管理?

写在子配置文件里,不能写在配置文件里,要不不方便管理

常见端口号学习:

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

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

相关文章

JAVA基础学习笔记-day15-File类与IO流

JAVA基础学习笔记-day15-File类与IO流 1. java.io.File类的使用1.1 概述1.2 构造器1.3 常用方法1、获取文件和目录基本信息2、列出目录的下一级3、File类的重命名功能4、判断功能的方法5、创建、删除功能 2. IO流原理及流的分类2.1 Java IO原理2.2 流的分类2.3 流的API 3. 节点…

SNP浅谈SAP系统增强及二次开发

SAP 系统增强和二次开发是指在 SAP 系统的基础上,对现有功能进行扩展和增强,以满足特定业务需求。增强和二次开发可以通过不同的方法实现,包括: ■ 数据集成:通过创建数据接口,实现 SAP 系统与其他系统之间…

视频智能分析/边缘计算AI智能分析网关V4区域入侵检测算法如何配置?

边缘计算AI智能分析网关(V4版)部署了近40种AI算法模型,支持对接入的视频图像进行人、车、物、行为等实时检测分析,并上报识别结果,并能进行语音告警播放。算法配置后,即可对监控视频流进行实时检测&#xf…

基于 Canvas 的多行文本溢出方案

说到文本溢出,大家应该都不陌生,中文网络上的文章翻来覆去就是下面3种方法: 单行文本溢出 这是日常开发中用的最多的,核心代码如下: p {width: 300px;overflow: hidden; white-space: nowrap; /*文本不会换行*/text…

基于模块自定义扩展字段的后端逻辑实现(二)

目录 一:创建表 二:代码逻辑 上一节我们详细讲解了自定义扩展字段的逻辑实现和表的设计,这一节我们以一个具体例子演示下,如何实现一个订单模块的自定义扩展数据。 一:创建表 订单主表: CREATE TABLE t_order ( …

rime中州韵小狼毫 中英互绎 滤镜

英文在日常生活中已经随处可见,我们一般中英互译需要使用专业的翻译软件来实现。但如果我们在输入法中,在输入中文的时候,可以顺便瞟一眼对应的英文词汇,或者在输入英文的时候可以顺便了解对应的中文词汇,那将为我们的…

1.8 day6 IO进程线程

使用有名管道实现两个进程之间的通信 进程A #include <myhead.h> int main(int argc, const char *argv[]) {//创建两个文件描述符用于打开两个管道int fd1-1;int fd2-1;//创建一个子进程int pid-1;if((fd1open("./mkfifo1",O_RDWR))-1){perror("open er…

OpenAI ChatGPT-4开发笔记2024-03:Chat之Tool和Tool_Call(含前function call)

Updates on Function Calling were a major highlight at OpenAI DevDay. In another world,原来的function call都不再正常工作了&#xff0c;必须全部重写。 function和function call全部由tool和tool_choice取代。2023年11月之前关于function call的代码都准备翘翘。 干嘛…

小梅哥Xilinx FPGA学习笔记22——ip核之FIFO

目录 一&#xff1a;章节说明 1.1 FIFO IP简介 1.2 FIFO Generato IP 核信号框图 1.3 实验任务 二&#xff1a;FIFO 写模块设计 2.1 简介 2.2 模块框图 2.3 模块端口与功能描述 2.4 写模块代码 三 FIFO 读模块设计 3.1 简介 3.2 模块框图 3.3 模块端口与功…

【自学笔记】01Java基础-07面向对象基础-03常量、枚举类、抽象类、多态详解

记录java基础学习中有关常量、枚举类、抽象类和多态的内容。 1 常量 什么是常量&#xff1f; 常量是使用了public static final修饰的成员变量&#xff0c;必须有初始化值&#xff0c;而且执行的过程中其值不能被改变。 常量名的命名规范&#xff1a;英文单词全部大写&#x…

Transformer架构的局限已凸显,被取代还有多久?

江山代有才人出&#xff0c;各领风骚数百年。这句话无论是放在古往今来的人类身上&#xff0c;还是放在当今人工智能领域的大模型之上&#xff0c;都是最贴切不过的。无论是一个时代的伟人&#xff0c;还是统治一个领域的技术&#xff0c;最终都会有新的挑战者将其替代。Transf…

springBoot容器功能

一、添加组件 1、Configuration 1.1基本使用 新建一个MyConfig类 , 演示Configuration Bean的作用 &#xff0c; 即相当于spring中的beanx.xml&#xff0c; Bean 就是bean标签 此方法&#xff0c;默认是单实例&#xff0c; 即获取多少次都是同一个对象 自定义名字&#xff0…

令人绝望的固化和突破-2024-

这是继续写给自己求生之路的记录。 所有成熟稳定的行业都是相对固化的&#xff0c;上升通道及其严苛。 博客 我刚写博客的2015-2017这3年&#xff0c;其实还能带动一些学生&#xff0c;然后部分学生心中有火&#xff0c;眼里有光&#xff0c;也有信心自己做好&#xff0c;还有…

利用“与非”运算实现布尔代数中的与,或,非三种运算

什么是“与非”运算&#xff1f; 要想明白“与非”运算&#xff0c;首先要明白“与”运算和“非”运算。 “与”运算在离散数学中叫做合取式&#xff0c;也就是A和B相同时为1的时候结果才为1&#xff0c;其余情况都为0 下面是“与”运算的真值表 “非”运算在离散数学中叫做否…

2023年阿里云云栖大会:前沿技术发布与未来展望

在2023年的阿里云云栖大会上&#xff0c;我见证了云计算和人工智能领域的又一历史性时刻。这次大会不仅是对未来科技趋势的一次深入探索&#xff0c;更是阿里云技术实力和创新能力的集中展示。 首先&#xff0c;千亿级参数规模的大模型通义千问2.0的发布&#xff0c;无疑将人工…

实战演练 | Navicat 中编辑器设置的配置

Navicat 是一款功能强大的数据库管理工具&#xff0c;为开发人员和数据库管理员提供稳健的环境。其中&#xff0c;一个重要功能是 SQL 编辑器&#xff0c;用户可以在 SQL 编辑器中编写和执行 SQL 查询。Navicat 的编辑器设置可让用户自定义编辑器环境&#xff0c;以满足特定的团…

软件测试|MySQL逻辑运算符使用详解

简介 在MySQL中&#xff0c;逻辑运算符用于处理布尔类型的数据&#xff0c;进行逻辑判断和组合条件。逻辑运算符主要包括AND、OR、NOT三种&#xff0c;它们可以帮助我们在查询和条件语句中进行复杂的逻辑操作。本文将详细介绍MySQL中逻辑运算符的使用方法和示例。 AND运算符 …

GPT Prompts Hub:2024年最新ChatGPT提示词项目,革新对话结构!

&#x1f31f; GPT Prompts Hub &#x1f31f; 欢迎来到 “GPT Prompts Hub” 存储库&#xff01;探索并分享高质量的 ChatGPT 提示词。培养创新性内容&#xff0c;提升对话体验&#xff0c;激发创造力。我们极力鼓励贡献独特的提示词。 在 “GPT Prompts Hub” 项目中&#…

解决不同请求需要的同一实体类参数不同(分组校验validation)

问题概述 新增目录是自动生成id&#xff0c;不需要id参数&#xff1b;更新目录需要id&#xff0c;不能为空 pom.xml中已有spring-boot-starter-validation依赖 <!--validation(完成属性限制&#xff0c;参数校验)--><dependency><groupId>org.springframew…

【C语言题解】 | 101. 对称二叉树

101. 对称二叉树 101. 对称二叉树代码 101. 对称二叉树 这个题目要求判断该二叉树是否为对称二叉树&#xff0c;此题与上一题&#xff0c;即 100. 相同的树 这个题有异曲同工之妙&#xff0c;故此题可借鉴上题。 我们先传入需要判断二叉树的根节点&#xff0c;通过isSameTree()…