Linux体系安全及应用

打印 上一主题 下一主题

主题 1028|帖子 1028|积分 3084



  

1账号安全根本步伐

体系账号整理



  • 将非登录用户的Shell设为/sbin/nologin
    克制非登录用户通过Shell访问体系
    1. usermod -s /sbin/nologin 用户名
    复制代码
  • 锁定长期不使用的账号
    对长期不活跃的账号进行锁定,避免匿伏的安全风险。
    1. usermod -L 用户名  # 锁定用户
    2. passwd -l 用户名  # 锁定密码
    3. passwd -S 用户名  # 查看账号状态
    复制代码
  • 删除无用的账号
    整理无用的账号,保持体系用户列表的简洁和安全。
    1. userdel [-r] 用户名  # 使用-r选项同时删除用户的主目录
    复制代码
  • 锁定账号文件passwd、 shadow
    锁定关键体系文件以防止未授权的更改。
    1. chattr +i /etc/passwd /etc/shadow  # 锁定文件
    2. lsattr /etc/passwd /etc/shadow  # 查看文件属性
    3. chattr -i /etc/passwd /etc/shadow  # 解锁文件
    复制代码
密码安全控制



  • 设置密码有效期
    逼迫用户定期更新密码,提升密码的安全性。
    新建用户: 修改全局密码策略,实用于所有新建用户。
    1. [root@localhost ~]# vi /etc/login.defs # 修改配置文件
    2. PASS_MAX_DAYS  30  # 密码有效期为30天
    复制代码
    已有效户: 针对特定用户设置密码有效期。
    1. [root@localhost ~]# chage -M 30 lisi  
    2. # 设置用户lisi密码有效期为30天
    3. [root@localhost ~]# cat /etc/shadow | grep lisi  
    4. # 查看用户lisi的密码信息
    复制代码
  • 要求用户下次登录时修改密码
    逼迫用户在下次登录时更新密码,提升安全性。
    1. [root@localhost ~]# chage -d 0 zhangsan  
    2. # 将用户zhangsan的密码修改日期设置为0
    3. [root@localhost ~]# cat /etc/shadow | grep zhangsan  
    4. # 验证更改
    复制代码
命令历史限制



  • 减少记录的命令条数
    限制历史命令记录数量,减少敏感信息的暴露。
    1. [root@localhost ~]# vi /etc/profile
    2. export HISTSIZE=200  # 设置历史记录条数为200
    3. [root@localhost ~]# source /etc/profile  # 使更改生效
    复制代码
  • 登录时自动清空历史
    在每次登录时自动清空命令历史记录,防止命令泄漏。
    1. [root@localhost ~]# vi ~/.bashrc
    2. ##在文件中插入:输入空字符覆盖文件实现清空
    3. echo "" > ~/.bash_history
    复制代码
终端自动注销



  • 闲置600秒后自动注销
    设置终端闲置600秒后自动注销,防止长时间未操纵的会话被利用。
  1. [root@localhost ~]# vi /etc/profile
  2. export TMOUT=600  # 设置超时时间为600秒
  3. [root@localhost ~]# source /etc/profile  # 使更改生效
复制代码
拓展:两个profile文件的问题修复过程


  • 注销时间设置太短导致无法输入命令
    解决办法:在另一台呆板上使用scp命令,将本机正常呆板profile传输覆盖到故障呆板的同名文件。
    1. scp /etc/progile root@192.168.10.11:/etc/profile
    复制代码
  • 误删了profile文件,除最根本命令外别的命令都无法使用
    解决办法:同样方式,复制使用另一台呆板的文件,在本机操纵,拷贝正常呆板的profile文件到本机再source。
    1. scp /etc/progile root@192.168.10.12:/etc/profile
    复制代码
2使用su命令切换用户

用途
su是Substitute User的缩写,用于切换用户身份
格式
  1. su - 目标用户  # 使用目标用户的登录shell环境
复制代码
密码验证


  • root用户:恣意用户切换到root时,不验证密码
  • 普通用户:切换到其普通用户时,必要验证目的用户的密码
  1. ##带-选项表示将使用目标用户的登录shell环境
  2. [test@localhost ~]# su - root  # 切换到root用户
  3. [root@localhost ~]# whoami
  4. root  # 验证当前用户为root、
