20. Major Servers
主服务器是向用户或其他程序提供内容或服务的程序。
20.1 Apache-2.4.55
简介Apache HTTPD
Apache HTTPD包包含一个开源的HTTP服务器。它对于创建本地内部网站点或运行大型web服务操作非常有用。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://archive.apache.org/dist/httpd/httpd-2.4.55.tar.bz2
-
下载 MD5 校验和: b6a8b9d8741db43cf5b4dd8e9bdb0ce7
-
下载大小: 7.1 MB
-
预计所需磁盘空间: 87 MB
-
预计构建时间: 0.3 SBU (使用并行数=4)
额外下载
Apache HTTPD 依赖
必要
可选
Brotli-1.0.9, Berkeley DB-5.3.28, Doxygen-1.9.6, libxml2-2.10.3, Lua-5.4.4, Lynx-2.8.9rel.1 或 Links-2.28 或 ELinks, nghttp2-1.52.0, OpenLDAP-2.6.4 (Apr-Util-1.6.3 需要安装ldap支持), rsync-3.2.7, 和 Distcache
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/apache
安装Apache HTTPD
出于安全考虑,强烈建议以非特权用户和组的身份运行服务器。以root身份使用以下命令创建以下组和用户:
groupadd -g 25 apache &&
useradd -c "Apache Server" -d /srv/www -g apache \
-s /bin/false -u 25 apache
运行以下命令构建和安装Apache HTTPD:
patch -Np1 -i ../httpd-2.4.55-blfs_layout-1.patch &&
sed '/dir.*CFG_PREFIX/s@^@#@' -i support/apxs.in &&
sed -e '/HTTPD_ROOT/s:${ap_prefix}:/etc/httpd:' \
-e '/SERVER_CONFIG_FILE/s:${rel_sysconfdir}/::' \
-e '/AP_TYPES_CONFIG_FILE/s:${rel_sysconfdir}/::' \
-i configure &&
./configure --enable-authnz-fcgi \
--enable-layout=BLFS \
--enable-mods-shared="all cgi" \
--enable-mpms-shared=all \
--enable-suexec=shared \
--with-apr=/usr/bin/apr-1-config \
--with-apr-util=/usr/bin/apu-1-config \
--with-suexec-bin=/usr/lib/httpd/suexec \
--with-suexec-caller=apache \
--with-suexec-docroot=/srv/www \
--with-suexec-logfile=/var/log/httpd/suexec.log \
--with-suexec-uidmin=100 \
--with-suexec-userdir=public_html &&
make
这个包没有附带测试套件。
现在,作为root用户:
make install &&
mv -v /usr/sbin/suexec /usr/lib/httpd/suexec &&
chgrp apache /usr/lib/httpd/suexec &&
chmod 4754 /usr/lib/httpd/suexec &&
chown -v -R apache:apache /srv/www
命令解释
sed ‘/dir.*CFG_PREFIX/s@^@#@’…: 强制apxs实用程序在收到指令时使用模块的绝对路径名。
--enable-authnz-fcgi: 构建基于FastCGI授权器的认证和授权(mod_authnz_fcgi.so快速CGI模块)。
--enable-mods-shared="all cgi": 应该编译这些模块并将其作为动态共享对象(DSOs)使用,以便可以使用运行时配置指令在服务器中包括和排除它们。
--enable-mpms-shared=all: 此开关确保所有MPM(多处理模块,Multi Processing Modules)都被构建为动态共享对象(DSOs),因此用户可以在运行时选择使用哪一个。
--enable-suexec: 该开关允许构建Apache suEXEC模块,该模块可用于允许用户以不同于调用web服务器的用户ID的用户ID运行CGI和SSI脚本。
--with-suexec-*: 这些开关控制suEXEC模块的行为,例如默认文档root、可用于在suEXEC下运行脚本的最小UID。请注意,在最小UID 100下,您不能以apache用户在suEXEC下运行CGI或SSI脚本。
… /usr/lib/httpd/suexec: 这些命令将suexec包装器放在适当的位置,因为它不打算直接运行。他们还调整了二进制文件的适当权限,使其设置为setgid apache。
chown -R apache:apache /srv/www: 默认情况下,安装过程安装文件(文档、错误消息、默认图标等),其所有权属于从tar文件中提取文件的用户。如果您希望将所有权更改为另一个用户,您应该在此时这样做。唯一的要求是文档目录需要被httpd进程以(r-x)权限访问,文件需要被apache用户(r–)可读。
配置 Apache
配置文件
/etc/httpd/httpd.conf 和 /etc/httpd/extra/*
配置信息
查看file:///usr/share/httpd/manual/configuring.html关于定制Apache HTTP服务器配置文件的详细说明。
Systemd Unit
如果你想让Apache服务器在系统启动时自动启动,安装blfs-systemd-units-20220720包中的httpd.service单元:
make install-httpd
内容
安装程序: ab, apachectl, apxs, checkgid, dbmmanage, fcgistarter, htcacheclean, htdbm, htdigest, htpasswd, httpd, httxt2dbm, logresolve, 和 rotatelogs
安装库: /usr/lib/httpd/modules/下的几个库
安装目录: /etc/httpd, /srv/www, /usr/include/httpd, /usr/lib/httpd, /usr/share/httpd, /var/log/httpd, 和 /var/run/httpd
简要描述
ab 是对Apache HTTP服务器进行基准测试的工具。
apachectl 是Apache HTTP服务器的前端,旨在帮助管理员控制Apache httpd守护进程的功能。
apxs 是为Apache HTTP服务器构建和安装扩展模块的工具。
checkgid 是一个程序,检查是否可以将其设置为指定的组。这是为了查看它是否是Apache2在运行时使用的有效组。如果用户(应该作为超级用户运行)在该组中,或者可以将gid设置为该组,则返回0。
dbmmanage 用于创建和更新用于存储HTTP用户基本身份验证的用户名和密码的DBM格式文件。
fcgistarter 是启动FastCGI程序的工具。
htcacheclean 用于清理磁盘缓存。
htdbm 用于操作DBM密码数据库。
htdigest 用于创建和更新flat-files,flat-files用于存储HTTP用户摘要身份验证的用户名、领域和密码。
htpasswd 用于创建和更新flat-files,flat-files用于存储用于HTTP用户基本身份验证的用户名和密码。
httpd 是Apache HTTP服务器程序。
httxt2dbm 用于从文本生成DBM文件,用于RewriteMap。
logresolve 是一个后处理程序,用于解析Apache访问日志文件中的ip地址。
rotatelogs 是一个简单的程序,可以与Apache的管道日志文件特性结合使用。
suexec 允许用户以不同的用户身份运行CGI和SSI应用程序。
20.2 BIND-9.18.12
简介BIND
BIND包提供了DNS服务器和客户端实用程序。如果您只对实用程序感兴趣,请参阅BIND Utilities-9.18.12.
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://ftp.isc.org/isc/bind9/9.18.12/bind-9.18.12.tar.xz
-
下载 (FTP): ftp://ftp.isc.org/isc/bind9/9.18.12/bind-9.18.12.tar.xz
-
下载 MD5 校验和: 101a5d919a8d7da1ae98f36e36d1dc9f
-
下载大小: 5.2 MB
-
预计所需磁盘空间: 143 MB (安装26 MB)
-
预计构建时间: 0.4 SBU (与并行数=4;运行完整的测试套件大约需要40分钟,这与处理器无关)
BIND 依赖
必要
推荐
JSON-C-0.16 和 libcap-2.67 with PAM
可选
cURL-7.88.1, libidn2-2.3.4, libxml2-2.10.3, lmdb-0.9.29, MIT Kerberos V5-1.20.1, pytest-7.2.1, sphinx-6.1.3 (需要构建文档), cmocka, geoip, w3m
可选 database backends
Berkeley DB-5.3.28, MariaDB-10.6.12 或 MySQL, OpenLDAP-2.6.4, PostgreSQL-15.2, 和 unixODBC-2.3.11
可选 (来运行测试套件)
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/bind
安装BIND
运行如下命令安装BIND:
./configure --prefix=/usr \
--sysconfdir=/etc \
--localstatedir=/var \
--mandir=/usr/share/man \
--disable-static &&
make
发出以下命令以运行完整的测试套件。首先,作为root用户,设置一些测试接口:
注意
如果内核中没有使能IPv6,将会有几个错误消息:”RTNETLINK answers: Operation not permitted”。这些消息不会影响测试。
bin/tests/system/ifconfig.sh up
测试套件可能会指示一些跳过的测试,具体取决于所使用的配置选项。如果没有安装Net-DNS-1.36,一些测试被标记为“未测试”或甚至失败。要以非特权用户身份运行测试,请执行:
make -k check
再次作为root,清理测试接口:
bin/tests/system/ifconfig.sh down
最后,以root用户安装包:
make install
命令解释
--sysconfdir=/etc: 此参数强制BIND在/etc而不是/usr/etc中查找配置文件。
--with-libidn2: 启用IDNA2008(应用程序国际化域名)功能。
--enable-fetchlimit: 如果您希望能够限制递归客户端查询的速率,请使用此选项。这在接收大量查询的服务器上可能很有用。
--disable-linux-caps: 使用此选项也可以在没有功能支持的情况下构建BIND,但代价是失去一些安全性。
--with-dlz-{mysql,bdb,filesystem,ldap,odbc,stub}: 使用这些选项中的一个(或多个)来添加动态加载区域支持。有关更多信息,请参阅bind-dlz.sourceforge.net。
--disable-static: 此开关防止安装库的静态版本。
配置 BIND
配置文件
named.conf, root.hints, 127.0.0, rndc.conf, 和 resolv.conf
配置信息
BIND将被配置为以非特权用户(named)在chroot jail中运行。这种配置更安全,因为DNS泄漏只会影响named用户的HOME目录中的几个文件。
创建非特权用户和组named:
groupadd -g 20 named &&
useradd -c "BIND Owner" -g named -s /bin/false -u 20 named &&
install -d -m770 -o named -g named /srv/named
设置BIND需要的一些文件、目录和设备:
mkdir -p /srv/named &&
cd /srv/named &&
mkdir -p dev etc/named/{slave,pz} usr/lib/engines var/run/named &&
mknod /srv/named/dev/null c 1 3 &&
mknod /srv/named/dev/urandom c 1 9 &&
chmod 666 /srv/named/dev/{null,urandom} &&
cp /etc/localtime etc
rndc.conf文件包含了使用rndc工具控制named操作的信息。使用rndc-confgen命令生成一个用于named.conf和rndc.conf的密钥:
rndc-confgen -a -b 512 -t /srv/named
完成named.conf文件,named将从中读取区域文件,根名称服务器和安全DNS密钥的位置:
cat >> /srv/named/etc/named.conf << "EOF"
options {
directory "/etc/named";
pid-file "/var/run/named.pid";
statistics-file "/var/run/named.stats";
};
zone "." {
type hint;
file "root.hints";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "pz/127.0.0";
};
// Bind 9 now logs by default through syslog (except debug).
// These are the default logging rules.
logging {
category default { default_syslog; default_debug; };
category unmatched { null; };
channel default_syslog {
syslog daemon; // send to syslog's daemon
// facility
severity info; // only send priority info
// and higher
};
channel default_debug {
file "named.run"; // write to named.run in
// the working directory
// Note: stderr is used instead
// of "named.run"
// if the server is started
// with the '-f' option.
severity dynamic; // log at the server's
// current debug level
};
channel default_stderr {
stderr; // writes to stderr
severity info; // only send priority info
// and higher
};
channel null {
null; // toss anything sent to
// this channel
};
};
EOF
创建一个zone文件,内容如下:
cat > /srv/named/etc/named/pz/127.0.0 << "EOF"
$TTL 3D
@ IN SOA ns.local.domain. hostmaster.local.domain. (
1 ; Serial
8H ; Refresh
2H ; Retry
4W ; Expire
1D) ; Minimum TTL
NS ns.local.domain.
1 PTR localhost.
EOF
用以下命令创建root.hints文件:
注意
必须小心确保该文件中没有前导空格。
cat > /srv/named/etc/named/root.hints << "EOF"
. 6D IN NS A.ROOT-SERVERS.NET.
. 6D IN NS B.ROOT-SERVERS.NET.
. 6D IN NS C.ROOT-SERVERS.NET.
. 6D IN NS D.ROOT-SERVERS.NET.
. 6D IN NS E.ROOT-SERVERS.NET.
. 6D IN NS F.ROOT-SERVERS.NET.
. 6D IN NS G.ROOT-SERVERS.NET.
. 6D IN NS H.ROOT-SERVERS.NET.
. 6D IN NS I.ROOT-SERVERS.NET.
. 6D IN NS J.ROOT-SERVERS.NET.
. 6D IN NS K.ROOT-SERVERS.NET.
. 6D IN NS L.ROOT-SERVERS.NET.
. 6D IN NS M.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET. 6D IN A 198.41.0.4
A.ROOT-SERVERS.NET. 6D IN AAAA 2001:503:ba3e::2:30
B.ROOT-SERVERS.NET. 6D IN A 199.9.14.201
B.ROOT-SERVERS.NET. 6D IN AAAA 2001:500:200::b
C.ROOT-SERVERS.NET. 6D IN A 192.33.4.12
C.ROOT-SERVERS.NET. 6D IN AAAA 2001:500:2::c
D.ROOT-SERVERS.NET. 6D IN A 199.7.91.13
D.ROOT-SERVERS.NET. 6D IN AAAA 2001:500:2d::d
E.ROOT-SERVERS.NET. 6D IN A 192.203.230.10
E.ROOT-SERVERS.NET. 6D IN AAAA 2001:500:a8::e
F.ROOT-SERVERS.NET. 6D IN A 192.5.5.241
F.ROOT-SERVERS.NET. 6D IN AAAA 2001:500:2f::f
G.ROOT-SERVERS.NET. 6D IN A 192.112.36.4
G.ROOT-SERVERS.NET. 6D IN AAAA 2001:500:12::d0d
H.ROOT-SERVERS.NET. 6D IN A 198.97.190.53
H.ROOT-SERVERS.NET. 6D IN AAAA 2001:500:1::53
I.ROOT-SERVERS.NET. 6D IN A 192.36.148.17
I.ROOT-SERVERS.NET. 6D IN AAAA 2001:7fe::53
J.ROOT-SERVERS.NET. 6D IN A 192.58.128.30
J.ROOT-SERVERS.NET. 6D IN AAAA 2001:503:c27::2:30
K.ROOT-SERVERS.NET. 6D IN A 193.0.14.129
K.ROOT-SERVERS.NET. 6D IN AAAA 2001:7fd::1
L.ROOT-SERVERS.NET. 6D IN A 199.7.83.42
L.ROOT-SERVERS.NET. 6D IN AAAA 2001:500:9f::42
M.ROOT-SERVERS.NET. 6D IN A 202.12.27.33
M.ROOT-SERVERS.NET. 6D IN AAAA 2001:dc3::35
EOF
root.hints文件是根名称服务器的列表。必须使用dig工具定期更新此文件。根目录的当前副本。可以从https://www.internic.net/domain/named.root获得提示。详细信息请参考”BIND 9 Administrator Reference Manual”。
使用以下命令创建或修改resolv.conf以使用新的名称服务器:
注意
将<yourdomain.com>替换为您自己的有效域名。
cp /etc/resolv.conf /etc/resolv.conf.bak &&
cat > /etc/resolv.conf << "EOF"
search <yourdomain.com>
nameserver 127.0.0.1
EOF
使用如下命令设置chroot jail的权限:
chown -R named:named /srv/named
Systemd Unit
要在启动时启动DNS服务器,请安装blfs-systemd-units-20220720包中包含的named.service单元:
make install-named
现在用下面的命令启动BIND:
systemctl start named
测试 BIND
测试新的BIND 9安装。首先用dig查询本地主机地址:
dig -x 127.0.0.1
现在尝试外部名称查找,注意由于缓存导致的重复查找的速度差异。在同一个地址上运行两次dig命令:
dig www.linuxfromscratch.org &&
dig www.linuxfromscratch.org
使用命名缓存查找,您几乎可以立即看到结果。有关进一步的配置选项,请参阅BIND管理员参考手册(见下文)。
Administrator Reference Manual (ARM)
ARM文档(不要与处理器体系结构混淆)包含在源包中。该文档是.rst格式,这意味着如果安装了sphinx-6.1.3,它可以转换为人类可读的格式。
当设置BIND时,特别是在实际场景中操作时,强烈建议查阅ARM文档。ISC在每个版本中都提供了一套更新的优秀文档,因此可以很容易地查看和/或下载-所以没有理由不阅读文档。ISC提供的格式为PDF、epub和html,网址为https://downloads.isc.org/isc/bind9/9.18.12/doc/arm/。
内容
安装程序: arpaname, ddns-confgen, delv, dig, dnssec-cds, dnssec-checkds, dnssec-coverage, dnssec-dsfromkey, dnssec-importkey, dnssec-keyfromlabel, dnssec-keygen, dnssec-keymgr, dnssec-revoke, dnssec-settime, dnssec-signzone, dnssec-verify, host, mdig, named, named-checkconf, named-checkzone, named-compilezone (符号链接), named-journalprint, named-nzd2nzf, named-rrchecker, nsec3hash, nslookup, nsupdate, rndc, rndc-confgen, 和 tsig-keygen (符号链接)
安装库: libbind9.so, libdns.so, libirs.so, libisc.so, libisccc.so, libisccfg.so, 和 libns.so
安装目录: /usr/include/{bind9,dns,dst,irs,isc,isccc,isccfg,ns,pk11,pkcs11}, /usr/lib/named, /usr/lib/python3.11/site-packages/isc, 和 /srv/named
简要描述
arpaname 将IP地址转换为对应的ARPA名称。
ddns-confgen 生成供nsupdate和named使用的键。
delv 是一个新的调试工具,是dig的继承者。
dig 查询DNS服务器。
dnssec-cds 基于CDS/CDNSKEY更改子区域的DS记录。
dnssec-checkds 是DNSSEC委托一致性检查工具。
dnssec-coverage 验证给定区域或一组区域的DNSSEC密钥是否具有正确设置的定时元数据,以确保DNSSEC覆盖范围不会出现未来的失效。
dnssec-dsfromkey 输出委托签名者(DS)资源记录(RR)。
dnssec-importkey 读取公共DNSKEY记录并生成一对.key/.private文件。
dnssec-keyfromlabel 从加密硬件设备获取带有给定标签的密钥,并为DNSSEC构建密钥文件。
dnssec-keygen 是安全DNS的密钥生成器。
dnssec-keymgr 根据已定义的策略确保正确的DNSKEY覆盖。
dnssec-revoke 在DNSSEC密钥上设置REVOKED位。
dnssec-settime 为DNSSEC密钥设置密钥计时元数据。
dnssec-signzone 生成区域文件的签名版本。
dnssec-verify 验证一个区域是否为该区域的DNSKEY RRset中找到的每个算法都进行了完全签名,以及NSEC / NSEC3链是否完整。
host 是用于DNS查找的实用程序。
mdig 是dig的一个版本,允许一次进行多个查询。
named 是名称服务器守护进程。
named-checkconf 检查named.conf文件的语法。
named-checkzone 检查区域文件的有效性。
named-compilezone 类似于named-checkzone,但它总是将区域以指定格式转储到指定文件。
named-journalprint 以人类可读的形式打印区域日志。
named-rrchecker 从标准输入中读取单个DNS资源记录,并检查其语法是否正确。
named-nzd2nzf 将NZD数据库转换为NZF文本格式。
nsec3hash 基于一组NSEC3参数生成一个NSEC3哈希值。
nslookup 是一个用于查询互联网域名服务器的程序。
nsupdate 用于提交DNS更新请求。
rndc 控制BIND的操作。
rndc-confgen 生成rndc.conf文件。
tsig-keygen 是指向ddns-confgen的符号链接。
20.3 ProFTPD-1.3.8
简介ProFTPD
ProFTPD包包含一个安全且高度可配置的FTP守护进程。这对于通过网络提供大型文件存档非常有用。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://github.com/proftpd/proftpd/archive/v1.3.8/proftpd-1.3.8.tar.gz
-
下载 (FTP): ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.8.tar.gz
-
下载 MD5 校验和: eafdca17287bec7b6e8d88aaeba0f6aa
-
下载大小: 18.8 MB
-
预计所需磁盘空间: 66 MB
-
预计构建时间: 0.3 SBU
ProFTPD 依赖
可选
libcap-2.67 with PAM, libssh2-1.10.0, Linux-PAM-1.5.2, MariaDB-10.6.12 或 MySQL, PCRE-8.45, PostgreSQL-15.2, 和 Net::SSH2
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/proftpd
安装ProFTPD
出于安全考虑,应该使用非特权用户和组安装ProFTPD。作为root用户:
groupadd -g 46 proftpd &&
useradd -c proftpd -d /srv/ftp -g proftpd \
-s /usr/bin/proftpdshell -u 46 proftpd &&
install -v -d -m775 -o proftpd -g proftpd /srv/ftp &&
ln -v -s /usr/bin/false /usr/bin/proftpdshell &&
echo /usr/bin/proftpdshell >> /etc/shells
运行如下命令以非特权用户安装ProFTPD:
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/run &&
make
该软件包没有提供可用的测试套件。
现在,作为root用户:
make install &&
install -d -m755 /usr/share/doc/proftpd-1.3.8 &&
cp -Rv doc/* /usr/share/doc/proftpd-1.3.8
命令解释
install -v -d -m775 -o proftpd -g proftpd /srv/ftp: 为ProFTPD创建主目录。
ln -v -s /usr/bin/false /usr/bin/proftpdshell: 将默认shell设置为指向无效shell的链接。
echo /usr/bin/proftpdshell » /etc/shells: 出于兼容性的目的伪造一个有效的shell。
注意
如果在配置文件中放置以下指令,则可以省略上述两个命令:
RequireValidShell off
默认情况下,proftpd将要求登录的用户具有有效的shell。RequireValidShell指令关闭了这个需求。只有当您将FTP服务器专门设置为匿名下载时,才建议这样做。
注意
对大多数依赖包的支持需要使用传递给 configure 脚本的选项。查看 ./configure –help 的输出以获得有关启用依赖包的完整信息。
配置 ProFTPD
配置文件
/etc/proftpd.conf
配置信息
这是一个简单的、只能下载的样例配置。请参考ProFTPD文档中的/usr/share/doc/proftpd,并参考网站http://www.proftpd.org/进行举例配置。
cat > /etc/proftpd.conf << "EOF"
# This is a basic ProFTPD configuration file
# It establishes a single server and a single anonymous login.
ServerName "ProFTPD Default Installation"
ServerType standalone
DefaultServer on
# Port 21 is the standard FTP port.
Port 21
# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask 022
# To prevent DoS attacks, set the maximum number of child processes
# to 30. If you need to allow more than 30 concurrent connections
# at once, simply increase this value. Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
MaxInstances 30
# Set the user and group that the server normally runs at.
User proftpd
Group proftpd
# To cause every FTP user to be "jailed" (chrooted) into their home
# directory, uncomment this line.
#DefaultRoot ~
# Normally, files should be overwritable.
<Directory /*>
AllowOverwrite on
</Directory>
# A basic anonymous configuration, no upload directories.
<Anonymous ~proftpd>
User proftpd
Group proftpd
# Clients should be able to login with "anonymous" as well as "proftpd"
UserAlias anonymous proftpd
# Limit the maximum number of anonymous logins
MaxClients 10
# 'welcome.msg' should be displayed at login, and '.message' displayed
# in each newly chdired directory.
DisplayLogin welcome.msg
DisplayChdir .message
# Limit WRITE everywhere in the anonymous chroot
<Limit WRITE>
DenyAll
</Limit>
</Anonymous>
EOF
Systemd Unit
安装包含在blfs-systemd-units-20220720包中的proftpd.service单元:
make install-proftpd
内容
安装程序: ftpasswd, ftpcount, ftpdctl, ftpmail, ftpquota, ftpscrub, ftpshut, ftptop, ftpwho, in.proftpd (符号链接到proftpd), proftpd, 和 prxs
安装库: None
安装目录: /usr/{include,lib}/proftpd, /usr/share/doc/proftpd-1.3.8, 和 /srv/ftp
简要描述
proftpd 是FTP守护进程。
ftpcount 显示当前的连接数。
ftpdctl 用于在proftpd守护进程运行时控制它。
ftpasswd 是一个Perl脚本,用于为proftpd创建和管理正确格式的AuthUserFiles和AuthGroupFiles。
ftpmail 是一个Perl脚本,基于proftpd TransferLog发送电子邮件。
ftpquota 是一个Perl脚本,用于为proftpd的mod_quotatab + mod_quotatab_file模块组合创建和管理限制和计数文件。
ftpscrub 提供一种按需清除计scoreboard文件的方法。
ftpshut 在指定时间关闭所有proftpd服务器。
ftptop 显示连接的运行状态。
ftpwho 显示每个会话的当前进程信息。
prxs 是一个Perl脚本,用于从源代码编译和安装第三方模块,作为已安装proftpd的DSO模块。
20.4 vsftpd-3.0.5
简介vsftpd
vsftpd包包含一个非常安全且非常小的FTP守护进程。这对于通过网络提供文件很有用。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://security.appspot.com/downloads/vsftpd-3.0.5.tar.gz
-
下载 MD5 校验和: efbf362a65bec771bc15ad311f5a982e
-
下载大小: 210 KB
-
预计所需磁盘空间: 1.9 MB
-
预计构建时间: 小于 0.1 SBU
vsftpd 依赖
必要
推荐
可选
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/vsftpd
安装vsftpd
出于安全考虑,建议以非特权用户和组的身份运行vsftpd。此外,还应该创建一个用户来映射匿名用户。作为root用户,使用以下命令创建所需的目录、用户和组:
install -v -d -m 0755 /usr/share/vsftpd/empty &&
install -v -d -m 0755 /home/ftp &&
groupadd -g 47 vsftpd &&
groupadd -g 45 ftp &&
useradd -c "vsftpd User" -d /dev/null -g vsftpd -s /bin/false -u 47 vsftpd &&
useradd -c anonymous_user -d /home/ftp -g ftp -s /bin/false -u 45 ftp
Gcc-10及以后版本会标记隐式类型强制转换的错误。要明确:
sed -e "s/kVSFSysStrOpenUnknown;/(enum EVSFSysUtilOpenMode)&/" -i sysstr.c
以非特权用户使用以下命令构建vsftpd:
make
这个包没有附带测试套件。
再次切换为root用户,使用以下命令安装vsftpd:
install -v -m 755 vsftpd /usr/sbin/vsftpd &&
install -v -m 644 vsftpd.8 /usr/share/man/man8 &&
install -v -m 644 vsftpd.conf.5 /usr/share/man/man5 &&
install -v -m 644 vsftpd.conf /etc
命令解释
install -v -d …: 这将创建匿名用户将使用的目录(/home/ftp)和守护进程将chroot到的目录(/usr/share/vsftpd/empty)。
注意
/home/ftp不应该由用户vsftpd或用户ftp拥有。
echo “#define VSF_BUILD_TCPWRAPPERS” »builddefs.h: 在make之前使用此命令来添加对tcpwrappers的支持。
echo “#define VSF_BUILD_SSL” »builddefs.h: 在make之前使用此命令添加对SSL的支持。
install -v -m …: Makefile使用非标准的安装路径。这些命令将文件安装在/usr和/etc中。
配置 vsftpd
配置文件
/etc/vsftpd.conf
配置信息
VSFTPD附带了一个基本的匿名配置文件,复制到上面的/etc。虽然仍然是root,但这个文件应该被修改,因为现在建议在独立模式下运行vsftpd。另外,您应该指定上面创建的特权分离用户。最后,您应该指定chroot目录。man vsftpd.conf会给你所有的细节。
cat >> /etc/vsftpd.conf << "EOF"
background=YES
nopriv_user=vsftpd
secure_chroot_dir=/usr/share/vsftpd/empty
EOF
vsftpd守护进程默认使用seccomp来提高安全性。但是在最近的内核版本中,它会导致vsftpd无法处理ftp LIST命令。添加一行到/etc/vsftpd.conf(作为root用户)以禁用seccomp并解决此问题:
cat >> /etc/vsftpd.conf << "EOF"
seccomp_sandbox=NO
EOF
要启用本地登录,将以下内容添加到/etc/vsftpd.conf文件中(以root用户):
cat >> /etc/vsftpd.conf << "EOF"
local_enable=YES
EOF
此外,如果在本地用户登录时使用Linux-PAM和vsftpd,则需要一个Linux-PAM配置文件。作为root用户,创建/etc/pam.d/vsftpd文件,并使用以下命令添加Linux-PAM会话支持所需的配置更改:
cat > /etc/pam.d/vsftpd << "EOF" &&
# Begin /etc/pam.d/vsftpd
auth required /lib/security/pam_listfile.so item=user sense=deny \
file=/etc/ftpusers \
onerr=succeed
auth required pam_shells.so
auth include system-auth
account include system-account
session include system-session
EOF
cat >> /etc/vsftpd.conf << "EOF"
session_support=YES
pam_service_name=vsftpd
EOF
Systemd Unit
安装blfs-systemd-units-20220720包中包含的vsftpd.service单元:
make install-vsftpd
内容
安装程序: vsftpd
安装库: None
安装目录: /usr/share/vsftpd, /home/ftp
简要描述
vsftpd 是FTP守护进程。