Skip to the content.

上一页      主目录      下一页

20. Major Servers


主服务器是向用户或其他程序提供内容或服务的程序。

20.1 Apache-2.4.55


简介Apache HTTPD

Apache HTTPD包包含一个开源的HTTP服务器。它对于创建本地内部网站点或运行大型web服务操作非常有用。

已知此包可以使用LFS 11.3平台进行构建并正常工作。

包信息

额外下载

Apache HTTPD 依赖

必要

Apr-Util-1.6.3pcre2-10.42

可选

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.1Links-2.28ELinks, 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平台进行构建并正常工作。

包信息

BIND 依赖

必要

libuv-1.44.2

推荐

JSON-C-0.16libcap-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.12MySQL, OpenLDAP-2.6.4, PostgreSQL-15.2, 和 unixODBC-2.3.11

可选 (来运行测试套件)

Net-DNS-1.36

用户笔记: 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.confrndc.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平台进行构建并正常工作。

包信息

ProFTPD 依赖

可选

libcap-2.67 with PAM, libssh2-1.10.0, Linux-PAM-1.5.2, MariaDB-10.6.12MySQL, 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平台进行构建并正常工作。

包信息

vsftpd 依赖

必要

libnsl-2.0.0

推荐

Linux-PAM-1.5.2

可选

libcap-2.67 with PAM

用户笔记: 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守护进程。

上一页      主目录      下一页