复制代码
3限制使用su命令的用户



  • 将答应使用su命令的用户加入wheel组
    仅答应wheel组内的用户使用su命令切换到其他用户。
  • 启用pam_wheel认证模块(PAM体系相干的认证权限管理)
    通过PAM模块控制su命令的使用权限
    1. [root@localhost ~]# vi /etc/pam.d/su
    2. #%PAM-1.0
    3. auth   sufficient pam_rootok.so  # 如果是root用户,直接通过
    4. auth   required pam_wheel.so use_uid  # 仅允许wheel组成员使用su
    复制代码
  • 查看su操纵记录
    su命令的操纵记录保存在安全日志文件/var/log/secure中。
4Linux中的PAM安全认证

介绍



  • PAM(Pluggable Authentication Modules),可插拔式认证模块
  • 是一种高效而且灵活便利的用户级别的认证方式
  • 也是当前Linux服务器广泛使用的认证方式
  • 设置文件每一行设置界说了一个认证过程,这些认证过程按照从上往下的次序依次实行
  • PAM 通过模块化的设计,使得体系管理员可以灵活地设置和定制认证过程,以满意不同的安全需求
su命令的安全隐患

安全隐患
默认环境下,任何用户都答应使用 su 命令
其他用户有时机反复实行其他用户(如root) 的登录密码,带来安全风险
解决办法
使用 PAM 认证模块限制 su 命令的使用
为了加强 su 命令的使用控制,借助于PAM认证模块,只答应极个别用户使用 su 命令切换用户身份,减少安全风险
PAM认证原理和构成



  • 认证流程
    流程大致为:
    Service(服务)→PAM(设置文件)→pam_*.so
    PAM模块的认证流程一般遵循以下步调次序:

    • 确定服务步伐
    • 加载相应的PAM设置文件PAM(位于/etc/pam.d下)
    • 调用认证模块(位于/lib64/security下)进行安全认证

用户访问服务器时,服务器的某一个服务步伐把用户的哀求发送到PAM模块进行认证,不同的应用步伐所对应不同的PAM模块。


  • 查看某个步伐是否支持PAM认证,可以用ls命令
    1. ls /etc/pam.d | grep su  # 检查 su 是否支持 PAM 认证
    复制代码
  • 查看su的PAM设置文件
    可以通过查看 /etc/pam.d/su 文件了解具体的 PAM 认证过程。文件中的每一行代表一个独立的认证过程,通常分为以下三个字段:

    • 认证类型(auth, account, password, session)
    • 控制类型(required, requisite, sufficient, optional)
    • PAM 模块及其参数(如 pam_wheel.so)

PAM安全认证流程

控制类型(Control Flags)
用于指定PAM验证模块的返回效果出来方式:

  • required:验证失败时仍然继承,但返回 Fail 。
  • requisite:验证失败则立刻竣事整个验证过程,返回 Fail 。
  • sufficient:验证乐成则立刻返回,不再继承,否则继承实行其他认证。
  • optional:用于会话控制(session),不直接用于验证,只显示信息。

PAM 设置文件结构说明


  • 第一列:PAM 模块类型

    • auth:用于用户身份验证,比如输入密码并验证是否是 root 用户。
    • account:查抄用户账号的属性,比方是否答应登录、账号是否过期、用户数量是否到达上限等。
    • password:处置惩罚用户密码的更新,比方修改密码。
    • session:管理用户会话,比方记录登录信息、挂载文件体系等。

  • 第二列:PAM 控制标记

    • required:该标记的模块必须乐成才气继承认证。假如失败,认证过程不会立刻制止,而是实行该类型的所有模块后返回失败信息。这种方式隐蔽了哪个模块失败,以增强安全性。
    • requisite:类似 required,但假如此模块失败,认证过程立刻制止并返回失败信息。
    • sufficient:假如此模块乐成,立刻返回乐成,不再实行后续的相同类型的模块。假如失败,不影响终极效果。
    • optional:无论此模块乐成与否,认证过程都将继承。通常用于非关键的认证操纵。
    • include:在当前设置文件中包罗其他 PAM 设置文件的内容。比方,可以调用 /etc/pam.d/system-auth 来处置惩罚体系认证。

  • 第三列:PAM 模块

    • 指定使用的 PAM 模块。通常位于 /lib64/security/ 目录下,假如在其他路径,必要提供绝对路径。
    • 同一个模块可以出现在不同类型中,每个类型调用该模块时的活动大概不同。

  • 第四列:PAM 模块的参数

    • 传递给模块的参数,可以根据所使用的模块设置多个参数,参数之间用空格分隔。

