4. Security
在计算环境中,安全性有多种形式。经过一些初步的讨论,本章给出了三种不同类型的安全的例子:访问、预防和检测。
用户的访问通常由登录或设计用于处理登录功能的应用程序来处理。在本章中,我们将展示如何通过使用PAM模块设置策略来增强登录功能。通过网络的访问也可以通过iptables(通常称为防火墙)设置的策略来保护。网络安全服务(NSS)和网景可移植运行时(NSPR)库可以在许多需要它们的应用程序之间安装和共享。对于不能提供最佳安全性的应用程序,可以使用Stunnel包将应用程序守护进程封装在SSL隧道中。
像GnuPG这样的应用程序可以帮助防止像木马这样的破坏,特别是确认签名包的能力,它可以在打包器创建tarball之后识别对它的修改。
最后,我们将使用一个包进行检测,该包存储关键文件(由管理员定义)的“签名”,然后重新生成这些“签名”并比较已更改的文件。
4.1 Vulnerabilities
关于vulnerabilities
所有的软件都有bug。有时,漏洞可以被利用,例如允许用户获得增强的特权(可能获得根shell,或者只是访问或删除其他用户的文件),或者允许远程站点使应用程序崩溃(拒绝服务),或者用于窃取数据。这些错误被标记为漏洞。
漏洞被记录的主要地方是cve.mitre.org。不幸的是,许多漏洞号(CVE-yyyy-nnnn)最初只是在发行版开始发布修复程序时才被标记为“保留”。此外,一些漏洞适用于configure选项的特定组合,或者仅适用于早在BLFS中更新过的旧版本的包。
BLFS不同于发行版——没有BLFS安全团队,编辑只有在漏洞公开之后才会意识到它们。有时候,一个有漏洞的包很长时间都不会在书中更新。可以在Trac系统中记录问题,这可能会加快解决速度。
理想情况下,BLFS修复漏洞的正常方法是将该书更新为软件包的新固定版本。有时甚至在漏洞为公众所知之前就发生了这种情况,因此无法保证它将在Changelog中显示为漏洞修复。或者,一个sed命令,或者一个从发行版中获取的补丁,可能是合适的。
底线是您要对自己的安全负责,并评估任何问题的潜在影响。
编辑现在为BLFS(和LFS)中的包发布安全建议,可以在BLFS Security Advisories上找到,并根据上游报告或nvd.nist.gov上显示的内容对严重性进行分级,如果有详细信息的话。
为了跟踪正在发现的内容,您可能希望遵循一个或多个发行版的安全声明。例如,Debian有Debian security。Fedora的安全链接在the Fedora wiki。有关Gentoo linux安全公告的详细信息请参见Gentoo security。最后,Slackware的安全公告档案在Slackware security。
最普遍的英文来源可能是the Full Disclosure Mailing List,但请阅读该页面的评论。如果您使用其他语言,您可能更喜欢其他网站,如heise.de(德语)或cert.hr(克罗地亚语)。这些不是特定于linux的。lwn.net也为订阅者提供每日更新(2周后免费访问数据,但他们的漏洞数据库在lwn.net/Alerts是不受限制的)。
对于某些软件包,订阅它们的“公告”列表将提供更新版本的即时消息。
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/vulnerabilities
4.2 make-ca-1.12
简介make-ca
公钥基础设施(PKI,Public Key Infrastructure)是一种在不受信任的网络上验证未知实体真实性的方法。PKI的工作原理是建立信任链,而不是明确地信任每个单独的主机或实体。为了使远程实体提供的证书可信,该证书必须提供一个完整的证书链,该证书链可以使用受本地计算机信任的证书颁发机构(CA)的根证书进行验证。
与CA建立信任关系涉及验证公司地址、所有权、联系信息等内容,并确保CA遵循最佳实践,例如由独立调查人员进行定期安全审计,并维护始终可用的证书撤销列表。这远远超出了BLFS的范围(因为它适用于大多数Linux发行版)。这里提供的证书存储取自Mozilla基金会,他们建立了非常严格的包含策略here。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://github.com/lfs-book/make-ca/releases/download/v1.12/make-ca-1.12.tar.xz
-
下载大小: 36 KB
-
下载MD5校验和: 67e0b911e73a859fc326171c5153d455
-
预计所需磁盘空间: 6.9 MB (与所有运行时深度)
-
预计构建时间: 0.1 SBU (与所有运行时深度)
make-ca 依赖
必要
p11-kit-0.24.1 (在运行时从trust anchors生成证书存储所需)
可选 (运行时)
nss-3.88.1 (生成共享的NSSDB)
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/make-ca
安装make-ca
make-ca脚本将下载并处理certdata.txt文件中包含的证书,用作p11-kit-0.24.1信任模块的信任锚。此外,它将生成BLFS应用程序使用的系统证书存储(如果系统上存在推荐的和可选的应用程序)。存储在/etc/ssl/local中的任何本地证书都将被导入到信任锚点和生成的证书存储中(覆盖Mozilla的信任)。此外,任何修改的信任值将在任何更新之前从信任锚点复制到/etc/ssl/local,在使用p11-kit的trust实用程序操作信任存储时保留与Mozilla不同的自定义信任值。
要安装各种证书存储,首先将make-ca脚本安装到正确的位置。作为root用户:
make install &&
install -vdm755 /etc/ssl/local
作为root用户,在安装了p11-kit-0.24.1之后,下载证书源并使用以下命令准备系统使用:
注意
如果使用相同版本的certdata.txt再次运行脚本,例如,在升级make-ca时更新存储库,或者在安装必要的软件时添加额外的存储库,请将命令行中的-g开关替换为-r开关。如果是打包,运行make-ca –help查看所有可用的命令行选项。
/usr/sbin/make-ca -g
应该使用上述命令定期更新存储,可以手动更新,也可以通过systemd计时器更新。在/usr/lib/systemd/system/update-pki.timer处安装一个定时器,如果启用,它将每周检查更新。以root用户执行以下命令,启用systemd定时器:
systemctl enable update-pki.timer
配置 make-ca
对于大多数用户来说,不需要额外的配置,但是,make-ca提供的默认certdata.txt文件是从mozilla-release分支获得的,并经过修改以提供Mercurial版本。这将是大多数系统的正确版本。由于这样或那样的原因,可以使用该文件的其他几个变体,包括本书中随Mozilla产品附带的文件。例如,RedHat和OpenSUSE使用nss-3.88.1中包含的版本。其他上游下载可以在/etc/make-ca/make-ca.conf.dist中找到。只需将文件复制到/etc/make-ca.conf并进行适当的编辑。
关于 Trust 的争论
make-ca脚本可以识别三种信任类型:SSL/TLS、S/Mime和代码签名。对于OpenSSL,这些分别是serverAuth,emailProtection和codeSigning。如果省略三个信任参数中的一个,则既不信任证书,也不拒绝该角色的证书。使用OpenSSL或NSS的客户端遇到此证书将向用户显示警告。使用没有p11-kit支持的GnuTLS的客户端不知道受信任的证书。要将此CA包含到ca-bundle.crt,email-ca-bundle.crt或objsign-ca-bundle.crt文件(GnuTLS遗留包)中,它必须具有适当的信任参数。
添加其他CA证书
/etc/ssl/local目录可用于向系统信任存储中添加其他CA证书。此目录还用于存储由p11-kit-0.24.1在系统信任存储库中添加或修改的证书,以便在升级期间维护信任值。该目录下的文件必须为OpenSSL信任证书格式。从p11-kit-0.24.1使用trust实用程序导入的证书将利用x509扩展密钥使用值为系统锚点分配默认信任值。
如果需要覆盖信任值,或者需要从普通的PEM编码文件手动生成OpenSSL信任证书,则需要在openssl命令中添加trust参数,并生成新的证书。例如,使用CAcert根,如果您想要信任所有三个角色,下面的命令将创建适当的OpenSSL可信证书(在Wget-1.21.3安装后以root用户运行):
wget http://www.cacert.org/certs/root.crt &&
wget http://www.cacert.org/certs/class3.crt &&
openssl x509 -in root.crt -text -fingerprint -setalias "CAcert Class 1 root" \
-addtrust serverAuth -addtrust emailProtection -addtrust codeSigning \
> /etc/ssl/local/CAcert_Class_1_root.pem &&
openssl x509 -in class3.crt -text -fingerprint -setalias "CAcert Class 3 root" \
-addtrust serverAuth -addtrust emailProtection -addtrust codeSigning \
> /etc/ssl/local/CAcert_Class_3_root.pem &&
/usr/sbin/make-ca -r
覆盖 Mozilla Trust
有时,您可能不同意Mozilla包含特定的证书颁发机构。如果您想覆盖特定CA的默认信任,只需在/etc/ssl/local中创建现有证书的副本,并使用不同的信任参数。例如,如果你想不信任”Makebelieve_CA_Root”文件,运行以下命令:
openssl x509 -in /etc/ssl/certs/Makebelieve_CA_Root.pem \
-text \
-fingerprint \
-setalias "Disabled Makebelieve CA Root" \
-addreject serverAuth \
-addreject emailProtection \
-addreject codeSigning \
> /etc/ssl/local/Disabled_Makebelieve_CA_Root.pem &&
/usr/sbin/make-ca -r
在Python3中使用make-ca
当Python3被安装到LFS中时,它包含了pip3模块和来自Certifi模块的供应商证书。这是必要的,但这意味着无论何时使用pip3,它都可以引用这些证书,主要是在创建虚拟环境或一次性安装带有所有轮依赖项的模块时。
一般认为,系统管理员应该负责哪些证书是可用的。现在已经安装了make-ca-1.12和p11-kit-0.24.1并配置了make-ca,可以使pip3使用系统证书。
LFS中安装的供应商证书是创建Certifi的拉入版本时的快照。如果定期更新系统证书,会导致现有版本过期。
要在Python3中使用系统证书,你应该设置_PIP_STANDALONE_CERT来指向它们,例如bash shell:
export _PIP_STANDALONE_CERT=/etc/pki/tls/certs/ca-bundle.crt
警告
如果您创建了虚拟环境,例如在测试模块时,并且这些环境包括~/.local/lib/python3.11/中的请求和证书模块,那么这些本地模块将被使用而不是系统证书,除非您删除本地模块。
要将Python3中的系统证书与BLFS配置文件一起使用,请在您的系统或个人配置文件中添加以下变量:
mkdir -pv /etc/profile.d &&
cat > /etc/profile.d/pythoncerts.sh << "EOF"
# Begin /etc/profile.d/pythoncerts.sh
export _PIP_STANDALONE_CERT=/etc/pki/tls/certs/ca-bundle.crt
# End /etc/profile.d/pythoncerts.sh
EOF
内容
安装程序: make-ca
安装目录: /etc/ssl/{certs,local} 和 /etc/pki/{nssdb,anchors,tls/{certs,java}}
简要描述
make-ca 是一个shell脚本,它适应当前版本的certdata.txt,并准备将其用作系统信任存储。
4.3 CrackLib-2.9.8
简介CrackLib
CrackLib包包含一个库,用于通过将用户选择的密码与选择的单词列表中的单词进行比较来强制执行强密码。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://github.com/cracklib/cracklib/releases/download/v2.9.8/cracklib-2.9.8.tar.bz2
-
下载MD5校验和: a242301bad13421476db8eecbbc9536a
-
下载大小: 600 KB
-
预计所需磁盘空间: 6.7 MB
-
预计构建时间: 0.1 SBU
额外下载
- 英语国家推荐词汇表 (大小: 6.7 MB; md5sum: 94e9963e4786294f7fb0f2efd7618551): https://github.com/cracklib/cracklib/releases/download/v2.9.8/cracklib-words-2.9.8.bz2
还有其他可供下载的单词列表,例如,从https://wiki.skullsecurity.org/index.php/Passwords。CrackLib可以使用您选择安装的任意多或任意少的单词列表。
重要
用户倾向于根据口语中的常规单词设置密码,黑客们知道这一点。CrackLib的目的是使用从单词列表创建的字典在源端过滤掉这些糟糕的密码。要做到这一点,用于CrackLib的单词列表必须是单词和基于单词的击键组合的详尽列表,这些单词和击键组合可能被系统用户选择为(可猜测的)密码。
上面推荐的默认单词列表在英语国家主要满足这一角色。在其他情况下,可能需要下载(甚至创建)额外的单词列表。
请注意,适合拼写检查的单词列表在非基于拉丁字母的国家不能作为CrackLib单词列表使用,因为“基于单词的击键组合”会产生错误的密码。
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/cracklib
安装CrackLib
运行以下命令安装CrackLib:
autoreconf -fiv &&
PYTHON=python3 \
./configure --prefix=/usr \
--disable-static \
--with-default-dict=/usr/lib/cracklib/pw_dict &&
make
现在,作为root用户:
make install
以root用户的身份发出以下命令,安装推荐的单词列表并创建CrackLib字典。其他单词列表(基于文本,每行一个单词)也可以通过简单地将它们安装到/usr/share/dict中并将它们添加到create-cracklib-dict命令中来使用。
install -v -m644 -D ../cracklib-words-2.9.8.bz2 \
/usr/share/dict/cracklib-words.bz2 &&
bunzip2 -v /usr/share/dict/cracklib-words.bz2 &&
ln -v -sf cracklib-words /usr/share/dict/words &&
echo $(hostname) >> /usr/share/dict/cracklib-extra-words &&
install -v -m755 -d /usr/lib/cracklib &&
create-cracklib-dict /usr/share/dict/cracklib-words \
/usr/share/dict/cracklib-extra-words
如果需要,可以通过发出以下命令以非特权用户检查库的正确操作:
make test
重要
如果您在LFS系统完成后安装CrackLib,并且已经安装了Shadow包,如果您希望在系统上提供强大的密码支持,则必须重新安装Shadow-4.13。如果您现在要安装Linux-PAM-1.5.2包,您可以忽略此注意事项,因为在安装Linux-PAM后会重新安装Shadow。
命令解释
sed -i ‘/skipping/d’ util/packer.c: 删除无意义的警告。
autoreconf -fiv: 该包附带的configure脚本太旧,无法获得Python 3.10或更高版本的正确版本字符串。该命令使用最新版本的autotools重新生成它,从而修复了该问题。
PYTHON=python3: 这将强制安装python 3的python绑定,即使安装了python 2。
--with-default-dict=/lib/cracklib/pw_dict: 该参数强制安装到/lib层次结构的CrackLib字典。
--disable-static: 此开关防止在库的静态版本上安装。
install -v -m644 -D …: 该命令创建/usr/share/dict目录(如果该目录不存在),并在其中安装压缩的单词列表。
ln -v -s cracklib-words /usr/share/dict/words: 单词列表链接到/usr/share/dict/words,因为历史上,words是/usr/share/dict目录中的主要单词列表。如果您的系统上已经安装了/usr/share/dict/words文件,则省略此命令。
echo $(hostname) »…: hostname的值回显到一个名为cracklib-extra-words的文件中。这个额外的文件是一个网站特定的列表,其中包括容易猜到的密码,如公司或部门名称,用户名,产品名称,计算机名称,域名等。
create-cracklib-dict …: 该命令根据单词列表创建CrackLib字典。修改命令以添加已安装的任何其他单词列表。
内容
安装程序: cracklib-check, cracklib-format, cracklib-packer, cracklib-unpacker 和 create-cracklib-dict
安装库: libcrack.so 和 _cracklib.so (Python 模块)
安装目录: /lib/cracklib, /usr/share/dict 和 /usr/share/cracklib
简要描述
cracklib-check 用于确定密码是否强。
cracklib-format 用于格式化文本文件(将所有单词小写,删除控制字符并对列表进行排序)。
cracklib-packer 使用从标准输入读取的单词创建数据库。
cracklib-unpacker 在标准输出中显示指定的数据库。
create-cracklib-dict 用于从给定的单词列表创建CrackLib字典。
libcrack.so 为强密码强制提供快速字典查找方法。
4.4 cryptsetup-2.4.3
简介cryptsetup
cryptsetup用于使用内核加密API设置块设备的透明加密。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://www.kernel.org/pub/linux/utils/cryptsetup/v2.4/cryptsetup-2.4.3.tar.xz
-
下载MD5校验和: 2303d57e78d4977344188a46e125095c
-
下载大小: 11 MB
-
预计所需磁盘空间: 29 MB (添加5 MB用于测试)
-
预计构建时间: 0.2 SBU (添加19个SBU用于测试)
cryptsetup 依赖
必要
JSON-C-0.16, LVM2-2.03.18, 和 popt-1.19
可选
libpwquality-1.4.5, argon2, libssh, 和 passwdqc
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/cryptsetup
内核配置
加密块设备需要内核支持。要使用它,需要设置适当的内核配置参数:
Device Drivers --->
[*] Multiple devices driver support (RAID and LVM) ---> [CONFIG_MD]
<*/M> Device mapper support [CONFIG_BLK_DEV_DM]
<*/M> Crypt target support [CONFIG_DM_CRYPT]
Cryptographic API --->
<*/M> XTS support [CONFIG_CRYPTO_XTS]
<*/M> SHA224 and SHA256 digest algorithm [CONFIG_CRYPTO_SHA256]
<*/M> AES cipher algorithms [CONFIG_CRYPTO_AES]
<*/M> User-space interface for symmetric key cipher algorithms
[CONFIG_CRYPTO_USER_API_SKCIPHER]
For tests:
<*/M> Twofish cipher algorithm [CONFIG_CRYPTO_TWOFISH]
安装cryptsetup
运行以下命令安装cryptsetup:
./configure --prefix=/usr --disable-ssh-token &&
make
要测试结果,以root用户发出命令:make check。如果没有设置适当的内核配置选项,某些测试将会失败。测试可能需要的一些其他选项有: CONFIG_SCSI_LOWLEVEL, CONFIG_SCSI_DEBUG, CONFIG_BLK_DEV_DM_BUILTIN, CONFIG_CRYPTO_USER, CONFIG_CRYPTO_CRYPTD, CONFIG_CRYPTO_LRW, CONFIG_CRYPTO_XTS, CONFIG_CRYPTO_ESSIV, CONFIG_CRYPTO_CRCT10DIF, CONFIG_CRYPTO_AES_TI, CONFIG_CRYPTO_AES_NI_INTEL, CONFIG_CRYPTO_BLOWFISH, CONFIG_CRYPTO_CAST5, CONFIG_CRYPTO_SERPENT, CONFIG_CRYPTO_SERPENT_SSE2_X86_64, CONFIG_CRYPTO_SERPENT_AVX_X86_64, CONFIG_CRYPTO_SERPENT_AVX2_X86_64, 和 CONFIG_CRYPTO_TWOFISH_X86_64.
现在,作为root用户:
make install
命令解释
--disable-ssh-token: 如果未安装可选的libssh依赖项,则需要此选项。
配置 cryptsetup
由于可能的配置有很多,加密卷的设置超出了BLFS这本书的范围。请参阅cryptsetup FAQ中的配置指南。
内容
安装程序: cryptsetup, cryptsetup-reencrypt, integritysetup, 和 veritysetup
安装库: libcryptsetup.so
安装目录: None
简要描述
cryptsetup 用于设置dm-crypt管理的设备映射器映射。
cryptsetup-reencrypt 是用于离线LUKS设备re-encryption的工具。
integritysetup 是一个管理dm-integrity(块级完整性)卷的工具。
veritysetup 用于配置dm-verity管理的设备映射器映射关系。设备映射器验证目标使用内核加密API提供块设备的只读透明完整性检查。
4.5 Cyrus SASL-2.1.28
简介Cyrus SASL
Cyrus SASL包包含一个简单的身份验证和安全层实现,这是一种向基于连接的协议添加身份验证支持的方法。要使用SASL,协议包括一个命令,用于向服务器识别和验证用户,以及可选地协商保护后续协议交互。如果协商使用,则在协议和连接之间插入一个安全层。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://github.com/cyrusimap/cyrus-sasl/releases/download/cyrus-sasl-2.1.28/cyrus-sasl-2.1.28.tar.gz
-
下载MD5校验和: 6f228a692516f5318a64505b46966cfa
-
下载大小: 3.9 MB
-
预计所需磁盘空间: 28 MB
-
预计构建时间: 0.2 SBU
Cyrus SASL 依赖
推荐
可选
Linux-PAM-1.5.2, MIT Kerberos V5-1.20.1, MariaDB-10.6.12 或 MySQL, OpenLDAP-2.6.4, PostgreSQL-15.2, sphinx-6.1.3, SQLite-3.40.1, krb4, Dmalloc, 和 Pod::POM::View::Restructured
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/cyrus-sasl
安装Cyrus SASL
注意
这个包不支持并行构建。
运行以下命令安装Cyrus SASL:
./configure --prefix=/usr \
--sysconfdir=/etc \
--enable-auth-sasldb \
--with-dbpath=/var/lib/sasl/sasldb2 \
--with-sphinx-build=no \
--with-saslauthd=/var/run/saslauthd &&
make -j1
这个包没有附带测试套件。如果您计划使用GSSAPI身份验证机制,请在安装包之后使用在上一步中构建的示例服务器和客户机程序对其进行测试。执行测试的说明可在 https://www.linuxfromscratch.org/hints/downloads/files/cyrus-sasl.txt上找到。
现在,作为root用户:
make install &&
install -v -dm755 /usr/share/doc/cyrus-sasl-2.1.28/html &&
install -v -m644 saslauthd/LDAP_SASLAUTHD /usr/share/doc/cyrus-sasl-2.1.28 &&
install -v -m644 doc/legacy/*.html /usr/share/doc/cyrus-sasl-2.1.28/html &&
install -v -dm700 /var/lib/sasl
命令解释
--with-dbpath=/var/lib/sasl/sasldb2: 此开关强制将sasldb数据库创建在/var/lib/sasl而不是/etc中。
--with-saslauthd=/var/run/saslauthd: 这个开关强制saslauthd使用FHS兼容的目录/var/run/saslauthd来存储可变的运行时数据。
--enable-auth-sasldb: 该开关启用SASLDB后端身份验证。
--with-dblib=gdbm: 此开关强制使用GDBM而不是Berkeley DB。
--with-ldap: 此开关启用OpenLDAP支持。
--enable-ldapdb: 该开关启用LDAPDB身份验证后端。
--enable-login: 此选项启用不受支持的LOGIN身份验证。
--enable-ntlm: 此选项启用不受支持的NTLM身份验证。
install -v -m644 …: 这些命令安装没有通过make install命令安装的文档。
install -v -m700 -d /var/lib/sasl: 启动saslauthd或使用sasldb插件时,该目录必须存在。如果您不打算运行守护进程或使用插件,则可以省略此目录的创建。
配置 Cyrus SASL
配置文件
/etc/saslauthd.conf (用于saslauthd LDAP配置) 和 /etc/sasl2/Appname.conf (其中“Appname”是应用程序定义的应用程序名称)
配置信息
查看 https://www.cyrusimap.org/sasl/sasl/sysadmin.html 获取有关在应用程序配置文件中包含哪些内容的信息。
查看 file:///usr/share/doc/cyrus-sasl-2.1.28/LDAP_SASLAUTHD 为saslauthd配置OpenLDAP。
查看 https://www.cyrusimap.org/sasl/sasl/gssapi.html#gssapi 为saslauthd配置Kerberos。
Systemd Unit
如果您需要在系统启动时运行saslauthd守护进程,请使用以下命令安装blfs-systemd-units-20220720包中的saslauthd.service单元:
make install-saslauthd
注意
你需要修改/etc/default/saslauthd,并修改MECHANISM参数,使其符合你想要的认证机制。默认的认证机制为“shadow”。
内容
安装程序: pluginviewer, saslauthd, sasldblistusers2, saslpasswd2 和 testsaslauthd
安装库: libsasl2.so
安装目录: /usr/include/sasl, /usr/lib/sasl2, /usr/share/doc/cyrus-sasl-2.1.28 和 /var/lib/sasl
简要描述
pluginviewer 用于列出可加载的SASL插件及其属性。
saslauthd 为SASL认证服务器。
sasldblistusers2 用于列出SASL密码数据库sasldb2中的用户。
saslpasswd2 用于设置和删除用户的SASL密码以及SASL密码数据库sasldb2中与机制相关的秘密。
testsaslauthd 是SASL身份验证服务器的测试实用程序。
libsasl2.so 是用于服务器和客户端应用程序的通用身份验证库。
4.6 GnuPG-2.4.0
简介GnuPG
GnuPG包是GNU用于安全通信和数据存储的工具。它可用于加密数据和创建数字签名。它包括一个高级的密钥管理功能,并且符合RFC2440中描述的OpenPGP Internet标准和几个rfc中描述的S/MIME标准。gnupg2是GnuPG的稳定版本,集成了对OpenPGP和S/MIME的支持。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-2.4.0.tar.bz2
-
下载 (FTP): ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-2.4.0.tar.bz2
-
下载MD5校验和: 1a9dd55be7a9d0a6ef34ec3ba0d674a5
-
下载大小: 7.3 MB
-
预计所需磁盘空间: 164 MB (与测试)
-
预计构建时间: 0.5 SBU (使用并行数=4; 添加0.4 SBU用于测试)
GnuPG 2 依赖
必要
libassuan-2.5.5, libgcrypt-1.10.1, libksba-1.6.3, 和 npth-1.6
推荐
GnuTLS-3.8.0 (需要使用HTTPS或HKPS协议与密钥服务器通信) 和 pinentry-1.2.1 (大多数包功能的运行时需求)
可选
cURL-7.88.1, Fuse-3.13.1, ImageMagick-7.1.0-61 (对于convert实用程序,用于生成文档), libusb-1.0.26, MTA, OpenLDAP-2.6.4, SQLite-3.40.1, texlive-20220321 (or install-tl-unx), fig2dev (用于生成文档), 和 GNU adns
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/gnupg2
安装GnuPG
运行以下命令安装GnuPG:
mkdir build &&
cd build &&
../configure --prefix=/usr \
--localstatedir=/var \
--sysconfdir=/etc \
--docdir=/usr/share/doc/gnupg-2.4.0 &&
make &&
makeinfo --html --no-split -I doc -o doc/gnupg_nochunks.html ../doc/gnupg.texi &&
makeinfo --plaintext -I doc -o doc/gnupg.txt ../doc/gnupg.texi &&
make -C doc html
如果你已经安装了texlive-20220321,并且你希望以其他格式创建文档,发出以下命令(ps格式需要fig2dev):
make -C doc pdf ps
要测试结果,执行: make check.
现在,作为root用户:
make install &&
install -v -m755 -d /usr/share/doc/gnupg-2.4.0/html &&
install -v -m644 doc/gnupg_nochunks.html \
/usr/share/doc/gnupg-2.4.0/html/gnupg.html &&
install -v -m644 ../doc/*.texi doc/gnupg.txt \
/usr/share/doc/gnupg-2.4.0 &&
install -v -m644 doc/gnupg.html/* \
/usr/share/doc/gnupg-2.4.0/html
如果你创建了其他格式的文档,以root用户使用以下命令安装它们:
install -v -m644 doc/gnupg.{pdf,dvi,ps} \
/usr/share/doc/gnupg-2.4.0
命令解释
mkdir build && cd build: Gnupg2开发人员建议在专用目录中构建包。
--docdir=/usr/share/doc/gnupg-2.4.0: 此开关将默认的docdir更改为/usr/share/doc/gnupg-2.4.0。
--enable-all-tests: 此开关允许使用make check运行更多测试。
--enable-g13: 此开关可用于构建g13程序。
内容
安装程序: addgnupghome, applygnupgdefaults, dirmngr, dirmngr-client, g13 (可选), gpg-agent, gpg-card, gpg-connect-agent, gpg, gpgconf, gpgparsemail, gpgscm, gpgsm, gpgsplit, gpgtar, gpgv, gpg-wks-client, gpg-wks-server, kbxutil, 和 watchgnupg
安装库: None
安装目录: /usr/share/doc/gnupg-2.4.0 和 /usr/share/gnupg
简要描述
addgnupghome 用于创建和填充用户的~/.gnupg目录。
applygnupgdefaults 是一个包装器脚本,用于在所有用户的GnuPG主目录上运行带有--apply-defaults参数的gpgconf。
dirmngr 是一个负责访问OpenPGP密钥服务器的工具。
dirmngr-client 是一个工具,用于联系正在运行的dirmngr并测试证书是否已被吊销。
g13 是用于创建、挂载或卸载加密文件系统容器的工具(可选)。
gpg-agent 是一个守护进程,用于独立于任何协议管理秘密(私有)密钥。它被用作gpg和gpgsm以及其他几个实用程序的后端。
gpg-card 是一个管理智能卡和令牌的工具。
gpg-connect-agent 是一个实用程序,用于与正在运行的gpg-agent进行通信。
gpg OpenPGP是GNU隐私保护(GnuPG)的一部分。它是一个使用OpenPGP标准提供数字加密和签名服务的工具。
gpgconf 是一个实用程序,用于自动且合理安全地查询和修改~/.gnupg主目录下的配置文件。它的设计不是由用户手动调用,而是由图形用户界面自动调用。
gpgparsemail 是当前仅对调试有用的实用程序。使用--help运行它以获取使用信息。
gpgscm 执行给定的方案程序或生成交互式shell。
gpgsm 是一个类似于gpg的工具,用于在X.509证书和CMS协议上提供数字加密和签名服务。它主要用作S/MIME邮件处理的后端。
gpgsplit 将OpenPGP消息拆分为多个包。
gpgtar 是将文件加密或签名到存档中的工具。
gpgv 是gpg的唯一验证版本。
gpg-wks-client 是Web密钥服务协议的客户端。
gpg-wks-server 为Web密钥服务协议提供服务器。
kbxutil 用于列出、导出和导入Keybox数据。
watchgnupg 用于监听由任何GnuPG工具创建的Unix Domain套接字。
4.7 GnuTLS-3.8.0
简介GnuTLS
GnuTLS包包含库和用户空间工具,它们在可靠的传输层上提供了一个安全层。目前,GnuTLS库实现了IETF TLS工作组提出的标准。引用TLS 1.3 protocol specification:
“TLS允许客户端/服务器应用程序在互联网上以一种旨在防止窃听、篡改和消息伪造的方式进行通信。”
GnuTLS提供对TLS 1.3、TLS 1.2、TLS 1.1、TLS 1.0和(可选的)SSL 3.0协议的支持。它还支持TLS扩展,包括服务器名称和最大记录大小。此外,该库还支持使用SRP协议、X.509证书和OpenPGP密钥进行身份验证,并支持TLS预共享密钥(PSK)扩展、内部应用程序(TLS/IA)扩展以及X.509和OpenPGP证书处理。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://www.gnupg.org/ftp/gcrypt/gnutls/v3.8/gnutls-3.8.0.tar.xz
-
下载 (FTP): ftp://ftp.gnupg.org/gcrypt/gnutls/v3.8/gnutls-3.8.0.tar.xz
-
下载MD5校验和: 20a662caf20112b6b9ad1f4a64db3a97
-
下载大小: 6.1 MB
-
预计所需磁盘空间: 165 MB (添加113 MB用于测试)
-
预计构建时间: 0.8 SBU (添加2.3 SBU用于测试;都使用并行数=4)
GnuTLS 依赖
必要
推荐
make-ca-1.12, libunistring-1.1, libtasn1-4.19.0, 和 p11-kit-0.24.1
可选
Brotli-1.0.9, Doxygen-1.9.6, GTK-Doc-1.33.2, libidn-1.41 或 libidn2-2.3.4, libseccomp-2.5.4, Net-tools-2.10 (在测试套件中使用), texlive-20220321 或 install-tl-unx, Unbound-1.17.1 (来构建DANE库), Valgrind-3.20.0 (在测试套件中使用), autogen, cmocka 和 datefudge (如果构建了DANE库,则在测试套件期间使用), 和 Trousers (Trusted Platform Module支持)
注意
请注意,如果您不安装libtasn1-4.19.0,则将使用GnuTLS tarball中附带的版本。
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/gnutls
安装GnuTLS
运行以下命令安装GnuTLS:
./configure --prefix=/usr \
--docdir=/usr/share/doc/gnutls-3.8.0 \
--with-default-trust-store-pkcs11="pkcs11:" &&
make
要测试结果,执行: make check.
现在,作为root用户:
make install
命令解释
--with-default-trust-store-pkcs11="pkcs11:": 这个开关告诉gnutls使用PKCS #11信任存储作为默认信任。如果未安装p11-kit-0.24.1,则忽略此开关。
--with-default-trust-store-file=/etc/pki/tls/certs/ca-bundle.crt: 这个开关告诉configure在哪里找到旧的CA证书包,并在默认情况下使用它而不是PKCS #11模块。如果未安装p11-kit-0.24.1,请使用此选项。
--enable-gtk-doc: 如果安装了GTK-Doc,并且希望重新构建和安装API文档,则使用此参数。
--enable-openssl-compatibility: 如果您希望构建OpenSSL兼容性库,请使用此开关。
--without-p11-kit: 如果您没有安装p11-kit,请使用此开关。
--with-included-unistring: 使用libunistring的捆绑版本,而不是系统版本。如果您没有安装libunistring-1.1,请使用此开关。
内容
安装程序: certtool, danetool, gnutls-cli, gnutls-cli-debug, gnutls-serv, ocsptool, p11tool, psktool, 和 srptool
安装库: libgnutls.so, libgnutls-dane.so, libgnutlsxx.so, libgnutls-openssl.so (optional), 和 /usr/lib/guile/3.0/extensions/guile-gnutls-v-2.so
安装目录: /usr/include/gnutls, /usr/lib/guile/3.0/site-ccache/gnutls, /usr/share/guile/site/3.0/gnutls, 和 /usr/share/doc/gnutls-3.8.0
简要描述
certtool 用于生成X.509证书、证书请求和私钥。
danetool 是用于生成和检查DANE协议的DNS资源记录的工具。
gnutls-cli 是一个简单的客户端程序,用于建立与其他计算机的TLS连接。
gnutls-cli-debug 是一个简单的客户端程序,用于建立到其他计算机的TLS连接,并产生非常详细的进度结果。
gnutls-serv 是一个简单的服务器程序,用于侦听传入的TLS连接。
ocsptool 是一个程序,可以解析和打印有关OCSP请求/响应的信息,生成请求和验证响应。
p11tool 是一个程序,允许处理来自PKCS #11智能卡和安全模块的数据。
psktool 是一个简单的程序,生成用于TLS-PSK的随机密钥。
srptool 是一个简单的程序,它使用GnuTLS模拟斯坦福SRP(安全远程密码)库中的程序。
libgnutls.so 包含核心API功能和X.509证书API功能。
4.8 GPGME-1.18.0
简介GPGME
GPGME包是一个C库,允许将加密支持添加到程序中。它旨在使应用程序更容易访问GnuPG或GpgSM等公钥加密引擎。GPGME为加密、解密、签名、签名验证和密钥管理提供了高级加密API。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://www.gnupg.org/ftp/gcrypt/gpgme/gpgme-1.18.0.tar.bz2
-
下载 (FTP): ftp://ftp.gnupg.org/gcrypt/gpgme/gpgme-1.18.0.tar.bz2
-
下载MD5校验和: 98f25a7e494d294c4b2c1a769113510e
-
下载大小: 1.7 MB
-
预计所需磁盘空间: 168 MB (为测试添加33 MB)
-
预计构建时间: 0.7 SBU (对于所有绑定,添加0.8 SBU用于测试;所有并行数=4)
额外下载
- 推荐补丁(安装SWIG时需要): https://www.linuxfromscratch.org/patches/blfs/11.3/gpgme-1.18.0-gpg_error_1_46-1.patch
GPGME 依赖
必要
可选
Doxygen-1.9.6 和 Graphviz-7.1.0 (用于API文档), GnuPG-2.4.0 (如果安装了Qt或SWIG,则需要;在测试套件中使用), Clisp-2.49, Qt-5.15.8, 和/或 SWIG-4.1.1 (用于语言绑定)
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/gpgme
安装GPGME
首先,修复安装了Python 3.11的问题:
sed -e 's/3\.9/3.11/' \
-e 's/:3/:4/' \
-i configure
应用补丁来修复SWIG和libgpg-error-1.46或更高版本的构建失败:
patch -Np1 -i ../gpgme-1.18.0-gpg_error_1_46-1.patch
运行以下命令安装GPGME:
./configure --prefix=/usr --disable-gpg-test &&
make
要测试结果,您应该安装GnuPG-2.4.0并删除上面的–disable-gpg-test。问题:make -k check。
现在,作为root用户:
make install
命令解释
--disable-gpg-test: 如果这个参数没有传递给configure,测试程序在make阶段构建,这需要GnuPG-2.4.0。如果已安装GnuPG-2.4.0,则不需要设置此参数。
内容
安装程序: gpgme-json, 和 gpgme-tool
安装库: libgpgme, libgpgmepp.so, 和 libqgpgme.so
安装目录: /usr/include/{gpgme++,qgpgme,QGpgME}, /usr/lib/cmake/{Gpgmepp,QGpgme}. /usr/lib/python{2.7,3.9}/site-packages/gpg, 和 /usr/share/common-lisp/source/gpgme
简要描述
gpgme-json 以JSON格式输出GPGME命令。
gpgme-tool 是公开GPGME操作的服务器,例如使用keyserver打印指纹和密钥。
libgpgme.so 包含GPGME API函数。
libgpgmepp.so 包含c++ GPGME API函数。
libqgpgme.so 包含用于在Qt应用程序中处理GPG操作的API函数。
4.9 iptables-1.8.9
简介iptables
iptables是一个用户空间命令行程序,用于配置Linux 2.4及更高版本的内核包过滤规则集。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://www.netfilter.org/projects/iptables/files/iptables-1.8.9.tar.xz
-
下载 (FTP): ftp://ftp.netfilter.org/pub/iptables/iptables-1.8.9.tar.xz
-
下载MD5校验和: ffa00f68d63e723c21b8a091c5c0271b
-
下载大小: 633 KB
-
预计所需磁盘空间: 16 MB
-
预计构建时间: 0.1 SBU
iptables 依赖
可选
libpcap-1.10.3 (需要nfsypproxy支持), bpf-utils (需要Berkeley包过滤支持), libnfnetlink (connlabel支持所需), libnetfilter_conntrack (connlabel支持所需), 和 nftables
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/iptables
内核配置
Linux中的防火墙是通过netfilter接口实现的。要使用iptables配置netfilter,需要以下内核配置参数:
[*] Networking support ---> [CONFIG_NET]
Networking Options --->
[*] Network packet filtering framework (Netfilter) ---> [CONFIG_NETFILTER]
[*] Advanced netfilter configuration [CONFIG_NETFILTER_ADVANCED]
Core Netfilter Configuration --->
<*/M> Netfilter connection tracking support [CONFIG_NF_CONNTRACK]
<*/M> Netfilter Xtables support (required for ip_tables) [CONFIG_NETFILTER_XTABLES]
<*/M> LOG target support [CONFIG_NETFILTER_XT_TARGET_LOG]
IP: Netfilter Configuration --->
<*/M> IP tables support (required for filtering/masq/NAT) [CONFIG_IP_NF_IPTABLES]
包括将使用的任何连接跟踪协议,以及您希望在“Core Netfilter Configuration”部分下用于匹配支持的任何协议。以上选项足以运行下面的Creating a Personal Firewall With iptables。
安装iptables
注意
下面的安装不包括构建一些特殊的扩展库,这些扩展库需要Linux源代码中的原始头文件。如果您希望构建额外的扩展(如果您不确定,那么您可能不确定),您可以查看INSTALL文件,以查看如何更改KERNEL_DIR=参数以指向Linux源代码的示例。注意,如果升级内核版本,可能还需要重新编译iptables,而且BLFS团队还没有使用原始内核头文件进行测试。
运行以下命令安装iptables:
./configure --prefix=/usr \
--disable-nftables \
--enable-libipq &&
make
这个包没有附带测试套件。
现在,作为root用户:
make install
命令解释
--disable-nftables: 此开关禁用构建nftables兼容性。
--enable-libipq: 这个开关允许构建libipq.so,它可以被BLFS之外的一些包使用。
--enable-nfsynproxy: 该开关用于在nfsynproxy上安装SYNPROXY配置工具。
配置 iptables
注意
以下配置举例中,局域网内部接口使用LAN1,公网接口使用WAN1。您需要为您的系统使用适当的接口名称替换这些值。
个人防火墙
个人防火墙的设计是为了让你访问互联网上提供的所有服务,同时保证你的计算机安全和数据的隐私。
下面是来自Linux 2.4 Packet Filtering HOWTO的Rusty Russell建议的稍微修改的版本。它仍然适用于Linux 5.x内核。
install -v -dm755 /etc/systemd/scripts
cat > /etc/systemd/scripts/iptables << "EOF"
#!/bin/sh
# Begin /etc/systemd/scripts/iptables
# Insert connection-tracking modules
# (not needed if built into the kernel)
modprobe nf_conntrack
modprobe xt_LOG
# Enable broadcast echo Protection
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Disable Source Routed Packets
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo 0 > /proc/sys/net/ipv4/conf/default/accept_source_route
# Enable TCP SYN Cookie Protection
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# Disable ICMP Redirect Acceptance
echo 0 > /proc/sys/net/ipv4/conf/default/accept_redirects
# Do not send Redirect Messages
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
# Drop Spoofed Packets coming in on an interface, where responses
# would result in the reply going out a different interface.
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
# Log packets with impossible addresses.
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians
echo 1 > /proc/sys/net/ipv4/conf/default/log_martians
# be verbose on dynamic ip-addresses (not needed in case of static IP)
echo 2 > /proc/sys/net/ipv4/ip_dynaddr
# disable Explicit Congestion Notification
# too many routers are still ignorant
echo 0 > /proc/sys/net/ipv4/tcp_ecn
# Set a known state
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# These lines are here in case rules are already in place and the
# script is ever rerun on the fly. We want to remove all rules and
# pre-existing user defined chains before we implement new rules.
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
# Allow local-only connections
iptables -A INPUT -i lo -j ACCEPT
# Free output on any interface to any ip for any service
# (equal to -P ACCEPT)
iptables -A OUTPUT -j ACCEPT
# Permit answers on already established connections
# and permit new connections related to established ones
# (e.g. port mode ftp)
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Log everything else.
iptables -A INPUT -j LOG --log-prefix "FIREWALL:INPUT "
# End /etc/systemd/scripts/iptables
EOF
chmod 700 /etc/systemd/scripts/iptables
这个脚本非常简单,它会丢弃所有不是从您的计算机发起的进入您的计算机的流量,但只要您只是在网上冲浪,您就不太可能超出其限制。
如果您在访问FTP服务器时经常遇到某些延迟,请查看BusyBox with iptables example number 4.
即使系统上运行着守护进程或服务,除了计算机本身之外,其他地方也无法访问这些守护进程或服务。如果你想允许访问你的机器上的服务,如ssh或ping,看看Creating a BusyBox With iptables。
伪装的路由器
网络防火墙有两个接口,一个连接到内部网,在本例中为LAN1,另一个连接到Internet,在本例中为WAN1。要为防火墙本身提供最大的安全性,请确保防火墙上没有运行不必要的服务器,比如X11。作为一般原则,防火墙本身不应该访问任何不受信任的服务(想象一下远程服务器给出的答案会导致系统上的守护进程崩溃,或者更糟的是,通过缓冲区溢出实现蠕虫)。
install -v -dm755 /etc/systemd/scripts
cat > /etc/systemd/scripts/iptables << "EOF"
#!/bin/sh
# Begin /etc/systemd/scripts/iptables
echo
echo "You're using the example configuration for a setup of a firewall"
echo "from Beyond Linux From Scratch."
echo "This example is far from being complete, it is only meant"
echo "to be a reference."
echo "Firewall security is a complex issue, that exceeds the scope"
echo "of the configuration rules below."
echo "You can find additional information"
echo "about firewalls in Chapter 4 of the BLFS book."
echo "https://www.linuxfromscratch.org/blfs"
echo
# Insert iptables modules (not needed if built into the kernel).
modprobe nf_conntrack
modprobe nf_conntrack_ftp
modprobe xt_conntrack
modprobe xt_LOG
modprobe xt_state
# Enable broadcast echo Protection
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Disable Source Routed Packets
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
# Enable TCP SYN Cookie Protection
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# Disable ICMP Redirect Acceptance
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
# Don't send Redirect Messages
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
# Drop Spoofed Packets coming in on an interface where responses
# would result in the reply going out a different interface.
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
# Log packets with impossible addresses.
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians
# Be verbose on dynamic ip-addresses (not needed in case of static IP)
echo 2 > /proc/sys/net/ipv4/ip_dynaddr
# Disable Explicit Congestion Notification
# Too many routers are still ignorant
echo 0 > /proc/sys/net/ipv4/tcp_ecn
# Set a known state
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# These lines are here in case rules are already in place and the
# script is ever rerun on the fly. We want to remove all rules and
# pre-existing user defined chains before we implement new rules.
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
# Allow local connections
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Allow forwarding if the initiated on the intranet
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD ! -i WAN1 -m conntrack --ctstate NEW -j ACCEPT
# Do masquerading
# (not needed if intranet is not using private ip-addresses)
iptables -t nat -A POSTROUTING -o WAN1 -j MASQUERADE
# Log everything for debugging
# (last of all rules, but before policy rules)
iptables -A INPUT -j LOG --log-prefix "FIREWALL:INPUT "
iptables -A FORWARD -j LOG --log-prefix "FIREWALL:FORWARD "
iptables -A OUTPUT -j LOG --log-prefix "FIREWALL:OUTPUT "
# Enable IP Forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
# The following sections allow inbound packets for specific examples
# Uncomment the example lines and adjust as necessary
# Allow ping on the external interface
#iptables -A INPUT -p icmp -m icmp --icmp-type echo-request -j ACCEPT
#iptables -A OUTPUT -p icmp -m icmp --icmp-type echo-reply -j ACCEPT
# Reject ident packets with TCP reset to avoid delays with FTP or IRC
#iptables -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset
# Allow HTTP and HTTPS to 192.168.0.2
#iptables -A PREROUTING -t nat -i WAN1 -p tcp --dport 80 -j DNAT --to 192.168.0.2
#iptables -A PREROUTING -t nat -i WAN1 -p tcp --dport 443 -j DNAT --to 192.168.0.2
#iptables -A FORWARD -p tcp -d 192.168.0.2 --dport 80 -j ACCEPT
#iptables -A FORWARD -p tcp -d 192.168.0.2 --dport 443 -j ACCEPT
# End /etc/systemd/scripts/iptables
EOF
chmod 700 /etc/systemd/scripts/iptables
使用此脚本,您的内部网应该相当安全,不会受到外部攻击。没有人能够建立一个新的连接到任何内部服务,如果它是伪装的,使你的内部网对互联网不可见。此外,您的防火墙应该是相对安全的,因为没有运行的服务可以被骇客攻击。
BusyBox
这个场景与Creating a Masquerading Router With iptables没有太大的不同,但它额外为你的内部网提供了一些服务。例如,您希望从内部网上的另一台主机管理防火墙,或者将其用作代理或名称服务器。
注意
具体概述如何保护在Internet上提供服务的服务器远远超出了本文档的范围。请参阅the section called “Extra Information”了解更多信息。
小心谨慎。您启用的每个服务都会使您的设置更加复杂,并且您的防火墙更不安全。您将面临配置错误的服务或运行带有可利用漏洞的服务的风险。防火墙通常不应该运行任何额外的服务。请参阅Creating a Masquerading Router With iptables的介绍了解更多细节。
如果您希望添加服务(例如内部Samba或名称服务器),而这些服务本身不需要访问Internet,则附加语句非常简单,并且从安全性的角度来看仍然是可以接受的。只需在日志规则之前将以下行添加到脚本中。
iptables -A INPUT -i ! WAN1 -j ACCEPT
iptables -A OUTPUT -o ! WAN1 -j ACCEPT
如果守护进程(例如squid)本身必须访问Internet,则通常可以打开OUTPUT并限制INPUT。
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j ACCEPT
但是,通常不建议不限制OUTPUT。您失去了对想要“call home”的木马的任何控制,并且如果您(mis-)configured了服务以便将其存在广播给全世界,则会有一点冗余。
要做到这一点,您应该限制所有端口上的INPUT和OUTPUT,除了那些绝对需要打开的端口。您必须打开哪些端口取决于您的需要:大多数情况下,您将通过在日志文件中查找失败的访问来找到它们。
Have a Look at the Following Examples:
- Squid正在缓存web:
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED \
-j ACCEPT
- 您的缓存名称服务器(例如,named)通过UDP进行查找:
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
- 你想要能够ping你的电脑,以确保它仍然活着:
iptables -A INPUT -p icmp -m icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp -m icmp --icmp-type echo-reply -j ACCEPT
-
如果您经常访问FTP服务器或喜欢聊天,您可能会注意到延迟,因为这些守护进程的某些实现会查询系统上的标识守护进程以获取用户名。尽管这样做的危害很小,但不建议运行身份识别,因为许多安全专家认为该服务提供了太多额外信息。
为了避免这些延迟,你可以用’tcp-reset’响应拒绝请求:
iptables -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset
- 要记录和丢弃无效数据包(在netfilter超时或某些类型的网络扫描之后进入的数据包),请在链的顶部插入这些规则:
iptables -I INPUT 0 -p tcp -m conntrack --ctstate INVALID \
-j LOG --log-prefix "FIREWALL:INVALID "
iptables -I INPUT 1 -p tcp -m conntrack --ctstate INVALID -j DROP
- 任何来自外部的东西都不应该有私有地址,这是一种称为ip欺骗的常见攻击:
iptables -A INPUT -i WAN1 -s 10.0.0.0/8 -j DROP
iptables -A INPUT -i WAN1 -s 172.16.0.0/12 -j DROP
iptables -A INPUT -i WAN1 -s 192.168.0.0/16 -j DROP
还有其他地址,你可能也想放弃: 0.0.0.0/8, 127.0.0.0/8, 224.0.0.0/3 (多播和实验), 169.254.0.0/16 (链路本地网络), 和 192.0.2.0/24 (IANA定义的测试网络).
- 如果您的防火墙是DHCP客户端,您需要允许这些数据包:
iptables -A INPUT -i WAN1 -p udp -s 0.0.0.0 --sport 67 \
-d 255.255.255.255 --dport 68 -j ACCEPT
-
为了简化调试并公平对待任何想要访问您有意或无意禁用的服务的人,您可以拒绝那些丢弃的数据包。
显然,这必须在日志记录之后直接完成,作为包被策略丢弃之前的最后一行:
iptables -A INPUT -j REJECT
这些只是向您展示Linux中防火墙代码的一些功能的示例。看一下iptables的手册页。在那里你会发现更多的信息。这样做所需的端口号可以在/etc/services中找到,以防你在日志文件中没有通过试错找到它们。
Systemd Unit
要在启动时设置iptables防火墙,请安装blfs-systemd-units-20220720包中包含的iptables.service单元。
make install-iptables
内容
安装程序: ip6tables, ip6tables-apply, ip6tables-legacy, ip6tables-legacy-restore, ip6tables-legacy-save, ip6tables-restore, ip6tables-save, iptables, iptables-apply, iptables-legacy, iptables-legacy-restore, iptables-legacy-apply, iptables-restore, iptables-save, iptables-xml, nfsynproxy (可选), 和 xtables-multi
安装库: libip4tc.so, libip6tc.so, libipq.so, libiptc.so, 和 libxtables.so
安装目录: /lib/xtables 和 /usr/include/libiptc
简要描述
iptables 用于在Linux内核中建立、维护和检查IP包过滤规则表。
iptables-apply 是远程更新iptables的更安全的方法。
iptables-legacy 用于使用遗留命令集与iptables交互。
iptables-legacy-restore 用于恢复一组遗留的iptables规则。
iptables-legacy-save 用于保存一组遗留的iptables规则。
iptables-restore 用于从STDIN上指定的数据恢复IP表。使用shell提供的I/O重定向从文件中读取。
iptables-save 用于将IP表的内容以易于解析的格式转储到STDOUT。使用shell提供的I/O重定向来写入文件。
iptables-xml 用于将iptables-save的输出转换为XML格式。使用iptables.xslt的样式表将XML转换回iptables-restore的格式。
ip6tables* 是一组用于IPV6的命令,与上面的iptables命令并行。
nfsynproxy (可选)配置工具。在这种情况下,SYNPROXY目标使处理大型SYN泛洪成为可能,而不会造成连接跟踪带来的巨大性能损失。
xtables-multi 是根据调用它的名称进行行为的二进制文件。
4.10 Setting Up a Network Firewall
简介Firewall Creation
防火墙的目的是保护计算机或网络免受恶意访问。在完美的情况下,每台机器上的每个守护进程或服务都是完美配置的,不受安全缺陷的影响,所有用户都被隐式信任,可以按预期使用设备。然而,这种情况很少,如果有的话。守护进程可能配置错误,或者针对基本服务的已知漏洞可能没有应用更新。此外,您可能希望选择某些机器或用户可以访问哪些服务,或者您可能希望限制允许外部访问哪些机器或应用程序。或者,您可能根本不信任某些应用程序或用户。由于这些原因,精心设计的防火墙应该是系统安全性的重要组成部分。
虽然防火墙可以极大地限制上述问题的范围,但不要认为拥有防火墙会使仔细的配置变得多余,或者任何疏忽的错误配置都是无害的。防火墙不能防止利用您在防火墙之外提供的任何服务。尽管有防火墙,您仍然需要正确配置应用程序和守护进程并使其保持最新状态。
“防火墙”一词的含义
防火墙这个词可以有几种不同的含义。
个人防火墙
这是一种硬件设备或软件程序,用于保护连接到互联网的家用或台式计算机。这种类型的防火墙对于那些不知道他们的计算机如何通过互联网被访问或如何禁用访问的用户来说是高度相关的,特别是如果他们总是在线并通过宽带连接。
一个个人防火墙的配置示例在Creating a Personal Firewall With iptables中提供。
伪装的路由器
这是一个位于互联网和内部网之间的系统。为了最大限度地降低危及防火墙本身的风险,它通常应该只有一个角色——保护内部网。虽然不是完全没有风险,但是进行路由和IP伪装的任务(重写从具有私有IP地址的客户机路由到Internet的数据包的IP头,使它们看起来像是来自防火墙本身)通常被认为是相对安全的。
在Creating a Masquerading Router With iptables中提供了一个伪装防火墙的配置示例。
BusyBox
这通常是一台你可能已经退休或几乎被遗忘的旧电脑,执行伪装或路由功能,但提供非防火墙服务,如web缓存或邮件。这可以用于家庭网络,但不能被认为像只使用防火墙的机器那样安全,因为服务器和路由器/防火墙在一台机器上的组合增加了设置的复杂性。
BusyBox的配置示例见Creating a BusyBox With iptables。
带有非军事区的防火墙
这种类型的防火墙执行伪装或路由,但授予对网络的某些分支的公共访问权限,这些分支在物理上与常规内部网分离,本质上是一个可以直接访问Internet的独立网络。该网络中的服务器必须是Internet和intranet都能轻松访问的服务器。防火墙保护两个网络。该类型防火墙至少有3个网络接口。
Packetfilter
这种类型的防火墙进行路由或伪装,但不维护正在进行的通信流的状态表。它速度很快,但在阻止不需要的数据包而不阻止所需数据包的能力方面相当有限。
结论
当心
为iptables-1.8.9提供的示例配置并不打算成为保护系统的完整指南。防火墙是一个复杂的问题,需要仔细配置。BLFS提供的配置仅用于举例说明防火墙的工作原理。它们不适合任何特定的配置,也可能无法提供针对攻击的完整保护。
BLFS提供了一个实用程序来管理内核Netfilter接口,iptables-1.8.9。它从早期的2.4内核开始就存在了,并且从那时起就成为了标准。这可能是现有管理员最熟悉的一组工具。最近开发了其他工具,请参阅下面的进一步阅读列表以了解更多细节。在这里,您将找到一个url列表,其中包含有关构建防火墙和进一步保护系统的全面信息。
额外信息
防火墙的进一步阅读
www.netfilter.org - Homepage of the netfilter/iptables/nftables projects
Netfilter related FAQ
Netfilter related HOWTO’s
nftables HOWTO
tldp.org/LDP/nag2/x-087-2-firewall.html
tldp.org/HOWTO/Security-HOWTO.html
tldp.org/HOWTO/Firewall-HOWTO.html
linuxsecurity.com/howtos
www.e-infomax.com/ipmasq
www.circlemud.org/jelson/writings/security/index.htm
insecure.org/reading.html
4.11 libcap-2.67 with PAM
简介libcap with PAM
libcap包安装在LFS中,但是如果需要Linux-PAM支持,则必须构建PAM模块(在Linux-PAM上安装之后)。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://www.kernel.org/pub/linux/libs/security/linux-privs/libcap2/libcap-2.67.tar.xz
-
下载MD5校验和: 06333f4301657298890fd8d6f1fb4793
-
下载大小: 184 KB
-
预计所需磁盘空间: 2.1 MB
-
预计构建时间: 小于 0.1 SBU
libcap 依赖
必要
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/libcap
安装libcap
注意
如果要从以前的版本升级libcap,请使用LFS libcap page中的说明来升级libcap。如果已经构建了Linux-PAM-1.5.2, PAM模块也将自动构建。
运行以下命令安装libcap:
make -C pam_cap
这个包没有附带测试套件。
现在,作为root用户:
install -v -m755 pam_cap/pam_cap.so /usr/lib/security &&
install -v -m644 pam_cap/capability.conf /etc/security
配置 Libcap
为了允许Linux-PAM基于POSIX功能授予权限,您需要将libcap模块添加到/etc/pam.d/system-auth文件的开头。使用以下命令进行必要的编辑:
mv -v /etc/pam.d/system-auth{,.bak} &&
cat > /etc/pam.d/system-auth << "EOF" &&
# Begin /etc/pam.d/system-auth
auth optional pam_cap.so
EOF
tail -n +3 /etc/pam.d/system-auth.bak >> /etc/pam.d/system-auth
此外,您需要修改/etc/security/capability.conf文件以授予用户必要的权限,并根据需要使用setcap实用程序在特定实用程序上设置功能。参见man 8 setcap和man 3 cap_from_text了解更多信息。
内容
安装程序: None
安装库: pam_cap.so
安装目录: None
4.12 Linux-PAM-1.5.2
简介Linux PAM
Linux PAM包包含Pluggable Authentication Modules,本地系统管理员可以使用这些模块来控制应用程序如何对用户进行身份验证。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://github.com/linux-pam/linux-pam/releases/download/v1.5.2/Linux-PAM-1.5.2.tar.xz
-
下载MD5校验和: 895e8adfa14af334f679bbeb28503f66
-
下载大小: 966 KB
-
预计所需磁盘空间: 39 MB (与测试)
-
预计构建时间: 0.4 SBU (与测试)
额外下载
可选文档
-
下载 (HTTP): https://github.com/linux-pam/linux-pam/releases/download/v1.5.2/Linux-PAM-1.5.2-docs.tar.xz
-
下载MD5校验和: ceb3dc248cb2f49a40904b93cb91db1b
-
下载大小: 433 KB
Linux PAM 依赖
可选
Berkeley DB-5.3.28, libnsl-2.0.0, libtirpc-1.3.3, libaudit, 和 Prelude
可选 (重建文档)
docbook-xml-4.5, docbook-xsl-nons-1.79.2, fop-2.8, libxslt-1.1.37 和 Lynx-2.8.9rel.1 或 W3m 其中一个。
注意
Shadow-4.13 和 Systemd-252必须在安装和配置Linux PAM后重新安装和重新配置。
对于Linux-PAM-1.4.0及更高版本,默认不安装pam_cracklib模块。使用libpwquality-1.4.5强制使用强密码。
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/linux-pam
安装Linux PAM
如果您下载了文档,请通过发出以下命令来解压缩tarball。
tar -xf ../Linux-PAM-1.5.2-docs.tar.xz --strip-components=1
如果你想自己重新生成文档,修复configure脚本,使其能够检测lynx:
sed -e 's/dummy elinks/dummy lynx/' \
-e 's/-no-numbering -no-references/-force-html -nonumbers -stdin/' \
-i configure
运行以下命令编译和链接Linux PAM:
./configure --prefix=/usr \
--sbindir=/usr/sbin \
--sysconfdir=/etc \
--libdir=/usr/lib \
--enable-securedir=/usr/lib/security \
--docdir=/usr/share/doc/Linux-PAM-1.5.2 &&
make
要测试结果,必须存在合适的/etc/pam.d/other配置文件。
重新安装或升级Linux PAM
如果您的系统安装了Linux PAM并正在工作,那么在修改/etc/pam.d中的文件时要小心,因为您的系统可能完全无法使用。如果要运行测试,则不需要创建另一个/etc/pam.d/other文件。现有文件可用于测试。
你也应该知道make install会覆盖/etc/security和/etc/environment中的配置文件。如果您修改了这些文件,请务必备份它们。
第一次安装时,以root用户发出以下命令创建一个配置文件:
install -v -m755 -d /etc/pam.d &&
cat > /etc/pam.d/other << "EOF"
auth required pam_deny.so
account required pam_deny.so
password required pam_deny.so
session required pam_deny.so
EOF
现在通过发出make check来运行测试。在继续安装之前,请确保测试没有产生错误。请注意,测试非常长。将输出重定向到日志文件,以便您可以彻底检查它。
第一次安装时,以root用户发出以下命令,删除之前创建的配置文件:
rm -fv /etc/pam.d/other
现在,作为root用户:
make install &&
chmod -v 4755 /usr/sbin/unix_chkpwd
命令解释
--enable-securedir=/usr/lib/security: 该开关设置PAM模块的安装位置。
--disable-regenerate-docu : 如果需要的依赖项 (docbook-xml-4.5, docbook-xsl-nons-1.79.2, libxslt-1.1.37, 和 Lynx-2.8.9rel.1 或 W3m) 安装后,生成并安装了手册页、HTML和文本文档文件。此外,如果安装了fop-2.8,则生成并安装PDF文档。如果不想重新生成文档,请使用此开关。
chmod -v 4755 /usr/sbin/unix_chkpwd: 必须打开unix_chkpwd助手程序的setuid位,以便non-root进程可以访问Shadow文件。
配置 Linux-PAM
配置文件
/etc/security/* 和 /etc/pam.d/*
配置信息
配置信息放在/etc/pam.d/中。下面是一个示例文件:
# Begin /etc/pam.d/other
auth required pam_unix.so nullok
account required pam_unix.so
session required pam_unix.so
password required pam_unix.so nullok
# End /etc/pam.d/other
现在创建一些通用配置文件。作为root用户:
install -vdm755 /etc/pam.d &&
cat > /etc/pam.d/system-account << "EOF" &&
# Begin /etc/pam.d/system-account
account required pam_unix.so
# End /etc/pam.d/system-account
EOF
cat > /etc/pam.d/system-auth << "EOF" &&
# Begin /etc/pam.d/system-auth
auth required pam_unix.so
# End /etc/pam.d/system-auth
EOF
cat > /etc/pam.d/system-session << "EOF" &&
# Begin /etc/pam.d/system-session
session required pam_unix.so
# End /etc/pam.d/system-session
EOF
cat > /etc/pam.d/system-password << "EOF"
# Begin /etc/pam.d/system-password
# use sha512 hash for encryption, use shadow, and try to use any previously
# defined authentication token (chosen password) set by any prior module.
# Use the same number of rounds as shadow.
password required pam_unix.so sha512 shadow try_first_pass \
rounds=500000
# End /etc/pam.d/system-password
EOF
如果希望启用强密码支持,请安装libpwquality-1.4.5,并按照该页上的说明配置具有强密码支持的pam_pwquality PAM模块。
接下来,添加一个限制性的/etc/pam.d/other配置文件。有了这个文件,支持PAM的程序将无法运行,除非存在专门针对该应用程序的配置文件。
cat > /etc/pam.d/other << "EOF"
# Begin /etc/pam.d/other
auth required pam_warn.so
auth required pam_deny.so
account required pam_warn.so
account required pam_deny.so
password required pam_warn.so
password required pam_deny.so
session required pam_warn.so
session required pam_deny.so
# End /etc/pam.d/other
EOF
PAM手册页(man pam)为了解几个字段和允许的条目提供了一个很好的起点。推荐阅读Linux-PAM System Administrators’ Guide获取更多信息。
重要
您现在应该重新安装Shadow-4.13和Systemd-252软件包。
内容
安装程序: faillock, mkhomedir_helper, pam_namespace_helper, pam_timestamp_check, pwhistory_helper, unix_chkpwd 和 unix_update
安装库: libpam.so, libpamc.so 和 libpam_misc.so
安装目录: /etc/security, /usr/lib/security, /usr/include/security 和 /usr/share/doc/Linux-PAM-1.5.2
简要描述
faillock 显示和修改认证失败记录文件。
mkhomedir_helper 是创建主目录的辅助二进制文件。
pam_namespace_helper 是一个帮助程序,用于为用户会话配置私有命名空间。
pwhistory_helper 是一个帮助程序,它将密码哈希值从passwd或shadow传输到passwd。
pam_timestamp_check 用于检查默认时间戳是否有效。
unix_chkpwd 是一个辅助程序二进制文件,用于验证当前用户的密码。
unix_update 是更新给定用户密码的helper二进制文件。
libpam.so 提供应用程序和PAM模块之间的接口。
4.13 liboauth-1.0.3
简介liboauth
liboauth是实现OAuth Core RFC 5849标准的POSIX-C函数的集合。liboauth提供了根据OAuth规范转义和编码参数的函数,并提供了签名请求或验证OAuth签名以及执行HTTP请求的高级功能。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://downloads.sourceforge.net/liboauth/liboauth-1.0.3.tar.gz
-
下载MD5校验和: 689b46c2b3ab1a39735ac33f714c4f7f
-
下载大小: 496 KB
-
预计所需磁盘空间: 3.5 MB
-
预计构建时间: 小于 0.1 SBU
额外下载
- 使用openssl所需的补丁: https://www.linuxfromscratch.org/patches/blfs/11.3/liboauth-1.0.3-openssl-1.1.0-3.patch
liboauth 依赖
必要
可选
nss-3.88.1 和 Doxygen-1.9.6 (要构建文档)
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/liboauth
安装liboauth
为当前版本的openssl应用补丁:
patch -Np1 -i ../liboauth-1.0.3-openssl-1.1.0-3.patch
运行以下命令安装liboauth:
./configure --prefix=/usr --disable-static &&
make
如果您希望构建文档(需要Doxygen-1.9.6),请执行:
make dox
要测试结果,执行: make check.
现在,作为root用户:
make install
如果你之前已经构建了文档,以root用户运行以下命令来安装它:
install -v -dm755 /usr/share/doc/liboauth-1.0.3 &&
cp -rv doc/html/* /usr/share/doc/liboauth-1.0.3
命令解释
--disable-static: 此开关防止安装库的静态版本。
--enable-nss: 如果您希望使用Mozilla NSS而不是OpenSSL,请使用此开关。
内容
安装程序: None
安装库: liboauth.so
安装目录: /usr/share/doc/liboauth-1.0.3
简要描述
liboauth.so 提供了根据OAuth规范转义和编码字符串的函数,并提供了构建在上面的高级功能,可以使用NSS或OpenSSL对请求进行签名或验证签名,以计算哈希/签名。
4.14 libpwquality-1.4.5
简介libpwquality
libpwquality包提供了用于密码质量检查的常用函数,并根据其明显的随机性对它们进行评分。该库还提供了一个函数,用于生成具有良好发音的随机密码。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载MD5校验和: 6b70e355269aef0b9ddb2b9d17936f21
-
下载大小: 424 KB
-
预计所需磁盘空间: 5.4 MB
-
预计构建时间: 0.1 SBU
libpwquality 依赖
必要
推荐
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/libpwquality
安装libpwquality
运行以下命令安装libpwquality:
./configure --prefix=/usr \
--disable-static \
--with-securedir=/usr/lib/security \
--with-python-binary=python3 &&
make
这个包没有附带测试套件。
现在,作为root用户:
make install
命令解释
--with-python-binary=python3: 这个参数给出了Python二进制文件的位置。默认值是python,并且需要Python-2.7.18。
配置 libpwquality
libpwquality旨在成为现已过时的pam_cracklib.so PAM模块的功能性替代品。要配置系统使用pam_pwquality模块,以root用户执行以下命令:
mv /etc/pam.d/system-password{,.orig} &&
cat > /etc/pam.d/system-password << "EOF"
# Begin /etc/pam.d/system-password
# check new passwords for strength (man pam_pwquality)
password required pam_pwquality.so authtok_type=UNIX retry=1 difok=1 \
minlen=8 dcredit=0 ucredit=0 \
lcredit=0 ocredit=0 minclass=1 \
maxrepeat=0 maxsequence=0 \
maxclassrepeat=0 gecoscheck=0 \
dictcheck=1 usercheck=1 \
enforcing=1 badwords="" \
dictpath=/usr/lib/cracklib/pw_dict
# use sha512 hash for encryption, use shadow, and use the
# authentication token (chosen password) set by pam_pwquality
# above (or any previous modules). Also set the number of crypt rounds
# to the value used in shadow.
password required pam_unix.so sha512 shadow use_authtok \
rounds=500000
# End /etc/pam.d/system-password
EOF
内容
安装程序: pwscore 和 pwmake
安装库: pam_pwquality.so 和 libpwquality.so
安装目录: None
简要描述
pwmake 是一个简单的可配置工具,用于生成随机和相对容易发音的密码。
pwscore 是一个检查密码质量的简单工具。
libpwquality.so 包含检查密码质量的API函数。
pam_pwquality.so 是一个Linux PAM模块,用于执行密码质量检查。
4.15 MIT Kerberos V5-1.20.1
简介MIT Kerberos V5
MIT Kerberos V5是Kerberos 5的免费实现。Kerberos是一种网络身份验证协议。它集中了身份验证数据库,并使用支持Kerberos的应用程序与支持Kerberos的服务器或服务一起工作,从而允许通过内部网络或Internet进行单次登录和加密通信。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://kerberos.org/dist/krb5/1.20/krb5-1.20.1.tar.gz
-
下载MD5校验和: 73f5780e7b587ccd8b8cfc10c965a686
-
下载大小: 8.3 MB
-
预计所需磁盘空间: 94 MB (添加14 MB用于测试)
-
预计构建时间: 0.3 SBU (使用并行数=4;添加5.8 SBU用于测试)
MIT Kerberos V5 依赖
可选
BIND Utilities-9.18.12, GnuPG-2.4.0 (to authenticate the package), keyutils-1.6.1, OpenLDAP-2.6.4, Valgrind-3.20.0 (在测试套件中使用), yasm-1.3.0, libedit, cmocka, kdcproxy, pyrad, 和 resolv_wrapper
注意
系统上需要某种时间同步功能(如ntp-4.2.8p15),因为如果使用Kerberos的客户机和KDC服务器之间存在时间差,Kerberos将无法进行身份验证。
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/mitkrb
安装MIT Kerberos V5
运行以下命令安装MIT Kerberos V5:
cd src &&
sed -i -e '/eq 0/{N;s/12 //}' plugins/kdb/db2/libdb2/test/run.test &&
sed -i '/t_kadm5.py/d' lib/kadm5/Makefile.in &&
./configure --prefix=/usr \
--sysconfdir=/etc \
--localstatedir=/var/lib \
--runstatedir=/run \
--with-system-et \
--with-system-ss \
--with-system-verto=no \
--enable-dns-for-realm &&
make
要测试构建,以root用户的身份发出命令:make -k -j1 check。使用最新版本的dejagnu和glibc时,一些测试可能会失败。如果系统没有连接到网络,一些测试可能会挂起很长时间并失败。
现在,作为root用户:
make install &&
install -v -dm755 /usr/share/doc/krb5-1.20.1 &&
cp -vfr ../doc/* /usr/share/doc/krb5-1.20.1
命令解释
这两个sed命令删除已知失败的测试。
--localstatedir=/var/lib: 使用该选项是为了使Kerberos变量运行时数据位于/var/lib而不是/usr/var中。
--runstatedir=/run: 使用该选项是为了使Kerberos运行时状态信息位于/run中,而不是已弃用的/var/run中。
--with-system-et: 此开关导致构建使用系统安装的错误表支持软件的版本。
--with-system-ss: 此开关导致构建使用系统安装的子系统命令行界面软件版本。
--with-system-verto=no: 这个开关修复了包中的一个错误:它不能识别以前安装的verto库。这不是问题,如果重新安装相同的版本,但如果你正在更新,旧的库被用作系统的一个,而不是安装新版本。
--enable-dns-for-realm: 此开关允许使用DNS服务器解析域。
--with-ldap: 如果要编译OpenLDAP数据库后端模块,请使用此开关。
配置 MIT Kerberos V5
配置文件
/etc/krb5.conf 和 /var/lib/krb5kdc/kdc.conf
配置信息
Kerberos 配置
提示
您应该考虑安装某种密码检查字典,以便将安装配置为只接受强密码。CrackLib-2.9.8指令中显示了一个合适的字典。注意,只能使用一个文件,但您可以将多个文件连接到一个文件中。下面显示的配置文件假设您已经安装了一个字典到/usr/share/dict/words。
使用root用户发出的以下命令创建Kerberos配置文件:
cat > /etc/krb5.conf << "EOF"
# Begin /etc/krb5.conf
[libdefaults]
default_realm = <EXAMPLE.ORG>
encrypt = true
[realms]
<EXAMPLE.ORG> = {
kdc = <belgarath.example.org>
admin_server = <belgarath.example.org>
dict_file = /usr/share/dict/words
}
[domain_realm]
.<example.org> = <EXAMPLE.ORG>
[logging]
kdc = SYSLOG:INFO:AUTH
admin_server = SYSLOG:INFO:AUTH
default = SYSLOG:DEBUG:DAEMON
# End /etc/krb5.conf
EOF
您需要用您的域名和适当的主机名替换出现的<belgarath>和<example.org>名称。
default_realm 应该是您的域名更改为全部大写。这不是必需的,但Heimdal和MIT都建议这样做。
encrypt = true 为使用kerberos的客户机和服务器之间的所有流量提供加密。这是不必要的,可以省略。如果将其关闭,则可以使用客户端程序上的开关来加密从客户端到服务器的所有流量。
[realms]参数告诉客户机程序在哪里查找KDC身份验证服务。
[domain_realm]部分将域映射到域。
创建KDC数据库:
kdb5_util create -r <EXAMPLE.ORG> -s
现在您应该用主体(用户)填充数据库。现在,只需使用您的常规登录名或root即可。
kadmin.local
kadmin.local: add_policy dict-only
kadmin.local: addprinc -policy dict-only <loginname>
KDC服务器和任何运行kerberos server守护进程的机器都必须安装主机密钥:
kadmin.local: addprinc -randkey host/<belgarath.example.org>
在提示时选择默认值后,您必须将数据导出到keytab文件:
kadmin.local: ktadd host/<belgarath.example.org>
这应该在/etc中创建一个名为krb5.keytab的文件(Kerberos 5)。该文件应该具有600(仅限root rw)权限。防止公共访问keytab文件对于Kerberos安装的整体安全性至关重要。
退出kadmin程序(使用quit或exit)并返回到shell提示符。手动启动KDC守护进程,只是为了测试安装:
/usr/sbin/krb5kdc
尝试使用以下命令获取ticket:
kinit <loginname>
系统将提示您输入所创建的密码。在你得到你的票之后,你可以用下面的命令列出它:
klist
关于票的信息应该显示在屏幕上。
要测试keytab文件的功能,以root用户发出以下命令:
ktutil
ktutil: rkt /etc/krb5.keytab
ktutil: l
这应该转储主机主体的列表,以及用于访问主体的加密方法。
创建一个可修改的空ACL文件:
touch /var/lib/krb5kdc/kadm5.acl
此时,如果到目前为止一切都很成功,那么您可以对软件包的安装和配置感到相当自信。
额外的信息
有关其他信息,请参阅上述指令所基于的documentation for krb5-1.20.1。
Systemd Unit
如果您希望在引导时启动Kerberos服务,请使用以下命令安装blfs-systemd-units-20220720包中包含的krb5.service单元:
make install-krb5
内容
安装程序: gss-client, gss-server, k5srvutil, kadmin, kadmin.local, kadmind, kdb5_ldap_util (可选), kdb5_util, kdestroy, kinit, klist, kpasswd, kprop, kpropd, kproplog, krb5-config, krb5-send-pr, krb5kdc, ksu, kswitch, ktutil, kvno, sclient, sim_client, sim_server, sserver, uuclient, 和 uuserver
安装库: libgssapi_krb5.so, libgssrpc.so, libk5crypto.so, libkadm5clnt_mit.so, libkadm5clnt.so, libkadm5srv_mit.so, libkadm5srv.so, libkdb_ldap.so (可选), libkdb5.so, libkrad.so, libkrb5.so, libkrb5support.so, libverto.so, 以及/usr/lib/krb5树下的一些插件。
安装目录: /usr/include/{gssapi,gssrpc,kadm5,krb5}, /usr/lib/krb5, /usr/share/{doc/krb5-1.20.1,examples/krb5}, /var/lib/krb5kdc, 和 /run/krb5kdc
简要描述
gss-client 是GSSAPI测试客户端。
gss-server 是GSSAPI测试服务器。
k5srvutil 是一个主机键表操作实用程序。
kadmin 是一个用于修改Kerberos数据库的实用程序。
kadmin.local 是一个类似于kadmin的实用程序,但如果数据库是db2,则本地客户端kadmin.local,旨在直接在主KDC上运行,而不需要Kerberos身份验证。
kadmind 是一个服务器,用于对Kerberos数据库进行管理访问。
kdb5_ldap_util (optional) 允许管理员管理域、Kerberos服务和ticket策略。
kdb5_util 是KDC数据库实用程序。
kdestroy 移除当前的ticket。
kinit 用于作为主体向Kerberos服务器进行身份验证,并获取ticket授予ticket,该ticket以后可用于获取其他服务的ticket。
klist 读取并显示凭据缓存中的当前ticket。
kpasswd 是一个修改Kerberos 5密码的程序。
kprop 获取指定格式的主体数据库,并将其转换为数据库记录流。
kpropd 接收由kprop发送的数据库,并将其作为本地数据库写入。
kproplog 将KDC数据库更新日志的内容显示为标准输出。
krb5-config 提供有关如何将程序链接到库的信息。
krb5kdc 是Kerberos 5服务器。
krb5-send-pr 向中心支持站点发送问题报告(PR)。
ksu 是使用Kerberos协议的超级用户程序。需要正确配置/etc/shells和~/.k5login,其中包含授权成为超级用户的主体。
kswitch 如果缓存集合可用,则使指定的凭据缓存成为集合的主缓存。
ktutil 是一个用于管理Kerberos密钥选项卡的程序。
kvno 打印Kerberos主体的密钥版本号。
sclient 用于联系示例服务器并使用Kerberos 5 ticket对其进行身份验证,然后显示服务器的响应。
sim_client 是一个简单的UDP-based的示例客户机程序,用于演示。
sim_server 是一个简单的UDP-based的服务器应用程序,用于演示。
sserver 是示例Kerberos 5服务器。
uuclient 是另一个示例客户端。
uuserver 是另一个示例服务器。
libgssapi_krb5.so 包含通用安全服务应用程序编程接口(GSSAPI)功能,该功能以通用的方式向调用者提供安全服务,可由一系列底层机制和技术支持,从而允许应用程序在不同环境中的源代码级可移植性。
libkadm5clnt.so 包含Kerberos 5客户端程序所需的管理身份验证和密码检查功能。
libkadm5srv.so 包含Kerberos 5服务器所需的管理身份验证和密码检查功能。
libkdb5.so 是Kerberos 5身份验证/授权数据库访问库。
libkrad.so 包含RADIUS功能的内部支持库。
libkrb5.so 是一个通用的Kerberos 5库。
4.16 Nettle-3.8.1
简介Nettle
Nettle包包含一个低级加密库,该库旨在轻松适应许多上下文中。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://ftp.gnu.org/gnu/nettle/nettle-3.8.1.tar.gz
-
下载MD5校验和: e15c5fd5cc901f5dde6a271d7f2320d1
-
下载大小: 2.3 MB
-
预计所需磁盘空间: 90 MB (与测试)
-
预计构建时间: 0.1 SBU (与测试;都使用并行数=4)
Nettle 依赖
可选
Valgrind-3.20.0 (测试是可选的)
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/nettle
安装Nettle
运行以下命令安装Nettle:
./configure --prefix=/usr --disable-static &&
make
要测试结果,执行: make check.
现在,作为root用户:
make install &&
chmod -v 755 /usr/lib/lib{hogweed,nettle}.so &&
install -v -m755 -d /usr/share/doc/nettle-3.8.1 &&
install -v -m644 nettle.html /usr/share/doc/nettle-3.8.1
命令解释
--disable-static: 此开关防止在库的静态版本上安装。
内容
安装程序: nettle-hash, nettle-lfib-stream, nettle-pbkdf2, pkcs1-conv 和 sexp-conv
安装库: libhogweed.so 和 libnettle.so
安装目录: /usr/include/nettle 和 /usr/share/doc/nettle-3.8.1
简要描述
nettle-hash 使用指定的算法计算哈希值。
nettle-lfib-stream 使用Knuth的滞后斐波那契生成器输出伪随机(非加密)字节序列。流对于测试很有用,但不应该用于生成加密密钥或其他需要真正随机性的东西。
nettle-pbkdf2 是一个基于密码的密钥派生函数,它接受密码或密码短语作为输入,并返回一个增强的密码,通过使用salting和其他昂贵的计算来防止预计算攻击。
pkcs1-conv 将私有和公共RSA密钥从PKCS #1格式转换为sexp格式。
sexp-conv 将s-expression转换为不同的编码。
4.17 NSS-3.88.1
简介NSS
网络安全服务(NSS)包是一组库,旨在支持启用安全的客户机和服务器应用程序的跨平台开发。使用NSS构建的应用程序可以支持 SSL v2 and v3, TLS, PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, X.509 v3 证书和其他安全标准。这对于在应用程序中实现SSL和S/MIME或其他Internet安全标准非常有用。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://archive.mozilla.org/pub/security/nss/releases/NSS_3_88_1_RTM/src/nss-3.88.1.tar.gz
-
下载MD5校验和: 7ca8ff8ed672d82290c3122f38708579
-
下载大小: 69 MB
-
预计所需磁盘空间: 297 MB (添加129 MB用于测试)
-
预计构建时间: 1.2 SBU (当并行数=4时,在AMD ryzen上添加少于20个SBU,或在Intel机器上添加至少30个SBU)
额外下载
NSS 依赖
必要
推荐
SQLite-3.40.1 和 p11-kit-0.24.1 (运行时)
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/nss
安装NSS
运行以下命令安装NSS:
patch -Np1 -i ../nss-3.88.1-standalone-1.patch &&
patch -Np1 -i ../nss-3.88.1-standalone-1.patch &&
cd nss &&
make BUILD_OPT=1 \
NSPR_INCLUDE_DIR=/usr/include/nspr \
USE_SYSTEM_ZLIB=1 \
ZLIB_LIBS=-lz \
NSS_ENABLE_WERROR=0 \
$([ $(uname -m) = x86_64 ] && echo USE_64=1) \
$([ -f /usr/include/sqlite3.h ] && echo NSS_USE_SYSTEM_SQLITE=1)
要运行测试,请执行以下命令:
cd tests &&
HOST=localhost DOMSUF=localdomain ./all.sh
cd ../
注意
有关测试的一些信息:
-
需要设置HOST=localhost和DOMSUF=localdomain。如果没有这些变量,就需要指定FQDN,这种通用的方式应该适用于所有人,只要是
localhost.localdomain定义在/etc/hosts中,在the LFS book中完成。 -
测试需要很长时间才能运行。如果需要,在all.sh脚本中有关于运行整个测试套件子集的信息。
-
中断测试时,测试套件无法关闭正在运行的测试服务器。这会导致测试中的无限循环,其中测试套件试图杀死不再存在的服务器,因为它提取了错误的PID。
-
测试套件结果(HTML格式!)可以在 ../../test_results/security/localhost.1/results.html 中找到。
-
由于未知的原因,一些测试可能会在某些英特尔机器上失败。
现在,作为root用户:
cd ../dist &&
install -v -m755 Linux*/lib/*.so /usr/lib &&
install -v -m644 Linux*/lib/{*.chk,libcrmf.a} /usr/lib &&
install -v -m755 -d /usr/include/nss &&
cp -v -RL {public,private}/nss/* /usr/include/nss &&
chmod -v 644 /usr/include/nss/* &&
install -v -m755 Linux*/bin/{certutil,nss-config,pk12util} /usr/bin &&
install -v -m644 Linux*/lib/pkgconfig/nss.pc /usr/lib/pkgconfig
命令解释
BUILD_OPT=1: 这个选项被传递给make,这样编译时就不会在二进制文件中内置调试符号,并使用默认的编译器优化。
NSPR_INCLUDE_DIR=/usr/include/nspr: 该选项设置nspr头文件的位置。
USE_SYSTEM_ZLIB=1: 这个选项被传递给make以确保libssl3.so库被链接到系统安装的zlib而不是in-tree版本。
ZLIB_LIBS=-lz: 该选项提供链接到系统zlib所需的链接器标志。
$([ $(uname -m) = x86_64 ] && echo USE_64=1): 在x86_64上需要USE_64=1选项,否则make将尝试(并失败)创建32位对象。[ $(uname -m) = x86_64 ]测试确保它对32位系统没有影响。
([ -f /usr/include/sqlite3.h ] && echo NSS_USE_SYSTEM_SQLITE=1): 这将测试是否安装了sqlite,如果安装了,它将echo选项NSS_USE_SYSTEM_SQLITE=1以make以便libsoftokn3.so将链接到sqlite的系统版本。
NSS_DISABLE_GTESTS=1: 如果您不需要运行NSS测试套件,请将此选项附加到make命令,以防止编译测试并节省一些构建时间。
配置 NSS
如果安装了p11-kit-0.24.1, p11-kit信任模块(/usr/lib/pkcs11/p11-kit-trust.so)可以作为/usr/lib/libnssckbi.so的替代模块。因此,透明地使系统ca可用于NSS感知的应用程序,而不是由/usr/lib/libnssckbi.so提供的静态列表。以root用户执行如下命令:
ln -sfv ./pkcs11/p11-kit-trust.so /usr/lib/libnssckbi.so
此外,对于不使用内部数据库(/usr/lib/libnssckbi.so)的依赖应用程序,make-ca-1.12页面中包含的/usr/sbin/make-ca脚本可以通过-n开关或修改/etc/make-ca/make-ca.conf文件生成系统范围的NSS数据库。
内容
安装程序: certutil, nss-config, 和 pk12util
安装库: libcrmf.a, libfreebl3.so, libfreeblpriv3.so, libnss3.so, libnssckbi.so, libnssckbi-testlib.so, libnssdbm3.so, libnsssysinit.so, libnssutil3.so, libpkcs11testmodule.so, libsmime3.so, libsoftokn3.so, 和 libssl3.so
安装目录: /usr/include/nss
简要描述
certutil 为Mozilla证书数据库工具。它是一个命令行实用程序,可以创建和修改Netscape Communicator cert8.db和key3.db数据库文件。它还可以列出、生成、修改或删除cert8.db文件中的证书,创建或更改密码,生成新的公钥和私钥对,显示密钥数据库的映像,或删除key3.db文件中的密钥对。
nss-config 用于确定已安装的NSS库的NSS库设置。
pk12util 是从pkcs #12文件导入证书和密钥到NSS或导出它们的工具。它还可以列出这些文件中的证书和密钥。
4.18 OpenSSH-9.2p1
简介OpenSSH
OpenSSH包中包含ssh客户端和sshd守护进程。这对于加密身份验证和网络上的后续流量非常有用。ssh和scp命令分别是telnet和rcp的安全实现。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.2p1.tar.gz
-
下载MD5校验和: f78b2acac4bb299629a8c58ddc3fac63
-
下载大小: 1.8 MB
-
预计所需磁盘空间: 44 MB (添加22 MB用于测试)
-
预计构建时间: 0.2 SBU (使用并行数=4;无论处理器速度如何,运行测试大约需要20分钟)
OpenSSH 依赖
可选
GDB-13.1 (为测试), Linux-PAM-1.5.2, a graphical environment, MIT Kerberos V5-1.20.1, Which-2.21 (for tests), libedit, LibreSSL Portable, OpenSC, 和 libsectok
可选运行时 (只用于收集entropy)
Net-tools-2.10, 和 Sysstat-12.7.2
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/OpenSSH
安装OpenSSH
OpenSSH在连接到其他计算机时作为两个进程运行。第一个进程是一个特权进程,根据需要控制特权的发放。第二个进程与网络通信。需要额外的安装步骤来设置适当的环境,可以通过以root用户发出以下命令来执行:
install -v -m700 -d /var/lib/sshd &&
chown -v root:sys /var/lib/sshd &&
groupadd -g 50 sshd &&
useradd -c 'sshd PrivSep' \
-d /var/lib/sshd \
-g sshd \
-s /bin/false \
-u 50 sshd
运行以下命令安装OpenSSH:
./configure --prefix=/usr \
--sysconfdir=/etc/ssh \
--with-privsep-path=/var/lib/sshd \
--with-default-path=/usr/bin \
--with-superuser-path=/usr/sbin:/usr/bin \
--with-pid-dir=/run &&
make
测试套件需要安装scp的副本才能完成多路复用测试。要运行测试套件,首先将scp程序复制到/usr/bin,确保首先备份了任何现有的副本。
要测试结果,执行: make -j1 tests.
现在,作为root用户:
make install &&
install -v -m755 contrib/ssh-copy-id /usr/bin &&
install -v -m644 contrib/ssh-copy-id.1 \
/usr/share/man/man1 &&
install -v -m755 -d /usr/share/doc/openssh-9.2p1 &&
install -v -m644 INSTALL LICENCE OVERVIEW README* \
/usr/share/doc/openssh-9.2p1
命令解释
--sysconfdir=/etc/ssh: 这样可以防止配置文件被安装在/usr/etc中。
--with-default-path=/usr/bin 和 --with-superuser-path=/usr/sbin:/usr/bin: 这些设置PATH与LFS和BLFS Shadow包一致。
--with-pid-dir=/run: 这可以防止OpenSSH引用已弃用的 /var/run.
--with-pam: 此参数在构建中启用Linux-PAM支持。
--with-xauth=/usr/bin/xauth: 为X身份验证设置xauth二进制文件的默认位置。如果xauth将安装到不同的路径,请更改位置。这也可以通过sshd_config使用XAuthLocation关键字进行控制。如果已经安装了Xorg,则可以省略此开关。
--with-kerberos5=/usr: 该选项用于在构建中包含Kerberos 5支持。
--with-libedit: 此选项启用sftp的行编辑和历史功能。
配置 OpenSSH
配置文件
~/.ssh/*, /etc/ssh/ssh_config, 和 /etc/ssh/sshd_config
不需要对这些文件进行任何更改。但是,您可能希望查看/etc/ssh/文件,并对系统的安全性进行适当的更改。一个建议的改变是你禁用root登录通过ssh。以root用户执行以下命令,禁止root通过ssh登录:
echo "PermitRootLogin no" >> /etc/ssh/sshd_config
如果你想在不输入密码的情况下登录,首先用ssh-keygen创建~/.ssh/id_rsa和~/.ssh/id_rsa.pub,然后将~/.ssh/id_rsa.pub复制到你想登录的远程计算机上的~/.ssh/authorized_keys。你需要修改REMOTE_USERNAME和REMOTE_HOSTNAME作为远程计算机的用户名和主机名,你还需要输入ssh-copy-id命令成功的密码:
ssh-keygen &&
ssh-copy-id -i ~/.ssh/id_rsa.pub REMOTE_USERNAME@REMOTE_HOSTNAME
一旦你使用了无密码登录,它实际上比使用密码登录更安全(因为私钥比大多数人的密码长得多)。如果你现在想禁用密码登录,作为root用户:
echo "PasswordAuthentication no" >> /etc/ssh/sshd_config &&
echo "KbdInteractiveAuthentication no" >> /etc/ssh/sshd_config
如果您添加了Linux-PAM支持,并且希望ssh使用它,那么您需要为sshd添加一个配置文件并启用LinuxPAM的使用。注意,ssh只使用PAM检查密码,如果禁用了密码登录,则不需要这些命令。如果您想要使用PAM,以root用户的身份发出以下命令:
sed 's@d/login@d/sshd@g' /etc/pam.d/login > /etc/pam.d/sshd &&
chmod 644 /etc/pam.d/sshd &&
echo "UsePAM yes" >> /etc/ssh/sshd_config
其他配置信息可以在sshd、ssh和ssh-agent的手册页中找到。
Systemd Unit
要在系统启动时启动SSH服务器,请安装blfs-systemd-units-20220720包中包含的sshd.service单元。
make install-sshd
内容
安装程序: scp, sftp, ssh, ssh-add, ssh-agent, ssh-copy-id, ssh-keygen, ssh-keyscan, 和 sshd
安装库: None
安装目录: /etc/ssh, /usr/share/doc/openssh-9.2p1, 和 /var/lib/sshd
简要描述
scp 是一个文件复制程序,其行为类似于rcp,只是它使用了加密协议。
sftp 是一个类似ftp的程序,在SSH1和SSH2协议上工作。
ssh 是一个类似于rlogin/rsh的客户端程序,只是它使用了加密协议。
sshd 是一个监听ssh登录请求的守护进程。
ssh-add 是一个向ssh-agent添加密钥的工具。
ssh-agent 是可以存储私钥的身份验证代理。
ssh-copy-id 是启用使用本地密钥在远程计算机上登录的脚本。
ssh-keygen 是一个密钥生成工具。
ssh-keyscan 是一个实用程序,用于从多个主机收集公共主机密钥。
4.19 p11-kit-0.24.1
简介p11-kit
p11-kit包提供了一种加载和枚举PKCS #11(加密令牌接口标准)模块的方法。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://github.com/p11-glue/p11-kit/releases/download/0.24.1/p11-kit-0.24.1.tar.xz
-
下载MD5校验和: 67b2539bdca6b4bedaeecc12864d2796
-
下载大小: 820 KB
-
预计所需磁盘空间: 44 MB (与测试)
-
预计构建时间: 0.5 SBU (与测试)
p11-kit 依赖
推荐
libtasn1-4.19.0 和 make-ca-1.12 (运行时)
可选
GTK-Doc-1.33.2, libxslt-1.1.37, 和 nss-3.88.1 (运行时)
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/p11-kit
安装p11-kit
准备分配具体的anchor钩:
sed '20,$ d' -i trust/trust-extract-compat &&
cat >> trust/trust-extract-compat << "EOF"
# Copy existing anchor modifications to /etc/ssl/local
/usr/libexec/make-ca/copy-trust-modifications
# Update trust stores
/usr/sbin/make-ca -r
EOF
运行以下命令安装p11-kit:
mkdir p11-build &&
cd p11-build &&
meson --prefix=/usr \
--buildtype=release \
-Dtrust_paths=/etc/pki/anchors &&
ninja
要测试结果,执行: ninja test.
现在,作为root用户:
ninja install &&
ln -sfv /usr/libexec/p11-kit/trust-extract-compat \
/usr/bin/update-ca-certificates
命令解释
--buildtype=release: 指定适合于包的稳定版本的构建类型,因为默认值可能会产生未优化的二进制文件。
-Dtrust_paths=/etc/pki/anchors: 此开关设置libp11-kit.so使用的受信任证书的位置。
-Dhash_impl=freebl: 如果您想使用NSS的Freebl库进行SHA1和MD5哈希,请使用此开关。
-Dgtk_doc=true: 如果您已经安装了GTK-Doc-1.33.2和libxslt-1.1.37,并且希望重新构建文档并生成手册页,请使用此开关。
配置 p11-kit
p11-kit信任模块(/usr/lib/pkcs11/p11-kit-trust.so)可以用作/usr/lib/libnssckbi.so的直接替代品,以透明地使系统ca可用于NSS感知应用程序,而不是/usr/lib/libnssckbi.so提供的静态列表。以root用户执行如下命令:
ln -sfv ./pkcs11/p11-kit-trust.so /usr/lib/libnssckbi.so
内容
安装程序: p11-kit, trust, 和 update-ca-certificates
安装库: libp11-kit.so 和 p11-kit-proxy.so
安装目录: /etc/pkcs11, /usr/include/p11-kit-1, /usr/lib/pkcs11, /usr/libexec/p11-kit, /usr/share/gtk-doc/html/p11-kit, 和 /usr/share/p11-kit
简要描述
p11-kit 是一个命令行工具,可用于对系统上配置的PKCS#11模块执行操作。
trust 是检查和修改共享信任策略存储区的命令行工具。
update-ca-certificates 是一个命令行工具,用于从更新的锚存储区提取本地证书,并重新生成系统上的所有anchors和证书存储区。这是在BLFS上无条件完成的,使用--force和--get标志来make-ca,可能不应该用于自动更新。
libp11-kit.so 包含用于协调任何PKCS#11模块初始化和终结化的函数。
p11-kit-proxy.so 是PKCS#11代理模块。
4.20 Polkit-122
简介Polkit
Polkit是用于定义和处理授权的工具包。它用于允许非特权进程与特权进程通信。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://gitlab.freedesktop.org/polkit/polkit/-/archive/122/polkit-122.tar.gz
-
下载MD5校验和: bbe3e745fc5bc1a41f1b5044f09a0f26
-
下载大小: 728 KB
-
预计所需磁盘空间: 7.0 MB (与测试)
-
预计构建时间: 0.3 SBU (对于测试,使用并行数=4)
Polkit 依赖
必要
推荐
gobject-introspection-1.74.0, libxslt-1.1.37, Linux-PAM-1.5.2
注意
因为systemd-logind使用PAM来注册用户会话,所以用PAM支持构建Polkit是一个好主意,这样systemd-logind可以跟踪Polkit会话。
可选
GTK-Doc-1.33.2, JS-102.8.0 (可以用来代替duktape), 和 dbusmock-0.28.7 (为测试)
必要运行时依赖
可选运行时依赖
一个用于在图形环境中使用polkit的polkit身份验证代理:用于KDE的Plasma-5.26.5中的polkit-kde-agent,用于GNOME3的gnome-shell-43.3中的代理,用于XFCE的polkit-gnome-0.105中的代理,以及用于LXDE的LXSession-0.5.5中的lxpolkit。
注意
如果安装了libxslt-1.1.37,则需要docbook-xml-4.5和docbook-xsl-nons-1.79.2。如果你已经安装了libxslt-1.1.37,但是你不想安装上面提到的任何DocBook包,你需要在下面的说明中使用-Dman=false。
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/polkit
安装Polkit
应该有一个专门的用户和组来控制启动后的polkitd守护进程。以root用户发出以下命令:
groupadd -fg 27 polkitd &&
useradd -c "PolicyKit Daemon Owner" -d /etc/polkit-1 -u 27 \
-g polkitd -s /bin/false polkitd
运行以下命令安装Polkit:
mkdir build &&
cd build &&
meson --prefix=/usr \
--buildtype=release \
-Dman=true \
-Dsession_tracking=libsystemd-login \
-Dtests=true \
-Djs_engine=duktape \
.. &&
ninja
要测试结果,首先确保系统D-Bus守护进程正在运行,并且安装了D-Bus Python-1.3.2和dbusmock-0.28.7。然后运行meson test -t3。
现在,作为root用户:
ninja install
命令解释
--buildtype=release: 指定适合于包的稳定版本的构建类型,因为默认值可能会产生未优化的二进制文件。
-Dtests=true: 这个开关允许运行这个包的测试套件。由于Polkit用于授权,其完整性可能会影响系统安全性。因此,建议运行测试套件来构建这个包。
-Djs_engine=duktape: 这个开关允许使用duktape-2.7.0 JavaScript引擎。如果使用JS-102.8.0 JavaScript引擎,请替换为-Djs_engine=mozjs。
-Dauthfw=shadow: 此开关使包能够使用Shadow而不是Linux PAM身份验证框架。如果没有安装Linux PAM,可以使用它。
-Dintrospection=false: 如果您确定polkit不需要gobject-introspection文件,或者没有安装gobject-introspection,请使用此选项。
-Dman=false: 使用此选项禁用生成和安装手册页。如果没有安装libxslt,这很有用。
-Dexamples=true: 使用此选项构建示例程序。
-Dgtk_doc=true: 使用此选项启用构建和安装API文档。
配置 Polkit
PAM 配置
注意
如果没有使用Linux PAM支持构建Polkit,可以跳过本节。
如果您已经使用Linux PAM支持构建了Polkit,则需要修改默认安装的默认PAM配置文件,以使Polkit能够正确地与BLFS一起工作。以root用户发出以下命令,创建Linux PAM的配置文件:
cat > /etc/pam.d/polkit-1 << "EOF"
# Begin /etc/pam.d/polkit-1
auth include system-auth
account include system-account
password include system-password
session include system-session
# End /etc/pam.d/polkit-1
EOF
内容
安装程序: pkaction, pkcheck, pkexec, pkttyagent, 和 polkitd
安装库: libpolkit-agent-1.so 和 libpolkit-gobject-1.so
安装目录: /etc/polkit-1, /usr/include/polkit-1, /usr/lib/polkit-1, /usr/share/gtk-doc/html/polkit-1, 和 /usr/share/polkit-1
简要描述
pkaction 用于获取已注册PolicyKit动作的信息。
pkcheck 用于检查进程是否被授权进行操作。
pkexec 允许授权用户以其他用户的身份执行命令。
pkttyagent 用于启动主题的文本身份验证代理。
polkitd 在系统消息总线上提供org.freedesktop.PolicyKit1 D-Bus服务。
libpolkit-agent-1.so 包含Polkit身份验证代理API函数。
libpolkit-gobject-1.so 包含Polkit授权API函数。
4.21 polkit-gnome-0.105
简介Polkit GNOME
Polkit GNOME包为Polkit提供了一个身份验证代理,它与GNOME桌面环境集成得很好。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://download.gnome.org/sources/polkit-gnome/0.105/polkit-gnome-0.105.tar.xz
-
下载 (FTP): ftp://ftp.acc.umu.se/pub/gnome/sources/polkit-gnome/0.105/polkit-gnome-0.105.tar.xz
-
下载MD5校验和: 50ecad37c8342fb4a52f590db7530621
-
下载大小: 305 KB
-
预计所需磁盘空间: 5.0 MB
-
预计构建时间: 0.1 SBU
额外下载
- 必要补丁: https://www.linuxfromscratch.org/patches/blfs/11.3/polkit-gnome-0.105-consolidated_fixes-1.patch
Polkit GNOME 依赖
必要
AccountsService-22.08.8, GTK+-3.24.36, 和 Polkit-122
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/polkit-gnome
安装Polkit GNOME
首先,应用一些修复程序,允许使用正确的用户图标,以及一些安全修复程序:
patch -Np1 -i ../polkit-gnome-0.105-consolidated_fixes-1.patch
运行以下命令安装Polkit GNOME:
./configure --prefix=/usr &&
make
这个包没有附带测试套件。
现在,作为root用户:
make install
配置 Polkit GNOME
自动启动
要使身份验证框架工作,需要启动polkit-gnome-authentification-agent-1。然而,make install没有为Polkit GNOME安装启动文件,所以你必须自己创建它。
以root用户的身份发出以下命令,为Polkit GNOME创建一个启动文件:
mkdir -p /etc/xdg/autostart &&
cat > /etc/xdg/autostart/polkit-gnome-authentication-agent-1.desktop << "EOF"
[Desktop Entry]
Name=PolicyKit Authentication Agent
Comment=PolicyKit Authentication Agent
Exec=/usr/libexec/polkit-gnome-authentication-agent-1
Terminal=false
Type=Application
Categories=
NoDisplay=true
OnlyShowIn=GNOME;XFCE;Unity;
AutostartCondition=GNOME3 unless-session gnome
EOF
内容
安装程序: polkit-gnome-authentication-agent-1
安装库: None
安装目录: None
简要描述
polkit-gnome-authentication-agent-1 是Polkit身份验证代理。
4.22 Shadow-4.13
简介Shadow
Shadow确实安装在LFS中,除非在LFS系统完成后安装了CrackLib或Linux-PAM,否则没有理由重新安装它。如果您在LFS之后安装了CrackLib,那么重新安装Shadow将启用强密码支持。如果您已经安装了Linux-PAM,重新安装Shadow将允许诸如login和su之类的程序利用PAM。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://github.com/shadow-maint/shadow/releases/download/4.13/shadow-4.13.tar.xz
-
下载MD5校验和: b1ab01b5462ddcf43588374d57bec123
-
下载大小: 1.7 MB
-
预计所需磁盘空间: 45 MB
-
预计构建时间: 0.2 SBU
Shadow 依赖
必要
Linux-PAM-1.5.2 或 CrackLib-2.9.8
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/shadow
安装Shadow
重要
下面显示的安装命令适用于已经安装了Linux-PAM并且正在重新安装Shadow以支持Linux-PAM安装的安装。
如果您正在重新安装Shadow以使用CrackLib库提供强大的密码支持,而不使用Linux-PAM,请确保在下面的configure脚本中添加--with-libcrack参数,并发出以下命令:
sed -i 's@DICTPATH.*@DICTPATH\t/lib/cracklib/pw_dict@' etc/login.defs
运行以下命令重新安装Shadow:
sed -i 's/groups$(EXEEXT) //' src/Makefile.in &&
find man -name Makefile.in -exec sed -i 's/groups\.1 / /' {} \; &&
find man -name Makefile.in -exec sed -i 's/getspnam\.3 / /' {} \; &&
find man -name Makefile.in -exec sed -i 's/passwd\.5 / /' {} \; &&
sed -e 's@#ENCRYPT_METHOD DES@ENCRYPT_METHOD SHA512@' \
-e 's@#\(SHA_CRYPT_..._ROUNDS 5000\)@\100@' \
-e 's@/var/spool/mail@/var/mail@' \
-e '/PATH=/{s@/sbin:@@;s@/bin:@@}' \
-i etc/login.defs &&
./configure --sysconfdir=/etc \
--disable-static \
--with-group-name-max-length=32 &&
make
这个包没有附带测试套件。
现在,作为root用户:
make exec_prefix=/usr install
手册页安装在LFS中,但是如果需要重新安装,运行(作为root用户):
make -C man install-man
命令解释
sed -i ‘s/groups$(EXEEXT) //’ src/Makefile.in: 这个sed用于抑制在groups程序上的安装,因为在LFS期间安装的Coreutils包的版本是首选的。
find man -name Makefile.in -exec … {} \;: 第一个命令用于抑制groups手册页上的安装,这样就不会替换从Coreutils包中安装的现有文档。另外两个命令阻止已经由Man-pages在LFS中安装的手动页面。
sed -e ‘s@#ENCRYPT_METHOD DES@ENCRYPT_METHOD SHA512@’ -e ‘s@#(SHA_CRYPT_…_ROUNDS 5000)@\100@’ -e ‘s@/var/spool/mail@/var/mail@’ -e ‘/PATH=/{s@/sbin:@@;s@/bin:@@}’ -i etc/login.defs: 这个命令不使用默认的’DES’方法,而是修改安装,使用更安全的’SHA512’散列密码方法,该方法也允许密码长度超过8个字符。还增加了回合数,以防止暴力破解密码攻击。该命令还将Shadow默认使用的用户邮箱的/var/spool/mail位置更改为/var/mail位置。它还将默认路径更改为与LFS中的设置一致。
--with-group-name-max-length=32: 用户名不能超过32个字符。使最大组名相同。
配置Linux-PAM与Shadow一起工作
注意
本页的其余部分专门介绍如何配置Shadow,使其与Linux-PAM一起正常工作。如果您没有安装Linux-PAM,并且通过CrackLib库重新安装了Shadow以支持强密码,则不需要进一步配置。
配置文件
/etc/pam.d/* 或 /etc/pam.conf, /etc/login.defs 和 /etc/security/*
配置信息
配置系统以使用Linux-PAM可能是一项复杂的任务。下面的信息将提供一个基本的设置,以便Shadow的登录和密码功能能够有效地与Linux-PAM一起工作。查看Linux-PAM-1.5.2页面上的信息和链接以获取更多配置信息。有关集成Shadow、Linux-PAM和libpwquality的具体信息,您可以访问以下链接:
配置 /etc/login.defs
login程序目前执行的许多功能现在应该由Linux-PAM模块来处理。下面的sed命令将注释掉/etc/login.defs中的适当行,并停止login执行这些功能(还创建了一个名为/etc/login.defs.orig的备份文件以保留原始文件的映像)。以root用户发出以下命令:
install -v -m644 /etc/login.defs /etc/login.defs.orig &&
for FUNCTION in FAIL_DELAY \
FAILLOG_ENAB \
LASTLOG_ENAB \
MAIL_CHECK_ENAB \
OBSCURE_CHECKS_ENAB \
PORTTIME_CHECKS_ENAB \
QUOTAS_ENAB \
CONSOLE MOTD_FILE \
FTMP_FILE NOLOGINS_FILE \
ENV_HZ PASS_MIN_LEN \
SU_WHEEL_ONLY \
CRACKLIB_DICTPATH \
PASS_CHANGE_TRIES \
PASS_ALWAYS_WARN \
CHFN_AUTH ENCRYPT_METHOD \
ENVIRON_FILE
do
sed -i "s/^${FUNCTION}/# &/" /etc/login.defs
done
配置 /etc/pam.d/ 文件
正如前面在Linux-PAM指令中提到的,Linux-PAM支持两种配置方法。下面的命令假设您选择使用基于目录的配置,其中每个程序都有自己的配置文件。您可以选择使用单个/etc/pam.conf配置文件,方法是使用下面文件中的文本,并为每行提供程序名称作为附加的第一个字段。
作为root用户,使用以下命令在/etc/pam.d/目录下创建以下Linux-PAM配置文件(或将其添加到/etc/pam.conf文件中):
‘login’
cat > /etc/pam.d/login << "EOF"
# Begin /etc/pam.d/login
# Set failure delay before next prompt to 3 seconds
auth optional pam_faildelay.so delay=3000000
# Check to make sure that the user is allowed to login
auth requisite pam_nologin.so
# Check to make sure that root is allowed to login
# Disabled by default. You will need to create /etc/securetty
# file for this module to function. See man 5 securetty.
#auth required pam_securetty.so
# Additional group memberships - disabled by default
#auth optional pam_group.so
# include system auth settings
auth include system-auth
# check access for the user
account required pam_access.so
# include system account settings
account include system-account
# Set default environment variables for the user
session required pam_env.so
# Set resource limits for the user
session required pam_limits.so
# Display date of last login - Disabled by default
#session optional pam_lastlog.so
# Display the message of the day - Disabled by default
#session optional pam_motd.so
# Check user's mail - Disabled by default
#session optional pam_mail.so standard quiet
# include system session and password settings
session include system-session
password include system-password
# End /etc/pam.d/login
EOF
‘passwd’
cat > /etc/pam.d/passwd << "EOF"
# Begin /etc/pam.d/passwd
password include system-password
# End /etc/pam.d/passwd
EOF
‘su’
cat > /etc/pam.d/su << "EOF"
# Begin /etc/pam.d/su
# always allow root
auth sufficient pam_rootok.so
# Allow users in the wheel group to execute su without a password
# disabled by default
#auth sufficient pam_wheel.so trust use_uid
# include system auth settings
auth include system-auth
# limit su to users in the wheel group
# disabled by default
#auth required pam_wheel.so use_uid
# include system account settings
account include system-account
# Set default environment variables for the service user
session required pam_env.so
# include system session settings
session include system-session
# End /etc/pam.d/su
EOF
‘chpasswd’ 和 ‘newusers’
cat > /etc/pam.d/chpasswd << "EOF"
# Begin /etc/pam.d/chpasswd
# always allow root
auth sufficient pam_rootok.so
# include system auth and account settings
auth include system-auth
account include system-account
password include system-password
# End /etc/pam.d/chpasswd
EOF
sed -e s/chpasswd/newusers/ /etc/pam.d/chpasswd >/etc/pam.d/newusers
‘chage’
cat > /etc/pam.d/chage << "EOF"
# Begin /etc/pam.d/chage
# always allow root
auth sufficient pam_rootok.so
# include system auth and account settings
auth include system-auth
account include system-account
# End /etc/pam.d/chage
EOF
其它shadow工具
for PROGRAM in chfn chgpasswd chsh groupadd groupdel \
groupmems groupmod useradd userdel usermod
do
install -v -m644 /etc/pam.d/chage /etc/pam.d/${PROGRAM}
sed -i "s/chage/$PROGRAM/" /etc/pam.d/${PROGRAM}
done
警告
此时,您应该执行一个简单的测试,看看Shadow是否按预期工作。打开另一个终端,以root身份登录,然后运行login,以另一个用户登录。如果您没有看到任何错误,那么一切正常,您应该继续进行其余的配置。如果您确实收到了错误,请立即停止并手动再次检查上述配置文件。任何错误都是上述过程中出现错误的标志。您还可以运行Linux-PAM包中的测试套件来帮助您确定问题。如果你不能找到并修复错误,你应该重新编译Shadow,并在上面的说明中添加--without-libpam开关到configure命令(同时将/etc/login.defs.orig备份文件移动到/etc/login.defs)。如果您没有这样做,错误仍然存在,您将无法登录到您的系统。
配置登录接入
Linux-PAM不是使用/etc/login.access文件来控制对系统的访问,而是使用pam_access.so模块以及/etc/security/access.conf文件。使用以下命令重命名/etc/login.access文件:
if [ -f /etc/login.access ]; then mv -v /etc/login.access{,.NOUSE}; fi
配置资源限制
Linux-PAM不是使用/etc/limits文件来限制系统资源的使用,而是使用pam_limits.so模块以及/etc/security/limits.conf文件。使用以下命令重命名/etc/limits文件:
if [ -f /etc/limits ]; then mv -v /etc/limits{,.NOUSE}; fi
当心
在注销之前,一定要测试系统的登录功能。配置中的错误可能导致永久锁定,需要从外部源启动才能纠正问题。
内容
已安装文件的列表以及它们的简短描述可以在 lfs/view/11.3-systemd/chapter08/shadow.html#contents-shadow找到。
4.23 ssh-askpass-9.2p1
简介ssh-askpass
ssh-askpass是许多包的通用可执行名称,具有相似的名称,它们提供交互式X服务,以获取需要管理权限才能运行的包的密码。它用一个窗口框提示用户可以在其中插入必要的密码。在这里,我们选择在OpenSSH tarball中分发的Damien Miller的包。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.2p1.tar.gz
-
下载 (FTP): ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.2p1.tar.gz
-
下载MD5校验和: f78b2acac4bb299629a8c58ddc3fac63
-
下载大小: 1.8 MB
-
预计所需磁盘空间: 10 MB
-
预计构建时间: 小于 0.1 SBU
ssh-askpass 依赖
必要
GTK+-3.24.36, Sudo-1.9.13p1 (运行时), Xorg Libraries, 和 a graphical environment (运行时)
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/ssh-askpass
安装ssh-askpass
运行以下命令安装ssh-askpass:
cd contrib &&
make gnome-ssh-askpass3
现在,作为root用户:
install -v -d -m755 /usr/libexec/openssh/contrib &&
install -v -m755 gnome-ssh-askpass3 /usr/libexec/openssh/contrib &&
ln -sv -f contrib/gnome-ssh-askpass3 /usr/libexec/openssh/ssh-askpass
使用/usr/libexec/openssh/contrib和符号链接是合理的,因为最终需要为该服务提供不同的程序。
配置 ssh-askpass
配置信息
作为root用户,配置Sudo-1.9.13p1使用ssh-askpass:
cat >> /etc/sudo.conf << "EOF" &&
# Path to askpass helper program
Path askpass /usr/libexec/openssh/ssh-askpass
EOF
chmod -v 0644 /etc/sudo.conf
如果给定的图形
内容
安装程序: gnome-ssh-askpass3, ssh-askpass (链接到gnome-ssh-askpass3)
安装库: None
安装目录: /usr/libexec/openssh/contrib.
4.24 stunnel-5.68
简介stunnel
stunnel包包含一个程序,允许您加密SSL(安全套接字层)中的任意TCP连接,以便您可以轻松地通过安全通道与客户端通信。stunnel还可以用于通过网络套接字建立隧道PPP,而无需更改服务器包的源代码。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (FTP): ftp://ftp.stunnel.org/stunnel/archive/5.x/stunnel-5.68.tar.gz
-
下载MD5校验和: c5197ffc5424af6063be530634f487e4
-
下载大小: 868 KB
-
预计所需磁盘空间: 6.9 MB
-
预计构建时间: 0.1 SBU
stunnel 依赖
可选
libnsl-2.0.0, netcat (测试所需), tcpwrappers, 和 TOR
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/stunnel
安装stunnel
stunnel守护进程将由非特权用户在chroot jail中运行。以root用户使用以下命令创建新的用户和组:
groupadd -g 51 stunnel &&
useradd -c "stunnel Daemon" -d /var/lib/stunnel \
-g stunnel -s /bin/false -u 51 stunnel
注意
已签名的SSL证书和私钥是运行stunnel守护进程所必需的。安装完包后,会有生成这些包的说明。然而,如果你拥有或已经创建了一个你想要使用的签名SSL证书,在开始构建之前将它复制到/etc/stunnel/stunnel.pem(确保只有“root”有读写权限)。.pem文件格式必须如下所示:
-----BEGIN PRIVATE KEY-----
<many encrypted lines of private key>
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
<many encrypted lines of certificate>
-----END CERTIFICATE-----
-----BEGIN DH PARAMETERS-----
<encrypted lines of dh parms>
-----END DH PARAMETERS-----
运行以下命令安装stunnel:
./configure --prefix=/usr \
--sysconfdir=/etc \
--localstatedir=/var &&
make
如果您已经安装了可选的netcat应用程序,则可以使用make check运行回归测试。
现在,作为root用户:
make docdir=/usr/share/doc/stunnel-5.68 install
以root用户运行以下命令安装systemd单元:
install -v -m644 tools/stunnel.service /usr/lib/systemd/system
如果您还没有签名的SSL证书和私钥,请使用下面的命令在/etc/stunnel目录下创建stunnel.pem文件。系统将提示您输入必要的信息。确保你回复
Common Name (FQDN of your server) [localhost]:
提示您将用于访问服务的名称或IP地址。
要生成证书,作为root用户,执行:
make cert
命令解释
make docdir=… install: 该命令安装包并将文档安装目录更改为标准命名约定。
配置 stunnel
配置文件
/etc/stunnel/stunnel.conf
配置信息
作为root用户,创建用于stunnel守护进程启动时创建的.pid文件的目录:
install -v -m750 -o stunnel -g stunnel -d /var/lib/stunnel/run &&
chown stunnel:stunnel /var/lib/stunnel
接下来,以root用户使用以下命令创建一个基本的/etc/stunnel/stunnel.conf配置文件:
cat > /etc/stunnel/stunnel.conf << "EOF"
; File: /etc/stunnel/stunnel.conf
; Note: The pid and output locations are relative to the chroot location.
pid = /run/stunnel.pid
chroot = /var/lib/stunnel
client = no
setuid = stunnel
setgid = stunnel
cert = /etc/stunnel/stunnel.pem
;debug = 7
;output = stunnel.log
;[https]
;accept = 443
;connect = 80
;; "TIMEOUTclose = 0" is a workaround for a design flaw in Microsoft SSL
;; Microsoft implementations do not use SSL close-notify alert and thus
;; they are vulnerable to truncation attacks
;TIMEOUTclose = 0
EOF
最后,将希望加密的服务添加到配置文件中。格式如下:
[<service>]
accept = <hostname:portnumber>
connect = <hostname:portnumber>
要获得配置文件中使用的命令和语法的完整解释,请执行man stunnel。
Systemd Unit
要在引导时启动stunnel守护进程,以root用户运行以下命令启用之前安装的systemd单元:
systemctl enable stunnel
内容
安装程序: stunnel 和 stunnel3
安装库: libstunnel.so
安装目录: /{etc,lib,var/lib}/stunnel 和 /usr/share/doc/stunnel-5.68
简要描述
stunnel 是一个程序,用于作为远程客户端和本地或远程服务器之间的SSL加密包装器。
stunnel3 是一个Perl包装脚本,用于在stunnel 4.05或更高版本中使用stunnel 3.x语法。
libstunnel.so 包含stunnel所需的API函数。
4.25 Sudo-1.9.13p1
简介Sudo
Sudo包允许系统管理员赋予某些用户(或用户组)以root或其他用户的身份运行一些(或全部)命令,同时记录命令和参数。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载MD5校验和: ee3c5e27479be258af23af1bb132e1db
-
下载大小: 4.9 MB
-
预计所需磁盘空间: 50 MB (添加16 MB用于测试)
-
预计构建时间: 0.4 SBU (添加0.1 SBU用于测试)
Sudo 依赖
可选
Linux-PAM-1.5.2, MIT Kerberos V5-1.20.1, OpenLDAP-2.6.4, MTA (它提供了一个sendmail命令), AFS, FWTK, 和 Opie
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/sudo
安装Sudo
运行以下命令安装Sudo:
./configure --prefix=/usr \
--libexecdir=/usr/lib \
--with-secure-path \
--with-all-insults \
--with-env-editor \
--docdir=/usr/share/doc/sudo-1.9.13p1 \
--with-passprompt="[sudo] password for %p: " &&
make
| 要测试结果,执行: **env LC_ALL=C make check 2>&1 | tee make-check.log. 用 **grep failed make-check.log 检查结果。 |
现在,作为root用户:
make install &&
ln -sfv libsudo_util.so.0.0.0 /usr/lib/sudo/libsudo_util.so.0
命令解释
--libexecdir=/usr/lib: 这个开关控制安装私有程序的位置。该目录中的所有内容都是一个库,所以它们属于/usr/lib而不是/usr/libexec。
--with-secure-path: 这个开关透明地将/sbin和/usr/sbin目录添加到PATH环境变量中。
--with-all-insults: 此开关包括所有sudo insult集。
--with-env-editor: 此开关允许为visudo使用环境变量EDITOR。
--with-passprompt: 此开关设置密码提示符。%p将被扩展为正在请求其密码的用户名。
--without-pam: 此开关避免在系统上安装Linux-PAM时构建Linux-PAM支持。
注意
sudo的configure命令有许多选项。查看configure –help输出以获得完整的列表。
ln -sfv libsudo_util…: 解决安装过程中的一个错误,该错误链接到以前安装的版本(如果有的话)而不是新版本。
配置 Sudo
配置文件
/etc/sudoers
配置信息
sudoers文件可能相当复杂。它由两种类型的条目组成:别名(基本上是变量)和用户规范(指定谁可以运行什么)。installs将安装一个默认配置,该配置没有为任何用户安装任何特权。
两个常见的配置更改是为超级用户设置路径,并允许wheel组的成员在提供自己的凭据后执行所有命令。以root用户创建/etc/sudoers.d/00-sudo配置文件:
cat > /etc/sudoers.d/00-sudo << "EOF"
Defaults secure_path="/usr/sbin:/usr/bin"
%wheel ALL=(ALL) ALL
EOF
注意
在只有一个用户的非常简单的安装中,直接编辑/etc/sudoers文件可能更容易。在这种情况下,可能不需要secure_path条目,并使用sudo -E …可以导入非特权用户的完整环境到特权会话中。
/etc/sudoers.d目录下的文件按词法顺序进行解析。注意,添加的文件中的条目不会覆盖以前的条目。
有关详情,请参阅 man sudoers.
注意
Sudo开发人员强烈建议使用visudo程序编辑sudoers文件。这将提供基本的完整性检查,如语法解析和文件权限,以避免一些可能导致易受攻击的配置的错误。
如果在系统上安装了PAM,那么Sudo将使用PAM支持构建。在这种情况下,作为root用户发出以下命令来创建PAM配置文件:
cat > /etc/pam.d/sudo << "EOF"
# Begin /etc/pam.d/sudo
# include the default auth settings
auth include system-auth
# include the default account settings
account include system-account
# Set default environment variables for the service user
session required pam_env.so
# include system session defaults
session include system-session
# End /etc/pam.d/sudo
EOF
chmod 644 /etc/pam.d/sudo
内容
安装程序: cvtsudoers, sudo, sudo_logsrvd, sudo_sendlog, sudoedit (符号链接), sudoreplay, 和 visudo
安装库: audit_json.so, group_file.so, libsudo_util.so, sample_approval.so, sudoers.so, sudo_noexec.so, 和 system_group.so
安装目录: /etc/sudoers.d, /usr/lib/sudo, /usr/share/doc/sudo-1.9.13p1, 和 /var/lib/sudo
简要描述
cvtsudoers sudoers文件格式之间的转换。
sudo 在/etc/sudoers配置文件允许的情况下,以另一个用户执行命令。
sudo_logsrvd 是sudo事件和I/O日志服务器。
sudo_sendlog 向日志服务器发送sudo I/O日志。
sudoedit 是指向sudo的符号链接,它暗示了作为另一个用户调用编辑器的-e选项。
sudoreplay 用于回放或列出sudo创建的输出日志。
visudo 允许更安全的编辑sudoers文件。
4.26 Tripwire-2.4.3.7
简介Tripwire
Tripwire包包含用于验证给定系统上文件完整性的程序。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载MD5校验和: a5cf1bc2f235f5d8ca458f00548db6ee
-
下载大小: 980 KB
-
预计所需磁盘空间: 29 MB
-
预计构建时间: 1.6 SBU (脚本安装)
Tripwire 依赖
可选
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/tripwire
安装Tripwire
运行以下命令安装Tripwire:
sed -e '/^CLOBBER/s/false/true/' \
-e 's|TWDB="${prefix}|TWDB="/var|' \
-e '/TWMAN/ s|${prefix}|/usr/share|' \
-e '/TWDOCS/s|${prefix}/doc/tripwire|/usr/share/doc/tripwire-2.4.3.7|' \
-i installer/install.cfg &&
find . -name Makefile.am | xargs \
sed -i 's/^[[:alpha:]_]*_HEADERS.*=/noinst_HEADERS =/' &&
sed '/dist/d' -i man/man?/Makefile.am &&
autoreconf -fi &&
./configure --prefix=/usr --sysconfdir=/etc/tripwire &&
make CPPFLAGS=-std=c++11
注意
默认配置为使用本地MTA。如果你没有安装MTA,也不想安装,修改install/install.cfg来使用SMTP服务器。否则安装将失败。
这个包没有附带测试套件。
现在,作为root用户:
make install &&
cp -v policy/*.txt /usr/share/doc/tripwire-2.4.3.7
注意
在make install期间,会询问几个问题,包括密码。如果你想制作一个脚本,你必须在运行make install之前应用一个sed:
sed -i -e 's@installer/install.sh@& -n -s <site-password> -l <local-password>@' Makefile
当然,您应该使用虚拟密码进行此操作,并在以后更改它们。
编写脚本时的另一个问题是,当标准输入不是终端时,安装程序会退出。您可以使用以下sed禁用此行为:
sed '/-t 0/,+3d' -i installer/install.sh
命令解释
sed … installer/install.cfg: 这个命令告诉包安装程序数据库和报告在/var/lib/tripwire中,并为手册页和文档设置适当的位置。
find …, sed …, and autoreconf -fi: 构建系统是不可用的,必须对其进行修改才能成功构建。
CPPFLAGS=-std=c++11: 将c++预处理器标志设置为版本11是必要的,以防止与gcc最新版本中的默认版本(c++17)发生冲突。
make install: 该命令创建Tripwire安全密钥并安装二进制文件。有两个密钥:一个站点密钥和一个本地密钥,存储在/etc/tripwire/中。
cp -v policy/*.txt /usr/doc/tripwire-2.4.3.7: 该命令使用另一个tripwire documentation.i安装tripwire示例策略文件。
配置 Tripwire
配置文件
/etc/tripwire/*
配置信息
Tripwire使用策略文件来确定要检查哪些文件的完整性。默认策略文件(/etc/tripwire/twpol.txt)用于默认安装,需要针对您的系统进行更新。
策略文件应该针对每个单独的发行版和/或安装进行定制。一些示例策略文件可以在/usr/share/doc/tripwire/中找到。
如果需要,将你想要尝试的策略文件复制到/etc/tripwire/中,而不是使用默认的策略文件twpol.txt。但是,建议您编辑策略文件。从上面的例子中获取想法,并阅读/usr/share/doc/tripwire/policyguide.txt以获取更多信息。twpol.txt是了解Tripwire的一个很好的策略文件,因为它会记录文件系统的任何更改,甚至可以作为一个恼人的方式来跟踪卸载软件的更改。
当你的策略文件被编辑到你满意的程度后,你可以开始配置步骤(作为root用户执行):
twadmin --create-polfile --site-keyfile /etc/tripwire/site.key \
/etc/tripwire/twpol.txt &&
tripwire --init
根据您的系统和策略文件的内容,上述初始化阶段可能会花费相对较长的时间。
使用信息
Tripwire将识别策略文件中指定的关键系统文件中的文件更改。在频繁更改这些目录时使用Tripwire将标记所有这些更改。在系统达到用户认为稳定的配置后,它是最有用的。
要在创建策略文件后使用Tripwire运行报告,请使用以下命令:
tripwire --check > /etc/tripwire/report.txt
查看输出以检查文件的完整性。通过使用cron工具来安排运行,可以生成自动完整性报告。
报告以二进制形式存储,如果需要,还可以加密。以root用户查看报告,使用:
twprint --print-report -r /var/lib/tripwire/report/<report-name.twr>
在运行完整性检查之后,您应该检查报告(或电子邮件),然后修改Tripwire数据库,以反映系统上更改的文件。这样Tripwire就不会不断地通知您故意更改的文件违反了安全规定。要做到这一点,您必须首先ls -l /var/lib/tripwire/report/,并注意最新文件的名称,该名称以您的系统名称开头,如命令uname -n所示,以.twr结尾。这些文件是在创建报告期间创建的,需要最新的文件来更新系统的Tripwire数据库。作为root用户,输入以下命令,生成适当的报告名称:
tripwire --update --twrfile /var/lib/tripwire/report/<report-name.twr>
你将被放置在Vim中,在你面前有一份报告副本。如果所有更改都很好,那么只需键入:wq,并在输入本地键后,数据库将被更新。如果还有文件需要警告,去掉报告文件名前的’x’,然后输入:wq。
更改策略文件
如果您不满意您的策略文件,并希望修改它或使用一个新的,修改策略文件,然后以root用户执行以下命令:
twadmin --create-polfile /etc/tripwire/twpol.txt &&
tripwire --init
内容
安装程序: siggen, tripwire, twadmin, 和 twprint
安装库: None
安装目录: /etc/tripwire, /var/lib/tripwire, 和 /usr/share/doc/tripwire-2.4.3.7
简要描述
siggen 是一个签名收集实用程序,它显示指定文件的散列函数值。
tripwire 主要是文件完整性检查程序。
twadmin 管理和实用工具,用于执行与Tripwire文件和配置选项相关的某些管理功能。
twprint 以明文格式打印Tripwire数据库和报告文件。
4.27 volume_key-0.3.12
简介volume_key
volume_key包提供了一个库,用于操作存储卷加密密钥,并将它们与卷分开存储,以处理忘记的密码短语。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://github.com/felixonmars/volume_key/archive/volume_key-0.3.12.tar.gz
-
下载MD5校验和: d1c76f24e08ddd8c1787687d0af5a814
-
下载大小: 196 KB
-
预计所需磁盘空间: 11 MB
-
预计构建时间: 0.2 SBU
volume_key 依赖
必要
cryptsetup-2.4.3, GLib-2.74.5, GnuPG-2.4.0, GPGME-1.18.0, 和 nss-3.88.1
推荐
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/volume_key
安装volume_key
注意
该包扩展到目录volume_key-volume_key-0.3.12。
告诉建筑系统如何正确定位GPGME和GnuPG:
sed -e '/AM_PATH_GPGME/iAM_PATH_GPG_ERROR' \
-e 's/gpg2/gpg/' -i configure.ac
运行以下命令安装volume_key:
autoreconf -fiv &&
./configure --prefix=/usr \
--without-python &&
make
要测试结果,执行: make check.
现在,作为root用户:
make install
命令解释
--without-python: 如果安装了Python-2.7.18,此参数可防止构建Python 2绑定。
--without-python3: 如果不想构建Python 3绑定,请使用此选项。在这种情况下,不需要使用SWIG-4.1.1。
内容
安装程序: volume_key
安装库: libvolume_key.so
安装目录: /usr/include/volume_key
简要描述
volume_key 管理加密的卷密钥和密码短语。
volume_key.so 包含用于管理加密卷密钥的API函数。