• linux系统安全


    一、账号安全基本措施

    1.1 系统账号清理

    1.1.1 将用户设置为无法登录-- 改登录shell

    登录shell是用户与计算机系统直接交互的接口,使用户能够通过命令行方式进行各种操作和管理。 所以让用户无法登录,其实就是将登录shell改为 /sbin/nologin,可以用usermod -s 更改。

    [root@localhost home]# usermod -s /sbin/nologin lisi ##更改登录shell
    [root@localhost home]# cat /etc/passwd |grep lisi   ##查看修改是否成功
    lisi:x:1001:1001::/home/lisi:/sbin/nologin
    [root@localhost home]# su lisi   ##查看能否切换到目标用户
    This account is currently not available.     ##用户无法切换
    ​
    1.1.2 删除用户 userdel
    [root@localhost home]# userdel -r lisi   ##加上选项r删除用户的同时删除家目录
    ​
    1.1.3 锁定用户

    方式一

    usermod -L 用户名 锁定用户

    usermod -U 用户名 解锁用户

    方式二

    passwd -l 用户名 锁定用户

    passwd -u 用户名 解锁用户

    1.1.4 锁定配置文件 chattr

    chattr 命令用于修改文件或目录的属性,设置文件的特殊属性,使其具有更高级的保护或控制

    chattr [选项] 文件名

    +i 将文件设置为“不可修改”,即无法被删除、重命名、修改内容或链接的操作

    -i 取消对文件的“不可修改”属性

    +a 只能向文件中添加内容,无法修改或删除已有内容

    通过锁定配置文件 /etc/passwd 和 /etc/shadow ,可以防止恶意修改或者误修改,保证系统和数据的安全性。

    [root@localhost home]# chattr +i /etc/passwd /etc/shadow   ##锁定配置文件
    [root@localhost home]# useradd liwu    
    useradd:无法打开 /etc/passwd        ##无法打开配置文件 无法创建用户
    ​

    1.2 密码安全

    1.2.1 对新建用户

    编辑 /etc/login.defs 文件来设置密码规则

    PASS_MAX_DAYS   99999     ##修改此部分来设置密码有效期
    PASS_MIN_DAYS   0
    PASS_MIN_LEN    5
    PASS_WARN_AGE   7
    ​

    PASS_MAX_DAYS:指定用户密码的最长有效天数

    PASS_MIN_DAYS:指定在更改密码之间必须等待的最小天数

    PASS_MIN_LEN: 指定用户密码的最小长度

    PASS_WARN_AGE:指定在密码过期之前的多少天开始向用户发出警告

    1.2.2 对已有用户 chage

    chage [选项] 用户名 -m:密码可更改的最小天数,m=0 代表任何时候都可以更改密码 -M:密码保持有效的最大天数

    -w:用户密码到期前,提前收到警告信息的天数 -E:帐号到期的日期。过了这天,此帐号将不可用 -d:上一次更改的日期 -i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。 -l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。

    [root@localhost ~]# chage -d  0 用户名 
    ##强制用户下一次登录要修改密码
    ​
    [root@localhost ~]#chage -M 30 lisi
    #设置密码有效期为30天
    [root@localhost ~]#cat /etc/shadow|tail -1
    lisi:!!:19055:0:30:7:::
    第5字段

    1.3 自动注销

    设置自动注销时间

    [root@localhost ~]# vi /etc/profile   ##对所有用户生效
    .................................
    export  TMOUT=60
    ​
    [root@localhost ~]# source /etc/profile    ##使配置文件生效

    1.4 清除命令历史

    1.4.1 查看历史命令
    [root@localhost ~]# history  |tail
      138  vim /etc/login.defs 
      139  vim .bashrc
      140  ls
      141  vim /etc/bashrc
      142  history 
      143  history  |head 
      144  history  |tail -f 
      145  cd
      146  history  |tail -f 
      147  history  |tail
    ​
    1.4.2 历史命令限制
    方式一、注销时清空历史命令
    ​
    vim .bash_logout 
    .. ..
    echo ' ' > /root/.bash_history   ##空文件导入
    ...
    :wq
    ​
    . /.bash_logout   ##应用修改
    ​
    方式二、修改全局配置文件
    ​
    vim /etc/proflie    ##修改此文件  全局生效
    .....
    HISTSIZE =....(自定义数字)    ##最大显示
    ....
    :wq  
    ​
    reboot ##重启应用修改
    ​

    二、用户切换和用户提权

    2.1 用户切换 su命令

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

    命令格式
    su [options...] [-] [user [args...]
    ​
    su [选项] 用户名      ##不完全切换,上一个用户的部分设置会保留
    ​
    su -  用户名         ##完全切换 ,相当于重新登录,
    ​
    ​
    查看su操作记录
    安全日志文件:cat /var/log/secure
    [liwi@localhost root]$ su liwu
    密码:
    ##普通用户切换需要密码
    ​
    [root@localhost ~]# su liwi
    ##root用户切换到普通用户不需要密码

    2.2 sudo命令格式

    sudo [选项] 命令

    -V 显示版本编号

    -l 显示出自己(执行 sudo 的使用者)的权限

    -k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)

    -p 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称

    -u 用户名 以指定用户的权限

    -s 执行环境变数中的 SHELL 所指定的 shell

    vim /etc/sudoers =visudo ## 编辑配置文件

    root    ALL=(ALL)       ALL
    ​

    1.user字段 用户名或UID %组名或者%GID

    2.host字段 IP地址或主机名 ALL代表任意主机

    3.代表用户字段 用户名或UID ALL代表任意用户

    4.命令字段(绝对路径) command name (命令) directory (文件夹里的命令) sudoedit (可以编辑sudoers这个文件,变相变成管理员) Cmnd_Alias (命令别名)

    2.3 sudo子目录

    将所有提权都放在配置文件/etc/sudoers中,不便于管理。 通过再/etc/sudoers.d/下创建子目录,可以更好地管理sudo的授权规则。

    /etc/sudoers.d/test1 test2.....(针对性的创建文件)

    举例
    vim /etc/sudoers.d/test      ##创建子目录(新配置文件)
    ...
    test1 ALL= (root) sudoedit     ##用户test1可以使用 sudoedit 命令
    ...
    :wq
    ​
    ​
    chmod 440 test   ##设置权限,加固安全

    2.4区别

    1.身份验证方式: su命令(切换用户)需要输入目标用户的密码来切换到目标用户的身份。

    sudo命令(以超级用户执行)需要输入当前用户的密码来验证身份。

    2.执行命令的方式: su命令会切换用户的环境,包括当前工作目录和环境变量等。在切换用户后,需要重新设置所需的工作环境。

    sudo命令在当前用户的环境下以超级用户身份执行命令,不会切换用户的环境。这使得在执行完命令后,可以继续以当前用户身份继续工作,而不需要重新设置环境。

    3.授权: su命令切换到目标用户后,拥有目标用户的完整权限。

    sudo命令可以按需授予用户对特定命令或特定命令组合的访问权限。

    三、PAM安全认证

    3.1 什么是PAM?

    PAM:Pluggable Authentication Modules,插件式的验证模块,用于管理和进行用户身份验证的模块化系统。

    PAM提供了灵活和可定制的用户身份验证框架,使系统管理员能够根据需要配置和管理身份验证方式。

    3.2 为什么要用PAM?

    su命令的安全隐患

    默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root) 的登录密码,带来安全风险;

    为了加强su命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进行切换。

    3.3 PAM认证原理

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

    1.用户访问(应用程序需要进行用户身份验证时,会调用PAM库来初始化PAM会话)

    2.确定service类型(加载哪些身份验证模块,用户名、密钥、短信验证码等等)

    3.PAM根据配置文件确定是否允许访问或者进一步的操作

    4.PAM会话结束时,将最终的身份验证结果返回给应用程序

    3.4 PAM配置文件

    只有功能较强的功能模块才有配置文件,所以配置文件的数量小于功能模块的总数

    配置文件路径 主要配置文件

    / etc / security / ,只有功能强大的pam模块才会有主配置文件

    次要配置文件(优先生效)

    /etc/pam.d/

    [root@localhost ~]# vim /etc/pam.d/login 
    ​
    #%PAM-1.0
    auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
    auth       substack     system-auth
    auth       include      postlogin
    account    required     pam_nologin.so
    account    include      system-auth
    password   include      system-auth
    # pam_selinux.so close should be the first session rule
    session    required     pam_selinux.so close
    session    required     pam_loginuid.so
    session    optional     pam_console.so
    # pam_selinux.so open should only be followed by sessions to be executed in the user context
    session    required     pam_selinux.so open
    session    required     pam_namespace.so
    session    optional     pam_keyinit.so force revoke
    session    include      system-auth
    session    include      postlogin
    -session   optional     pam_ck_connector.so
    ~                                                                           
    #模块类型     控制位        PAM模块                                                              
    ~                                                                           
    ~                                                                           
    ~                                                                           
    ~                                                                           
    "/etc/pam.d/login" 18L, 796C                              1,1          全部
    ​

    第一列:模块类型(module-type)

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

    第二列:Control:( 控制位)

    required :一票否决,表示本模块必须返回成功才能通过认证,但是如果该模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕,再将失败结果返回给应用程序,即为必要条件 requisite :一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一type内的任何模块,而是直接将控制权返回给应用程序。是一个必要条件 sufficient :一票通过,表明本模块返回成功则通过身份认证的要求,不必再执行同一type内的其它模块,但如果本模块返回失败可忽略,即为充分条件,优先于前面的 equired和requisiteoptional :表明本模块是可选的,它的成功与否不会对身份认证起关键作用,其返回值一般被忽略include: 调用其他的配置文件中定义的配置 optional 可选项

    第三列:PAM模块

    模块功能
    认证管理(authentication management)接受用户名和密码,进而对该用户的密码进行认证
    帐户管理(account management)检查帐户是否被允许登录系统,帐号是否已经过 期,帐号的登录是否有时间段的限制等
    密码管理(password management)主要是用来修改用户的密码
    会话管理(session management)主要是提供对会话的管理和记账
    1. 模块配置文件路径

    /usr/lib64/security/

    required 无论验证成功还是失败 会继续往下验证

    requisite 验证成功则继续 验证失败则立即结束整个验证过程

    sufficient 验证成功则立即返回,否则忽略结果并继续

    optional 一般不用于验证,只显示信息

    3.6 部分PAM功能模块

    3.6.1 limits模块(重要)
    1)功能

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

    2)ulimit 命令

    通过ulimit命令可以查看和设置不同类型的资源限制

    ulimit -a 显示当前所有资源的限制

    ulimit -c 设置core文件的最大大小,单位为blocks

    ulimit -n 设置可以打开的最大文件描述符数

    ulimit -u 设置用户可创建的最大进程数

    ulimit -m 设置单个进程的物理内存限制,单位为KB

    ulimit -v 设置单个进程的虚拟内存限制,单位为KB

    ulimit -s 设置单个栈的最大大小,单位为blocks

    ulimit -f 设置单个文件的最大大小,单位为blocks

  • 相关阅读:
    Vue3:响应式数据的基本使用(ref、reactive)
    华为机试真题 Java 实现【路灯照明】
    web缓存—Squid代理服务
    图的十字链表存储结构
    mmocr的识别模型
    如何配置微信小程序id
    简单聊聊 倒排索引
    SpringSecurity框架【详解】
    系统工程利用计算机作为工具
    使用hugging face开源库accelerate进行多GPU训练(单机多卡)时,在保存模型结构的时候出现的问题
  • 原文地址:https://blog.csdn.net/m0_67497257/article/details/138073226