Linux安全技术:PAM与AppArmor深度解析
1. PAM(可插拔认证模块)技术详解
1.1 PAM时间限制模块(pam_time)
PAM模块中使用
time.conf
的是
pam_time
。可以通过以下命令查看系统事件配置文件中
pam_time
模块的使用情况:
$ grep -nr "pam_time" /etc/pam.d/
示例输出如下:
/etc/pam.d/su:29:# account requisite pam_time.so
/etc/pam.d/login:78:# account requisite pam_time.so
如果
pam_time
未列出,需要修改
/etc/pam.d/common-auth
文件,在配置文件的“account”部分顶部添加以下内容,使PAM强制执行时间限制:
account required pam_time.so
1.2 使用PAM强化密码策略
当修改密码时,
pam_cracklib
模块会参与其中。该模块会提示用户输入密码,并根据系统字典和一组规则检查密码强度。使用
pam_cracklib
可以检查新密码是否满足以下条件:
- 是否为字典中的单词
- 是否为回文
- 是否只是旧密码改变大小写
- 是否与旧密码过于相似
- 是否太短
- 是否是旧密码的旋转版本
- 是否使用了相同的连续字符
- 是否以某种形式包含用户名
可以通过修改
/etc/pam.d/common-password
文件来更改
pam_cracklib
检查新密码的规则。查看
/etc/pam.d/passwd
文件:
$ cat /etc/pam.d/passwd
文件内容如下:
#
# The PAM configuration file for the Shadow 'passwd' service
#
@include common-password
查看
/etc/pam.d/common-password
文件的当前设置:
$ cat /etc/pam.d/common-password
文件内容如下:
# /etc/pam.d/common-password - password-related modules common to
all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of modules that define the services to be
# used to change user passwords. The default is pam_unix.
# here are the per-package modules (the "Primary" block)
password [success=1 default=ignore] pam_unix.so
obscure sha512
# here's the fallback if no module succeeds
password requisite pam_deny.so
password required pam_permit.so
# and here are more per-package modules (the "Additional" block)
password optional
1.3 使用PAM鼓励使用sudo
为了跟踪个人对root账户的使用情况并避免抵赖情况,应限制
su
命令的使用,强制使用
sudo
。如果组织有这样的策略,可以通过取消
/etc/pam.d/su
文件中相应行的注释来实现:
$ cat /etc/pam.d/su
文件部分内容如下:
#
# The PAM configuration file for the Shadow 'su' service
#
auth sufficient pam_rootok.so
# Uncomment this if you want members of a specific group to not
# be allowed to use su at all.
# auth required pam_wheel.so deny group=nosu
session required pam_env.so readenv=1
session required pam_env.so readenv=1 envfile=/etc/
default/locale
session optional pam_mail.so nopen
session required pam_limits.so
@include common-auth
@include common-account
@include common-session
取消注释
# auth required pam_wheel.so deny group=nosu
即可。
1.4 获取PAM更多信息
PAM是Linux系统上丰富且通用的安全工具。可以通过以下方式获取更多信息:
- 使用
man pam.conf
命令获取PAM配置文件的详细信息
- 在命令行输入
ls /lib/x86_64-linux-gnu/security/
查看系统上所有可用的PAM模块。要获取每个PAM模块的更多信息,输入
man pam_module_name
(注意去掉
.so
文件扩展名),例如
man pam_lastlog
了解
pam_lastlog.so
模块
- 还可以通过以下网站获取PAM的额外信息:
- 官方Linux - PAM网站:www.linux - pam.org
- Linux - PAM系统管理员指南:www.linux - pam.org/Linux - PAM - html/Linux - PAM_SAG.html
- PAM模块参考:www.linux - pam.org/Linux - PAM - html/sag - module - reference.html
1.5 PAM相关练习
以下练习可测试对密码学工具和PAM的使用知识,假设运行的是Ubuntu Linux系统:
1. 使用
gpg
实用程序和密码短语加密文件
2. 使用
gpg
实用程序生成公钥环
3. 列出生成的密钥环
4. 使用
gpg
实用程序加密文件并添加数字签名
5. 访问Ubuntu下载页面(ubuntu.com),选择一个版本下载,下载完成后验证镜像
6. 使用
which su
命令确定
su
命令的完整文件名,然后确定Linux系统上的
su
命令是否支持PAM
7. 检查
su
命令是否有PAM配置文件,若有,在屏幕上显示配置文件并列出它使用的PAM上下文
8. 在屏幕上列出系统上的各种PAM模块
9. 查找系统上的PAM“other”配置文件,检查其是否存在以及是否强制执行隐式拒绝
10. 查找PAM限制配置文件,检查是否有防止系统发生分叉炸弹的设置
2. AppArmor安全增强技术
2.1 AppArmor概述
AppArmor是基于名称的强制访问控制(MAC)安全模型,目前由Canonical(Ubuntu背后的公司)支持。自2010年发布的Linux内核2.6.36版本起就已包含AppArmor。它与Red Hat的SELinux满足相似的安全需求,但复杂度显著降低。
2.2 AppArmor工作原理
AppArmor是部署在Linux之上的安全增强模块,默认安装并激活。与SELinux不同,用户可能使用Ubuntu多年都未意识到AppArmor的存在。传统的Linux功能包括像对象权限这样的自主访问控制(DAC),这种权限是自主的,因为具有合法访问资源权限的实体(如用户)可以将该访问权限扩展到其他实体。当担心这种权力可能被滥用(例如黑客执行特权升级攻击)时,可能需要实施强制访问控制(MAC)。MAC应用于进程而非资源本身,以确保无论哪个实体处于活动状态,都不可能将权限扩展到超出预期范围。
2.3 AppArmor配置文件与模式
任何在安装时或安装后获得AppArmor配置文件的Linux程序可以以以下三种方式使用:
-
非活动模式
:无论如何配置,都不会限制任何操作
-
抱怨模式
:虽然不会限制任何操作,但会将违反当前设置的情况报告给日志系统,这是在投入生产前测试配置的好方法
-
强制模式
:任何违反配置文件设置的操作都将被阻止
AppArmor的配置文件位于
/etc/apparmor/
目录下:
$ ls /etc/apparmor
输出如下:
easyprof.conf logprof.conf parser.conf subdomain.conf
init notify.conf severity.db
大多数AppArmor管理工作在
/etc/apparmor.d/
目录下的配置文件中进行,这些文件以程序二进制文件的位置命名。例如,LibreOffice的主配置文件位于
/etc/apparmor.d/usr.lib.libreoffice.program.soffice.bin
。可以使用
apparmor - utils
包中安装的程序来管理AppArmor。安装
apparmor - utils
时,建议同时安装一些有用的工具:
# apt install apparmor-utils apparmor-easyprof apparmor-notify
2.4 更改AppArmor配置文件状态
要更改配置文件的状态,可以对配置文件运行
aa - enforce
或
aa - complain
命令。例如,将Apache Web服务器服务设置为强制或抱怨模式:
# aa-enforce /etc/apparmor.d/usr.sbin.apache2
# aa-complain /etc/apparmor.d/usr.sbin.apache2
也可以一次性重置所有配置文件的模式:
# aa-complain /etc/apparmor.d/*
# aa-enforce /etc/apparmor.d/*
可以使用
apparmor_status
命令快速查看当前加载的所有配置文件的状态:
# apparmor_status
示例输出如下:
apparmor module is loaded.
28 profiles are loaded.
28 profiles are in enforce mode.
/snap/snapd/7264/usr/lib/snapd/snap-confine
/snap/snapd/7264/usr/lib/snapd/snap-confine//mount-namespace-
capture-helper
/usr/bin/man
/usr/lib/NetworkManager/nm-dhcp-client.action
/usr/lib/NetworkManager/nm-dhcp-helper
/usr/lib/connman/scripts/dhclient-script
/usr/lib/snapd/snap-confine
/usr/lib/snapd/snap-confine//mount-namespace-capture-helper
/usr/sbin/tcpdump
/{,usr/}sbin/dhclient
lsb_release
man_filter
man_groff
nvidia_modprobe
nvidia_modprobe//kmod
snap-update-ns.lxd
snap.lxd.activate
snap.lxd.benchmark
snap.lxd.buginfo
snap.lxd.check-kernel
snap.lxd.daemon
snap.lxd.hook.configure
snap.lxd.hook.install
snap.lxd.hook.remove
snap.lxd.lxc
snap.lxd.lxc-to-lxd
snap.lxd.lxd
snap.lxd.migrate
0 profiles are in complain mode.
0 processes have profiles defined.
0 processes are in enforce mode.
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.
2.5 AppArmor日志查看
AppArmor事件会记录到常规的Linux日志系统中。通过
dmesg
命令查询内核环形缓冲区可以查看系统中AppArmor的相关事件:
$ dmesg | grep apparmor
dmesg
中典型的拒绝消息示例如下:
[ 234.104868] audit: type=1400 audit(1588030849.305:236):
apparmor="DENIED" operation="open" profile="/usr/bin/evince" name="/
etc/xdg/mimeapps.list" pid=10160 comm="evince" requested_mask="r"
denied_mask="r" fsuid=1000 ouid=0
2.6 实际操作AppArmor
2.6.1 简单配置文件示例(ping命令)
以
/etc/apparmor.d/bin.ping
文件管理的配置文件为例,该文件控制
ping
命令的行为:
#include <tunables/global>
profile ping /{usr/,}bin/{,iputils-}ping flags=(complain) {
#include <abstractions/base>
#include <abstractions/consoles>
#include <abstractions/nameservice>
capability net_raw,
capability setuid,
network inet raw,
network inet6 raw,
/{,usr/}bin/{,iputils-}ping mixr,
/etc/modules.conf r,
# Site-specific additions and overrides. See local/README for details.
#include <local/bin.ping>
}
#include
行用于包含外部文档中维护的通用策略语句。
tunables/global
引用
/etc/apparmor.d/tunables/
目录下
globals
文件中引用的文件,示例如下:
# All the tunables definitions that should be available to every profile
# should be included here
#include <tunables/home>
#include <tunables/multiarch>
#include <tunables/proc>
#include <tunables/alias>
#include <tunables/kernelvars>
#include <tunables/xdg-user-dirs>
#include <tunables/share>
ping
文件的
profile
行定义了程序二进制文件的路径(
/bin/ping
)并设置了模式(这里是
complain
)。
/etc/apparmor.d/abstractions/
目录下的一些文件也被包含进来,这些文件包含了控制
ping
命令工作方式的基本约束。例如,
/etc/apparmor/abstractions/base
文件中的这一行:
@{PROC}/meminfo r,
r
表示
ping
命令应该能够读取
/proc/meminfo
文件的内容,但该文件的实际位置由
/etc/apparmor.d/tunables/proc
文件的内容决定。
2.6.2 新软件集成AppArmor示例(certspotter)
以下是将
certspotter
软件集成到AppArmor的步骤:
1. 安装
certspotter
包:
# apt install certspotter
-
在主目录下创建
certspotter目录和watchlist文件,并添加要监控的域名:
$ mkdir ~/.certspotter
$ touch ~/.certspotter/watchlist
$ echo "wiley.com" >> ~/.certspotter/watchlist
-
运行
certspotter:
$ certspotter
此时可能会出现错误:
certspotter: ctlog-gen2.api.venafi.com: 2020/04/28 18:32:16 Error
retrieving STH from log: Get https://ctlog-gen2.api.venafi.com/ct/
v1/get-sth: dial tcp: lookup ctlog-gen2.api.venafi.com: No address
associated with hostname
-
使用
aa - easyprof生成简单的配置文件并打印到屏幕:
$ aa-easyprof /usr/bin/certspotter
输出如下:
# vim:syntax=apparmor
# AppArmor policy for certspotter
# ###AUTHOR###
# ###COPYRIGHT###
# ###COMMENT###
#include <tunables/global>
# No template variables specified
"/usr/bin/certspotter" {
#include <abstractions/base>
# No abstractions specified
# No policy groups specified
# No read paths specified
# No write paths specified
}
-
将生成的配置文件保存并移动到
/etc/apparmor.d/目录,然后使用apparmor_parser将配置文件添加到内核:
$ aa-easyprof /usr/bin/certspotter > ~/usr.bin.certspotter
# mv ~/usr.bin.certspotter /etc/apparmor.d/
# apparmor_parser -r /etc/apparmor.d/usr.bin.certspotter
-
再次运行
certspotter,可能会失败,错误信息如下:
certspotter: /home/ubuntu/.certspotter/watchlist: open /home/ubuntu/
.certspotter/watchlist: permission denied
-
将配置文件设置为抱怨模式并再次运行
certspotter:
# aa-complain /etc/apparmor.d/usr.bin.certspotter
$ certspotter
-
使用
aa - logprof程序扫描配置文件并提供可能的更改建议,根据提示操作:
# aa-logprof
- 手动添加设置到配置文件,防止恶意用户访问私人内容:
# nano /etc/apparmor.d/usr.bin.certspotter
文件内容修改如下:
/usr/bin/certspotter flags=(complain) {
#include <abstractions/base>
#include <abstractions/lxc/container-base>
deny @{HOME}/Documents/ rw,
deny @{HOME}/Pictures/ rw,
deny @{HOME}/Videos/ rw,
deny @{HOME}/.config/ rw,
deny @{HOME}/.ssh/ rw,
}
- 重新加载策略:
# apparmor_parser -r /etc/apparmor.d/usr.bin.certspotter
可以通过
/etc/apparmor/
目录下的
parser.conf
文件控制解析器的行为。
AppArmor为Linux提供了安全增强功能,虽然默认安装并预配置,但可能需要根据独特的安全需求进行一些修改。每个配置文件都有自己的配置步骤和设置选项。
3. 总结与回顾
3.1 PAM与AppArmor要点总结
| 技术 | 特点 | 配置文件 | 主要功能 |
|---|---|---|---|
| PAM | 丰富通用的安全工具,可创建认证策略 |
/etc/pam.d/
下的多个文件
| 强制执行时间限制、强化密码策略、鼓励使用sudo等 |
| AppArmor | 基于名称的强制访问控制安全模型,复杂度低 |
/etc/apparmor/
和
/etc/apparmor.d/
目录下的文件
| 对进程实施强制访问控制,增强系统安全性 |
3.2 操作流程回顾
PAM操作流程
graph LR
A[检查pam_time使用情况] --> B{是否列出}
B -- 否 --> C[修改common-auth文件]
B -- 是 --> D[无需修改]
E[修改密码] --> F[pam_cracklib检查密码强度]
G[限制su使用] --> H[取消su文件中相应行注释]
I[获取PAM信息] --> J[使用man命令或访问网站]
AppArmor操作流程
graph LR
A[安装apparmor-utils及相关工具] --> B[创建或修改配置文件]
B --> C{选择模式}
C -- 非活动模式 --> D[不限制操作]
C -- 抱怨模式 --> E[报告违规但不限制操作]
C -- 强制模式 --> F[阻止违规操作]
G[查看日志] --> H[使用dmesg命令]
I[新软件集成] --> J[生成配置文件并添加到内核]
J --> K[测试并调整配置]
3.3 注意事项
在学习和使用PAM和AppArmor时,需要注意以下几点:
-
测试先行
:在生产环境中实施任何修改之前,务必在测试Linux系统或虚拟化Linux系统上进行测试,避免对生产系统造成影响。
-
配置文件管理
:PAM和AppArmor的配置文件较多,需要仔细管理和维护,确保配置的正确性。
-
日志分析
:定期查看日志,及时发现和处理安全事件,如AppArmor的拒绝消息,可能暗示着潜在的安全威胁。
4. 拓展与思考
4.1 技术拓展
-
PAM
:可以进一步研究PAM的其他模块,如
pam_lastlog、pam_mail等,了解它们的功能和使用场景,根据实际需求进行配置。 - AppArmor :探索如何为更多的软件创建和优化AppArmor配置文件,提高系统的整体安全性。例如,对于一些关键服务,如数据库服务、Web服务等,制定更严格的访问控制策略。
4.2 安全策略制定
结合PAM和AppArmor的特点,制定适合企业或个人的安全策略。例如,在企业环境中,可以通过PAM限制用户的登录时间和密码强度,同时使用AppArmor对关键进程进行严格的访问控制,防止恶意攻击和数据泄露。
4.3 持续学习与实践
Linux安全技术不断发展,需要持续学习和实践,跟上技术的发展步伐。可以关注相关的技术论坛、博客和开源项目,参与社区讨论,与其他安全爱好者交流经验,不断提升自己的安全技能。
总之,PAM和AppArmor是Linux系统中重要的安全工具,通过合理配置和使用,可以有效提高系统的安全性。希望本文能够帮助读者更好地理解和应用这两种技术,为Linux系统的安全保驾护航。
PAM与AppArmor安全技术解析
超级会员免费看
50

被折叠的 条评论
为什么被折叠?



