Linux系统安全

发布于:2025-02-24 ⋅ 阅读:(9) ⋅ 点赞:(0)

目录

一、账号安全的基本措施

1.1、用户登录限制

1.1.1、禁止用户登录

1.1.2 、锁定用户

 1.1.3、删除用户

1.1.4锁定配置文件

1.2、限时密码设置

1.3、历史命令

1.3.1、history

 1.3.2、历史命令配置文件修改

1.4、切换用户

1.4.1、su

 1.4.2、sudo

1.5、PAM安全认证

1.5.1、PAM基本概念

1.5.2、PAM配置文件语法

1.5.3、常见PAM模块

1.5.4、PAM配置示例


一、账号安全的基本措施

1.1、用户登录限制

1.1.1、禁止用户登录

/sbin/nologin是一个常用的shell,当某个用户的shell设置为/sbin/nologin时,用户将不能登录系统。即使用户拥有正确的用户名和密码,也无法通过终端或其他方式进行登录。

  • chsh命令与usermod命令可用于更改登录shell。
[root@localhost ~]# tail -1 /etc/passwd    //查看用户属性
123123:x:1000:1000:123123:/home/123123:/bin/bash
[root@localhost ~]# chsh -s /sbin/nologin 123123    //-s参数指定用户登录shell
Changing shell for 123123.
chsh: 警告:“/sbin/nologin”未在 /etc/shells 中列出。
Shell changed.
[root@localhost ~]# tail -1 /etc/passwd
123123:x:1000:1000:123123:/home/123123:/sbin/nologin    //已限制用户登录
[root@localhost ~]# su 123123                           //无法登录
This account is currently not available.
[root@localhost ~]# usermod -s /bin/bash 123123         //也可通过usermod命令修改shell
[root@localhost ~]# tail -1 /etc/passwd
123123:x:1000:1000:123123:/home/123123:/bin/bash
1.1.2 、锁定用户

passwd -l命令与usermod -L命令可以锁定用户,使密码失效。

passwd -u命令与usermod -U命令解除密码锁定。

[root@localhost ~]# passwd -l 123123
锁定用户 123123 的密码 。
passwd: 操作成功
[root@localhost ~]# passwd -u  123123
解锁用户 123123 的密码。
passwd: 操作成功
[root@localhost ~]# usermod -L zz
[root@localhost ~]# su 123123
[123123@localhost root]$ su zz
密码:
su: 鉴定故障
 1.1.3、删除用户

userdel -r命令删除用户的同时,删除与用户相关的所有文件

[root@localhost ~]# userdel -r 123123
1.1.4锁定配置文件

 chattr命令的功能是更改文件隐藏属性

[root@localhost ~]# chattr +i /etc/passwd        //权限限制
[root@localhost ~]# lsattr /etc/passwd
----i----------- /etc/passwd
[root@localhost ~]# rm /etc/passwd
rm:是否删除普通文件 "/etc/passwd"?y
rm: 无法删除"/etc/passwd": 不允许的操作
[root@localhost ~]# chattr -i /etc/passwd         //解除限制

1.2、限时密码设置

通过修改/etc/login.defs配置文件,可以对新建用户设置密码规则

[root@localhost ~]# vim /etc/login.defs 
# Password aging controls:
#
#       PASS_MAX_DAYS   Maximum number of days a password may be used.
#       PASS_MIN_DAYS   Minimum number of days allowed between password changes.
#       PASS_MIN_LEN    Minimum acceptable password length.
#       PASS_WARN_AGE   Number of days warning given before a password expires.
#
PASS_MAX_DAYS   99999        //密码可以使用的最大天数
PASS_MIN_DAYS   0            //密码可以使用的最小天数
PASS_MIN_LEN    5            //密码最小长度
PASS_WARN_AGE   7            //密码过期前警告天数

 对已存在用户可通过chage命令,设置账号密码的有效期

-m 设置密码可更改的最小天数 -E 设置账号到期的日期
-M 设置密码保持有效的最大天数 -d 显示上一次更改的日期
-i 设置密码到期后还可以使用天数 -l 显示当前设置
[root@localhost ~]# chage -M 100 123123
[root@localhost ~]# chage -l 123123
最近一次密码修改时间					:从不
密码过期时间					:从不
密码失效时间					:从不
帐户过期时间						:从不
两次改变密码之间相距的最小天数		:0
两次改变密码之间相距的最大天数		:100
在密码过期之前警告的天数	:7

1.3、历史命令

历史命令记录了用户在命令行中输入的所有命令,为用户提供了极大的便利,但也给系统安全带来了潜在的风险。当用户在命令行输入了明文密码,就会存在安全风险。可通过修改/etc/profile配置文件,设置HISTSIZEHISTFILESIZE环境变量来控制命令历史记录的条数。

1.3.1、history

功能是显示与管理历史命令记录。

