Linux 系统安全及应用(账号安全和引导登录控制)(3)

简介: 1 账号安全基本措施1.1 系统账号清理1.1.1 将非登录用户的Shell设为/sbin/nologin在我们使用Linux系统时,除了用户创建的账号之外,还会产生系统或程序安装过程中产生的许多其他账号,除了超级用户root外,其他账号都是用来维护系统运作的,一般不允许登录,常见的非登录用户有bin、adm、mail、lp、nobody、ftp等。查看/etc/passwd 文件,可以看到多个程序用户。


2.2.3 sudo子目录

如果对所有用户进行提权都放在/etc/sudoers 一个文件中,非常不便于管理。这时可以在/etc/sudoers.d/ 下创建子目录。例如针对 测试部门的员工进行授权,可以创建/etc/sudoers.d/test;针对hr部门的员工进行授权,可以创建/etc/sudoers.d/hr。便于分类管理。

[root@localhost ~]# vim /etc/sudoers.d/test          //创建子目录
 zhangsan  ALL=(root)  /bin/mount
 [root@localhost ~]# chmod 440 /etc/sudoers.d/test    //设置权限,加固安全
 [root@localhost ~]# ll /etc/sudoers.d/test
 -r--r----- 1 root root 33 3月   7 17:51 /etc/sudoers.d/test
复制代码


网络异常,图片无法展示
|


注:

如果允许用户使用sudoedit命令,则该用户能够修改配置文件/etc/sudoers。变相变成管理员,十分危险,建议不要设置该命令。

[root@localhost sudoers.d]#vim /etc/sudoers.d/hr
 lisi ALL=(root)  sudoedit
 [root@localhost ~]#su lisi
 [lisi@localhost root]$ sudoedit /etc/sudoers   //sudoedit可以修改配置文件,十分危险
复制代码


2.2.4 查看sudo操作记录

  • 需要启用 Default logfile 配置
  • 默认日志文件:/var/log/sudo
[root@localhost log]# visudo          //修改配置文件
-----------------------------
Default logfile="/var/log/sudo"       //在最后一行添加 Default logfile 配置
复制代码


网络异常,图片无法展示
|


测试查看日志是否正常记录:

[root@localhost ~]# sudo -u nancy touch /tmp/f2.txt     //以nancy用户的身份创建文件
[root@localhost ~]# tail -4 /var/log/sudo               //日志成功记录sudo操作
Mar 12 23:12:06 : root : TTY=pts/0 ; PWD=/root ; USER=nancy ; COMMAND=/bin/touch
    /tmp/f1.txt
Mar 12 23:13:49 : root : TTY=pts/0 ; PWD=/root ; USER=nancy ; COMMAND=/bin/touch
    /tmp/f2.txt
复制代码


网络异常,图片无法展示
|


2.3 PAM安全认证

PAM:Pluggable Authentication Modules,插件式的验证模块,Sun公司于1995 年开发的一种与认证相关的通用框架机制。PAM 只关注如何为服务验证用户的 API,通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序一种认证框架,自身不做认证。

官网:www.linux-pam.org/