PAM 控制标记的补充说明



  • required:该标记的模块必须乐成才气通过认证,即所有带 required 标记的模块都必须乐成,否则认证失败。但错误信息会在所有此类型模块实行完成后返回。
  • requisite:假如此模块失败,认证过程立刻制止并返回错误信息,不再实行后续模块。
  • sufficient:只要此模块乐成,认证立刻返回乐成效果,并跳过后续模块。假如失败,认证过程继承但不影响终极效果。
  • optional:无论此模块乐成与否,认证过程都将继承,因此不影响终极认证效果。
PAM 实例

以下是 PAM 认证过程中,使用不同控制标记对用户进行身份验证的示例:
模块类型控制标记模块用户1用户2用户3用户4authrequired模块1passfailpasspassauthsubstack模块2passpassfailpassauthrequired模块3passpasspassfail效果passfailpasspass 在上表中,不同用户经过不同模块的认证后,终极效果为 pass 或 fail,这取决于每个模块的认证效果和控制标记的作用。
5使用sudo机制提升权限

su命令的缺点



  • 使用 su 命令切换用户时,大概暴露用户密码,且没有具体的操纵记录。
sudo命令的用途及用法



  • 用途
    通过 sudo 以其他用户身份(如 root )实行授权的命令。
  • 用法
    1. sudo 授权命令  # 以指定身份执行命令
    复制代码