-a 保存命令记录 -n 读取命令记录
-c 清空命令记录 -r 读取命令记录到缓冲区
-d 删除指定序号的命令记录 -w 将缓冲区信息写入历史文件

 参考示例:

[root@localhost ~]# history 
    1   vim   /etc/sysconfig/network-scripts/ifcfg-ens33
    2  reboot
    3  systemctl restart network
    4  vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]# history -c
[root@localhost ~]# history
    1  history
 1.3.2、历史命令配置文件修改

通过修改/etc/profile配置文件,限制历史命令最大显示数量。

[root@localhost ~]# vim /etc/profile

HISTSIZE=10                                //修改最大显示命令数

[root@localhost ~]# history                //仅显示十条历史命令
    8  df
    9  history 
   10  reboot
   11  echo ' ' > /root/.bash_history 
   12  vim ~/.bash_history 
   13  history
   14  vim .bash_logout
   15  vim ~/.bash_history 
   16  vim /etc/profile
   17  history

1.4、切换用户

1.4.1、su

switch user的缩写,功能是切换当前用户身份到其他用户身份。

语法格式:su 参数 用户名

- 完全切换身份
[root@localhost ~]# su 123123
[123123@localhost root]$ exit
exit
[root@localhost ~]# su - 123123
上一次登录:四 2月 20 20:28:14 CST 2025pts/0 上
 1.4.2、sudo

super user do 的缩写,功能是授权普通用户执行管理员命令。在/etc/sudoers中设置了可执行sudo指令的用户。

  • 配置文件:/etc/sudo.conf
  • 执行授权命令:/usr/bin/sudo
  • 时间戳文件:/var/db/sudo
  • 日志文件:/var/log/secure

语法格式:sudo 参数 命令

-u 以指定的用户作为新的身份 -E 继承当前环境变量
-H

将用户的家目录环境变量设置为/root

-k 下次强制验证当前用户的密码
-l 列出目前用户可执行与无法执行的指令 -p 改变询问密码的提示符
-s 执行指定的shell -V 显示版本信息

参考示例:

[root@localhost 123123]# sudo su -            //使用超级用户重新登录一次shell
上一次登录:四 2月 20 20:54:27 CST 2025pts/0 上
[root@localhost ~]# 
[123123@localhost ~]$ sudo -s                 //以当前用户的shell开启一个root用户的shell

我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。

 授权规则配置:

模块 含义
user 授权使用sudo的用户或用户组
host 可以执行命令的主机名(ALL代表所有主机)
(run_as_user) 可以使用sudo以哪个用户的身份执行命令(ALL代表所有主机)
command 可以运行的命令(可以是特定的命令,或ALL(所有命令)
[root@localhost ~]# vim /etc/sudoers
114 # %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
115 # user   host=(run_as_user) commad
116 user1 ALL=(ALL) /usr/bin/ls        //表示用户可以执行/usr/bin/ls命令,但不能执行其他命令

1.5、PAM安全认证

Pluggable Authentication Modules的缩写,PAM是Linux系统中用于管理用户认证和安全策略的框架。通过模块化的方式,使系统管理员灵活配置认证、授权、密码策略等功能。

1.5.1、PAM基本概念
  • 模块化设计:PAM将认证过程分解为多个模块,每个模块负责特定的功能
  • 配置文件:配置文件在/etc/pam.d/目录中,每个服务都有独立的配置文件
  • 模块文件目录:/lib64/security/*.so
    1.5.2、PAM配置文件语法

    PAM配置文件的内容通常由以下若干行组成:

      type      control    module       arguments
    //模块类型   控制标识   模块          传递给模块的参数
    • type:模块类别,指认证类型。
      • auth:用户身份验证
      • account:账户管理
      • password:密码管理
      • session:会话管理
    • control_flag:控制标识,定义模块的行为。
      • required:表示该模块必须成功,否则认证失败。
      • requisite:表示该模块不许成功,如果失败,则认证立即终止。
      • sufficient:表示该模块成功时认证通过,但失败时不会终止认证。
      • optional:表示该模块是可选的,不影响最终认证结果。
    • module:PAM模块的名称。
    • arguments:传递给模块的参数,可以用于配置模块的行为。
    1.5.3、常见PAM模块
    • pam_unix.so:基于系统的密码认证,通常与/etc/shadow/etc/passwd配合使用,验证用户名和密码。
    • pam_nologin.so:限制用户登录,当该用户登录时,会显示/etc/nologin文件内容,并拒绝登录。
    • pam_limits.so:限制用户可使用的资源。限制可打开的文件数量、可运行的进程数量。
    • pam_access.so:基于访问控制列表(ACL)控制用户是否能够登陆系统。
    1.5.4、PAM配置示例
    [root@localhost pam.d]# grep pam_nologin *
    gdm-autologin:account    required    pam_nologin.so
    gdm-fingerprint:account     required      pam_nologin.so
    gdm-password:account     required      pam_nologin.so
    gdm-pin:account     required      pam_nologin.so