[root@localhost ~]#rpm -qi pam     //查看当前系统pam
 [root@localhost ~]#rpm -ql pam     //查看模块
 [root@localhost ~]#ls /usr/lib64/security/*.so|wc -l   //60个模块是二进制文件,不会直接修改
 60
 [root@localhost ~]#ls /etc/security/    //和上面的模块配合使用,有些比较简单的模块没有配置文件
 access.conf       console.perms.d  namespace.d     sepermit.conf
 chroot.conf       group.conf       namespace.init  time.conf
 console.apps      limits.conf      opasswd
 console.handlers  limits.d         pam_env.conf
 console.perms     namespace.conf   pwquality.conf
 #我们去修改配置文件
 /etc/security
 /etc/pam.d/*
 [root@localhost ~]#cd /etc/pam.d/   //这里的文件是应用程序怎么调用模块的
 [root@localhost pam.d]#ls
 atd                     login              smtp
 chfn                    other              smtp.postfix
 chsh                    passwd             sshd
 config-util             password-auth      sssd-shadowutils
 crond                   password-auth-ac   su
 cups                    pluto              sudo
 fingerprint-auth        polkit-1           sudo-i
 fingerprint-auth-ac     postlogin          su-l
 gdm-autologin           postlogin-ac       system-auth
 gdm-fingerprint         ppp                system-auth-ac
 gdm-launch-environment  remote             systemd-user
 gdm-password            runuser            vlock
 gdm-pin                 runuser-l          vmtoolsd
 gdm-smartcard           setup              vsftpd
 ksu                     smartcard-auth     xserver
 liveinst                smartcard-auth-ac
 [root@localhost pam.d]#cat /etc/pam.d/sshd    //文件类型
 #%PAM-1.0
 auth       required pam_sepermit.so
 auth       substack     password-auth
 auth       include      postlogin
 # Used with polkit to reauthorize users in remote sessions
 -auth      optional     pam_reauthorize.so prepare
 account    required     pam_nologin.so
 account    include      password-auth
 password   include      password-auth
 # pam_selinux.so close should be the first session rule
 session    required     pam_selinux.so close
 session    required     pam_loginuid.so
 # pam_selinux.so open should only be followed by sessions to be executed in the user context
 session    required     pam_selinux.so open env_params
 session    required     pam_namespace.so
 session    optional     pam_keyinit.so force revoke
 session    include      password-auth
 session    include      postlogin
 # Used with polkit to reauthorize users in remote sessions
 -session   optional     pam_reauthorize.so prepare
复制代码


网络异常,图片无法展示
|


PAM提供了对所有服务进行认证的中央机制,适用于本地登录,远程登录,如:telnet,rlogin,fsh,ftp,点对点协议PPP,su等应用程序中,系统管理员通过PAM配置文件来制定不同应用程序的不同认证策略;应用程序开发者通过在服务程序中使用PAM API(pam_xxxx( ))来实现对认证方法的调用;而PAM服务模块的开发者则利用PAM SPI来编写模块(主要调用函数pam_sm_xxxx( )供PAM接口库调用,将不同的认证机制加入到系统中;PAM接口库(libpam)则读取配置文件,将应用程序和相应的PAM服务模块联系起来。重复利用别人的开发的功能,不必自己开发,会话,密码验证等功能,已经做好了调用下就可以了未来通用性,所以有了pam框架。


2.3.1 PAM相关文件

  • 包名: pam
  • 模块文件目录:/lib64/security/*.so
  • 特定模块相关的设置文件:/etc/security/
  • 应用程序调用PAM模块的配置文件
  1. 主配置文件:/etc/pam.conf,默认不存在,一般不使用主配置
  2. 为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME
  3. 注意:如/etc/pam.d存在,/etc/pam.conf将失效

2.3.2 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回传的结果决定下一个动作(重新输入密码或者通过验证)
复制代码


专用配置文件/etc/pam.d/ 格式:

application:指服务名,如:telnet、login、ftp等,服务名字“OTHER”代表所有没有在该文件中明确
 配置的其它服务
 type:指模块类型,即功能
 control :PAM库该如何处理与该服务相关的PAM模块的成功或失败情况,一个关健词实现
 module-path: 用来指明本模块对应的程序文件的路径名
 Arguments: 用来传递给该模块的参数
复制代码


配置文件/etc/pam.d/每一行都是一个独立的认证过程。

每一行可以区分为三个字段: 认证类型 、控制类型 、PAM 模块及其参数 。具体如下:

认证类型(module-type):

  • 认证管理(authentication management):接受用户名和密码,进而对该用户的密码进行认证;
  • 帐户管理(account management):检查帐户是否被允许登录系统,帐号是否已经过期,帐号的登录是否有时间段的限制等;
  • 密码管理(password management):用户修改密码时密码复杂度检查机制等功能;
  • 会话管理(session management):主要是提供对会话的管理和记账。
  • -type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用。

控制类型: 也可以称做 Control Flags,用于 PAM 验证类型的返回结果。

  • 1)required 验证失败时仍然继续,但返回 Fail。
  • 2)requisite 验证失败则立即结束整个验证过程,返回 Fail 。
  • 3)sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续。
  • 4)optional 不用于验证,只是显示信息(通常用于 session 类型)。

PAM 模块及其参数:

  • 默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。 同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。


3 系统引导和登录控制


3.1 开关机安全控制

3.1.1 调整BIOS引导设置原则

  • 将第一引导设备设为当前系统所在硬盘;
  • 禁止从其他设备(光盘、 U盘、网络)引导启动系统;
  • 将安全级别设为setup,并设置管理员密码。
    禁用重启热键:Ctrl+Alt+Delete,避免因用户误操作重启。

3.1.2 GRUB限制

  • 未经授权禁止修改启动参数
  • 未经授权禁止进入指定系统

通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁。可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。

3.1.3 GRUB菜单加密的实现

定义每个菜单项的所有脚本都存放在/etc/grub.d目录中,这些脚本的名称必须有两位的数字前缀,其目的是构建GRUB 2菜单时定义脚本的执行顺序以及相应菜单项的顺序,比如00_header文件首先被读取。


文件 描述
00_header 设置grub默认参数
10_linux 系统中存在多个linux版本
20_ppc_terminfo 设置tty控制台
30_os_prober 设置其他分区中的系统(硬盘中有多个操作系统时设置)
40_custom和41_custom 用户自定义的配置


设置GRUB 2加密

由于GRUB 2负责引导linux系统,其作为系统中的第一道屏障的安全性非常重要,对GRUB 2进行加密可以实现安全性。

在默认情况下,GRUB 2对所有可以在物理上进入控制台的人都是可访问的。任何人都可以选择并编辑任意菜单项,并且可以直接访问GRUB命令行。要启用认真支持,必须将环境变量超级用户设置为一组用户名(可以使用空格、逗号、分号作为分隔符)这样就只允许超级用户使用GRUB命令行、编辑菜单项以及执行任意菜单项。

GRUB 2密码支持以下两种格式:

  • 明文密码:密码数据没有经过加密,安全性差。
  • PBKDF2加密密码:密码经过PBKDF2哈希算法进行加密,在文件中存储的是加密后的密码数据,安全性较高。

为GRUB菜单设置密码的两种方式:

  • CentOS 7系统中,直接使用 “grub2-setpasswd” 命令设置grub密码;
  • CentOS 6系统中,先要使用grub2-mkpasswd-pbkdf2命令生成PBKDF2加密口令,然后在/etc/grub.d/00_header文件中添加超级用户和PBKDF2加密口令,最后使用grub2-mkconfig命令生成grub配置文件。(/etc/grub.d/00_header是开机时第一个启动的文件)

方法一:

CentOS 7系统中,直接使用 “grub2-setpasswd” 命令设置grub密码。

[root@localhost ~]# grub2-setpassword    //使用命令直接设置GRUB密码
 Enter password:                          //输入密码
 Confirm password:                        //确认密码
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


方法二:

CentOS 6系统中,

先要使用grub2-mkpasswd-pbkdf2命令生成PBKDF2加密口令,

然后在/etc/grub.d/00_header文件中添加超级用户和PBKDF2加密口令,

最后使用grub2-mkconfig命令生成grub配置文件。

# 步骤1.备份两个配置文件
 [root@localhost ~]# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
 [root@localhost ~]# cp /etc/grub.d/00_header /etc/grub.d/00_header.bak
 # 步骤2.生成PBKDF2加密口令
 [root@localhost ~]# grub2-mkpasswd-pbkdf2   //使用哈希算法生成密码
 输入口令:
 Reenter password: 
 PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.D9BDDD44312FD353436E03F2F73F643A0DD6FB59D989ECAAADB911E95846A477137A73DCEA248BFD6FF02BE2D52052E3790AEE175B10AA7634C6B66D1D9173C7.B15B5DC77367D1960086506C3E39A718477F1D326B6548577D992BB383DBA0E3AF7EFD3E67DD768E33B391C6AC1FAC1C6BB4CFF492D2046A651DF5986ACAE35A
 # 步骤3.编辑配置文件/etc/grub.d/00_header,将加密口令添加进文件。注意复制口令时不要有空格。
 [root@localhost ~]# vim /etc/grub.d/00_header
 -------------------------------
 cat <<EOF
 set superusers="root"       //设置登录用户
 password_pbkdf2 root grub.pbkdf2.sha512.10000.D9BDDD44312FD353436E03F2F73F643A0DD6FB59D989ECAAADB911E95846A477137A73DCEA248BFD6FF02BE2D52052E3790AEE175B10AA7634C6B66D1D9173C7.B15B5DC77367D1960086506C3E39A718477F1D326B6548577D992BB383DBA0E3AF7EFD3E67DD768E33B391C6AC1FAC1C6BB4CFF492D2046A651DF5986ACAE35A
 EOF
 # 步骤4.使用 grub2-mkconfig 命令生成新的 grub.cfg 配置文件。
 [root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
 Generating grub configuration file ...
 Found linux image: /boot/vmlinuz-3.10.0-693.el7.x86_64
 Found initrd image: /boot/initramfs-3.10.0-693.el7.x86_64.img
 Found linux image: /boot/vmlinuz-0-rescue-869778d6675742a5968d2ea8c0e087b2
 Found initrd image: /boot/initramfs-0-rescue-869778d6675742a5968d2ea8c0e087b2.img
 done
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


相关文章
|
19天前
|
监控 安全 Linux
【专栏】Linux SSH 的安全对于远程管理至关重要,这几个小妙招安排上!
【4月更文挑战第28天】在数字化时代,Linux SSH 的安全对于远程管理至关重要。增强 SSH 安全包括:使用强密码,调整 SSH 配置文件,尤其是端口号和认证方式;采用密钥认证代替密码;限制登录用户,禁止密码登录;使用防火墙限制访问;定期更新系统和软件。此外,通过日志监控、入侵检测系统及及时应对攻击来提升安全监控。保持对安全知识的学习和更新,结合最佳实践,是保障 SSH 安全的关键。记得安全是个持续过程,时刻保持警惕!
|
19天前
|
机器学习/深度学习 自然语言处理 Linux
【专栏】Linux 中的机器学习:Whisper适用于语音助手、翻译等领域,随着技术发展,其应用前景广阔
【4月更文挑战第28天】本文探讨了在Linux环境下,先进自动语音识别系统Whisper的运用与实现高效ASR。Whisper基于PyTorch,支持多语言识别,具有高准确性和实时性。文中介绍了安装配置Whisper的步骤,包括安装依赖、下载代码、配置环境变量及编译安装。通过数据准备、模型训练和识别,可实现语音识别功能。Whisper适用于语音助手、翻译等领域,随着技术发展,其应用前景广阔。
|
7天前
|
运维 监控 Linux
提升系统稳定性:Linux服务器性能监控与故障排查实践深入理解与实践:持续集成在软件测试中的应用
【5月更文挑战第27天】在互联网服务日益增长的今天,保障Linux服务器的性能和稳定性对于企业运维至关重要。本文将详细探讨Linux服务器性能监控的工具选择、故障排查流程以及优化策略,旨在帮助运维人员快速定位问题并提升系统的整体运行效率。通过实际案例分析,我们将展示如何利用系统资源监控、日志分析和性能调优等手段,有效预防和解决服务器性能瓶颈。
|
19天前
|
Linux 编译器 调度
xenomai内核解析--双核系统调用(二)--应用如何区分xenomai/linux系统调用或服务
本文介绍了如何将POSIX应用程序编译为在Xenomai实时内核上运行的程序。
61 1
xenomai内核解析--双核系统调用(二)--应用如何区分xenomai/linux系统调用或服务
|
19天前
|
消息中间件 存储 Linux
linux实时应用如何printf输出不影响实时性?
本文探讨了Linux实时任务中为何不能直接使用`printf(3)`,并介绍了实现不影响实时性的解决方案。实时任务的执行时间必须确定且短,但`printf(3)`的延迟取决于多个因素,包括用户态glibc缓冲、内核态TTY驱动和硬件。为确保实时性,通常将非实时IO操作交给低优先级任务处理,通过实时进程间通信传递信息。然而,即使这样,`printf(3)`在glibc中的实现仍可能导致高优先级任务阻塞。Xenomai 3提供了一个实时的`printf()`实现,通过libcobalt库在应用编译链接时自动处理,预分配内存,使用共享内存和线程特有数据来提高效率和实时性。
33 0
linux实时应用如何printf输出不影响实时性?
|
19天前
|
安全 Linux Shell
Linux常用命令详解与实战应用
【5月更文挑战第7天】本文详述了Linux常用命令,包括文件与目录操作(ls, cd, pwd, cp, mv, rm)、文本处理(cat, grep, sed)及系统管理(top, df, du)命令。通过实例演示了如何使用这些命令,帮助读者理解和掌握Linux操作,提升系统管理效率。学习和熟练运用这些基础命令,是高效使用Linux的关键。
|
19天前
|
Linux
Linux MBR扇区故障 引导修复
Linux MBR扇区故障 引导修复
|
19天前
|
Linux Shell 调度
【Linux系列】fork( )函数原理与应用详解——了解【父子进程及其特性】(代码演示,画图帮助理解,思维导图,精简)(11)
【Linux系列】fork( )函数原理与应用详解——了解【父子进程及其特性】(代码演示,画图帮助理解,思维导图,精简)(11)
|
19天前
|
存储 缓存 Linux
linux几种典型应用对系统资源使用的特点
【4月更文挑战第22天】几种典型应用对系统资源使用的特点
28 1
|
19天前
|
Linux Shell 应用服务中间件
LINUX的应用与实践
LINUX的应用与实践
22 1