Linux系统安全及应用

目录

一.账号安全基本措施

1.系统账号清理

2.密码安全控制

chage命令

2.1.常用选项

2.2.相关实操

2.3.相关实操

3.命令历史限制

3.1.相关实操

3.2.永久生效

4.终端自动注销

二.系统引导和登录控制

1.使用su命令切换用户

1.1.用途及用法

1.2.密码验证

1.3.限制使用su命令的用户

1.4.ssh远程登录输入三次密码错误则锁定用户

2.Linux中的PAM安全认证

2.1.su命令的安全隐患

[2.2.PAM(Pluggable Authentication Modules)可拔插式认证模块](#2.2.PAM(Pluggable Authentication Modules)可拔插式认证模块)

2.3.PAM认证原理

2.4.PAM配置文件

第一列代表PAM认证模块类型

第二列代表PAM控制标记

第三列代表PAM模块

第四列代表PAM模块的参数

查看某个程序是否支持PAM认证,可以用ls命令

3.使用sudo机制提升权限

3.1.使用sudo

3.2.配置sudo

别名创建

使用别名进行授权

普通用户使用授权命令

启用sudo操作日志

4.安全控制

4.1.开关机安全控制

调整BIOS引导设置

GRUB限制(了解即可)

4.2.终端登录安全控制

安全终端配置:/etc/securetty


一.账号安全基本措施

1.系统账号清理

  • 将非登录用户的shell 设为**/sbin/nologin**

    usermod -s /sbin/nologin 用户名

  • 锁定长期不使用的账号

    usermod -L 用户名

    passwd -l 用户名

    passwd -S 用户名

  • 删除无用的账号

    userdel 【-r】用户名

  • 锁定账号文件passwd、shadow

    chattr +i /etc/passwd /etc/shadow

    lsattr /etc/passwd /etc/shadow(锁定文件并查看状态)

    chattr -i /etc/passwd /etc/shadow(解锁)

    md5sum /etc/password 校验和

2.密码安全控制

chage命令

2.1.常用选项

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

  • 设置密码有效期
  • 要求用户下次登录时修改密码
bash 复制代码
chage -M 天数  用户名 (针对已存在的用户,天数为 99999 表示为永不过期)
2.2.相关实操

bash 复制代码
vim /etc/login.defs  -->  PASS_MAX_DAYS 天数(针对新建的用户)
2.3.相关实操
bash 复制代码
chage -d 0 用户名(强制用户下一次登录修改密码)

3.命令历史限制

  • 减少记录的命令条数
  • 登录时自动情况命令历史
bash 复制代码
history(查看历史命令)

vim /etc/profile  -->  export HISTSIZE=XX  -->  source /etc/profile(限制历史命令数量)

history -c(临时清空历史命令)

vim /etc/profile  -->  > ~/.bash_history
3.1.相关实操

3.2.永久生效

4.终端自动注销

  • 闲置600秒后自动注销
bash 复制代码
vim /etc/profile  -->  export TMOUT=XX  -->  source /etc/profile(自动注销)
  • 开机永久清空历史命令

  • 设置每60秒清空一次历史命令

二.系统引导和登录控制

1.使用su命令切换用户

1.1.用途及用法

用途:Substitiute User,切换用户

格式:

bash 复制代码
su -目标用户

1.2.密码验证

root→任意用户,不验证密码

普通用户→其他用户,验证目标用户的密码

相关实操

1.3.限制使用su命令的用户

  • 将允许使用su命令的用户加入wheel组

    bash 复制代码
    gpasswd wheel -a 用户名
  • 启用pam_wheel认证模块

    bash 复制代码
    vim /etc/pam.d/su -> 开启 auth   required   pam_wheel.so use_uid 的配置

相关实操

加入wheel组前

加入wheel组

加入wheel组后

1.4.ssh远程登录输入三次密码错误则锁定用户

vim /etc/pam.d/sshd  
auth       required     pam_tally2.so  deny=3 unlock_time=600 even_deny_root root_unlock_time=600

相关实操

2.Linux中的PAM安全认证

2.1.su命令的安全隐患

  • 默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(比如root)的登录密码,带来安全风险
  • 为了加强su命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进行切换

2.2.PAM(Pluggable Authentication Modules)可拔插式认证模块

  • 是一种高效而且灵活便利的用户级别的认证方式
  • 也是当前Linux服务器普遍使用的认证方式

2.3.PAM认证原理

  • 一般遵循的顺序

service(服务)->PAM(配置文件)->pam_*.so

  • 首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证
  • 用户访问服务器时,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证
  • 不同的应用程序所对应的PAM模块是不同的

2.4.PAM配置文件

PAM的配置文件中的每一行都是一个独立的认证过程,它们按从上到下的顺序依次由PAM模块调

用cat /etc/pam.d/system-auth

第一列代表PAM认证模块类型

**auth:**认证模块接口,如验证用户身份、检查密码是否可以通过,并设置用户凭据

**account:**账户模块接口,检查指定账户是否满足当前验证条件,如用户是否有权访问所请求的服

务,检查账户是否到期

**password:**密码模块接口,用于更改用户密码,以及强制使用强密码配置

**session:**会话模块接口,用于管理和配置用户会话。会话在用户成功认证之后启动生效

第二列代表PAM控制标记

**required:**模块结果必须成功才能继续认证,如果在此处测试失败,则继续测试引用在该模块接口

的下一个模块,直到所有的模块测试完成,才将结果通知给用户。

**requisite:**模块结果必须成功才能继续认证,如果在此处测试失败,则会立即将失败结果通知给用

户。

**sufficient:**模块结果如果测试失败,将被忽略。如果sufficient模块测试成功,并且之前的required

模块没有发生故障,PAM会向应用程序返回通过的结果,不会再调用堆栈中其他模块。

**optional:**该模块返回的通过/失败结果被忽略。一般不用于验证,只是显示信息(通常用于

session 类型)。

**include:**与其他控制标志不同,include与模块结果的处理方式无关。该标志用于直接引用其他

第三列代表PAM模块

默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。同一个模块,可以出

现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的

模块类型编制了不同的执行函数。

第四列代表PAM模块的参数

这个需要根据所使用的模块来添加。传递给模块的参数。参数可以有多个,之间用空格分隔开

查看某个程序是否支持PAM认证,可以用ls命令

示例:

查看su是否支持PAM模版认证

bash 复制代码
ls /etc/pam.d | grep su

相关实操

查看su的PAM配置文件

bash 复制代码
cat /etc/pam.d/su

相关实操

3.使用sudo机制提升权限

3.1.使用sudo

  • 用途:以其他用户身份(比如root)执行授权的命令
  • 用法:sudo授权命令
相关实操

新用户不在wheel组

在wheel组的用户

3.2.配置sudo

vi /etc/sudoers(此文件的默认权限为 440,保存退出时必须执行":wq!"命令来强制操作)

用户 主机名=命令程序列表    //可以使用通配符*全部,!取反符号
别名创建
  • User_Alias 大写别名=用户1,用户2,......
  • Host_Alias 大写别名=主机名1,主机名2,......
  • Cmnd_Alias 大写别名=程序1,程序2,......

相关实操

使用别名进行授权

#用户/组授权

用户名/用户别名 主机名/别名 =(用户)程序列表/别名

%组名 主机名 程序列表

用户名 主机名 = [(用户)NOPASSWD:] 程序列表

普通用户使用授权命令
mkdir ~/guazhai(通过wangwu用户在家目录下创建一个 guazhai的空文件)

sudo  mount /dev/sr0   ~/guazhai  //sudo(加配置的命令表中的命令,以root的身份去运行该授权命令)

提示:第一次执行需要验证密码,默认超时时长为5分钟,在此期间不再重复验证密码

启用sudo操作日志

visudo

Defaults logfile = "/var/log/sudo"

su切换

将信任的普通用户加入到wheel组中 gpasswd -a 用户 wheel

修改su的PAM认证文件配置

/etc/pam.d/su 将2,6行注释取消

4.安全控制

4.1.开关机安全控制

调整BIOS引导设置
  • 将第一引导设备设为当前系统所在硬盘
  • 禁止从其他设备(光盘、u盘、网络)引导系统
  • 将安全级别设为setup,并设置管理员密码
GRUB限制(了解即可)
  • 使用grub-mkpasswd-pbkdf2生成密钥
  • 修改/etc/grub.d/00 header文件中,添加密码记录
  • 生成新的grub.cfg配置文件

通常情况下在系统开机进入GRUB菜单时,按e可以查看并修改GRUB引导参数,这对服务器是一

个极大的威胁。可以为GRUB设置一个密码,只有提供正确的密码才能被允许修改参数

4.2.终端登录安全控制

  • 限制root只在安全终端登录
安全终端配置:/etc/securetty
  • 禁止普通用户登录
  1. 建议/etc/nologin文件

  2. 删除nologin文件或重启后即恢复正常

    touch /etc/nologin(禁止普通用户登录)
    rm -rf /etc/nologin(取消上述登录限制)

相关推荐
摸鱼也很难1 小时前
Docker 镜像加速和配置的分享 && 云服务器搭建beef-xss
运维·docker·容器
watermelonoops1 小时前
Deepin和Windows传文件(Xftp,WinSCP)
linux·ssh·deepin·winscp·xftp
woshilys1 小时前
sql server 查询对象的修改时间
运维·数据库·sqlserver
疯狂飙车的蜗牛2 小时前
从零玩转CanMV-K230(4)-小核Linux驱动开发参考
linux·运维·驱动开发
恩爸编程3 小时前
探索 Nginx:Web 世界的幕后英雄
运维·nginx·nginx反向代理·nginx是什么·nginx静态资源服务器·nginx服务器·nginx解决哪些问题
Michaelwubo4 小时前
Docker dockerfile镜像编码 centos7
运维·docker·容器
远游客07134 小时前
centos stream 8下载安装遇到的坑
linux·服务器·centos
马甲是掉不了一点的<.<4 小时前
本地电脑使用命令行上传文件至远程服务器
linux·scp·cmd·远程文件上传
jingyu飞鸟4 小时前
centos-stream9系统安装docker
linux·docker·centos
好像是个likun4 小时前
使用docker拉取镜像很慢或者总是超时的问题
运维·docker·容器