linux 系统安全及应用

一、账号安全基本措施

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            5su  -   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)     ALLuser: 运行命令者的身份可以是用户也可以是组(组前应该加%)用户可以是用户名或者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.hqwc.cn/news/333855.html

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

相关文章

GIT - 清除历史 Commit 瘦身仓库

目录 一.引言 二.仓库清理 ◆ 创建一个船新分支 ◆ 提交最新代码 ◆ 双指针替换分支 三.总结 一.引言 由于项目运行时间较长,分支较多,且分支内包含很多不同的大文件,随着时间的推移,历史 Git 库的容量日渐增发&#xff0c…

密码学(三)

文章目录 前言一、Software Attestation Overview二、Authenticated Key Agreement三、The Role of Software Measurement 前言 本文来自 Intel SGX Explained 请参考: 密码学(一) 密码学(二) 一、Software Attesta…

SG-8018CA 系列 (晶体振荡器 可编程 可用+105°C )

SG-8018系列是可编程晶体振荡器系列与CMOS输出。虽然该系列提供了与早期SG-8002/SG-8003系列相同的易于编程的频率和其他参数的相似性,但它们也有一个更广泛的工作温度范围,最高限制为105C。除了2.52.0 mm封装,将使电子产品制造商节省板空间&…

usb转32串口方案

方案结构图 使用usb hub芯片扩展4路usb然后再一分八路串口 USB hub 选择hub芯片注意事项: 目前市场上多数的USB 2.0 Hub芯片,只有内建一个Transaction Translators(STT),因此 当Hub接收到如Full Speed的装置进入时,12Mbps的「单一」信道…

Java字符串拼接常用方法总结

使用场景:用某个分隔符拼接字符串 下边是我使用过的几种方式废话不多说,直接上代码初始数据 1.使用流2.StringBuilder3.[StringJoiner](https://blog.csdn.net/qq_43417581/article/details/126076152?ops_request_misc%257B%2522request%255Fid%2522%2…

如何使用TrafficWatch根据PCAP文件监控和分析网络流量

关于TrafficWatch TrafficWatch是一款功能强大的网络数据包嗅探和分析工具,该工具能够帮助我们通过PCAP文件监控和分析目标网络中的网络通信流量。除此之外,该工具还可以为广大研究人员提供针对各种网络协议的内部分析功能,并帮助解决各种网…

hadoop自动获取时间

1、自动获取前15分钟 substr(from_unixtime(unix_timestamp(concat(substr(20240107100000,1,4),-,substr(20240107100000,5,2),-,substr(20240107100000,7,2), ,substr(20240107100000,9,2),:,substr(20240107100000,11,2),:,00))-15*60,yyyyMMddHHmmss),1) unix_timestam…

Win提示“d3dx9_27.dll文件缺失,程序无法启动运行”,修复大全

d3dx9_27.dll是一个被多个软件和游戏共享的动态链接库文件,主要用于Microsoft DirectX软件的功能。它是DirectX 9的一部分,DirectX是一种使得Windows成为理想平台进行高性能多媒体和游戏的API。 d3dx9_27.dll主要与计算机图形和视频渲染有关&#xff0c…

物联网协议Coap中Californium CoapClient解析

目录 前言 一、CoapClient对象 1、类定义 2、Client方法调用 二、发送请求 1、构建请求 2、发起请求 3、接收响应 总结 前言 在之前的博客中物联网协议Coap之Californium CoapServer解析,文中简单介绍了CoapServer的实现。在物联网开发环境中,除了…

小红书算法流量机制总结,建议收藏!

新手在运营小红书账号时,总会发现这样的情况。辛辛苦苦写了一篇自以为很优质的笔记,发布后却发现流量寥寥。这就是没弄清小红书算法造成的。今天和大家来分享下小红书算法流量机制总结,建议收藏! 一、什么是小红书算法 我们常说的…

Qt QLineEdit文本框控件

文章目录 1 属性和方法1.1 占位字符串1.2 对齐方式1.3 回显模式1.4 读写控制1.5 格式控制1.6 信号和槽 2 实例2. 布局2.2 代码实现 QLineEdit 是Qt 中的文本框,准确地说是单行文本框,通常用于接受用户的输入。 比如用户输入用户名、密码等,都…

【Internal Server Error】pycharm解决关闭flask端口依然占用问题

Internal Server Error The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application. 起因: 我们在运行flask后,断开服务依然保持运行&#xff0…