设置sudo授权



  • 编辑 sudoers 文件
    使用 visudo 命令或者 vi /etc/sudoers 修改 /etc/sudoers 文件。
    修改后保存时,假如使用 vi,必要逼迫保存(:wq!)以避免权限问题。
  • 语法格式
    1. 用户 主机名=命令程序列表
    2. 用户 主机名=(用户) 命令程序列表
    复制代码
    字段解释

    • 用户:直接授权指定的用户名,或采用“%组名”的情势(授权一个组的所有效户)。
    • 主机名:使用此规则的主机名。没设置过主机名时可用localhost,有配过主机名则用现实的主机名,ALL则代表所有主机
    • (用户):用户可以或许以何种身份来实行命令。此项可省略,缺省时以root用户的身份来运行命令
    • 命令步伐列表:答应授权的用户通过sudo方式实行的特权命令,需填写命令步伐的完备路径,多个命令之间以逗号“,”进行分隔。ALL则代表体系中的所有命令

  • 示例1
    1. [root@localhost ~]# visudo
    2. ## 为wheel组成员设置权限,允许组内成员无需密码即可执行任何命令
    3. %wheel ALL=NOPASSWD:ALL
    4. ## 为用户jerry授权,只允许在本地主机上使用ifconfig命令
    5. jerry localhost=/sbin/ifconfig
    6. ## 为用户syrianer授权,允许其使用/sbin目录下的所有命令,
    7. ## 除了reboot和poweroff命令
    8. syrianer localhost=/sbin/*,!/sbin/reboot,!/sbin/poweroff
    9. ## 定义命令别名
    10. Cmnd_Alias PKGTOOLS=/bin/rpm,/usr/bin/yum
    11. ## 为用户mike授权,只允许使用定义的PKGTOOLS命令别名中的命令
    12. mike localhost=PKGTOOLS
    复制代码
  • 示例2
    为特定用户设置 sudo 权限
    1. ## 允许用户 Tom 在所有主机上执行 ifconfig 命令
    2. Tom ALL=/sbin/ifconfig
    3. ## 允许用户 Jerry 在 localhost 主机上执行 /sbin 目录下的所有命令,
    4. ## 但排除 reboot 和 poweroff 命令
    5. Jerry localhost=/sbin/*,!/sbin/reboot,!/sbin/poweroff
    复制代码
    为组设置 sudo 权限
    1. ## 允许 wheel 组的所有成员无需密码验证即可使用 sudo 执行任何命令
    2. %wheel ALL=NOPASSWD: ALL
    复制代码
    为特定用户设置 root 权限的命令
    1. ## 允许用户 Mike 以 root 身份执行 kill 和 killall 命令,且无需密码
    2. Mike ALL=(root) NOPASSWD: /bin/kill, /usr/bin/killall
    复制代码
    使用别名设置
    为了简化管理,可以使用别名来界说用户、主机和命令,必须使用大写字母。
    1. ## 定义用户别名
    2. User_Alias USERS=Tom,Jerry,Mike
    3. ## 定义主机别名
    4. Host_Alias HOSTS=localhost,bogon
    5. ## 定义命令别名
    6. Cmnd_Alias CMNDS=/sbin/ifconfig,/usr/sbin/useradd,/usr/sbin/userdel
    7. ## 为定义的用户组在指定主机上授权指定命令
    8. USERS HOSTS=CMNDS
    复制代码
  • 使用 sudo 实行命令
    在设置完 sudo 权限后,用户可以使用 sudo 命令实行特权操纵。比方:
    1. ## 使用 Tom 用户登录并配置网络接口
    2. su - Tom
    3. /sbin/ifconfig ens33:0 192.168.1.11/24
    4. ## 使用 sudo 执行 ifconfig 命令(需验证用户密码)
    5. sudo /sbin/ifconfig ens33:0 192.168.1.11/24
    6. ## 查看当前用户的 sudo 权限
    7. sudo -l
    复制代码
    注意:初次使用 sudo 时,体系会提示用户输入密码。默认环境下,密码的验证效果会在 5 分钟内保持有效,期间实行的后续 sudo 命令无需再次输入密码。
查看sudo操纵记录



  • 启用 Defaults logfile 设置(启用 sudo 操纵日志)
    必要在 /etc/sudoers 文件中启用日志记录功能。
    使用 visudo 命令来编辑 sudoers 文件,以避免语法错误。
    1. [root@localhost ~]# visudo
    2. ## 配置日志文件路径(默认)
    3. Defaults logfile = "/var/log/sudo"
    复制代码
    启用日志设置后,所有使用 sudo 实行的命令都会被记录在指定的日志文件中。
    1. [root@localhost ~]# tail /var/log/sudo
    2. ## 查看最近的sudo操作记录
    3. ## 2023年8月24日23:59:44,用户jerry以root身份执行了ifconfig命令
    4. Aug 24 23:59:44 : jerry :TTY=pts/0; PWD=/home/jerry :USER=root; COMMAND=/sbin/ifconfig ens33:0 192.168.1.11/24
    5. ## 2023年8月25日00:00:46,用户syrianer以root身份执行了自定义命令list
    6. Aug 25 00:00:46 syrianer :TTY=pts/1; PWD=/home/syriader; USER=root; COMMAND=list
    复制代码
  • 查询授权的sudo操纵
    使用 sudo -l 命令来查看当前用户被授权实行的命令列表,以及在什么环境下可以使用这些命令。
    示例:显示当前用户的所有 sudo 权限,包括可以实行的命令和是否必要密码等信息。
    1. ## 查询当前用户的sudo权限
    2. [user@localhost ~]$ sudo -l
    复制代码
6终端登录安全控制

限制root只在安全终端登录



  • 安全终端设置:/etc/securetty 文件
    通过编辑 /etc/securetty 文件,可以指定答应 root 用户登录的终端装备。有助于增强体系安全性,防止未经授权的装备获取 root 权限。
    1. [root@localhost ~]# vi /etc/securetty
    2. ## 允许 root 用户通过 tty1 和 tty2 终端登录
    3. tty1
    4. tty2
    5. ## 禁止通过 tty5 和 tty6 登录
    6. #tty5
    7. #tty6
    复制代码
克制普通用户登录



  • 创建/etc/nologin文件
  • 删除nologin文件或重启后即规复正常(限制解除)
    1. ## 创建 /etc/nologin 文件以禁止普通用户登录
    2. [root@localhost ~]# touch /etc/nologin
    3. ## 删除 /etc/nologin 文件以取消登录限制
    4. [root@localhost ~]# rm -rf /etc/nologin
    复制代码
7限制更改 GRUB 引导参数

在体系开机进入 GRUB 菜单时,按 e 键可以查看并修改 GRUB 引导参数。这对于服务器安全构成了一定的威胁。为了防止未经授权的修改,可以为 GRUB 菜单设置密码,只有提供正确的密码才答应更改引导参数。
1. 生成 GRUB 密码

首先,使用 grub2-mkpasswd-pbkdf2
命令生成加密密码:
  1. grub2-mkpasswd-pbkdf2
复制代码
根据提示设置密码,体系会生成一段类似如下的加密字符串:
  1. PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.……
复制代码
2. 备份紧张设置文件

在继承之前,建议备份 GRUB 设置文件和相干文件,以防出现问题:
  1. cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
  2. cp /etc/grub.d/00_header /etc/grub.d/00_header.bak
复制代码
3. 编辑 GRUB 设置文件

编辑 /etc/grub.d/00_header 文件,添加用户和密码设置:
  1. vim /etc/grub.d/00_header
  2. ## 在文件中添加以下内容
  3. cat << EOF
  4. set superusers="root"                 # 设置 GRUB 的超级用户,用户名为 root
  5. password_pbkdf2 root grub.pbkdf2……    # 设置超级用户的密码(此处为加密后的密码字符串)
  6. EOF
复制代码
将上述代码中的 grub.pbkdf2…… 更换为现实生成的加密字符串。
4. 生成新的 GRUB 设置文件

完成编辑后,生成新的 GRUB 设置文件以应用更改:
  1. grub2-mkconfig -o /boot/grub2/grub.cfg
复制代码
5. 验证设置

重新启动体系,进入 GRUB 菜单时,按 e 键实行修改引导参数。此时,体系会要求输入设置的用户名和密码,才气进行进一步操纵。
8体系弱口令检测-Joth the Ripper工具

介绍


  • (国内不太用)
  • John the Ripper (简称JR)是一款强盛的密码分析工具,广泛用于检测体系中的弱口令。它通过分析 /etc/shadow 文件中的密码哈希值,实行使用字典或暴力破解方法来检测密码强度。
  • 使用时可以对目的文件进行不同类型的攻击,包括字典攻击、混合攻击和暴力攻击等。
  • 官网:http://www.openwall.com/john/
流程步调
  1. #解压工具包
  2. cd /opt
  3. tar zxf john-1.8.0.tar.gz
  4. #安装软件编译工具
  5. yum install -y gcc gcc-c++ make
  6. #切换到src子目录
  7. cd /opt/john-1.8.0/src
  8. #进行编译安装
  9. make clean linux-x86-64
  10. #准备待破解的密码文件
  11. cp /etc/shadow /opt/shadow.txt
  12. #执行暴力破解
  13. cd /opt/john-1.8.0/run
  14. ./john /opt/shadow.txt
  15. #查看已破解出的账户列表
  16. ./john --show /opt/shadow.txt
  17. #使用密码字典文件
  18. > john.pot                 #清空已破解出的账户列表,以便重新分析
  19. ./john --wordlist=./password.lst /opt/shadow.txt                #使用指定的字典文件进行破解
复制代码
9网络端口扫描-NMAP工具

介绍


  • 一款用于网络发现和安全审计的工具。支持多种扫描技术,可以或许快速探测网络中的主机和服务(检测暴露的端口)。
  • 官网:http://nmap.org/
  • CentOS 7.3光盘中安装包为:nmap-6.40-7.el7.x86_64.rpm
  • 也可使用 YUM 直接安装
格式
  1. nmap [扫描类型] [选项] <扫描目标...>
复制代码
常用的扫描类型


  • 如:-sS、-sT、-sF、-sU、-sP、-P0
示例


  • 分别查看本机开放的TCP端口、UDP端口
    1. nmap -sT 127.0.0.1  ## TCP连接扫描
    2. nmap -sU 127.0.0.1  ## UDP扫描
    复制代码
  • 检测192.168.4.0/24网段有哪些主机提供FTP服务
    1. nmap -p 21 192.168.4.0/24
    复制代码
  • 检测192.168.4.0/24网段有哪些存活主机
    1. nmap -n -sP 192.168.4.0/24
    复制代码
nmap命令常用的选项和扫描类型


  • -p:指定扫描的端口。
  • -n:禁用反向 DNS 解析(以加快扫描速率)。
  • -sS:TCP的SYN扫描(半开扫描),只向目的发出SYN数据包,假如收
  • SYN/ACK响应包就以为目的端口正在监听,并立刻断开连接;否则以为目的端口并未开放。
  • -sT:TCP连接扫描,这是完备的TCP扫描方式(默认扫描类型),用来创建一个TCP连接,假如乐成则以为目的端口正在监听服务,否则以为目的端口并未开放。
  • -sF:TCP的FIN扫描,开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对SYN数据包进行简单过滤,而忽略了其他情势的 TCP 攻击包。这种类型的扫描可间接检测防火墙的结实性。
  • -sU:UDP 扫描,探测目的主机提供哪些 UDP 服务,UDP 扫描的速率会比较慢。
  • -sP:ICMP 扫描,类似于 ping 检测,快速判断目的主机是否存活,不做其他扫描。
  • -P0:跳过ping检测,这种方式以为所有的目的主机是存活的,当对方不响应ICMP哀求时,使用这种方式可以避免因无法 ping 通而放弃扫描。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

商道如狼道

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表