https://wiki.archlinux.org/api.php?action=feedcontributions&user=745275633&feedformat=atom
ArchWiki - User contributions [en]
2024-03-28T17:23:42Z
User contributions
MediaWiki 1.41.0
https://wiki.archlinux.org/index.php?title=Archiso_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=609384
Archiso (简体中文)
2020-05-02T03:21:21Z
<p>745275633: 608987</p>
<hr />
<div>[[Category:Live Arch systems (简体中文)]]<br />
[[Category:Installation process (简体中文)]]<br />
[[Category:Arch projects (简体中文)]]<br />
[[ar:Archiso]]<br />
[[el:Archiso]]<br />
[[en:Archiso]]<br />
[[es:Archiso]]<br />
[[fr:Archiso]]<br />
[[it:Archiso]]<br />
[[ja:Archiso]]<br />
[[nl:Archiso]]<br />
[[pt:Archiso]]<br />
[[ru:Archiso]]<br />
[[sk:Archiso]]<br />
{{TranslationStatus (简体中文)|Archiso|2020-05-02|608987}}<br />
{{Related articles start (简体中文)}}<br />
{{Related|Remastering the Install ISO}}<br />
{{Related2|PXE (简体中文)|PXE}}<br />
{{Related2|Archboot (简体中文)|Archboot}}<br />
{{Related articles end}}<br />
'''Archiso''' 是用于构建 Arch Linux Live CD ISO 映像的工具。 [https://www.archlinux.org/download/ 官方映像] 是使用 Archiso 构建的。 Archiso 是可配置的,并且可以用作不同系统的基础,例如救援系统或 Linux 安装程序。 这篇 Wiki 文章介绍了如何安装 Archiso,以及如何配置它以控制生成的 ISO 映像的各个方面,例如随附的软件包和文件。 技术需求和构建步骤可以在 [https://git.archlinux.org/archiso.git/tree/docs 官方项目文档] 中找到。 Archiso 通过许多 bash 脚本实现。 Archiso 的核心组件是 ''mkarchiso'' 命令。 其选项记录在其用法输出中,此处未涉及。 用户不需要直接与 ''mkarchiso'' 交互。<br />
<br />
== 安装和配置 ==<br />
<br />
{{注意|以下操作请在ROOT权限下使用,在错误的权限下操作会造成问题。}}<br />
[[install|安装]] {{Pkg|archiso}} 或 {{AUR|archiso-git}}。<br />
<br />
Archiso 附带2个预定义配置(profiles): ''releng'' 和''baseline''。<br />
<br />
* 如果您想要创建完全定制的 Live Arch Linux ,并预装所有您喜爱的程序和配置,使用 ''releng''。<br />
<br />
* 如果您只是想构建一个简易 Live 镜像,无预装软件并仅有基础配置,那么使用 ''baseline''。<br />
<br />
使用以下命令将您选择的配置文件复制到目录中。 用 {{ic|releng}} 或 {{ic|baseline}} 替换 {{ic|'''profile'''}},并用你选择的目录名称替换 {{ic|''archlive''}}。<br />
<br />
# cp -r /usr/share/archiso/configs/'''profile''' ''archlive''<br />
<br />
现在,根据所选的配置文件和您的目标进入不同的章节。<br />
* ''releng'':如果您选择了 ''releng'' ,并且<br />
** 如果要自定义映像,请继续进行章节 [[#配置 Live 介质]]。<br />
** 如果要复制官方映像,请继续进行 [[#构建ISO]]。<br />
* ''baseline'':如果您选择了 ''baseline'' 配置文件,请继续进行 [[#构建ISO]]。<br />
<br />
== 配置 Live 介质 ==<br />
<br />
本节详细介绍如何配置映像,以及定义以后将复制到映像的软件包和配置。<br />
<br />
在 [[#安装和配置]] 中创建的{{ic|''archlive''}}目录中有许多文件和目录; 我们只关注以下的:<br />
* {{ic|packages.x86_64}} - 此文件列出了 Live 系统映像上安装的软件包。<br />
* {{ic|airootfs}} - 此目录用作覆盖,并允许您进行自定义。<br />
您可以通过编辑 {{ic|''archlive''/airootfs/root/customize_airootfs.sh}} 来编写遵循安装指南(或安装后)的所有管理任务的脚本,除了软件包安装。该脚本是从正在运行的 Live 系统的角度编写的,即,在脚本中,路径 {{ic|/}} 是指正在运行的 Live 系统的根目录。<br />
<br />
=== 安装包 ===<br />
<br />
编辑 {{ic|packages.x86_64}} 中的软件包列表,以配置将哪些软件包安装在 Live 系统映像上,逐行列出软件包。<br />
<br />
{{注意|如果要在 Live CD 中使用 [[窗口管理器]],则必须添加必要且正确的 [[video drivers]],否则 WM 可能在加载时冻结。}}<br />
<br />
==== 自定义本地库 ====<br />
<br />
为了准备自定义软件包或从 [[AUR]]/[[ABS]] 准备软件包,您还可以 [[Pacman/Tips_and_tricks_(简体中文)#自建本地仓库|自建本地仓库]]。<br />
<br />
然后,您可以将以下内容放入 {{ic|~/archlive/pacman.conf}} 中,添加到其他仓库条目上方(最高优先级):<br />
<br />
{{hc|~/archlive/pacman.conf|...<br />
# custom repository<br />
[customrepo]<br />
SigLevel <nowiki>=</nowiki> Optional TrustAll<br />
Server <nowiki>=</nowiki> file:///home/'''user'''/customrepo/$arch<br />
...}}<br />
<br />
==== 安装 multilib 中的软件包 ====<br />
<br />
要从 [[Multilib (简体中文)|Multilib]] 资源库中安装软件包,仅需在{{ic|~/archlive/pacman.conf}}中取消注释以下行以启用 ''multilib'':<br />
<br />
{{hc|pacman.conf|2=<br />
[multilib]<br />
SigLevel = PackageRequired<br />
Include = /etc/pacman.d/mirrorlist<br />
}}<br />
<br />
=== 向映像里添加文件===<br />
<br />
{{注意|你必须使用 root 权限来完成这件事,不要改变任何你复制过来的文件的所有权,airootfs 中的'''所有'''文件必须为 root 用户所有。适当的所有制将在不久被解决。}}<br />
<br />
airootfs 目录作为要覆盖的文件,把它看作是在当前系统上的根目录'/',所以你在这个目录中放置的任何文件都将在开机时被复制。<br />
<br />
所以,如果你在当前系统上有一组 iptables 脚本且想要在 Live 映像上使用,请这样复制:<br />
# cp -r /etc/iptables ~/archlive/airootfs/etc<br />
<br />
在用户 home 文件夹里放置文件的方法有些许不同。不要把它们放在 {{ic|airootfs/home}},而是在 airootfs/ 里创建 skel 目录并将其放置在那里。然后我们会将相关命令添加到 {{ic|customize_airootfs.sh}}——我们要使用它在引导时复制文件以及梳理权限。<br />
<br />
首先,创建 skel 目录<br />
# mkdir ~/archlive/airootfs/etc/skel<br />
<br />
现在,复制 'home' 的文件到 skel 目录。例如,对于 {{ic|.bashrc}}:<br />
# cp ~/.bashrc ~/archlive/airootfs/etc/skel/<br />
<br />
当 {{ic|~/archlive/airootfs/root/customize_airootfs.sh}} 被执行,并且一个新用户已被创建, skel 目录中的文件将自动被复制到新的 home 文件夹中,并被设置正确的权限。<br />
<br />
类似地,需要注意位于层次结构下方的特殊配置文件。作为示例,配置文件 {{ic|/etc/X11/xinit/xinitrc}} 位于可能被安装包覆盖的路径上。要将 {{ic|xinitrc}} 的配置文件放在 {{ic|~/archlive/airootfs/etc/skel/}} ,然后修改 {{ic|customize_airootfs.sh}} 以适当地移动。<br />
<br />
=== 引导器 ===<br />
<br />
默认的文件应该可以正常工作,所以你应该不需要去碰它。<br />
<br />
由于 isolinux 的模块化性质,你能够使用很多插件,因为所有 *.c32 都被复制且可以可供您使用。看看 [http://syslinux.zytor.com/wiki/index.php/SYSLINUX syslinux 官方网站] 和 [https://git.archlinux.org/archiso.git/tree/configs/releng/syslinux Archiso Git Repo]。使用所述插件,便有可能做出更具视觉吸引力及复杂的菜单。参见 [http://syslinux.zytor.com/wiki/index.php/Comboot/menu.c32 此处]。<br />
==== UEFI 安全启动 ====<br />
<br />
如果要使 Archiso 在启用 UEFI 安全启动的环境下可启动,则必须使用签名过的启动加载程序。您可以按照 [[Secure Boot#Booting an install media]] 中的说明进行操作。<br />
<br />
=== 登录管理器 ===<br />
<br />
通过启用您登录管理器的 [[Systemd (简体中文)|systemd]] 服务来做到在引导时启动 X 。如果您知道哪一个 .service 文件需要软链接,那就太好了。如果不知道,你也可以轻松找出——如果你在创建 iso 所用的系统上使用相同的程序的话。只需使用:<br />
<br />
$ ls -l /etc/systemd/system/display-manager.service<br />
<br />
现在在 {{ic|~/archlive/airootfs/etc/systemd/system}} 中创建相同的软链接。如 LXDM:<br />
<br />
# ln -s /usr/lib/systemd/system/lxdm.service ~/archlive/airootfs/etc/systemd/system/display-manager.service<br />
<br />
这将使您在 live 系统启用在系统上启动 LXDM。(This will enable LXDM at system start on your live system.)<br />
<br />
或者,您也可以启用 {{ic|airootfs/root/customize_airootfs.sh}} 中的服务以及其中启用的其他服务。<br />
<br />
如果您希望图形环境在启动过程中自动启动,请确保编辑 {{ic|airootfs/root/customize_airootfs.sh}} 并替换<br />
systemctl set-default multi-user.target<br />
为<br />
systemctl set-default graphical.target<br />
<br />
=== 改变自动登录 ===<br />
<br />
Getty 的自动登录配置位于 {{ic|airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf}}。 <br />
<br />
您可以修改这个文件来更改自动登录用户:<br />
<br />
[Service]<br />
ExecStart=<br />
ExecStart=-/sbin/agetty --autologin '''isouser''' --noclear %I 38400 linux<br />
<br />
或者干脆删除它来禁用自动登录。<br />
<br />
== 构建ISO ==<br />
<br />
现在,你已经准备好把你的文件转换成 .iso,以便可以刻录到 CD 或 USB。<br />
<br />
在 {{ic|~/archlive}} 中执行:<br />
<br />
# ./build.sh -v<br />
<br />
该脚本将现在下载并安装你指定的软件包到 {{ic|work/*/airootfs}},创建内核和 init 映像(initramfs),应用您的修改,并最终把 ISO 建立到 {{ic|out/}}。<br />
<br />
=== 重建ISO ===<br />
<br />
在修改之后重建 ISO 不被官方支持。但是,通过应用两个步骤很容易。首先,您必须删除工作目录中的锁定文件:<br />
<br />
# rm -v work/build.make_*<br />
<br />
如果您编辑了 {{ic|airootfs/root/customize_airootfs.sh}}以创建非特权用户,则重建将在创建时失败,因为该用户已经存在({{Bug|41865}})。 为避免此问题,您需要在运行 {{ic|useradd}} 之前检查用户是否存在,例如 通过运行 {{ic|id}}:<br />
<br />
! id arch && useradd -m -p "" -g users -G "adm,audio,floppy,log,network,rfkill,scanner,storage,optical,power,wheel" -s /usr/bin/zsh arch<br />
<br />
同时删除创建的用户或符号链接,如 {{ic|/etc/sudoers}} 等持久性数据。<br />
<br />
{{Expansion|报告需要删除或重置的更多数据。}}<br />
<br />
通过编辑 pacstrap 脚本(位于 /bin/pacstrap)并在第 361 行更改以下内容,可以稍微加快重建速度:<br />
<br />
修改前:<br />
<br />
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then<br />
<br />
修改后:<br />
<br />
if ! pacman -r "$newroot" -Sy --needed "${pacman_args[@]}"; then<br />
<br />
这增加了初始引导的速度,因为它不必下载和安装任何已经安装的基础包。<br />
<br />
=== 删除工作目录 ===<br />
<br />
临时文件将复制到工作目录中。 如果碰巧 build.sh 脚本被中断,请确保在删除之前没有 mount binds - 否则,您可能会丢失数据(例如,安装在 {{ic|/run/media/$user/$label}} 的外部设备在构建过程中被绑定在 {{ic|work/x86_64/airootfs/run/media/$user/$label}} 中。<br />
<br />
== 使用 ISO ==<br />
<br />
有关各种选项,请参见 [[Installation guide (简体中文)#启动到 live 环境]]。<br />
<br />
== 在 QEMU 中运行 ISO ==<br />
<br />
qemu-system-x86_64 \<br />
-accel kvm \<br />
-boot order=d,menu=on,reboot-timeout=5000 \<br />
-m size=3072,slots=0,maxmem=$((3072*1024*1024)) \<br />
-k en \<br />
-name archiso,process=archiso_0 \<br />
-drive file=/path/to/archlinux-yyyy.mm.dd-x86_64.iso,media=cdrom,readonly=on \<br />
-display sdl \<br />
-vga virtio \<br />
-enable-kvm \<br />
-no-reboot \<br />
-no-shutdown<br />
<br />
== 参阅 ==<br />
=== 文档和教程 ===<br />
* [https://projects.archlinux.org/archiso.git Archiso 项目页面]<br />
* [https://projects.archlinux.org/archiso.git/tree/docs 官方文档]<br />
<br />
=== 示例自定义模板 ===<br />
* [http://easy.open.and.free.fr/didjix/ A live DJ distribution powered by ArchLinux and built with Archiso]<br />
<br />
=== 创建脱机安装 ISO ===<br />
* [[Archiso offline]]<br />
<br />
=== 查找以前版本的 ISO 映像 ===<br />
* [[Arch Linux Archive]]</div>
745275633
https://wiki.archlinux.org/index.php?title=Very_Secure_FTP_Daemon_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=608945
Very Secure FTP Daemon (简体中文)
2020-04-30T10:03:19Z
<p>745275633: 608787</p>
<hr />
<div>[[Category:FTP servers (简体中文)]]<br />
[[cs:Very Secure FTP Daemon]]<br />
[[en:Very Secure FTP Daemon]]<br />
[[es:Very Secure FTP Daemon]]<br />
[[it:Very Secure FTP Daemon]]<br />
[[ja:Very Secure FTP Daemon]]<br />
{{TranslationStatus (简体中文)|Very Secure FTP Daemon|2020-04-30|608787}}<br />
[https://security.appspot.com/vsftpd.html vsftpd] (“Very Secure FTP Daemon“) 是一个为 UNIX 类系统开发的轻量,稳定和安全的 FTP 服务器端。<br />
== 安装 ==<br />
[[安装]] {{pkg|vsftpd}} 然后 [[Systemd (简体中文)#使用单元|启动/启用]] {{ic|vsftpd.service}} 守护程序。<br />
<br />
使用 [[Wikipedia:xinetd|xinetd]] 监视和控制 vsftpd 连接,请参见 [[#使用 xinetd]]。<br />
<br />
== 配置 ==<br />
vsftpd 的大多数配置都可以通过编辑 {{ic|/etc/vsftpd.conf}} 文件实现。 该文件本身自带大量注释说明,所以这一章节只就一些重要的配置予以说明。有关所有可用选项和文档,请参阅 {{man|5|vsftpd.conf}} 手册页。默认情况下,由 {{ic|/srv/ftp}} 提供文件。<br />
<br />
允许的连接 {{ic|/etc/hosts.allow}}:<br />
# 允许所有连接<br />
vsftpd: ALL<br />
# IP 地址范围<br />
vsftpd: 10.0.0.0/255.255.255.0<br />
<br />
=== 允许上传 ===<br />
需要将 {{ic|/etc/vsftpd.conf}} 中的 {{ic|write_enable}} 值设为 YES,以便允许修改文件系统(如上传):<br />
write_enable=YES<br />
<br />
=== 本地用户登录 ===<br />
需要修改 {{ic|/etc/vsftpd.conf}} 中的如下值,以便允许 {{ic|/etc/passwd}} 中的用户登录:<br />
local_enable=YES<br />
<br />
=== 匿名用户登录 ===<br />
以下行控制匿名用户是否可以登录。默认情况下,匿名登录只能从 {{ic|/srv/ftp}} 下载:<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
...<br />
# 允许匿名 FTP? (当心 - 默认情况下允许除非您将其注释)。<br />
anonymous_enable=YES<br />
...<br />
# 取消注释以允许匿名 FTP 用户上传文件。<br />
# 只有上述全局写入被激活,才会有效果。<br />
# 另外,你显然需要创建 FTP 用户有写权限的目录。<br />
# anon_upload_enable=YES<br />
#<br />
# 如果您希望匿名 FTP 用户能够创建新目录,请取消注释。<br />
# anon_mkdir_write_enable=YES<br />
...<br />
}}<br />
<br />
您也可以添加以下选项(详见 {{man|5|vsftpd.conf}}):<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
# 匿名登录不需要密码<br />
no_anon_password=YES<br />
<br />
# 匿名客户端的最大传输速率(以 Bytes/秒 为单位)<br />
anon_max_rate=30000<br />
<br />
# 用于匿名登录的目录<br />
anon_root=/example/directory/<br />
}}<br />
<br />
=== Chroot 限制 ===<br />
为了阻止用户离开家目录,可以设置 chroot 环境。要启用此功能,请在 {{ic|/etc/vsftpd.conf}} 中添加以下行:<br />
chroot_list_enable=YES<br />
chroot_list_file=/etc/vsftpd.chroot_list<br />
{{ic|chroot_list_file}} 定义了被 chroot 限制的用户列表。<br />
<br />
对于更严格的环境,请指定以下行:<br />
chroot_local_user=YES<br />
这将默认为所有用户启用 chroot 环境。 在这种情况下,{{ic|chroot_list_file}} 定义了'''不受''' chroot 限制的用户列表。<br />
<br />
=== 限制用户登录 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加以下两行来阻止特定用户登录FTP服务器:<br />
userlist_enable=YES<br />
userlist_file=/etc/vsftpd.user_list<br />
{{ic|userlist_file}} 文件列出'''不允许'''登录的用户。<br />
<br />
如果您只想允许特定的用户登录,请添加以下行:<br />
userlist_deny=NO<br />
此时 {{ic|userlist_file}} 文件指定'''允许'''登录的用户。<br />
<br />
=== 限制连接数 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加如下信息来限制本地用户的数据传输速率:<br />
local_max_rate=1000000 # 最大数据传输速率(单位: Bytes/秒)<br />
max_clients=50 # 可以同时连接的最大客户端数<br />
max_per_ip=2 # 每个 IP 允许的最大连接数<br />
<br />
=== 使用 xinetd ===<br />
Xinetd 提供增强的监控和控制连接功能。对于基本的可以工作的 vsftpd-server 是不必要的<br />
<br />
安装 vsftpd 将会添加必要的服务文件 {{ic|/etc/xinetd.d/vsftpd}},默认情况下,服务被禁用。<br />
<br />
启用ftp服务:<br />
<pre><br />
service ftp<br />
{<br />
socket_type = stream<br />
wait = no<br />
user = root<br />
server = /usr/sbin/vsftpd<br />
log_on_success += HOST DURATION<br />
log_on_failure += HOST<br />
disable = no<br />
}<br />
</pre><br />
<br />
如果您将 vsftpd 守护程序设置为以独立模式运行,而不是启动 vsftpd 守护程序和 [[Systemd (简体中文)#使用单元|启用]] {{ic|xinetd.service}},请在 {{ic|/etc/vsftpd.conf}} 中进行以下更改:<br />
listen=NO<br />
否则连接将失败:<br />
500 OOPS: could not bind listening IPv4 socket<br />
<br />
=== 使用 SSL/TLS 来保护 FTP ===<br />
<br />
{{Style|Do not duplicate [[OpenSSL#Certificates]].}}<br />
<br />
首先,您需要一个 ''X.509 SSL/TLS'' 证书才能使用TLS。如果您没有,可以轻松生成如下的自签名证书:<br />
<br />
# cd /etc/ssl/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout vsftpd.pem -out vsftpd.pem<br />
# chmod 600 vsftpd.pem<br />
<br />
你会被问到关于你公司的问题,等等。由于你的证书不是一个可信任的,所填的内容并不重要,它只会被用于加密。要使用可信证书,您可以从 [[Let's Encrypt]] 这样的证书颁发机构获得证书。<br />
<br />
然后,编辑配置文件:<br />
{{hc|/etc/vsftpd.conf|2=ssl_enable=YES<br />
<br />
# 如果你接受匿名连接你可能要启用这个设置<br />
# allow_anon_ssl=NO<br />
<br />
# 默认情况下所有非匿名登录被迫使用 SSL 发送和接收密码和数据,设置为 NO,以允许不安全的连接<br />
force_local_logins_ssl=NO<br />
force_local_data_ssl=NO<br />
<br />
# 选择你想要的<br />
force_local_logins_ssl=YES<br />
<br />
# TLS v1 协议连接是首选,默认情况下启用此模式,而禁用 SSL v2 和 v3 时,以下设置是默认设置,不需要更改,除非您特别需要 SSL<br />
# ssl_tlsv1=YES<br />
# ssl_sslv2=NO<br />
# ssl_sslv3=NO<br />
# 提供您的证书和私钥注释的路径,它们可以包含在同一个文件中或不同的文件中<br />
rsa_cert_file=/etc/ssl/certs/vsftpd.pem<br />
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem<br />
<br />
# 此设置默认设置为 YES,并要求所有数据连接都显示会话重用,这证明他们知道控制通道的秘密。这种方式更安全,但不受许多 FTP 客户端的支持,为了更好的兼容性而设置为 NO<br />
require_ssl_reuse=NO<br />
}}<br />
<br />
=== 在被动模式下解析主机名 ===<br />
要覆盖 vsftpd 在被动模式下通过服务器的主机名发布的 IP 地址,并在启动时解析 DNS,在 {{ic|/etc/vsftpd.conf}} 中增加以下两行:<br />
pasv_addr_resolve=YES<br />
pasv_address=''yourdomain.org''<br />
<br />
{{注意|<br />
* 对于动态DNS,定期更新 ''pasv_address'' 并重新启动服务器是不必要的,因为它有时可以被读取。<br />
* 您可能无法通过 LAN 以被动模式连接,在这种情况下,请尝试使用主动模式而不是LAN客户端。<br />
}}<br />
<br />
=== 端口配置 ===<br />
可能需要调整默认FTP侦听端口和被动模式数据端口:<br />
<br />
* 对于暴露于 Web 的 FTP 服务器,为了减少服务器受到攻击的可能性,可以将侦听端口改为除标准端口 21 以外的端口。<br />
* 要限制被动模式将打开的端口,可以提供一个范围。<br />
这些端口配置更改可以使用以下几行完成:<br />
{{hc|/etc/vsftpd.conf|2=<br />
listen_port=2211<br />
pasv_min_port=5000<br />
pasv_max_port=5003<br />
}}<br />
<br />
=== 配置 iptables ===<br />
通常,运行FTP守护进程的服务器受 [[Iptables (简体中文)|iptables]] 防火墙的保护。要允许访问FTP服务器,需要打开相应的端口,如:<br />
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT<br />
本文不会提供有关如何设置iptables的任何说明,但这里是一个例子:[[Simple stateful firewall (简体中文)|Simple stateful firewall]]。<br />
<br />
有一些内核模块需要在这里引用的 iptables 正确的处理 FTP 连接。 其中特别是 ''nf_conntrack_ftp''。这是需要的,因为 FTP 使用给定的 ''listen_port''(默认为21) 仅用于命令,所有的数据传输都是通过不同的端口完成的。这些端口由 FTP 守护程序为每个会话随机选择(也取决于是使用主动还是被动模式)。要告诉 iptables 应该接受端口上的数据包,需要 ''nf_conntrack_ftp''。要在启动时自动加载,请在 {{ic|/etc/modules-load.d}} 中创建新文件,例如:<br />
# echo nf_conntrack_ftp > /etc/modules-load.d/nf_conntrack_ftp.conf<br />
<br />
如果内核 >= 4.7,您需要通过 ''sysctl'' 设置 ''net.netfilter.nf_conntrack_helper = 1'',如:<br />
# echo net.netfilter.nf_conntrack_helper=1 > /etc/sysctl.d/70-conntrack.conf<br />
或使用<br />
# iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp<br />
<br />
== 小技巧 ==<br />
=== 虚拟用户的 PAM 认证 ===<br />
由于 [[PAM (简体中文)]] 不再提供 {{ic|pam_userdb.so}} 另一个简单的方法是使用 {{AUR|libpam_pwdfile}}。但是,本节仅限于解释如何通过 {{ic|pam_pwdfile.so}} 配置 chroot 环境和身份验证。<br />
<br />
在此示例中,我们创建目录 {{ic|vsftpd}}:<br />
# mkdir /etc/vsftpd<br />
<br />
创建和存储用户名和密码的一个选择是使用 Apache 的生成器 htpasswd:<br />
# htpasswd -c /etc/vsftpd/.passwd<br />
上述命令的一个问题是 vsftpd 可能无法读取生成的 MD5 散列密码。如果使用 -d 开关运行相同的命令,则使用 crypt() 加密,vsftpd 的密码变得可读,但其缺点是安全性较低,密码限制为8个字符。 Openssl 可用于使用算法1生成基于 MD5 的 BSD 密码:<br />
# openssl passwd -1<br />
<br />
无论那个解决方案 {{ic|/etc/vsftpd/.passwd}} 应该如下所示:<br />
username1:hashed_password1<br />
username2:hashed_password2<br />
...<br />
<br />
接下来,您需要使用 {{ic|pam_pwdfile.so}} 和生成的 {{ic|/etc/vsftpd/.passwd}} 文件创建 PAM 服务。在本例中,我们为 ''vsftpd'' 创建了一个 PAM 策略,其中包含以下内容:<br />
{{hc|/etc/pam.d/vsftpd|auth required pam_pwdfile.so pwdfile /etc/vsftpd/.passwd<br />
account required pam_permit.so}}<br />
<br />
现在是为虚拟用户创建一个 home 的时候了。在示例中,决定用 {{ic|/srv/ftp}} 为虚拟用户托管数据,这也反映了 Arch 的默认目录结构。首先创建 virtual 用户并使 {{ic|/srv/ftp}} 成为它的 home:<br />
# useradd -d /srv/ftp virtual<br />
让 virtual 成为所有者<br />
# chown virtual:virtual /srv/ftp<br />
<br />
一个基本的没有私人文件夹配置的 /etc/vsftpd,默认的虚拟用户的 home 文件夹:<br />
# 指向正确的 PAM 服务文件<br />
pam_service_name=vsftpd<br />
write_enable=YES<br />
hide_ids=YES<br />
listen=YES<br />
connect_from_port_20=YES<br />
anonymous_enable=NO<br />
local_enable=YES<br />
dirmessage_enable=YES<br />
xferlog_enable=YES<br />
chroot_local_user=YES<br />
guest_enable=YES<br />
guest_username=virtual<br />
virtual_use_local_privs=YES<br />
<br />
您自己的设置可能不需要一些参数。如果您希望 chroot 环境可写,您将需要将以下内容添加到配置文件中:<br />
allow_writeable_chroot = YES<br />
否则 vsftpd 的默认安全设置会抱怨,如果它检测到 chroot 是可写的。<br />
<br />
[[Start]] {{ic|vsftpd.service}}。<br />
<br />
您现在应该可以使用存储在 {{ic|/etc/vsftpd/.passwd}} 中的任何用户和密码从FTP客户端登录。<br />
<br />
==== 为虚拟用户创建私有目录 ====<br />
首先创建用户文件夹<br />
# mkdir /srv/ftp/user1<br />
# mkdir /srv/ftp/user2<br />
# chown virtual:virtual /srv/ftp/user?/<br />
<br />
随后, 在 {{ic|/etc/vsftpd.conf}} 增加如下行:<br />
local_root=/srv/ftp/$USER<br />
user_sub_token=$USER<br />
<br />
== 问题解决 ==<br />
<br />
=== vsftpd: Error 500 with kernel 4.18+ ===<br />
[[Wikipedia:seccomp|seccomp]] 在 vsftpd 中默认激活,这导致某些内核版本出现兼容性问题。这已经修复了,你可以在 [https://bugzilla.redhat.com/show_bug.cgi?id=845980 RedHat Bugzilla#845980] 中看到,但在较新的内核中仍然可能导致问题。<br />
<br />
如果在列出目录时遇到故障,将其添加到 {{ic|/etc/vsftpd.conf}}:<br />
seccomp_sandbox=NO<br />
<br />
=== vsftpd: refusing to run with writable root inside chroot() ===<br />
从 vsftpd 2.3.5 开始,用户被锁定的 chroot 目录不可写。这是为了防止安全漏洞。<br />
<br />
允许上传的安全方法是保持 chroot 启用,并配置您的 FTP 目录。<br />
<br />
local_root=/srv/ftp/user<br />
<br />
# mkdir -p /srv/ftp/user/upload<br />
#<br />
# chmod 550 /srv/ftp/user<br />
# chmod 750 /srv/ftp/user/upload<br />
<br />
如果你必须这么做:<br />
<br />
您可以将其放入您的 {{ic|/etc/vsftpd.conf}} 以解决此安全性增强(自vsftpd 3.0.0;来自 [http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/ Fixing 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()]):<br />
allow_writeable_chroot=YES<br />
<br />
=== FileZilla Client: GnuTLS error -8 -15 -110 when connecting via SSL ===<br />
vsftpd 尝试在 SSL 会话中显示纯文本错误消息。为了进行调试,暂时禁用加密,您将看到正确的错误消息。[http://ramblings.linkerror.com/?p=45] [https://serverfault.com/questions/772494/vsftpd-list-causes-gnutls-error-15]<br />
<br />
Often these errors can be solved by adding[https://bugzilla.redhat.com/show_bug.cgi?id=845980]:<br />
{{ic|1=seccomp_sandbox=NO}}<br />
<br />
=== vsftpd.service fails to run on boot ===<br />
如果您启用了 {{ic|vsftpd.service}},并且无法在启动时运行,请确保它已在服务文件中设置为在 {{ic|network.target}} 之后加载:<br />
<br />
{{hc|/usr/lib/systemd/system/vsftpd.service|2=<br />
[Unit]<br />
Description=vsftpd daemon<br />
After=network.target}}<br />
<br />
=== Passive mode replies with the local IP address to a remote connection ===<br />
<br />
如果 vsftpd 将本地地址返回给远程连接,如:<br />
227 Entering Passive Mode (192,168,0,19,192,27).<br />
<br />
It may be that the FTP server is behind a NAT router and while some devices monitor FTP connections and dynamically replace the IP address specification for packets containing the PASV response, some do not.<br />
可能是 FTP 服务器位于 NAT 路由器后面,而有些设备会监视 FTP 连接并动态替换包含 PASV 响应的数据包的 IP 地址规范,但有些设备却不会。<br />
<br />
使用以下命令在 vsftpd 配置中指示外部IP地址:<br />
pasv_address=''externalIPaddress''<br />
<br />
或者可选地:<br />
pasv_addr_resolve=YES<br />
pasv_address=''my.domain.name''<br />
<br />
如果在更改后无法进行内部连接,则可能需要运行 2 个 vsftpd,一个用于内部连接,一个用于外部连接。<br />
<br />
{{提示|要找出 NAT 路由器是否拦截 PASV 响应并用外部 IP 替换内部 IP,可以在 TLS 模式下检查客户端的服务器响应。加密的数据包不能被路由器识别并且未被修改。}}<br />
<br />
=== ipv6 only fails with: 500 OOPS: run two copies of vsftpd for IPv4 and IPv6 ===<br />
你很有可能已经注释了这一行<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
#listen=YES<br />
#<br />
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6<br />
# sockets, you must run two copies of vsftpd with two configuration files.<br />
# Make sure, that one of the listen options is commented !!<br />
listen_ipv6=YES<br />
<br />
而不是设置<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
listen=NO<br />
<br />
=== vsftpd 连接在使用 nis 的机器上失败: yp_bind_client_create_v2: RPC: Unable to send ===<br />
as mentioned on the vsftpd faq page, "...built-in sandboxing uses network isolation on Linux. This<br />
may be interfering with any module that needs to use the network to perform operations or lookups"<br />
正如在 vsftpd fap 页面上提到的那样,“...内置沙盒使用 linux 上的网络隔离可能会干扰任何需要使用网络执行操作或查找的模块”<br />
<br />
将这个未公开的行添加到你的 {{ic|/etc/vsftpd.conf}}<br />
isolate_network=NO<br />
<br />
== 更多资源 ==<br />
* [http://vsftpd.beasts.org/ vsftpd official homepage]<br />
* [http://vsftpd.beasts.org/vsftpd_conf.html vsftpd.conf man page]<br />
* [https://security.appspot.com/vsftpd/FAQ.txt vsftpd FAQ]</div>
745275633
https://wiki.archlinux.org/index.php?title=Archiso_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=603156
Archiso (简体中文)
2020-03-30T02:09:56Z
<p>745275633: /* 安装和配置 */ fix reference</p>
<hr />
<div>[[Category:简体中文]]<br />
[[Category:Live Arch systems (简体中文)]]<br />
[[Category:Installation process (简体中文)]]<br />
[[Category:Arch projects (简体中文)]]<br />
[[ar:Archiso]]<br />
[[el:Archiso]]<br />
[[en:Archiso]]<br />
[[es:Archiso]]<br />
[[fr:Archiso]]<br />
[[it:Archiso]]<br />
[[ja:Archiso]]<br />
[[nl:Archiso]]<br />
[[pt:Archiso]]<br />
[[ru:Archiso]]<br />
[[sk:Archiso]]<br />
{{TranslationStatus (简体中文)|Archiso|2020-03-30|597702}}<br />
{{Related articles start (简体中文)}}<br />
{{Related|Remastering the Install ISO}}<br />
{{Related2|PXE (简体中文)|PXE}}<br />
{{Related2|Archboot (简体中文)|Archboot}}<br />
{{Related articles end}}<br />
'''Archiso''' 是用于构建 Arch Linux Live CD ISO 映像的工具。 [https://www.archlinux.org/download/ 官方映像] 是使用 Archiso 构建的。 Archiso 是可配置的,并且可以用作不同系统的基础,例如救援系统或 Linux 安装程序。 这篇 Wiki 文章介绍了如何安装 Archiso,以及如何配置它以控制生成的 ISO 映像的各个方面,例如随附的软件包和文件。 技术需求和构建步骤可以在 [https://git.archlinux.org/archiso.git/tree/docs 官方项目文档] 中找到。 Archiso 通过许多 bash 脚本实现。 Archiso 的核心组件是 ''mkarchiso'' 命令。 其选项记录在其用法输出中,此处未涉及。 用户不需要直接与 ''mkarchiso'' 交互。<br />
<br />
== 安装和配置 ==<br />
<br />
{{注意|以下操作请在ROOT权限下使用,在错误的权限下操作会造成问题。}}<br />
[[install|安装]] {{Pkg|archiso}} 或 {{AUR|archiso-git}}。<br />
<br />
Archiso 附带2个预定义配置(profiles): ''releng'' 和''baseline''。<br />
<br />
* 如果您想要创建完全定制的 Live Arch Linux ,并预装所有您喜爱的程序和配置,使用 ''releng''。<br />
<br />
* 如果您只是想构建一个简易 Live 镜像,无预装软件并仅有基础配置,那么使用 ''baseline''。<br />
<br />
使用以下命令将您选择的配置文件复制到目录中。 用 {{ic|releng}} 或 {{ic|baseline}} 替换 {{ic|'''profile'''}},并用你选择的目录名称替换 {{ic|''archlive''}}。<br />
<br />
# cp -r /usr/share/archiso/configs/'''profile''' ''archlive''<br />
<br />
现在,根据所选的配置文件和您的目标进入不同的章节。<br />
* ''releng'':如果您选择了 ''releng'' ,并且<br />
** 如果要自定义映像,请继续进行章节 [[#配置 Live 介质]]。<br />
** 如果要复制官方映像,请继续进行 [[#构建 ISO]]。<br />
* ''baseline'':如果您选择了 ''baseline'' 配置文件,请继续进行 [[#构建 ISO]]。<br />
<br />
== 配置 Live 介质 ==<br />
<br />
本节详细介绍如何配置映像,以及定义以后将复制到映像的软件包和配置。<br />
<br />
在 [[#安装和配置]] 中创建的{{ic|''archlive''}}目录中有许多文件和目录; 我们只关注以下的:<br />
* {{ic|packages.x86_64}} - 此文件列出了 Live 系统映像上安装的软件包。<br />
* {{ic|airootfs}} - 此目录用作覆盖,并允许您进行自定义。<br />
您可以通过编辑 {{ic|''archlive''/airootfs/root/customize_airootfs.sh}} 来编写遵循安装指南(或安装后)的所有管理任务的脚本,除了软件包安装。该脚本是从正在运行的 Live 系统的角度编写的,即,在脚本中,路径 {{ic|/}} 是指正在运行的 Live 系统的根目录。<br />
<br />
=== 安装包 ===<br />
<br />
编辑 {{ic|packages.x86_64}} 中的软件包列表,以配置将哪些软件包安装在 Live 系统映像上,逐行列出软件包。<br />
<br />
{{注意|如果要在 Live CD 中使用 [[窗口管理器]],则必须添加必要且正确的 [[video drivers]],否则 WM 可能在加载时冻结。}}<br />
<br />
==== 自定义本地库 ====<br />
<br />
为了准备自定义软件包或从 [[AUR]]/[[ABS]] 准备软件包,您还可以 [[Pacman/Tips_and_tricks_(简体中文)#自建本地仓库|自建本地仓库]]。<br />
<br />
然后,您可以将以下内容放入 {{ic|~/archlive/pacman.conf}} 中,添加到其他仓库条目上方(最高优先级):<br />
<br />
{{hc|~/archlive/pacman.conf|...<br />
# custom repository<br />
[customrepo]<br />
SigLevel <nowiki>=</nowiki> Optional TrustAll<br />
Server <nowiki>=</nowiki> file:///home/'''user'''/customrepo/$arch<br />
...}}<br />
<br />
==== 安装 multilib 中的软件包 ====<br />
<br />
要从 [[Multilib (简体中文)|Multilib]] 资源库中安装软件包,仅需在{{ic|~/archlive/pacman.conf}}中取消注释以下行以启用 ''multilib'':<br />
<br />
{{hc|pacman.conf|2=<br />
[multilib]<br />
SigLevel = PackageRequired<br />
Include = /etc/pacman.d/mirrorlist<br />
}}<br />
<br />
=== 向映像里添加文件===<br />
<br />
{{注意|你必须使用 root 权限来完成这件事,不要改变任何你复制过来的文件的所有权,airootfs 中的'''所有'''文件必须为 root 用户所有。适当的所有制将在不久被解决。}}<br />
<br />
airootfs 目录作为要覆盖的文件,把它看作是在当前系统上的根目录'/',所以你在这个目录中放置的任何文件都将在开机时被复制。<br />
<br />
所以,如果你在当前系统上有一组 iptables 脚本且想要在 Live 映像上使用,请这样复制:<br />
# cp -r /etc/iptables ~/archlive/airootfs/etc<br />
<br />
在用户 home 文件夹里放置文件的方法有些许不同。不要把它们放在 {{ic|airootfs/home}},而是在 airootfs/ 里创建 skel 目录并将其放置在那里。然后我们会将相关命令添加到 {{ic|customize_airootfs.sh}}——我们要使用它在引导时复制文件以及梳理权限。<br />
<br />
首先,创建 skel 目录<br />
# mkdir ~/archlive/airootfs/etc/skel<br />
<br />
现在,复制 'home' 的文件到 skel 目录。例如,对于 {{ic|.bashrc}}:<br />
# cp ~/.bashrc ~/archlive/airootfs/etc/skel/<br />
<br />
当 {{ic|~/archlive/airootfs/root/customize_airootfs.sh}} 被执行,并且一个新用户已被创建, skel 目录中的文件将自动被复制到新的 home 文件夹中,并被设置正确的权限。<br />
<br />
类似地,需要注意位于层次结构下方的特殊配置文件。作为示例,配置文件 {{ic|/etc/X11/xinit/xinitrc}} 位于可能被安装包覆盖的路径上。要将 {{ic|xinitrc}} 的配置文件放在 {{ic|~/archlive/airootfs/etc/skel/}} ,然后修改 {{ic|customize_airootfs.sh}} 以适当地移动。<br />
<br />
=== 引导器 ===<br />
<br />
默认的文件应该可以正常工作,所以你应该不需要去碰它。<br />
<br />
由于 isolinux 的模块化性质,你能够使用很多插件,因为所有 *.c32 都被复制且可以可供您使用。看看 [http://syslinux.zytor.com/wiki/index.php/SYSLINUX syslinux 官方网站] 和 [https://git.archlinux.org/archiso.git/tree/configs/releng/syslinux Archiso Git Repo]。使用所述插件,便有可能做出更具视觉吸引力及复杂的菜单。参见 [http://syslinux.zytor.com/wiki/index.php/Comboot/menu.c32 此处]。<br />
==== UEFI 安全启动 ====<br />
<br />
如果要使 Archiso 在启用 UEFI 安全启动的环境下可启动,则必须使用签名过的启动加载程序。您可以按照 [[Secure Boot#Booting an install media]] 中的说明进行操作。<br />
<br />
=== 登录管理器 ===<br />
<br />
通过启用您登录管理器的 [[Systemd (简体中文)|systemd]] 服务来做到在引导时启动 X 。如果您知道哪一个 .service 文件需要软链接,那就太好了。如果不知道,你也可以轻松找出——如果你在创建 iso 所用的系统上使用相同的程序的话。只需使用:<br />
<br />
$ ls -l /etc/systemd/system/display-manager.service<br />
<br />
现在在 {{ic|~/archlive/airootfs/etc/systemd/system}} 中创建相同的软链接。如 LXDM:<br />
<br />
# ln -s /usr/lib/systemd/system/lxdm.service ~/archlive/airootfs/etc/systemd/system/display-manager.service<br />
<br />
这将使您在 live 系统启用在系统上启动 LXDM。(This will enable LXDM at system start on your live system.)<br />
<br />
或者,您也可以启用 {{ic|airootfs/root/customize_airootfs.sh}} 中的服务以及其中启用的其他服务。<br />
<br />
如果您希望图形环境在启动过程中自动启动,请确保编辑 {{ic|airootfs/root/customize_airootfs.sh}} 并替换<br />
systemctl set-default multi-user.target<br />
为<br />
systemctl set-default graphical.target<br />
<br />
=== 改变自动登录 ===<br />
<br />
Getty 的自动登录配置位于 {{ic|airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf}}。 <br />
<br />
您可以修改这个文件来更改自动登录用户:<br />
<br />
[Service]<br />
ExecStart=<br />
ExecStart=-/sbin/agetty --autologin '''isouser''' --noclear %I 38400 linux<br />
<br />
或者干脆删除它来禁用自动登录。<br />
<br />
== 构建ISO ==<br />
<br />
现在,你已经准备好把你的文件转换成 .iso,以便可以刻录到 CD 或 USB。<br />
<br />
在 {{ic|~/archlive}} 中执行:<br />
<br />
# ./build.sh -v<br />
<br />
该脚本将现在下载并安装你指定的软件包到 {{ic|work/*/airootfs}},创建内核和 init 映像(initramfs),应用您的修改,并最终把 ISO 建立到 {{ic|out/}}。<br />
<br />
=== 重建ISO ===<br />
<br />
在修改之后重建 ISO 不被官方支持。但是,通过应用两个步骤很容易。首先,您必须删除工作目录中的锁定文件:<br />
<br />
# rm -v work/build.make_*<br />
<br />
如果您编辑了 {{ic|airootfs/root/customize_airootfs.sh}}以创建非特权用户,则重建将在创建时失败,因为该用户已经存在({{Bug|41865}})。 为避免此问题,您需要在运行 {{ic|useradd}} 之前检查用户是否存在,例如 通过运行 {{ic|id}}:<br />
<br />
! id arch && useradd -m -p "" -g users -G "adm,audio,floppy,log,network,rfkill,scanner,storage,optical,power,wheel" -s /usr/bin/zsh arch<br />
<br />
同时删除创建的用户或符号链接,如 {{ic|/etc/sudoers}} 等持久性数据。<br />
<br />
{{Expansion|报告需要删除或重置的更多数据。}}<br />
<br />
通过编辑 pacstrap 脚本(位于 /bin/pacstrap)并在第 361 行更改以下内容,可以稍微加快重建速度:<br />
<br />
修改前:<br />
<br />
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then<br />
<br />
修改后:<br />
<br />
if ! pacman -r "$newroot" -Sy --needed "${pacman_args[@]}"; then<br />
<br />
这增加了初始引导的速度,因为它不必下载和安装任何已经安装的基础包。<br />
<br />
=== 删除工作目录 ===<br />
<br />
临时文件将复制到工作目录中。 如果碰巧 build.sh 脚本被中断,请确保在删除之前没有 mount binds - 否则,您可能会丢失数据(例如,安装在 {{ic|/run/media/$user/$label}} 的外部设备在构建过程中被绑定在 {{ic|work/x86_64/airootfs/run/media/$user/$label}} 中。<br />
<br />
== 使用 ISO ==<br />
<br />
有关各种选项,请参见 [[Installation_guide_(简体中文)#启动到_live_环境]]。<br />
<br />
== 参阅 ==<br />
=== 文档和教程 ===<br />
* [https://projects.archlinux.org/archiso.git Archiso 项目页面]<br />
* [https://projects.archlinux.org/archiso.git/tree/docs 官方文档]<br />
<br />
=== 示例自定义模板 ===<br />
* [http://easy.open.and.free.fr/didjix/ A live DJ distribution powered by ArchLinux and built with Archiso]<br />
<br />
=== 创建脱机安装 ISO ===<br />
* [[Archiso offline]]<br />
<br />
=== 查找以前版本的 ISO 映像 ===<br />
* [[Arch Linux Archive]]</div>
745275633
https://wiki.archlinux.org/index.php?title=Archiso_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=603155
Archiso (简体中文)
2020-03-30T02:06:29Z
<p>745275633: 597702</p>
<hr />
<div>[[Category:简体中文]]<br />
[[Category:Live Arch systems (简体中文)]]<br />
[[Category:Installation process (简体中文)]]<br />
[[Category:Arch projects (简体中文)]]<br />
[[ar:Archiso]]<br />
[[el:Archiso]]<br />
[[en:Archiso]]<br />
[[es:Archiso]]<br />
[[fr:Archiso]]<br />
[[it:Archiso]]<br />
[[ja:Archiso]]<br />
[[nl:Archiso]]<br />
[[pt:Archiso]]<br />
[[ru:Archiso]]<br />
[[sk:Archiso]]<br />
{{TranslationStatus (简体中文)|Archiso|2020-03-30|597702}}<br />
{{Related articles start (简体中文)}}<br />
{{Related|Remastering the Install ISO}}<br />
{{Related2|PXE (简体中文)|PXE}}<br />
{{Related2|Archboot (简体中文)|Archboot}}<br />
{{Related articles end}}<br />
'''Archiso''' 是用于构建 Arch Linux Live CD ISO 映像的工具。 [https://www.archlinux.org/download/ 官方映像] 是使用 Archiso 构建的。 Archiso 是可配置的,并且可以用作不同系统的基础,例如救援系统或 Linux 安装程序。 这篇 Wiki 文章介绍了如何安装 Archiso,以及如何配置它以控制生成的 ISO 映像的各个方面,例如随附的软件包和文件。 技术需求和构建步骤可以在 [https://git.archlinux.org/archiso.git/tree/docs 官方项目文档] 中找到。 Archiso 通过许多 bash 脚本实现。 Archiso 的核心组件是 ''mkarchiso'' 命令。 其选项记录在其用法输出中,此处未涉及。 用户不需要直接与 ''mkarchiso'' 交互。<br />
<br />
== 安装和配置 ==<br />
<br />
{{注意|以下操作请在ROOT权限下使用,在错误的权限下操作会造成问题。}}<br />
[[install|安装]] {{Pkg|archiso}} 或 {{AUR|archiso-git}}。<br />
<br />
Archiso 附带2个预定义配置(profiles): ''releng'' 和''baseline''。<br />
<br />
* 如果您想要创建完全定制的 Live Arch Linux ,并预装所有您喜爱的程序和配置,使用 ''releng''。<br />
<br />
* 如果您只是想构建一个简易 Live 镜像,无预装软件并仅有基础配置,那么使用 ''baseline''。<br />
<br />
使用以下命令将您选择的配置文件复制到目录中。 用 {{ic|releng}} 或 {{ic|baseline}} 替换 {{ic|'''profile'''}},并用你选择的目录名称替换 {{ic|''archlive''}}。<br />
<br />
# cp -r /usr/share/archiso/configs/'''profile''' ''archlive''<br />
<br />
现在,根据所选的配置文件和您的目标进入不同的章节。<br />
* ''releng'':如果您选择了 ''releng'' ,并且<br />
** 如果要自定义映像,请继续进行章节 [[#Configure live medium]]。<br />
** 如果要复制官方映像,请继续进行 [[#Build the ISO]]。<br />
* ''baseline'':如果您选择了 ''baseline'' 配置文件,请继续进行 [[#Build the ISO]]。<br />
<br />
== 配置 Live 介质 ==<br />
<br />
本节详细介绍如何配置映像,以及定义以后将复制到映像的软件包和配置。<br />
<br />
在 [[#安装和配置]] 中创建的{{ic|''archlive''}}目录中有许多文件和目录; 我们只关注以下的:<br />
* {{ic|packages.x86_64}} - 此文件列出了 Live 系统映像上安装的软件包。<br />
* {{ic|airootfs}} - 此目录用作覆盖,并允许您进行自定义。<br />
您可以通过编辑 {{ic|''archlive''/airootfs/root/customize_airootfs.sh}} 来编写遵循安装指南(或安装后)的所有管理任务的脚本,除了软件包安装。该脚本是从正在运行的 Live 系统的角度编写的,即,在脚本中,路径 {{ic|/}} 是指正在运行的 Live 系统的根目录。<br />
<br />
=== 安装包 ===<br />
<br />
编辑 {{ic|packages.x86_64}} 中的软件包列表,以配置将哪些软件包安装在 Live 系统映像上,逐行列出软件包。<br />
<br />
{{注意|如果要在 Live CD 中使用 [[窗口管理器]],则必须添加必要且正确的 [[video drivers]],否则 WM 可能在加载时冻结。}}<br />
<br />
==== 自定义本地库 ====<br />
<br />
为了准备自定义软件包或从 [[AUR]]/[[ABS]] 准备软件包,您还可以 [[Pacman/Tips_and_tricks_(简体中文)#自建本地仓库|自建本地仓库]]。<br />
<br />
然后,您可以将以下内容放入 {{ic|~/archlive/pacman.conf}} 中,添加到其他仓库条目上方(最高优先级):<br />
<br />
{{hc|~/archlive/pacman.conf|...<br />
# custom repository<br />
[customrepo]<br />
SigLevel <nowiki>=</nowiki> Optional TrustAll<br />
Server <nowiki>=</nowiki> file:///home/'''user'''/customrepo/$arch<br />
...}}<br />
<br />
==== 安装 multilib 中的软件包 ====<br />
<br />
要从 [[Multilib (简体中文)|Multilib]] 资源库中安装软件包,仅需在{{ic|~/archlive/pacman.conf}}中取消注释以下行以启用 ''multilib'':<br />
<br />
{{hc|pacman.conf|2=<br />
[multilib]<br />
SigLevel = PackageRequired<br />
Include = /etc/pacman.d/mirrorlist<br />
}}<br />
<br />
=== 向映像里添加文件===<br />
<br />
{{注意|你必须使用 root 权限来完成这件事,不要改变任何你复制过来的文件的所有权,airootfs 中的'''所有'''文件必须为 root 用户所有。适当的所有制将在不久被解决。}}<br />
<br />
airootfs 目录作为要覆盖的文件,把它看作是在当前系统上的根目录'/',所以你在这个目录中放置的任何文件都将在开机时被复制。<br />
<br />
所以,如果你在当前系统上有一组 iptables 脚本且想要在 Live 映像上使用,请这样复制:<br />
# cp -r /etc/iptables ~/archlive/airootfs/etc<br />
<br />
在用户 home 文件夹里放置文件的方法有些许不同。不要把它们放在 {{ic|airootfs/home}},而是在 airootfs/ 里创建 skel 目录并将其放置在那里。然后我们会将相关命令添加到 {{ic|customize_airootfs.sh}}——我们要使用它在引导时复制文件以及梳理权限。<br />
<br />
首先,创建 skel 目录<br />
# mkdir ~/archlive/airootfs/etc/skel<br />
<br />
现在,复制 'home' 的文件到 skel 目录。例如,对于 {{ic|.bashrc}}:<br />
# cp ~/.bashrc ~/archlive/airootfs/etc/skel/<br />
<br />
当 {{ic|~/archlive/airootfs/root/customize_airootfs.sh}} 被执行,并且一个新用户已被创建, skel 目录中的文件将自动被复制到新的 home 文件夹中,并被设置正确的权限。<br />
<br />
类似地,需要注意位于层次结构下方的特殊配置文件。作为示例,配置文件 {{ic|/etc/X11/xinit/xinitrc}} 位于可能被安装包覆盖的路径上。要将 {{ic|xinitrc}} 的配置文件放在 {{ic|~/archlive/airootfs/etc/skel/}} ,然后修改 {{ic|customize_airootfs.sh}} 以适当地移动。<br />
<br />
=== 引导器 ===<br />
<br />
默认的文件应该可以正常工作,所以你应该不需要去碰它。<br />
<br />
由于 isolinux 的模块化性质,你能够使用很多插件,因为所有 *.c32 都被复制且可以可供您使用。看看 [http://syslinux.zytor.com/wiki/index.php/SYSLINUX syslinux 官方网站] 和 [https://git.archlinux.org/archiso.git/tree/configs/releng/syslinux Archiso Git Repo]。使用所述插件,便有可能做出更具视觉吸引力及复杂的菜单。参见 [http://syslinux.zytor.com/wiki/index.php/Comboot/menu.c32 此处]。<br />
==== UEFI 安全启动 ====<br />
<br />
如果要使 Archiso 在启用 UEFI 安全启动的环境下可启动,则必须使用签名过的启动加载程序。您可以按照 [[Secure Boot#Booting an install media]] 中的说明进行操作。<br />
<br />
=== 登录管理器 ===<br />
<br />
通过启用您登录管理器的 [[Systemd (简体中文)|systemd]] 服务来做到在引导时启动 X 。如果您知道哪一个 .service 文件需要软链接,那就太好了。如果不知道,你也可以轻松找出——如果你在创建 iso 所用的系统上使用相同的程序的话。只需使用:<br />
<br />
$ ls -l /etc/systemd/system/display-manager.service<br />
<br />
现在在 {{ic|~/archlive/airootfs/etc/systemd/system}} 中创建相同的软链接。如 LXDM:<br />
<br />
# ln -s /usr/lib/systemd/system/lxdm.service ~/archlive/airootfs/etc/systemd/system/display-manager.service<br />
<br />
这将使您在 live 系统启用在系统上启动 LXDM。(This will enable LXDM at system start on your live system.)<br />
<br />
或者,您也可以启用 {{ic|airootfs/root/customize_airootfs.sh}} 中的服务以及其中启用的其他服务。<br />
<br />
如果您希望图形环境在启动过程中自动启动,请确保编辑 {{ic|airootfs/root/customize_airootfs.sh}} 并替换<br />
systemctl set-default multi-user.target<br />
为<br />
systemctl set-default graphical.target<br />
<br />
=== 改变自动登录 ===<br />
<br />
Getty 的自动登录配置位于 {{ic|airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf}}。 <br />
<br />
您可以修改这个文件来更改自动登录用户:<br />
<br />
[Service]<br />
ExecStart=<br />
ExecStart=-/sbin/agetty --autologin '''isouser''' --noclear %I 38400 linux<br />
<br />
或者干脆删除它来禁用自动登录。<br />
<br />
== 构建ISO ==<br />
<br />
现在,你已经准备好把你的文件转换成 .iso,以便可以刻录到 CD 或 USB。<br />
<br />
在 {{ic|~/archlive}} 中执行:<br />
<br />
# ./build.sh -v<br />
<br />
该脚本将现在下载并安装你指定的软件包到 {{ic|work/*/airootfs}},创建内核和 init 映像(initramfs),应用您的修改,并最终把 ISO 建立到 {{ic|out/}}。<br />
<br />
=== 重建ISO ===<br />
<br />
在修改之后重建 ISO 不被官方支持。但是,通过应用两个步骤很容易。首先,您必须删除工作目录中的锁定文件:<br />
<br />
# rm -v work/build.make_*<br />
<br />
如果您编辑了 {{ic|airootfs/root/customize_airootfs.sh}}以创建非特权用户,则重建将在创建时失败,因为该用户已经存在({{Bug|41865}})。 为避免此问题,您需要在运行 {{ic|useradd}} 之前检查用户是否存在,例如 通过运行 {{ic|id}}:<br />
<br />
! id arch && useradd -m -p "" -g users -G "adm,audio,floppy,log,network,rfkill,scanner,storage,optical,power,wheel" -s /usr/bin/zsh arch<br />
<br />
同时删除创建的用户或符号链接,如 {{ic|/etc/sudoers}} 等持久性数据。<br />
<br />
{{Expansion|报告需要删除或重置的更多数据。}}<br />
<br />
通过编辑 pacstrap 脚本(位于 /bin/pacstrap)并在第 361 行更改以下内容,可以稍微加快重建速度:<br />
<br />
修改前:<br />
<br />
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then<br />
<br />
修改后:<br />
<br />
if ! pacman -r "$newroot" -Sy --needed "${pacman_args[@]}"; then<br />
<br />
这增加了初始引导的速度,因为它不必下载和安装任何已经安装的基础包。<br />
<br />
=== 删除工作目录 ===<br />
<br />
临时文件将复制到工作目录中。 如果碰巧 build.sh 脚本被中断,请确保在删除之前没有 mount binds - 否则,您可能会丢失数据(例如,安装在 {{ic|/run/media/$user/$label}} 的外部设备在构建过程中被绑定在 {{ic|work/x86_64/airootfs/run/media/$user/$label}} 中。<br />
<br />
== 使用 ISO ==<br />
<br />
有关各种选项,请参见 [[Installation_guide_(简体中文)#启动到_live_环境]]。<br />
<br />
== 参阅 ==<br />
=== 文档和教程 ===<br />
* [https://projects.archlinux.org/archiso.git Archiso 项目页面]<br />
* [https://projects.archlinux.org/archiso.git/tree/docs 官方文档]<br />
<br />
=== 示例自定义模板 ===<br />
* [http://easy.open.and.free.fr/didjix/ A live DJ distribution powered by ArchLinux and built with Archiso]<br />
<br />
=== 创建脱机安装 ISO ===<br />
* [[Archiso offline]]<br />
<br />
=== 查找以前版本的 ISO 映像 ===<br />
* [[Arch Linux Archive]]</div>
745275633
https://wiki.archlinux.org/index.php?title=Archiso_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=591807
Archiso (简体中文)
2019-12-14T10:58:59Z
<p>745275633: /* 在沒有互联网连接的情况下安装 Archiso */ fix broken link</p>
<hr />
<div>[[Category:简体中文]]<br />
[[Category:Live Arch systems (简体中文)]]<br />
[[Category:Installation process (简体中文)]]<br />
[[Category:Arch projects (简体中文)]]<br />
[[ar:Archiso]]<br />
[[el:Archiso]]<br />
[[en:Archiso]]<br />
[[es:Archiso]]<br />
[[fr:Archiso]]<br />
[[it:Archiso]]<br />
[[ja:Archiso]]<br />
[[nl:Archiso]]<br />
[[pt:Archiso]]<br />
[[ru:Archiso]]<br />
[[sk:Archiso]]<br />
{{TranslationStatus (简体中文)|Archiso|2018-06-27|527427}}<br />
{{Related articles start (简体中文)}}<br />
{{Related|Remastering the Install ISO}}<br />
{{Related2|PXE (简体中文)|PXE}}<br />
{{Related2|Archboot (简体中文)|Archboot}}<br />
{{Related articles end}}<br />
'''Archiso''' 是一组 bash 脚本,它能够建立功能全面的 Arch Linux 的 Live CD/DVD/USB 映像。它同样是用来生成官方映像的工具,但由于它是一个非常通用的工具,所以它可以被用来生成从救援系统、安装盘,到特殊爱好的 Live CD/DVD/USB 系统——无人知晓还有其他什么。简单地说,如果要将 Arch 放在一条闪光的船上,它可以帮你做到这一点。Archiso 的核心以及灵魂是 ''mkarchiso''。它的所有选项都写在它的用法输出上,所以它的直接使用方法将不在这里讨论。相反,这篇 wiki 文章将导引你迅速建立你的 Live 介质。<br />
<br />
== 安装和配置 ==<br />
<br />
{{注意|以下操作请在ROOT权限下使用,在错误的权限下操作会造成问题。}}<br />
当你开始之前, [[install|安装]] {{Pkg|archiso}} 或 {{AUR|archiso-git}}。<br />
<br />
Archiso 附带2个预定义配置(profiles): ''releng'' 和''baseline''。<br />
<br />
* 如果您想要创建完全定制的 Live Arch Linux ,并预装所有您喜爱的程序和配置,使用 ''releng''。<br />
<br />
* 如果您只是想构建一个简易 Live 镜像,无预装软件并仅有基础配置,那么使用 ''baseline''。<br />
<br />
现在,将您选择的配置文件复制到目录(在下面的示例中为 ''archlive''),您可以在其中进行调整和构建。 执行以下操作,用 {{ic|releng}} 或 {{ic|baseline}} 替换 {{ic|'''profile'''}}。<br />
<br />
# cp -r /usr/share/archiso/configs/'''profile''' ''archlive''<br />
<br />
* 如果你使用 {{ic|releng}} 配置文件来创建一个完全自定义的镜像,那么你可以继续到:[[#配置 Live 介质]]。<br />
<br />
* 如果您使用 {{ic|baseline}} 配置文件创建一个简易映像,那么你不需要做任何定制,并可以直接继续到 [[#构建ISO]].<br />
<br />
== 配置 Live 介质 ==<br />
<br />
本节详细介绍该如何配置您将创建的映像,允许您定义哪些包以及配置将被您的 Live 映像所包含。<br />
在 [[#安装和配置]] 中创建的{{ic|''archlive''}}目录中有许多文件和目录; 我们只关注其中一部分,主要是<br />
* {{ic|packages.*}} - 在这里一行行列出你想要安装的包,和 <br />
* {{ic|airootfs}} 目录——这是一个覆盖目录,你将在这里完成所有的定制工作。<br />
一般来说,您在全新安装之后所执行的每个管理任务(不包括软件包安装)可以被写入这个脚本: {{ic|''archlive''/airootfs/root/customize_airootfs.sh}}。您必须从新环境的角度来写该脚本,所以脚本中的 / 代表方才被创建的 Live ISO 的根。<br />
<br />
=== 安装包 ===<br />
<br />
[[Edit|编辑]] {{ic|packages.i686}},{{ic|packages.x86_64}} 或 {{ic|packages.both}} 中的程序包列表,以指示要在 live 媒体上安装那些程序包。这里的后缀表示包可用的架构。<br />
<br />
{{Note|如果要在 Live CD 中使用 [[窗口管理器]],则必须添加必要且正确的 [[video drivers]],否则 WM 可能在加载时冻结。}}<br />
<br />
==== 自定义本地库 ====<br />
<br />
{{Merge|Pacman/Tips_and_tricks_(简体中文)#自建本地仓库|移动一般信息 (如:仓库目录树) 到主文章.|Talk:Archiso}}<br />
<br />
为了准备自定义包或是从 [[Arch User Repository (简体中文)|AUR]]/[[Arch Build System (简体中文)|ABS]] 安装包,你也可以 [[Custom local repository|创建自定义本地资源库]]。如果您希望支持多种体系结构,则应采取预防措施来防止发生错误。每个架构应该有自己的目录树:<br />
<br />
{{hc|$ tree ~/customrepo/ {{!}} sed "s/$(uname -m)/<arch>/g"|<br />
/home/archie/customrepo/<br />
└── <arch><br />
├── customrepo.db -> customrepo.db.tar.xz<br />
├── customrepo.db.tar.xz<br />
├── customrepo.files -> customrepo.files.tar.xz<br />
├── customrepo.files.tar.xz<br />
└── personal-website-git-b99cce0-1-<arch>.pkg.tar.xz<br />
<br />
1 directory, 5 files<br />
}}<br />
<br />
如此后,您可以添加您的仓库——把下面的句子加入 {{ic|~/archlive/pacman.conf}},并置于其他仓库条目上面(优先级最高):<br />
<br />
{{hc|~/archlive/pacman.conf|...<br />
# custom repository<br />
[customrepo]<br />
SigLevel <nowiki>=</nowiki> Optional TrustAll<br />
Server <nowiki>=</nowiki> file:///home/'''user'''/customrepo/$arch<br />
...}}<br />
<br />
''repo-add'' 可执行文件检查软件包是否合适。如果不,那么你将得到与此类似的错误消息:<br />
<br />
==> ERROR: '/home/archie/customrepo/<arch>/foo-<arch>.pkg.tar.xz' does not have a valid database archive extension.<br />
<br />
==== 避免安装属于base组的包 ====<br />
<br />
默认情况下,{{ic|/usr/bin/mkarchiso}}——一个被 {{ic|~/archlive/build.sh}} 使用的脚本——会调用 {{Pkg|arch-install-scripts}} 中一个名为 {{ic|pacstrap}} 的程序,且在调用时不使用 {{ic|-i}} 标志——这将使 [[Pacman]] 在安装过程中不等待用户输入。<br />
<br />
当 base 组软件包被加入黑名单——把它们写到 {{ic|~/archlive/pacman.conf}} 中的 {{ic|IgnorePkg}} 行——时,[[Pacman]] 会询问是否仍然安装它们——意味着如果用户输入被跳过,它们就会被安装。为了避免安装这些包,这里有一些选择:<br />
<br />
* '''丑陋'''方案(Dirty):在 {{ic|/usr/bin/mkarchiso}} 中每次调用 {{ic|pacstrap}} 的行上加入 {{ic|i}} 标志。<br />
<br />
* '''整洁'''方案(Clean):创建 {{ic|/usr/bin/mkarchiso}} 的一份复制。在该复制中增加此标志,并修改 {{ic|~/archlive/build.sh}} 以使其调用修改过的 mkarchiso 脚本。<br />
<br />
* '''高级'''方案(Advanced): 在 {{ic|~/archlive/build.sh}} 中创建一个函数,该函数将在基础安装结束后显式移除那些包。若这样做,可以免去在安装过程中多次按回车键的麻烦。<br />
<br />
==== Installing packages from multilib ====<br />
<br />
要从 [[Multilib (简体中文)|Multilib]] 资源库安装软件包,您必须创建两个 pacman 配置文件:一个用于 x86_64,一个用于 i686。 将 {{ic|pacman.conf}} 复制到 {{ic|pacmanx86_64.conf}} 和 {{ic|pacmani686.conf}}。 取消注释以下行以{{ic|pacmanx86_64.conf}} 中启用 ''multilib''):<br />
<br />
{{hc|pacmanx86_64.conf|2=<br />
[multilib]<br />
SigLevel = PackageRequired<br />
Include = /etc/pacman.d/mirrorlist<br />
}}<br />
<br />
然后用编辑器编辑 {{ic|build.sh}}。 把:<br />
<br />
{{hc|build.sh|<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in i686 x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
done<br />
<br />
run_once make_packages_efi<br />
<br />
for arch in i686 x86_64; do<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
改为:<br />
<br />
{{hc|build.sh|<br />
cp -v releng/pacmanx86_64.conf releng/pacman.conf<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
<br />
echo make_pacman_conf i686<br />
cp -v releng/pacmani686.conf releng/pacman.conf<br />
cp -v releng/pacmani686.conf ${work_dir}/pacman.conf<br />
<br />
<br />
for arch in i686; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
这样,x86_64 和 i686 的软件包将安装有自己的pacman配置文件。<br />
<br />
=== 向映像里添加文件===<br />
<br />
{{注意|你必须使用 root 权限来完成这件事,不要改变任何你复制过来的文件的所有权,airootfs 中的'''所有'''文件必须为 root 用户所有。适当的所有制将在不久被解决。}}<br />
<br />
airootfs 目录作为要覆盖的文件,把它看作是在当前系统上的根目录'/',所以你在这个目录中放置的任何文件都将在开机时被复制。<br />
<br />
所以,如果你在当前系统上有一组 iptables 脚本且想要在 Live 映像上使用,请这样复制:<br />
# cp -r /etc/iptables ~/archlive/airootfs/etc<br />
<br />
在用户 home 文件夹里放置文件的方法有些许不同。不要把它们放在 {{ic|airootfs/home}},而是在 airootfs/ 里创建 skel 目录并将其放置在那里。然后我们会将相关命令添加到 {{ic|customize_airootfs.sh}}——我们要使用它在引导时复制文件以及梳理权限。<br />
<br />
首先,创建 skel 目录<br />
# mkdir ~/archlive/airootfs/etc/skel<br />
<br />
现在,复制 'home' 的文件到 skel 目录。例如,对于 {{ic|.bashrc}}:<br />
# cp ~/.bashrc ~/archlive/airootfs/etc/skel/<br />
<br />
当 {{ic|~/archlive/airootfs/root/customize_airootfs.sh}} 被执行,并且一个新用户已被创建, skel 目录中的文件将自动被复制到新的 home 文件夹中,并被设置正确的权限。<br />
<br />
类似地,需要注意位于层次结构下方的特殊配置文件。作为示例,配置文件 {{ic|/etc/X11/xinit/xinitrc}} 位于可能被安装包覆盖的路径上。要将 {{ic|xinitrc}} 的配置文件放在 {{ic|~/archlive/airootfs/etc/skel/}} ,然后修改 {{ic|customize_airootfs.sh}} 以适当地移动。<br />
<br />
=== 引导器 ===<br />
<br />
默认的文件应该可以正常工作,所以你应该不需要去碰它。<br />
<br />
由于 isolinux 的模块化性质,你能够使用很多插件,因为所有 *.c32 都被复制且可以可供您使用。看看[http://syslinux.zytor.com/wiki/index.php/SYSLINUX syslinux 官方网站] 和 [https://projects.archlinux.org/archiso.git/tree/configs/syslinux-iso/boot-files Archiso Git Repo]。使用所述插件,便有可能做出更具视觉吸引力及复杂的菜单。参见 [http://syslinux.zytor.com/wiki/index.php/Comboot/menu.c32 此处]。<br />
<br />
=== 登录管理器 ===<br />
<br />
通过启用您登录管理器的 [[Systemd (简体中文)|systemd]] 服务来做到在引导时启动 X 。如果您知道哪一个 .service 文件需要软链接,那就太好了。如果不知道,你也可以轻松找出——如果你在创建 iso 所用的系统上使用相同的程序的话。只需使用:<br />
<br />
$ ls -l /etc/systemd/system/display-manager.service<br />
<br />
现在在 {{ic|~/archlive/airootfs/etc/systemd/system}} 中创建相同的软链接。如 LXDM:<br />
<br />
# ln -s /usr/lib/systemd/system/lxdm.service ~/archlive/airootfs/etc/systemd/system/display-manager.service<br />
<br />
这将使您在 live 系统启用在系统上启动 LXDM。(This will enable LXDM at system start on your live system.)<br />
<br />
或者,您也可以启用 {{ic|airootfs/root/customize_airootfs.sh}} 中的服务以及其中启用的其他服务。<br />
<br />
如果您希望图形环境在启动过程中自动启动,请确保编辑 {{ic|airootfs/root/customize_airootfs.sh}} 并替换<br />
systemctl set-default multi-user.target<br />
为<br />
systemctl set-default graphical.target<br />
<br />
=== 改变自动登录状态 ===<br />
<br />
Getty 的自动登录配置位于 {{ic|airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf}}。 <br />
<br />
您可以修改这个文件来更改自动登录用户:<br />
<br />
[Service]<br />
ExecStart=<br />
ExecStart=-/sbin/agetty --autologin '''isouser''' --noclear %I 38400 linux<br />
<br />
或者干脆删除它来禁用自动登录。<br />
<br />
== 构建ISO ==<br />
<br />
现在,你已经准备好把你的文件转换成 .iso,以便可以刻录到 CD 或 USB:<br />
<br />
首先创建 {{ic|out/}} 目录(可选,如果没有的话 build.sh 将会创建它),<br />
<br />
# mkdir ~/archlive/out/<br />
<br />
然后在 {{ic|~/archlive}} 里面执行:<br />
<br />
# ./build.sh -v<br />
<br />
该脚本将现在下载并安装你指定的软件包到 {{ic|work/*/airootfs}},创建内核和 init 映像(initramfs),应用您的修改,并最终把 ISO 建立到 {{ic|out/}}。<br />
<br />
=== 重建ISO ===<br />
<br />
在修改之后重建 ISO 不被官方支持。但是,通过应用两个步骤很容易。首先,您必须删除工作目录中的锁定文件:<br />
<br />
# rm -v work/build.make_*<br />
<br />
此外,需要编辑脚本 {{ic|airootfs/root/customize_airootfs.sh}},并在 {{ic|useradd}} 行的开头添加 {{ic|id}} 命令,如下所示。否则,重建将在此处停止,因为要添加的用户已经存在 [https://bugs.archlinux.org/task/41865]。<br />
{{Style|typo?}}<br />
<br />
! id arch && useradd -m -p "" -g users -G "adm,audio,floppy,log,network,rfkill,scanner,storage,optical,power,wheel" -s /usr/bin/zsh arch<br />
<br />
同时删除创建的用户或符号链接,如 {{ic|/etc/sudoers}} 等持久性数据。<br />
<br />
{{Expansion|报告需要删除或重置的更多数据。}}<br />
<br />
通过编辑 pacstrap 脚本(位于 /bin/pacstrap)并在第 361 行更改以下内容,可以稍微加快重建速度:<br />
<br />
修改前:<br />
<br />
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then<br />
<br />
修改后:<br />
<br />
if ! pacman -r "$newroot" -Sy --needed "${pacman_args[@]}"; then<br />
<br />
这增加了初始引导的速度,因为它不必下载和安装任何已经安装的基础包。<br />
<br />
== 使用ISO ==<br />
<br />
有关各种选项,请参见 [[Category:Installation process (简体中文)]] 部分。<br />
<br />
== 提示和技巧 ==<br />
<br />
=== 在沒有互联网连接的情况下安装 Archiso ===<br />
{{Move|Installation without Internet access|似乎这可以独立成一篇|Talk:Archiso}}<br />
{{Accuracy|可以将 Arch 镜像上提供的 “bootstrap” 映像直接提取到目标磁盘,而不是从 archiso 复制文件。 你将得到一个最小的系统,而不需要处理 archiso 修改。|Talk:Archiso}}<br />
<br />
若你想在没有互联网连接或者你不想重复下载你想要的包的情况下安装 archiso(例如[https://www.archlinux.org/download/ 官方的每月发布版]):<br />
<br />
首先,按照[[Installation guide (简体中文)|安装指南]],并跳过一些步骤(如[[Installation guide (简体中文)#连接到因特网|连接到因特网]]),直到[[Installation guide (简体中文)#安装必须的软件包|安装必须的软件包]]之前。<br />
<br />
==== 安装 archiso 到新的 root ====<br />
<br />
复制 Live 环境的''所有文件''到新的根目录,而不是使用 {{ic|pacstrap}}(这将尝试从远程存储库下载):<br />
# cp -ax / /mnt<br />
{{注意|The option ({{ic|-x}})排除了一些特殊目录,因为它们不应该被复制到新的根目录。}}<br />
<br />
然后,创建一些目录并复制内核映像到新的根,以保证新系统的完整性:<br />
<br />
# cp -vaT /run/archiso/bootmnt/arch/boot/$(uname -m)/vmlinuz /mnt/boot/vmlinuz-linux<br />
<br />
完成之后,请按[[Installation guide (简体中文)#Fstab]]所述生成 fstab。<br />
<br />
==== Chroot 并配置基本系统 ====<br />
<br />
下一步,chroot 到您新安装的系统:<br />
<br />
# arch-chroot /mnt /bin/bash<br />
<br />
请注意,在您配置 locale、键盘映射等之前,你仍然需要为了避免延续 Live 环境的轨迹——或者说对 archiso 所做的一些不适用于非 Live 环境的修改——而做一些事情。<br />
<br />
===== 恢复 journald 的配置 =====<br />
[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/root/customize_airootfs.sh#n19 archiso 的这个修改]会导致日志存储在 RAM 上——它意味着在重启后日志便会丢失。为了解决这个问题,执行:<br />
<br />
# sed -i 's/Storage=volatile/#Storage=auto/' /etc/systemd/journald.conf<br />
<br />
===== 删除特殊的 udev 规则 =====<br />
如果有任何有线网络接口,[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/etc/udev/rules.d/81-dhcpcd.rules udev 的这个规则]会自动启动dhcpcd。<br />
<br />
# rm /etc/udev/rules.d/81-dhcpcd.rules<br />
<br />
===== 禁用和移除 archiso 创建的服务 =====<br />
有一些服务文件是为 Live 环境创建的,请禁用这些服务并移除文件——因为它们对于新系统来说没必要存在:<br />
<br />
# systemctl disable pacman-init.service choose-mirror.service<br />
# rm -r /etc/systemd/system/{choose-mirror.service,pacman-init.service,etc-pacman.d-gnupg.mount,getty@tty1.service.d}<br />
# rm /etc/systemd/scripts/choose-mirror<br />
<br />
===== 移除 Live 环境的特殊脚本 =====<br />
在 live 系统中通过 archiso 脚本安装了一些脚本,这对于新系统是不必要的:<br />
<br />
# rm /etc/systemd/system/getty@tty1.service.d/autologin.conf<br />
# rm /root/{.automated_script.sh,.zlogin}<br />
# rm /etc/mkinitcpio-archiso.conf<br />
# rm -r /etc/initcpio<br />
<br />
===== 导入archlinux密钥 =====<br />
<br />
为了使用官方存储库,我们需要导入 archlinux 主密钥([[Pacman/Package signing (简体中文)#初始化密钥环]])。这一步通常是通过 pacstrap 完成的,但是可以通过<br />
<br />
# pacman-key --init<br />
# pacman-key --populate archlinux<br />
<br />
{{注意|Keyboard or mouse activity is needed to generate entropy and speed-up the first step.}}<br />
<br />
===== 配置系统 =====<br />
<br />
现在,您可以按照 [[Installation guide (简体中文)#配置系统]] 中跳过的步骤(设置语言环境,时区,主机名等),并通过创建初始 ramdisk 来完成安装,如 [[Installation guide (简体中文)#Initramfs]]。<br />
<br />
===== 启用图形登录(可选) =====<br />
<br />
如果使用像GDM这样的显示管理器,则可能需要将 systemd 默认目标从 multi-user.target 更改为允许图形登录的目标。<br />
# systemctl disable multi-user.target<br />
# systemctl enable graphical.target<br />
<br />
== 参阅 ==<br />
=== 文档和教程 ===<br />
* [https://projects.archlinux.org/archiso.git Archiso 项目页面]<br />
* [https://projects.archlinux.org/archiso.git/tree/docs 官方文档]<br />
<br />
=== 示例自定义模板 ===<br />
* [http://easy.open.and.free.fr/didjix/ A live DJ distribution powered by ArchLinux and built with Archiso]</div>
745275633
https://wiki.archlinux.org/index.php?title=Very_Secure_FTP_Daemon_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=591806
Very Secure FTP Daemon (简体中文)
2019-12-14T10:56:35Z
<p>745275633: 591491</p>
<hr />
<div>[[Category:FTP servers (简体中文)]]<br />
[[cs:Very Secure FTP Daemon]]<br />
[[en:Very Secure FTP Daemon]]<br />
[[es:Very Secure FTP Daemon]]<br />
[[it:Very Secure FTP Daemon]]<br />
[[ja:Very Secure FTP Daemon]]<br />
{{TranslationStatus (简体中文)|Very Secure FTP Daemon|2019-12-14|591491}}<br />
[https://security.appspot.com/vsftpd.html vsftpd] (“Very Secure FTP Daemon“) 是一个为 UNIX 类系统开发的轻量,稳定和安全的 FTP 服务器端。<br />
== 安装 ==<br />
[[安装]] {{pkg|vsftpd}} 然后 [[Systemd (简体中文)#使用单元|启动/启用]] {{ic|vsftpd.service}} 守护程序。<br />
<br />
使用 [[Wikipedia:xinetd|xinetd]] 监视和控制 vsftpd 连接,请参见 [[#使用 xinetd]]。<br />
<br />
== 配置 ==<br />
vsftpd 的大多数配置都可以通过编辑 {{ic|/etc/vsftpd.conf}} 文件实现。 该文件本身自带大量注释说明,所以这一章节只就一些重要的配置予以说明。有关所有可用选项和文档,请参阅 {{man|5|vsftpd.conf}} 手册页。默认情况下,由 {{ic|/srv/ftp}} 提供文件。<br />
<br />
允许的连接 {{ic|/etc/hosts.allow}}:<br />
# 允许所有连接<br />
vsftpd: ALL<br />
# IP 地址范围<br />
vsftpd: 10.0.0.0/255.255.255.0<br />
<br />
=== 允许上传 ===<br />
需要将 {{ic|/etc/vsftpd.conf}} 中的 {{ic|write_enable}} 值设为 YES,以便允许修改文件系统(如上传):<br />
write_enable=YES<br />
<br />
=== 本地用户登录 ===<br />
需要修改 {{ic|/etc/vsftpd.conf}} 中的如下值,以便允许 {{ic|/etc/passwd}} 中的用户登录:<br />
local_enable=YES<br />
<br />
=== 匿名用户登录 ===<br />
以下行控制匿名用户是否可以登录。默认情况下,匿名登录只能从 {{ic|/srv/ftp}} 下载:<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
...<br />
# 允许匿名 FTP? (当心 - 默认情况下允许除非您将其注释)。<br />
anonymous_enable=YES<br />
...<br />
# 取消注释以允许匿名 FTP 用户上传文件。<br />
# 只有上述全局写入被激活,才会有效果。<br />
# 另外,你显然需要创建 FTP 用户有写权限的目录。<br />
# anon_upload_enable=YES<br />
#<br />
# 如果您希望匿名 FTP 用户能够创建新目录,请取消注释。<br />
# anon_mkdir_write_enable=YES<br />
...<br />
}}<br />
<br />
您也可以添加以下选项(详见 {{man|5|vsftpd.conf}}):<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
# 匿名登录不需要密码<br />
no_anon_password=YES<br />
<br />
# 匿名客户端的最大传输速率(以 Bytes/秒 为单位)<br />
anon_max_rate=30000<br />
<br />
# 用于匿名登录的目录<br />
anon_root=/example/directory/<br />
}}<br />
<br />
=== Chroot 限制 ===<br />
为了阻止用户离开家目录,可以设置 chroot 环境。要启用此功能,请在 {{ic|/etc/vsftpd.conf}} 中添加以下行:<br />
chroot_list_enable=YES<br />
chroot_list_file=/etc/vsftpd.chroot_list<br />
{{ic|chroot_list_file}} 定义了被 chroot 限制的用户列表。<br />
<br />
对于更严格的环境,请指定以下行:<br />
chroot_local_user=YES<br />
这将默认为所有用户启用 chroot 环境。 在这种情况下,{{ic|chroot_list_file}} 定义了'''不受''' chroot 限制的用户列表。<br />
<br />
=== 限制用户登录 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加以下两行来阻止特定用户登录FTP服务器:<br />
userlist_enable=YES<br />
userlist_file=/etc/vsftpd.user_list<br />
{{ic|userlist_file}} 文件列出'''不允许'''登录的用户。<br />
<br />
如果您只想允许特定的用户登录,请添加以下行:<br />
userlist_deny=NO<br />
此时 {{ic|userlist_file}} 文件指定'''允许'''登录的用户。<br />
<br />
=== 限制连接数 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加如下信息来限制本地用户的数据传输速率:<br />
local_max_rate=1000000 # 最大数据传输速率(单位: Bytes/秒)<br />
max_clients=50 # 可以同时连接的最大客户端数<br />
max_per_ip=2 # 每个 IP 允许的最大连接数<br />
<br />
=== 使用 xinetd ===<br />
Xinetd 提供增强的监控和控制连接功能。对于基本的可以工作的 vsftpd-server 是不必要的<br />
<br />
安装 vsftpd 将会添加必要的服务文件 {{ic|/etc/xinetd.d/vsftpd}},默认情况下,服务被禁用。<br />
<br />
启用ftp服务:<br />
<pre><br />
service ftp<br />
{<br />
socket_type = stream<br />
wait = no<br />
user = root<br />
server = /usr/sbin/vsftpd<br />
log_on_success += HOST DURATION<br />
log_on_failure += HOST<br />
disable = no<br />
}<br />
</pre><br />
<br />
如果您将 vsftpd 守护程序设置为以独立模式运行,而不是启动 vsftpd 守护程序和 [[Systemd (简体中文)#使用单元|启用]] {{ic|xinetd.service}},请在 {{ic|/etc/vsftpd.conf}} 中进行以下更改:<br />
listen=NO<br />
否则连接将失败:<br />
500 OOPS: could not bind listening IPv4 socket<br />
<br />
=== 使用 SSL/TLS 来保护 FTP ===<br />
<br />
{{Style|Do not duplicate [[OpenSSL#Certificates]].}}<br />
<br />
首先,您需要一个 ''X.509 SSL/TLS'' 证书才能使用TLS。如果您没有,可以轻松生成如下的自签名证书:<br />
<br />
# cd /etc/ssl/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout vsftpd.pem -out vsftpd.pem<br />
# chmod 600 vsftpd.pem<br />
<br />
你会被问到关于你公司的问题,等等。由于你的证书不是一个可信任的,所填的内容并不重要,它只会被用于加密。要使用可信证书,您可以从 [[Let's Encrypt]] 这样的证书颁发机构获得证书。<br />
<br />
然后,编辑配置文件:<br />
{{hc|/etc/vsftpd.conf|2=ssl_enable=YES<br />
<br />
# 如果你接受匿名连接你可能要启用这个设置<br />
# allow_anon_ssl=NO<br />
<br />
# 默认情况下所有非匿名登录被迫使用 SSL 发送和接收密码和数据,设置为 NO,以允许不安全的连接<br />
force_local_logins_ssl=NO<br />
force_local_data_ssl=NO<br />
<br />
# 选择你想要的<br />
force_local_logins_ssl=YES<br />
<br />
# TLS v1 协议连接是首选,默认情况下启用此模式,而禁用 SSL v2 和 v3 时,以下设置是默认设置,不需要更改,除非您特别需要 SSL<br />
# ssl_tlsv1=YES<br />
# ssl_sslv2=NO<br />
# ssl_sslv3=NO<br />
# 提供您的证书和私钥注释的路径,它们可以包含在同一个文件中或不同的文件中<br />
rsa_cert_file=/etc/ssl/certs/vsftpd.pem<br />
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem<br />
<br />
# 此设置默认设置为 YES,并要求所有数据连接都显示会话重用,这证明他们知道控制通道的秘密。这种方式更安全,但不受许多 FTP 客户端的支持,为了更好的兼容性而设置为 NO<br />
require_ssl_reuse=NO<br />
}}<br />
<br />
=== 在被动模式下解析主机名 ===<br />
要覆盖 vsftpd 在被动模式下通过服务器的主机名发布的 IP 地址,并在启动时解析 DNS,在 {{ic|/etc/vsftpd.conf}} 中增加以下两行:<br />
pasv_addr_resolve=YES<br />
pasv_address=''yourdomain.org''<br />
<br />
{{注意|<br />
* 对于动态DNS,定期更新 ''pasv_address'' 并重新启动服务器是不必要的,因为它有时可以被读取。<br />
* 您可能无法通过 LAN 以被动模式连接,在这种情况下,请尝试使用主动模式而不是LAN客户端。<br />
}}<br />
<br />
=== 端口配置 ===<br />
可能需要调整默认FTP侦听端口和被动模式数据端口:<br />
<br />
* 对于暴露于 Web 的 FTP 服务器,为了减少服务器受到攻击的可能性,可以将侦听端口改为除标准端口 21 以外的端口。<br />
* 要限制被动模式将打开的端口,可以提供一个范围。<br />
这些端口配置更改可以使用以下几行完成:<br />
{{hc|/etc/vsftpd.conf|2=<br />
listen_port=2211<br />
pasv_min_port=5000<br />
pasv_max_port=5003<br />
}}<br />
<br />
=== 配置 iptables ===<br />
通常,运行FTP守护进程的服务器受 [[Iptables (简体中文)|iptables]] 防火墙的保护。要允许访问FTP服务器,需要打开相应的端口,如:<br />
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT<br />
本文不会提供有关如何设置iptables的任何说明,但这里是一个例子:[[Simple stateful firewall (简体中文)|Simple stateful firewall]]。<br />
<br />
有一些内核模块需要在这里引用的 iptables 正确的处理 FTP 连接。 其中特别是 ''nf_conntrack_ftp''。这是需要的,因为 FTP 使用给定的 ''listen_port''(默认为21) 仅用于命令,所有的数据传输都是通过不同的端口完成的。这些端口由 FTP 守护程序为每个会话随机选择(也取决于是使用主动还是被动模式)。要告诉 iptables 应该接受端口上的数据包,需要 ''nf_conntrack_ftp''。要在启动时自动加载,请在 {{ic|/etc/modules-load.d}} 中创建新文件,例如:<br />
# echo nf_conntrack_ftp > /etc/modules-load.d/nf_conntrack_ftp.conf<br />
<br />
如果内核 >= 4.7,您需要通过 ''sysctl'' 设置 ''net.netfilter.nf_conntrack_helper = 1'',如:<br />
# echo net.netfilter.nf_conntrack_helper=1 > /etc/sysctl.d/70-conntrack.conf<br />
或使用<br />
# iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp<br />
<br />
== 小技巧 ==<br />
=== 虚拟用户的 PAM 认证 ===<br />
由于 [[PAM (简体中文)]] 不再提供 {{ic|pam_userdb.so}} 另一个简单的方法是使用 {{AUR|libpam_pwdfile}}。对于具有许多用户的环境,另一个选项可能是 {{AUR|pam_mysql}} {{Broken package link|{{aur-mirror|pam_mysql}}}}。但是,本节仅限于解释如何通过 {{ic|pam_pwdfile.so}} 配置 chroot 环境和身份验证。<br />
<br />
在此示例中,我们创建目录 {{ic|vsftpd}}:<br />
# mkdir /etc/vsftpd<br />
<br />
创建和存储用户名和密码的一个选择是使用 Apache 的生成器 htpasswd:<br />
# htpasswd -c /etc/vsftpd/.passwd<br />
上述命令的一个问题是 vsftpd 可能无法读取生成的 MD5 散列密码。如果使用 -d 开关运行相同的命令,则使用 crypt() 加密,vsftpd 的密码变得可读,但其缺点是安全性较低,密码限制为8个字符。 Openssl 可用于使用算法1生成基于 MD5 的 BSD 密码:<br />
# openssl passwd -1<br />
<br />
无论那个解决方案 {{ic|/etc/vsftpd/.passwd}} 应该如下所示:<br />
username1:hashed_password1<br />
username2:hashed_password2<br />
...<br />
<br />
接下来,您需要使用 {{ic|pam_pwdfile.so}} 和生成的 {{ic|/etc/vsftpd/.passwd}} 文件创建 PAM 服务。在本例中,我们为 ''vsftpd'' 创建了一个 PAM 策略,其中包含以下内容:<br />
{{hc|/etc/pam.d/vsftpd|auth required pam_pwdfile.so pwdfile /etc/vsftpd/.passwd<br />
account required pam_permit.so}}<br />
<br />
现在是为虚拟用户创建一个 home 的时候了。在示例中,决定用 {{ic|/srv/ftp}} 为虚拟用户托管数据,这也反映了 Arch 的默认目录结构。首先创建 virtual 用户并使 {{ic|/srv/ftp}} 成为它的 home:<br />
# useradd -d /srv/ftp virtual<br />
让 virtual 成为所有者<br />
# chown virtual:virtual /srv/ftp<br />
<br />
一个基本的没有私人文件夹配置的 /etc/vsftpd,默认的虚拟用户的 home 文件夹:<br />
# 指向正确的 PAM 服务文件<br />
pam_service_name=vsftpd<br />
write_enable=YES<br />
hide_ids=YES<br />
listen=YES<br />
connect_from_port_20=YES<br />
anonymous_enable=NO<br />
local_enable=YES<br />
dirmessage_enable=YES<br />
xferlog_enable=YES<br />
chroot_local_user=YES<br />
guest_enable=YES<br />
guest_username=virtual<br />
virtual_use_local_privs=YES<br />
<br />
您自己的设置可能不需要一些参数。如果您希望 chroot 环境可写,您将需要将以下内容添加到配置文件中:<br />
allow_writeable_chroot = YES<br />
否则 vsftpd 的默认安全设置会抱怨,如果它检测到 chroot 是可写的。<br />
<br />
[[Start]] {{ic|vsftpd.service}}。<br />
<br />
您现在应该可以使用存储在 {{ic|/etc/vsftpd/.passwd}} 中的任何用户和密码从FTP客户端登录。<br />
<br />
==== 为虚拟用户创建私有目录 ====<br />
首先创建用户文件夹<br />
# mkdir /srv/ftp/user1<br />
# mkdir /srv/ftp/user2<br />
# chown virtual:virtual /srv/ftp/user?/<br />
<br />
随后, 在 {{ic|/etc/vsftpd.conf}} 增加如下行:<br />
local_root=/srv/ftp/$USER<br />
user_sub_token=$USER<br />
<br />
== 问题解决 ==<br />
<br />
=== vsftpd: Error 500 with kernel 4.18+ ===<br />
[[Wikipedia:seccomp|seccomp]] 在 vsftpd 中默认激活,这导致某些内核版本出现兼容性问题。这已经修复了,你可以在 [https://bugzilla.redhat.com/show_bug.cgi?id=845980 RedHat Bugzilla#845980] 中看到,但在较新的内核中仍然可能导致问题。<br />
<br />
如果在列出目录时遇到故障,将其添加到 {{ic|/etc/vsftpd.conf}}:<br />
seccomp_sandbox=NO<br />
<br />
=== vsftpd: refusing to run with writable root inside chroot() ===<br />
从 vsftpd 2.3.5 开始,用户被锁定的 chroot 目录不可写。这是为了防止安全漏洞。<br />
<br />
允许上传的安全方法是保持 chroot 启用,并配置您的 FTP 目录。<br />
<br />
local_root=/srv/ftp/user<br />
<br />
# mkdir -p /srv/ftp/user/upload<br />
#<br />
# chmod 550 /srv/ftp/user<br />
# chmod 750 /srv/ftp/user/upload<br />
<br />
如果你必须这么做:<br />
<br />
您可以将其放入您的 {{ic|/etc/vsftpd.conf}} 以解决此安全性增强(自vsftpd 3.0.0;来自 [http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/ Fixing 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()]):<br />
allow_writeable_chroot=YES<br />
或者:<br />
<br />
安装 {{AUR|vsftpd-ext}} {{Broken package link|{{aur-mirror|vsftpd-ext}}}} 并在 conf 文件中设置<br />
allow_writable_chroot=YES<br />
<br />
=== FileZilla Client: GnuTLS error -8 -15 -110 when connecting via SSL ===<br />
vsftpd 尝试在 SSL 会话中显示纯文本错误消息。为了进行调试,暂时禁用加密,您将看到正确的错误消息。[http://ramblings.linkerror.com/?p=45] [https://serverfault.com/questions/772494/vsftpd-list-causes-gnutls-error-15]<br />
<br />
Often these errors can be solved by adding[https://bugzilla.redhat.com/show_bug.cgi?id=845980]:<br />
{{ic|1=seccomp_sandbox"="NO}}<br />
<br />
=== vsftpd.service fails to run on boot ===<br />
如果您启用了 {{ic|vsftpd.service}},并且无法在启动时运行,请确保它已在服务文件中设置为在 {{ic|network.target}} 之后加载:<br />
<br />
{{hc|/usr/lib/systemd/system/vsftpd.service|2=<br />
[Unit]<br />
Description=vsftpd daemon<br />
After=network.target}}<br />
<br />
=== Passive mode replies with the local IP address to a remote connection ===<br />
<br />
如果 vsftpd 将本地地址返回给远程连接,如:<br />
227 Entering Passive Mode (192,168,0,19,192,27).<br />
<br />
It may be that the FTP server is behind a NAT router and while some devices monitor FTP connections and dynamically replace the IP address specification for packets containing the PASV response, some do not.<br />
可能是 FTP 服务器位于 NAT 路由器后面,而有些设备会监视 FTP 连接并动态替换包含 PASV 响应的数据包的 IP 地址规范,但有些设备却不会。<br />
<br />
使用以下命令在 vsftpd 配置中指示外部IP地址:<br />
pasv_address=''externalIPaddress''<br />
<br />
或者可选地:<br />
pasv_addr_resolve=YES<br />
pasv_address=''my.domain.name''<br />
<br />
如果在更改后无法进行内部连接,则可能需要运行 2 个 vsftpd,一个用于内部连接,一个用于外部连接。<br />
<br />
{{提示|要找出 NAT 路由器是否拦截 PASV 响应并用外部 IP 替换内部 IP,可以在 TLS 模式下检查客户端的服务器响应。加密的数据包不能被路由器识别并且未被修改。}}<br />
<br />
=== ipv6 only fails with: 500 OOPS: run two copies of vsftpd for IPv4 and IPv6 ===<br />
你很有可能已经注释了这一行<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
#listen=YES<br />
#<br />
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6<br />
# sockets, you must run two copies of vsftpd with two configuration files.<br />
# Make sure, that one of the listen options is commented !!<br />
listen_ipv6=YES<br />
<br />
而不是设置<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
listen=NO<br />
<br />
=== vsftpd 连接在使用 nis 的机器上失败: yp_bind_client_create_v2: RPC: Unable to send ===<br />
as mentioned on the vsftpd faq page, "...built-in sandboxing uses network isolation on Linux. This<br />
may be interfering with any module that needs to use the network to perform operations or lookups"<br />
正如在 vsftpd fap 页面上提到的那样,“...内置沙盒使用 linux 上的网络隔离可能会干扰任何需要使用网络执行操作或查找的模块”<br />
<br />
将这个未公开的行添加到你的 {{ic|/etc/vsftpd.conf}}<br />
isolate_network=NO<br />
<br />
== 更多资源 ==<br />
* [http://vsftpd.beasts.org/ vsftpd official homepage]<br />
* [http://vsftpd.beasts.org/vsftpd_conf.html vsftpd.conf man page]<br />
* [https://security.appspot.com/vsftpd/FAQ.txt vsftpd FAQ]</div>
745275633
https://wiki.archlinux.org/index.php?title=Very_Secure_FTP_Daemon_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=536597
Very Secure FTP Daemon (简体中文)
2018-08-21T12:31:22Z
<p>745275633: 536323</p>
<hr />
<div>[[Category:FTP servers (简体中文)]]<br />
[[cs:Very Secure FTP Daemon]]<br />
[[en:Very Secure FTP Daemon]]<br />
[[es:Very Secure FTP Daemon]]<br />
[[it:Very Secure FTP Daemon]]<br />
[[ja:Very Secure FTP Daemon]]<br />
[[ru:Very Secure FTP Daemon]]<br />
{{TranslationStatus (简体中文)|Very Secure FTP Daemon|2018-08-19|536323}}<br />
[https://security.appspot.com/vsftpd.html vsftpd] (“Very Secure FTP Daemon“) 是一个为 UNIX 类系统开发的轻量,稳定和安全的 FTP 服务器端。<br />
== 安装 ==<br />
[[安装]] {{pkg|vsftpd}} 然后 [[Systemd (简体中文)#使用单元|启动/启用]] {{ic|vsftpd.service}} 守护程序。<br />
<br />
使用 [[Wikipedia:xinetd|xinetd]] 监视和控制 vsftpd 连接,请参见 [[#使用 xinetd]]。<br />
<br />
== 配置 ==<br />
vsftpd 的大多数配置都可以通过编辑 {{ic|/etc/vsftpd.conf}} 文件实现。 该文件本身自带大量注释说明,所以这一章节只就一些重要的配置予以说明。有关所有可用选项和文档,请参阅 {{man|5|vsftpd.conf}} 手册页。默认情况下,由 {{ic|/srv/ftp}} 提供文件。<br />
<br />
允许的连接 {{ic|/etc/hosts.allow}}:<br />
# 允许所有连接<br />
vsftpd: ALL<br />
# IP 地址范围<br />
vsftpd: 10.0.0.0/255.255.255.0<br />
<br />
=== 允许上传 ===<br />
需要将 {{ic|/etc/vsftpd.conf}} 中的 {{ic|write_enable}} 值设为 YES,以便允许修改文件系统(如上传):<br />
write_enable=YES<br />
<br />
=== 本地用户登录 ===<br />
需要修改 {{ic|/etc/vsftpd.conf}} 中的如下值,以便允许 {{ic|/etc/passwd}} 中的用户登录:<br />
local_enable=YES<br />
<br />
=== 匿名用户登录 ===<br />
以下行控制匿名用户是否可以登录。默认情况下,匿名登录只能从 {{ic|/srv/ftp}} 下载:<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
...<br />
# 允许匿名 FTP? (当心 - 默认情况下允许除非您将其注释)。<br />
anonymous_enable=YES<br />
...<br />
# 取消注释以允许匿名 FTP 用户上传文件。<br />
# 只有上述全局写入被激活,才会有效果。<br />
# 另外,你显然需要创建 FTP 用户有写权限的目录。<br />
# anon_upload_enable=YES<br />
#<br />
# 如果您希望匿名 FTP 用户能够创建新目录,请取消注释。<br />
# anon_mkdir_write_enable=YES<br />
...<br />
}}<br />
<br />
您也可以添加以下选项(详见 {{man|5|vsftpd.conf}}):<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
# 匿名登录不需要密码<br />
no_anon_password=YES<br />
<br />
# 匿名客户端的最大传输速率(以 Bytes/秒 为单位)<br />
anon_max_rate=30000<br />
<br />
# 用于匿名登录的目录<br />
anon_root=/example/directory/<br />
}}<br />
<br />
=== Chroot 限制 ===<br />
为了阻止用户离开家目录,可以设置 chroot 环境。要启用此功能,请在 {{ic|/etc/vsftpd.conf}} 中添加以下行:<br />
chroot_list_enable=YES<br />
chroot_list_file=/etc/vsftpd.chroot_list<br />
{{ic|chroot_list_file}} 定义了被 chroot 限制的用户列表。<br />
<br />
对于更严格的环境,请指定以下行:<br />
chroot_local_user=YES<br />
这将默认为所有用户启用 chroot 环境。 在这种情况下,{{ic|chroot_list_file}} 定义了'''不受''' chroot 限制的用户列表。<br />
<br />
=== 限制用户登录 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加以下两行来阻止特定用户登录FTP服务器:<br />
userlist_enable=YES<br />
userlist_file=/etc/vsftpd.user_list<br />
{{ic|userlist_file}} 文件列出'''不允许'''登录的用户。<br />
<br />
如果您只想允许特定的用户登录,请添加以下行:<br />
userlist_deny=NO<br />
此时 {{ic|userlist_file}} 文件指定'''允许'''登录的用户。<br />
<br />
=== 限制连接数 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加如下信息来限制本地用户的数据传输速率:<br />
local_max_rate=1000000 # 最大数据传输速率(单位: Bytes/秒)<br />
max_clients=50 # 可以同时连接的最大客户端数<br />
max_per_ip=2 # 每个 IP 允许的最大连接数<br />
<br />
=== 使用 xinetd ===<br />
Xinetd 提供增强的监控和控制连接功能。对于基本的可以工作的 vsftpd-server 是不必要的<br />
<br />
安装 vsftpd 将会添加必要的服务文件 {{ic|/etc/xinetd.d/vsftpd}},默认情况下,服务被禁用。<br />
<br />
启用ftp服务:<br />
<pre><br />
service ftp<br />
{<br />
socket_type = stream<br />
wait = no<br />
user = root<br />
server = /usr/sbin/vsftpd<br />
log_on_success += HOST DURATION<br />
log_on_failure += HOST<br />
disable = no<br />
}<br />
</pre><br />
<br />
如果您将 vsftpd 守护程序设置为以独立模式运行,而不是启动 vsftpd 守护程序和 [[Systemd (简体中文)#使用单元|启用]] {{ic|xinetd.service}},请在 {{ic|/etc/vsftpd.conf}} 中进行以下更改:<br />
listen=NO<br />
否则连接将失败:<br />
500 OOPS: could not bind listening IPv4 socket<br />
<br />
=== 使用 SSL/TLS 来保护 FTP ===<br />
<br />
{{Style|Do not duplicate [[OpenSSL#Certificates]].}}<br />
<br />
首先,您需要一个 ''X.509 SSL/TLS'' 证书才能使用TLS。如果您没有,可以轻松生成如下的自签名证书:<br />
<br />
# cd /etc/ssl/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout vsftpd.pem -out vsftpd.pem<br />
# chmod 600 vsftpd.pem<br />
<br />
你会被问到关于你公司的问题,等等。由于你的证书不是一个可信任的,所填的内容并不重要,它只会被用于加密。要使用可信证书,您可以从 [[Let's Encrypt]] 这样的证书颁发机构获得证书。<br />
<br />
然后,编辑配置文件:<br />
{{hc|/etc/vsftpd.conf|2=ssl_enable=YES<br />
<br />
# 如果你接受匿名连接你可能要启用这个设置<br />
# allow_anon_ssl=NO<br />
<br />
# 默认情况下所有非匿名登录被迫使用 SSL 发送和接收密码和数据,设置为 NO,以允许不安全的连接<br />
force_local_logins_ssl=NO<br />
force_local_data_ssl=NO<br />
<br />
# 选择你想要的<br />
force_local_logins_ssl=YES<br />
<br />
# TLS v1 协议连接是首选,默认情况下启用此模式,而禁用 SSL v2 和 v3 时,以下设置是默认设置,不需要更改,除非您特别需要 SSL<br />
# ssl_tlsv1=YES<br />
# ssl_sslv2=NO<br />
# ssl_sslv3=NO<br />
# 提供您的证书和私钥注释的路径,它们可以包含在同一个文件中或不同的文件中<br />
rsa_cert_file=/etc/ssl/certs/vsftpd.pem<br />
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem<br />
<br />
# 此设置默认设置为 YES,并要求所有数据连接都显示会话重用,这证明他们知道控制通道的秘密。这种方式更安全,但不受许多 FTP 客户端的支持,为了更好的兼容性而设置为 NO<br />
require_ssl_reuse=NO<br />
}}<br />
<br />
=== 在被动模式下解析主机名 ===<br />
要覆盖 vsftpd 在被动模式下通过服务器的主机名发布的 IP 地址,并在启动时解析 DNS,在 {{ic|/etc/vsftpd.conf}} 中增加以下两行:<br />
pasv_addr_resolve=YES<br />
pasv_address=''yourdomain.org''<br />
<br />
{{注意|<br />
* 对于动态DNS,定期更新 ''pasv_address'' 并重新启动服务器是不必要的,因为它有时可以被读取。<br />
* 您可能无法通过 LAN 以被动模式连接,在这种情况下,请尝试使用主动模式而不是LAN客户端。<br />
}}<br />
<br />
=== 端口配置 ===<br />
可能需要调整默认FTP侦听端口和被动模式数据端口:<br />
<br />
* 对于暴露于 Web 的 FTP 服务器,为了减少服务器受到攻击的可能性,可以将侦听端口改为除标准端口 21 以外的端口。<br />
* 要限制被动模式将打开的端口,可以提供一个范围。<br />
这些端口配置更改可以使用以下几行完成:<br />
{{hc|/etc/vsftpd.conf|2=<br />
listen_port=2211<br />
pasv_min_port=5000<br />
pasv_max_port=5003<br />
}}<br />
<br />
=== 配置 iptables ===<br />
通常,运行FTP守护进程的服务器受 [[Iptables (简体中文)|iptables]] 防火墙的保护。要允许访问FTP服务器,需要打开相应的端口,如:<br />
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT<br />
本文不会提供有关如何设置iptables的任何说明,但这里是一个例子:[[Simple stateful firewall (简体中文)|Simple stateful firewall]]。<br />
<br />
有一些内核模块需要在这里引用的 iptables 正确的处理 FTP 连接。 其中特别是 ''nf_conntrack_ftp''。这是需要的,因为 FTP 使用给定的 ''listen_port''(默认为21) 仅用于命令,所有的数据传输都是通过不同的端口完成的。这些端口由 FTP 守护程序为每个会话随机选择(也取决于是使用主动还是被动模式)。要告诉 iptables 应该接受端口上的数据包,需要 ''nf_conntrack_ftp''。要在启动时自动加载,请在 {{ic|/etc/modules-load.d}} 中创建新文件,例如:<br />
# echo nf_conntrack_ftp > /etc/modules-load.d/nf_conntrack_ftp.conf<br />
<br />
如果内核 >= 4.7,您需要通过 ''sysctl'' 设置 ''net.netfilter.nf_conntrack_helper = 1'',如:<br />
# echo net.netfilter.nf_conntrack_helper=1 > /etc/sysctl.d/70-conntrack.conf<br />
或使用<br />
# iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp<br />
<br />
== 小技巧 ==<br />
=== 虚拟用户的 PAM 认证 ===<br />
由于 [[PAM (简体中文)]] 不再提供 {{ic|pam_userdb.so}} 另一个简单的方法是使用 {{AUR|libpam_pwdfile}}。对于具有许多用户的环境,另一个选项可能是 {{AUR|pam_mysql}} {{Broken package link|{{aur-mirror|pam_mysql}}}}。但是,本节仅限于解释如何通过 {{ic|pam_pwdfile.so}} 配置 chroot 环境和身份验证。<br />
<br />
在此示例中,我们创建目录 {{ic|vsftpd}}:<br />
# mkdir /etc/vsftpd<br />
<br />
创建和存储用户名和密码的一个选择是使用 Apache 的生成器 htpasswd:<br />
# htpasswd -c /etc/vsftpd/.passwd<br />
上述命令的一个问题是 vsftpd 可能无法读取生成的 MD5 散列密码。如果使用 -d 开关运行相同的命令,则使用 crypt() 加密,vsftpd 的密码变得可读,但其缺点是安全性较低,密码限制为8个字符。 Openssl 可用于使用算法1生成基于 MD5 的 BSD 密码:<br />
# openssl passwd -1<br />
<br />
无论那个解决方案 {{ic|/etc/vsftpd/.passwd}} 应该如下所示:<br />
username1:hashed_password1<br />
username2:hashed_password2<br />
...<br />
<br />
接下来,您需要使用 {{ic|pam_pwdfile.so}} 和生成的 {{ic|/etc/vsftpd/.passwd}} 文件创建 PAM 服务。在本例中,我们为 ''vsftpd'' 创建了一个 PAM 策略,其中包含以下内容:<br />
{{hc|/etc/pam.d/vsftpd|auth required pam_pwdfile.so pwdfile /etc/vsftpd/.passwd<br />
account required pam_permit.so}}<br />
<br />
现在是为虚拟用户创建一个 home 的时候了。在示例中,决定用 {{ic|/srv/ftp}} 为虚拟用户托管数据,这也反映了 Arch 的默认目录结构。首先创建 virtual 用户并使 {{ic|/srv/ftp}} 成为它的 home:<br />
# useradd -d /srv/ftp virtual<br />
让 virtual 成为所有者<br />
# chown virtual:virtual /srv/ftp<br />
<br />
一个基本的没有私人文件夹配置的 /etc/vsftpd,默认的虚拟用户的 home 文件夹:<br />
# 指向正确的 PAM 服务文件<br />
pam_service_name=vsftpd<br />
write_enable=YES<br />
hide_ids=YES<br />
listen=YES<br />
connect_from_port_20=YES<br />
anonymous_enable=NO<br />
local_enable=YES<br />
dirmessage_enable=YES<br />
xferlog_enable=YES<br />
chroot_local_user=YES<br />
guest_enable=YES<br />
guest_username=virtual<br />
virtual_use_local_privs=YES<br />
<br />
您自己的设置可能不需要一些参数。如果您希望 chroot 环境可写,您将需要将以下内容添加到配置文件中:<br />
allow_writeable_chroot = YES<br />
否则 vsftpd 的默认安全设置会抱怨,如果它检测到 chroot 是可写的。<br />
<br />
[[Start]] {{ic|vsftpd.service}}。<br />
<br />
您现在应该可以使用存储在 {{ic|/etc/vsftpd/.passwd}} 中的任何用户和密码从FTP客户端登录。<br />
<br />
==== 为虚拟用户创建私有目录 ====<br />
首先创建用户文件夹<br />
# mkdir /srv/ftp/user1<br />
# mkdir /srv/ftp/user2<br />
# chown virtual:virtual /srv/ftp/user?/<br />
<br />
随后, 在 {{ic|/etc/vsftpd.conf}} 增加如下行:<br />
local_root=/srv/ftp/$USER<br />
user_sub_token=$USER<br />
<br />
== 问题解决 ==<br />
<br />
=== vsftpd: Error 500 with kernel 4.18+ ===<br />
[[Wikipedia:seccomp|seccomp]] 在 vsftpd 中默认激活,这导致某些内核版本出现兼容性问题。这已经修复了,你可以在 [https://bugzilla.redhat.com/show_bug.cgi?id=845980 RedHat Bugzilla#845980] 中看到,但在较新的内核中仍然可能导致问题。<br />
<br />
如果在列出目录时遇到故障,将其添加到 {{ic|/etc/vsftpd.conf}}:<br />
seccomp_sandbox=NO<br />
<br />
=== vsftpd: refusing to run with writable root inside chroot() ===<br />
从 vsftpd 2.3.5 开始,用户被锁定的 chroot 目录不可写。这是为了防止安全漏洞。<br />
<br />
允许上传的安全方法是保持 chroot 启用,并配置您的 FTP 目录。<br />
<br />
local_root=/srv/ftp/user<br />
<br />
# mkdir -p /srv/ftp/user/upload<br />
#<br />
# chmod 550 /srv/ftp/user<br />
# chmod 750 /srv/ftp/user/upload<br />
<br />
如果你必须这么做:<br />
<br />
您可以将其放入您的 {{ic|/etc/vsftpd.conf}} 以解决此安全性增强(自vsftpd 3.0.0;来自 [http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/ Fixing 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()]):<br />
allow_writeable_chroot=YES<br />
或者:<br />
<br />
安装 {{AUR|vsftpd-ext}} {{Broken package link|{{aur-mirror|vsftpd-ext}}}} 并在 conf 文件中设置<br />
allow_writable_chroot=YES<br />
<br />
=== FileZilla Client: GnuTLS error -8 -15 -110 when connecting via SSL ===<br />
vsftpd 尝试在 SSL 会话中显示纯文本错误消息。为了进行调试,暂时禁用加密,您将看到正确的错误消息。[http://ramblings.linkerror.com/?p=45] [https://serverfault.com/questions/772494/vsftpd-list-causes-gnutls-error-15]<br />
<br />
=== vsftpd.service fails to run on boot ===<br />
如果您启用了 {{ic|vsftpd.service}},并且无法在启动时运行,请确保它已在服务文件中设置为在 {{ic|network.target}} 之后加载:<br />
<br />
{{hc|/usr/lib/systemd/system/vsftpd.service|2=<br />
[Unit]<br />
Description=vsftpd daemon<br />
After=network.target}}<br />
<br />
=== Passive mode replies with the local IP address to a remote connection ===<br />
<br />
如果 vsftpd 将本地地址返回给远程连接,如:<br />
227 Entering Passive Mode (192,168,0,19,192,27).<br />
<br />
It may be that the FTP server is behind a NAT router and while some devices monitor FTP connections and dynamically replace the IP address specification for packets containing the PASV response, some do not.<br />
可能是 FTP 服务器位于 NAT 路由器后面,而有些设备会监视 FTP 连接并动态替换包含 PASV 响应的数据包的 IP 地址规范,但有些设备却不会。<br />
<br />
使用以下命令在 vsftpd 配置中指示外部IP地址:<br />
pasv_address=''externalIPaddress''<br />
<br />
或者可选地:<br />
pasv_addr_resolve=YES<br />
pasv_address=''my.domain.name''<br />
<br />
如果在更改后无法进行内部连接,则可能需要运行 2 个 vsftpd,一个用于内部连接,一个用于外部连接。<br />
<br />
{{提示|要找出 NAT 路由器是否拦截 PASV 响应并用外部 IP 替换内部 IP,可以在 TLS 模式下检查客户端的服务器响应。加密的数据包不能被路由器识别并且未被修改。}}<br />
<br />
=== ipv6 only fails with: 500 OOPS: run two copies of vsftpd for IPv4 and IPv6 ===<br />
你很有可能已经注释了这一行<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
#listen=YES<br />
#<br />
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6<br />
# sockets, you must run two copies of vsftpd with two configuration files.<br />
# Make sure, that one of the listen options is commented !!<br />
listen_ipv6=YES<br />
<br />
而不是设置<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
listen=NO<br />
<br />
=== vsftpd 连接在使用 nis 的机器上失败: yp_bind_client_create_v2: RPC: Unable to send ===<br />
as mentioned on the vsftpd faq page, "...built-in sandboxing uses network isolation on Linux. This<br />
may be interfering with any module that needs to use the network to perform operations or lookups"<br />
正如在 vsftpd fap 页面上提到的那样,“...内置沙盒使用 linux 上的网络隔离可能会干扰任何需要使用网络执行操作或查找的模块”<br />
<br />
将这个未公开的行添加到你的 {{ic|/etc/vsftpd.conf}}<br />
isolate_network=NO<br />
<br />
== 更多资源 ==<br />
* [http://vsftpd.beasts.org/ vsftpd official homepage]<br />
* [http://vsftpd.beasts.org/vsftpd_conf.html vsftpd.conf man page]<br />
* [https://security.appspot.com/vsftpd/FAQ.txt vsftpd FAQ]</div>
745275633
https://wiki.archlinux.org/index.php?title=Very_Secure_FTP_Daemon_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=536062
Very Secure FTP Daemon (简体中文)
2018-08-19T03:53:58Z
<p>745275633: /* vsftpd: Error 500 with kernel 4.18+ */ fix template</p>
<hr />
<div>[[Category:FTP servers (简体中文)]]<br />
[[cs:Very Secure FTP Daemon]]<br />
[[en:Very Secure FTP Daemon]]<br />
[[es:Very Secure FTP Daemon]]<br />
[[it:Very Secure FTP Daemon]]<br />
[[ja:Very Secure FTP Daemon]]<br />
[[ru:Very Secure FTP Daemon]]<br />
{{TranslationStatus (简体中文)|Very Secure FTP Daemon|2018-08-19|536049}}<br />
[https://security.appspot.com/vsftpd.html vsftpd] (“Very Secure FTP Daemon“) 是一个为 UNIX 类系统开发的轻量,稳定和安全的 FTP 服务器端。<br />
== 安装 ==<br />
[[安装]] {{pkg|vsftpd}} 然后 [[Systemd (简体中文)#使用单元|启动/启用]] {{ic|vsftpd.service}} 守护程序。<br />
<br />
使用 [[Wikipedia:xinetd|xinetd]] 监视和控制 vsftpd 连接,请参见 [[#使用 xinetd]]。<br />
<br />
== 配置 ==<br />
vsftpd 的大多数配置都可以通过编辑 {{ic|/etc/vsftpd.conf}} 文件实现。 该文件本身自带大量注释说明,所以这一章节只就一些重要的配置予以说明。有关所有可用选项和文档,请参阅 {{man|5|vsftpd.conf}} 手册页。默认情况下,由 {{ic|/srv/ftp}} 提供文件。<br />
<br />
允许的连接 {{ic|/etc/hosts.allow}}:<br />
# 允许所有连接<br />
vsftpd: ALL<br />
# IP 地址范围<br />
vsftpd: 10.0.0.0/255.255.255.0<br />
<br />
=== 允许上传 ===<br />
需要将 {{ic|/etc/vsftpd.conf}} 中的 {{ic|write_enable}} 值设为 YES,以便允许修改文件系统(如上传):<br />
write_enable=YES<br />
<br />
=== 本地用户登录 ===<br />
需要修改 {{ic|/etc/vsftpd.conf}} 中的如下值,以便允许 {{ic|/etc/passwd}} 中的用户登录:<br />
local_enable=YES<br />
<br />
=== 匿名用户登录 ===<br />
以下行控制匿名用户是否可以登录。默认情况下,匿名登录只能从 {{ic|/srv/ftp}} 下载:<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
...<br />
# 允许匿名 FTP? (当心 - 默认情况下允许除非您将其注释)。<br />
anonymous_enable=YES<br />
...<br />
# 取消注释以允许匿名 FTP 用户上传文件。<br />
# 只有上述全局写入被激活,才会有效果。<br />
# 另外,你显然需要创建 FTP 用户有写权限的目录。<br />
# anon_upload_enable=YES<br />
#<br />
# 如果您希望匿名 FTP 用户能够创建新目录,请取消注释。<br />
# anon_mkdir_write_enable=YES<br />
...<br />
}}<br />
<br />
您也可以添加以下选项(详见 {{man|5|vsftpd.conf}}):<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
# 匿名登录不需要密码<br />
no_anon_password=YES<br />
<br />
# 匿名客户端的最大传输速率(以 Bytes/秒 为单位)<br />
anon_max_rate=30000<br />
<br />
# 用于匿名登录的目录<br />
anon_root=/example/directory/<br />
}}<br />
<br />
=== Chroot 限制 ===<br />
为了阻止用户离开家目录,可以设置 chroot 环境。要启用此功能,请在 {{ic|/etc/vsftpd.conf}} 中添加以下行:<br />
chroot_list_enable=YES<br />
chroot_list_file=/etc/vsftpd.chroot_list<br />
{{ic|chroot_list_file}} 定义了被 chroot 限制的用户列表。<br />
<br />
对于更严格的环境,请指定以下行:<br />
chroot_local_user=YES<br />
这将默认为所有用户启用 chroot 环境。 在这种情况下,{{ic|chroot_list_file}} 定义了'''不受''' chroot 限制的用户列表。<br />
<br />
=== 限制用户登录 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加以下两行来阻止特定用户登录FTP服务器:<br />
userlist_enable=YES<br />
userlist_file=/etc/vsftpd.user_list<br />
{{ic|userlist_file}} 文件列出'''不允许'''登录的用户。<br />
<br />
如果您只想允许特定的用户登录,请添加以下行:<br />
userlist_deny=NO<br />
此时 {{ic|userlist_file}} 文件指定'''允许'''登录的用户。<br />
<br />
=== 限制连接数 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加如下信息来限制本地用户的数据传输速率:<br />
local_max_rate=1000000 # 最大数据传输速率(单位: Bytes/秒)<br />
max_clients=50 # 可以同时连接的最大客户端数<br />
max_per_ip=2 # 每个 IP 允许的最大连接数<br />
<br />
=== 使用 xinetd ===<br />
Xinetd 提供增强的监控和控制连接功能。对于基本的可以工作的 vsftpd-server 是不必要的<br />
<br />
安装 vsftpd 将会添加必要的服务文件 {{ic|/etc/xinetd.d/vsftpd}},默认情况下,服务被禁用。<br />
<br />
启用ftp服务:<br />
<pre><br />
service ftp<br />
{<br />
socket_type = stream<br />
wait = no<br />
user = root<br />
server = /usr/sbin/vsftpd<br />
log_on_success += HOST DURATION<br />
log_on_failure += HOST<br />
disable = no<br />
}<br />
</pre><br />
<br />
如果您将 vsftpd 守护程序设置为以独立模式运行,而不是启动 vsftpd 守护程序和 [[Systemd (简体中文)#使用单元|启用]] {{ic|xinetd.service}},请在 {{ic|/etc/vsftpd.conf}} 中进行以下更改:<br />
listen=NO<br />
否则连接将失败:<br />
500 OOPS: could not bind listening IPv4 socket<br />
<br />
=== 使用 SSL/TLS 来保护 FTP ===<br />
<br />
{{Style|Do not duplicate [[OpenSSL#Certificates]].}}<br />
<br />
首先,您需要一个 ''X.509 SSL/TLS'' 证书才能使用TLS。如果您没有,可以轻松生成如下的自签名证书:<br />
<br />
# cd /etc/ssl/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout vsftpd.pem -out vsftpd.pem<br />
# chmod 600 vsftpd.pem<br />
<br />
你会被问到关于你公司的问题,等等。由于你的证书不是一个可信任的,所填的内容并不重要,它只会被用于加密。要使用可信证书,您可以从 [[Let's Encrypt]] 这样的证书颁发机构获得证书。<br />
<br />
然后,编辑配置文件:<br />
{{hc|/etc/vsftpd.conf|2=ssl_enable=YES<br />
<br />
# 如果你接受匿名连接你可能要启用这个设置<br />
# allow_anon_ssl=NO<br />
<br />
# 默认情况下所有非匿名登录被迫使用 SSL 发送和接收密码和数据,设置为 NO,以允许不安全的连接<br />
force_local_logins_ssl=NO<br />
force_local_data_ssl=NO<br />
<br />
# 选择你想要的<br />
force_local_logins_ssl=YES<br />
<br />
# TLS v1 协议连接是首选,默认情况下启用此模式,而禁用 SSL v2 和 v3 时,以下设置是默认设置,不需要更改,除非您特别需要 SSL<br />
# ssl_tlsv1=YES<br />
# ssl_sslv2=NO<br />
# ssl_sslv3=NO<br />
# 提供您的证书和私钥注释的路径,它们可以包含在同一个文件中或不同的文件中<br />
rsa_cert_file=/etc/ssl/certs/vsftpd.pem<br />
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem<br />
<br />
# 此设置默认设置为 YES,并要求所有数据连接都显示会话重用,这证明他们知道控制通道的秘密。这种方式更安全,但不受许多 FTP 客户端的支持,为了更好的兼容性而设置为 NO<br />
require_ssl_reuse=NO<br />
}}<br />
<br />
=== 在被动模式下解析主机名 ===<br />
要覆盖 vsftpd 在被动模式下通过服务器的主机名发布的 IP 地址,并在启动时解析 DNS,在 {{ic|/etc/vsftpd.conf}} 中增加以下两行:<br />
pasv_addr_resolve=YES<br />
pasv_address=''yourdomain.org''<br />
<br />
{{注意|<br />
* 对于动态DNS,定期更新 ''pasv_address'' 并重新启动服务器是不必要的,因为它有时可以被读取。<br />
* 您可能无法通过 LAN 以被动模式连接,在这种情况下,请尝试使用主动模式而不是LAN客户端。<br />
}}<br />
<br />
=== 端口配置 ===<br />
可能需要调整默认FTP侦听端口和被动模式数据端口:<br />
<br />
* 对于暴露于 Web 的 FTP 服务器,为了减少服务器受到攻击的可能性,可以将侦听端口改为除标准端口 21 以外的端口。<br />
* 要限制被动模式将打开的端口,可以提供一个范围。<br />
这些端口配置更改可以使用以下几行完成:<br />
{{hc|/etc/vsftpd.conf|2=<br />
listen_port=2211<br />
pasv_min_port=5000<br />
pasv_max_port=5003<br />
}}<br />
<br />
=== 配置 iptables ===<br />
通常,运行FTP守护进程的服务器受 [[Iptables (简体中文)|iptables]] 防火墙的保护。要允许访问FTP服务器,需要打开相应的端口,如:<br />
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT<br />
本文不会提供有关如何设置iptables的任何说明,但这里是一个例子:[[Simple stateful firewall (简体中文)|Simple stateful firewall]]。<br />
<br />
有一些内核模块需要在这里引用的 iptables 正确的处理 FTP 连接。 其中特别是 ''nf_conntrack_ftp''。这是需要的,因为 FTP 使用给定的 ''listen_port''(默认为21) 仅用于命令,所有的数据传输都是通过不同的端口完成的。这些端口由 FTP 守护程序为每个会话随机选择(也取决于是使用主动还是被动模式)。要告诉 iptables 应该接受端口上的数据包,需要 ''nf_conntrack_ftp''。要在启动时自动加载,请在 {{ic|/etc/modules-load.d}} 中创建新文件,例如:<br />
# echo nf_conntrack_ftp > /etc/modules-load.d/nf_conntrack_ftp.conf<br />
<br />
如果内核 >= 4.7,您需要通过 ''sysctl'' 设置 ''net.netfilter.nf_conntrack_helper = 1'',如:<br />
# echo net.netfilter.nf_conntrack_helper=1 > /etc/sysctl.d/70-conntrack.conf<br />
或使用<br />
# iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp<br />
<br />
== 小技巧 ==<br />
=== 虚拟用户的 PAM 认证 ===<br />
由于 [[PAM (简体中文)]] 不再提供 {{ic|pam_userdb.so}} 另一个简单的方法是使用 {{AUR|libpam_pwdfile}}。对于具有许多用户的环境,另一个选项可能是 {{AUR|pam_mysql}} {{Broken package link|{{aur-mirror|pam_mysql}}}}。但是,本节仅限于解释如何通过 {{ic|pam_pwdfile.so}} 配置 chroot 环境和身份验证。<br />
<br />
在此示例中,我们创建目录 {{ic|vsftpd}}:<br />
# mkdir /etc/vsftpd<br />
<br />
创建和存储用户名和密码的一个选择是使用 Apache 的生成器 htpasswd:<br />
# htpasswd -c /etc/vsftpd/.passwd<br />
上述命令的一个问题是 vsftpd 可能无法读取生成的 MD5 散列密码。如果使用 -d 开关运行相同的命令,则使用 crypt() 加密,vsftpd 的密码变得可读,但其缺点是安全性较低,密码限制为8个字符。 Openssl 可用于使用算法1生成基于 MD5 的 BSD 密码:<br />
# openssl passwd -1<br />
<br />
无论那个解决方案 {{ic|/etc/vsftpd/.passwd}} 应该如下所示:<br />
username1:hashed_password1<br />
username2:hashed_password2<br />
...<br />
<br />
接下来,您需要使用 {{ic|pam_pwdfile.so}} 和生成的 {{ic|/etc/vsftpd/.passwd}} 文件创建 PAM 服务。在本例中,我们为 ''vsftpd'' 创建了一个 PAM 策略,其中包含以下内容:<br />
{{hc|/etc/pam.d/vsftpd|auth required pam_pwdfile.so pwdfile /etc/vsftpd/.passwd<br />
account required pam_permit.so}}<br />
<br />
现在是为虚拟用户创建一个 home 的时候了。在示例中,决定用 {{ic|/srv/ftp}} 为虚拟用户托管数据,这也反映了 Arch 的默认目录结构。首先创建 virtual 用户并使 {{ic|/srv/ftp}} 成为它的 home:<br />
# useradd -d /srv/ftp virtual<br />
让 virtual 成为所有者<br />
# chown virtual:virtual /srv/ftp<br />
<br />
一个基本的没有私人文件夹配置的 /etc/vsftpd,默认的虚拟用户的 home 文件夹:<br />
# 指向正确的 PAM 服务文件<br />
pam_service_name=vsftpd<br />
write_enable=YES<br />
hide_ids=YES<br />
listen=YES<br />
connect_from_port_20=YES<br />
anonymous_enable=NO<br />
local_enable=YES<br />
dirmessage_enable=YES<br />
xferlog_enable=YES<br />
chroot_local_user=YES<br />
guest_enable=YES<br />
guest_username=virtual<br />
virtual_use_local_privs=YES<br />
<br />
您自己的设置可能不需要一些参数。如果您希望 chroot 环境可写,您将需要将以下内容添加到配置文件中:<br />
allow_writeable_chroot = YES<br />
否则 vsftpd 的默认安全设置会抱怨,如果它检测到 chroot 是可写的。<br />
<br />
[[Start]] {{ic|vsftpd.service}}。<br />
<br />
您现在应该可以使用存储在 {{ic|/etc/vsftpd/.passwd}} 中的任何用户和密码从FTP客户端登录。<br />
<br />
==== 为虚拟用户创建私有目录 ====<br />
首先创建用户文件夹<br />
# mkdir /srv/ftp/user1<br />
# mkdir /srv/ftp/user2<br />
# chown virtual:virtual /srv/ftp/user?/<br />
<br />
随后, 在 {{ic|/etc/vsftpd.conf}} 增加如下行:<br />
local_root=/srv/ftp/$USER<br />
user_sub_token=$USER<br />
<br />
== 问题解决 ==<br />
<br />
=== vsftpd: Error 500 with kernel 4.18+ ===<br />
[[Wikipedia:seccomp|seccomp]] 在 vsftpd 中默认激活,这导致某些内核版本出现兼容性问题。<br />
如果在列出具有多个文件的目录时遇到故障,将其添加到 {{ic|/etc/vsftpd.conf}}:<br />
seccomp_sandbox=NO<br />
<br />
=== vsftpd: refusing to run with writable root inside chroot() ===<br />
从 vsftpd 2.3.5 开始,用户被锁定的 chroot 目录不可写。这是为了防止安全漏洞。<br />
<br />
允许上传的安全方法是保持 chroot 启用,并配置您的 FTP 目录。<br />
<br />
local_root=/srv/ftp/user<br />
<br />
# mkdir -p /srv/ftp/user/upload<br />
#<br />
# chmod 550 /srv/ftp/user<br />
# chmod 750 /srv/ftp/user/upload<br />
<br />
如果你必须这么做:<br />
<br />
您可以将其放入您的 {{ic|/etc/vsftpd.conf}} 以解决此安全性增强(自vsftpd 3.0.0;来自 [http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/ Fixing 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()]):<br />
allow_writeable_chroot=YES<br />
或者:<br />
<br />
安装 {{AUR|vsftpd-ext}} {{Broken package link|{{aur-mirror|vsftpd-ext}}}} 并在 conf 文件中设置<br />
allow_writable_chroot=YES<br />
<br />
=== FileZilla Client: GnuTLS error -8 -15 -110 when connecting via SSL ===<br />
vsftpd 尝试在 SSL 会话中显示纯文本错误消息。为了进行调试,暂时禁用加密,您将看到正确的错误消息。[http://ramblings.linkerror.com/?p=45] [https://serverfault.com/questions/772494/vsftpd-list-causes-gnutls-error-15]<br />
<br />
=== vsftpd.service fails to run on boot ===<br />
如果您启用了 {{ic|vsftpd.service}},并且无法在启动时运行,请确保它已在服务文件中设置为在 {{ic|network.target}} 之后加载:<br />
<br />
{{hc|/usr/lib/systemd/system/vsftpd.service|2=<br />
[Unit]<br />
Description=vsftpd daemon<br />
After=network.target}}<br />
<br />
=== Passive mode replies with the local IP address to a remote connection ===<br />
<br />
如果 vsftpd 将本地地址返回给远程连接,如:<br />
227 Entering Passive Mode (192,168,0,19,192,27).<br />
<br />
It may be that the FTP server is behind a NAT router and while some devices monitor FTP connections and dynamically replace the IP address specification for packets containing the PASV response, some do not.<br />
可能是 FTP 服务器位于 NAT 路由器后面,而有些设备会监视 FTP 连接并动态替换包含 PASV 响应的数据包的 IP 地址规范,但有些设备却不会。<br />
<br />
使用以下命令在 vsftpd 配置中指示外部IP地址:<br />
pasv_address=''externalIPaddress''<br />
<br />
或者可选地:<br />
pasv_addr_resolve=YES<br />
pasv_address=''my.domain.name''<br />
<br />
如果在更改后无法进行内部连接,则可能需要运行 2 个 vsftpd,一个用于内部连接,一个用于外部连接。<br />
<br />
{{提示|要找出 NAT 路由器是否拦截 PASV 响应并用外部 IP 替换内部 IP,可以在 TLS 模式下检查客户端的服务器响应。加密的数据包不能被路由器识别并且未被修改。}}<br />
<br />
=== ipv6 only fails with: 500 OOPS: run two copies of vsftpd for IPv4 and IPv6 ===<br />
你很有可能已经注释了这一行<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
#listen=YES<br />
#<br />
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6<br />
# sockets, you must run two copies of vsftpd with two configuration files.<br />
# Make sure, that one of the listen options is commented !!<br />
listen_ipv6=YES<br />
<br />
而不是设置<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
listen=NO<br />
<br />
=== vsftpd 连接在使用 nis 的机器上失败: yp_bind_client_create_v2: RPC: Unable to send ===<br />
as mentioned on the vsftpd faq page, "...built-in sandboxing uses network isolation on Linux. This<br />
may be interfering with any module that needs to use the network to perform operations or lookups"<br />
正如在 vsftpd fap 页面上提到的那样,“...内置沙盒使用 linux 上的网络隔离可能会干扰任何需要使用网络执行操作或查找的模块”<br />
<br />
将这个未公开的行添加到你的 {{ic|/etc/vsftpd.conf}}<br />
isolate_network=NO<br />
<br />
== 更多资源 ==<br />
* [http://vsftpd.beasts.org/ vsftpd official homepage]<br />
* [http://vsftpd.beasts.org/vsftpd_conf.html vsftpd.conf man page]<br />
* [https://security.appspot.com/vsftpd/FAQ.txt vsftpd FAQ]</div>
745275633
https://wiki.archlinux.org/index.php?title=Very_Secure_FTP_Daemon_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=536061
Very Secure FTP Daemon (简体中文)
2018-08-19T03:53:24Z
<p>745275633: 536049</p>
<hr />
<div>[[Category:FTP servers (简体中文)]]<br />
[[cs:Very Secure FTP Daemon]]<br />
[[en:Very Secure FTP Daemon]]<br />
[[es:Very Secure FTP Daemon]]<br />
[[it:Very Secure FTP Daemon]]<br />
[[ja:Very Secure FTP Daemon]]<br />
[[ru:Very Secure FTP Daemon]]<br />
{{TranslationStatus (简体中文)|Very Secure FTP Daemon|2018-08-19|536049}}<br />
[https://security.appspot.com/vsftpd.html vsftpd] (“Very Secure FTP Daemon“) 是一个为 UNIX 类系统开发的轻量,稳定和安全的 FTP 服务器端。<br />
== 安装 ==<br />
[[安装]] {{pkg|vsftpd}} 然后 [[Systemd (简体中文)#使用单元|启动/启用]] {{ic|vsftpd.service}} 守护程序。<br />
<br />
使用 [[Wikipedia:xinetd|xinetd]] 监视和控制 vsftpd 连接,请参见 [[#使用 xinetd]]。<br />
<br />
== 配置 ==<br />
vsftpd 的大多数配置都可以通过编辑 {{ic|/etc/vsftpd.conf}} 文件实现。 该文件本身自带大量注释说明,所以这一章节只就一些重要的配置予以说明。有关所有可用选项和文档,请参阅 {{man|5|vsftpd.conf}} 手册页。默认情况下,由 {{ic|/srv/ftp}} 提供文件。<br />
<br />
允许的连接 {{ic|/etc/hosts.allow}}:<br />
# 允许所有连接<br />
vsftpd: ALL<br />
# IP 地址范围<br />
vsftpd: 10.0.0.0/255.255.255.0<br />
<br />
=== 允许上传 ===<br />
需要将 {{ic|/etc/vsftpd.conf}} 中的 {{ic|write_enable}} 值设为 YES,以便允许修改文件系统(如上传):<br />
write_enable=YES<br />
<br />
=== 本地用户登录 ===<br />
需要修改 {{ic|/etc/vsftpd.conf}} 中的如下值,以便允许 {{ic|/etc/passwd}} 中的用户登录:<br />
local_enable=YES<br />
<br />
=== 匿名用户登录 ===<br />
以下行控制匿名用户是否可以登录。默认情况下,匿名登录只能从 {{ic|/srv/ftp}} 下载:<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
...<br />
# 允许匿名 FTP? (当心 - 默认情况下允许除非您将其注释)。<br />
anonymous_enable=YES<br />
...<br />
# 取消注释以允许匿名 FTP 用户上传文件。<br />
# 只有上述全局写入被激活,才会有效果。<br />
# 另外,你显然需要创建 FTP 用户有写权限的目录。<br />
# anon_upload_enable=YES<br />
#<br />
# 如果您希望匿名 FTP 用户能够创建新目录,请取消注释。<br />
# anon_mkdir_write_enable=YES<br />
...<br />
}}<br />
<br />
您也可以添加以下选项(详见 {{man|5|vsftpd.conf}}):<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
# 匿名登录不需要密码<br />
no_anon_password=YES<br />
<br />
# 匿名客户端的最大传输速率(以 Bytes/秒 为单位)<br />
anon_max_rate=30000<br />
<br />
# 用于匿名登录的目录<br />
anon_root=/example/directory/<br />
}}<br />
<br />
=== Chroot 限制 ===<br />
为了阻止用户离开家目录,可以设置 chroot 环境。要启用此功能,请在 {{ic|/etc/vsftpd.conf}} 中添加以下行:<br />
chroot_list_enable=YES<br />
chroot_list_file=/etc/vsftpd.chroot_list<br />
{{ic|chroot_list_file}} 定义了被 chroot 限制的用户列表。<br />
<br />
对于更严格的环境,请指定以下行:<br />
chroot_local_user=YES<br />
这将默认为所有用户启用 chroot 环境。 在这种情况下,{{ic|chroot_list_file}} 定义了'''不受''' chroot 限制的用户列表。<br />
<br />
=== 限制用户登录 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加以下两行来阻止特定用户登录FTP服务器:<br />
userlist_enable=YES<br />
userlist_file=/etc/vsftpd.user_list<br />
{{ic|userlist_file}} 文件列出'''不允许'''登录的用户。<br />
<br />
如果您只想允许特定的用户登录,请添加以下行:<br />
userlist_deny=NO<br />
此时 {{ic|userlist_file}} 文件指定'''允许'''登录的用户。<br />
<br />
=== 限制连接数 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加如下信息来限制本地用户的数据传输速率:<br />
local_max_rate=1000000 # 最大数据传输速率(单位: Bytes/秒)<br />
max_clients=50 # 可以同时连接的最大客户端数<br />
max_per_ip=2 # 每个 IP 允许的最大连接数<br />
<br />
=== 使用 xinetd ===<br />
Xinetd 提供增强的监控和控制连接功能。对于基本的可以工作的 vsftpd-server 是不必要的<br />
<br />
安装 vsftpd 将会添加必要的服务文件 {{ic|/etc/xinetd.d/vsftpd}},默认情况下,服务被禁用。<br />
<br />
启用ftp服务:<br />
<pre><br />
service ftp<br />
{<br />
socket_type = stream<br />
wait = no<br />
user = root<br />
server = /usr/sbin/vsftpd<br />
log_on_success += HOST DURATION<br />
log_on_failure += HOST<br />
disable = no<br />
}<br />
</pre><br />
<br />
如果您将 vsftpd 守护程序设置为以独立模式运行,而不是启动 vsftpd 守护程序和 [[Systemd (简体中文)#使用单元|启用]] {{ic|xinetd.service}},请在 {{ic|/etc/vsftpd.conf}} 中进行以下更改:<br />
listen=NO<br />
否则连接将失败:<br />
500 OOPS: could not bind listening IPv4 socket<br />
<br />
=== 使用 SSL/TLS 来保护 FTP ===<br />
<br />
{{Style|Do not duplicate [[OpenSSL#Certificates]].}}<br />
<br />
首先,您需要一个 ''X.509 SSL/TLS'' 证书才能使用TLS。如果您没有,可以轻松生成如下的自签名证书:<br />
<br />
# cd /etc/ssl/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout vsftpd.pem -out vsftpd.pem<br />
# chmod 600 vsftpd.pem<br />
<br />
你会被问到关于你公司的问题,等等。由于你的证书不是一个可信任的,所填的内容并不重要,它只会被用于加密。要使用可信证书,您可以从 [[Let's Encrypt]] 这样的证书颁发机构获得证书。<br />
<br />
然后,编辑配置文件:<br />
{{hc|/etc/vsftpd.conf|2=ssl_enable=YES<br />
<br />
# 如果你接受匿名连接你可能要启用这个设置<br />
# allow_anon_ssl=NO<br />
<br />
# 默认情况下所有非匿名登录被迫使用 SSL 发送和接收密码和数据,设置为 NO,以允许不安全的连接<br />
force_local_logins_ssl=NO<br />
force_local_data_ssl=NO<br />
<br />
# 选择你想要的<br />
force_local_logins_ssl=YES<br />
<br />
# TLS v1 协议连接是首选,默认情况下启用此模式,而禁用 SSL v2 和 v3 时,以下设置是默认设置,不需要更改,除非您特别需要 SSL<br />
# ssl_tlsv1=YES<br />
# ssl_sslv2=NO<br />
# ssl_sslv3=NO<br />
# 提供您的证书和私钥注释的路径,它们可以包含在同一个文件中或不同的文件中<br />
rsa_cert_file=/etc/ssl/certs/vsftpd.pem<br />
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem<br />
<br />
# 此设置默认设置为 YES,并要求所有数据连接都显示会话重用,这证明他们知道控制通道的秘密。这种方式更安全,但不受许多 FTP 客户端的支持,为了更好的兼容性而设置为 NO<br />
require_ssl_reuse=NO<br />
}}<br />
<br />
=== 在被动模式下解析主机名 ===<br />
要覆盖 vsftpd 在被动模式下通过服务器的主机名发布的 IP 地址,并在启动时解析 DNS,在 {{ic|/etc/vsftpd.conf}} 中增加以下两行:<br />
pasv_addr_resolve=YES<br />
pasv_address=''yourdomain.org''<br />
<br />
{{注意|<br />
* 对于动态DNS,定期更新 ''pasv_address'' 并重新启动服务器是不必要的,因为它有时可以被读取。<br />
* 您可能无法通过 LAN 以被动模式连接,在这种情况下,请尝试使用主动模式而不是LAN客户端。<br />
}}<br />
<br />
=== 端口配置 ===<br />
可能需要调整默认FTP侦听端口和被动模式数据端口:<br />
<br />
* 对于暴露于 Web 的 FTP 服务器,为了减少服务器受到攻击的可能性,可以将侦听端口改为除标准端口 21 以外的端口。<br />
* 要限制被动模式将打开的端口,可以提供一个范围。<br />
这些端口配置更改可以使用以下几行完成:<br />
{{hc|/etc/vsftpd.conf|2=<br />
listen_port=2211<br />
pasv_min_port=5000<br />
pasv_max_port=5003<br />
}}<br />
<br />
=== 配置 iptables ===<br />
通常,运行FTP守护进程的服务器受 [[Iptables (简体中文)|iptables]] 防火墙的保护。要允许访问FTP服务器,需要打开相应的端口,如:<br />
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT<br />
本文不会提供有关如何设置iptables的任何说明,但这里是一个例子:[[Simple stateful firewall (简体中文)|Simple stateful firewall]]。<br />
<br />
有一些内核模块需要在这里引用的 iptables 正确的处理 FTP 连接。 其中特别是 ''nf_conntrack_ftp''。这是需要的,因为 FTP 使用给定的 ''listen_port''(默认为21) 仅用于命令,所有的数据传输都是通过不同的端口完成的。这些端口由 FTP 守护程序为每个会话随机选择(也取决于是使用主动还是被动模式)。要告诉 iptables 应该接受端口上的数据包,需要 ''nf_conntrack_ftp''。要在启动时自动加载,请在 {{ic|/etc/modules-load.d}} 中创建新文件,例如:<br />
# echo nf_conntrack_ftp > /etc/modules-load.d/nf_conntrack_ftp.conf<br />
<br />
如果内核 >= 4.7,您需要通过 ''sysctl'' 设置 ''net.netfilter.nf_conntrack_helper = 1'',如:<br />
# echo net.netfilter.nf_conntrack_helper=1 > /etc/sysctl.d/70-conntrack.conf<br />
或使用<br />
# iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp<br />
<br />
== 小技巧 ==<br />
=== 虚拟用户的 PAM 认证 ===<br />
由于 [[PAM (简体中文)]] 不再提供 {{ic|pam_userdb.so}} 另一个简单的方法是使用 {{AUR|libpam_pwdfile}}。对于具有许多用户的环境,另一个选项可能是 {{AUR|pam_mysql}} {{Broken package link|{{aur-mirror|pam_mysql}}}}。但是,本节仅限于解释如何通过 {{ic|pam_pwdfile.so}} 配置 chroot 环境和身份验证。<br />
<br />
在此示例中,我们创建目录 {{ic|vsftpd}}:<br />
# mkdir /etc/vsftpd<br />
<br />
创建和存储用户名和密码的一个选择是使用 Apache 的生成器 htpasswd:<br />
# htpasswd -c /etc/vsftpd/.passwd<br />
上述命令的一个问题是 vsftpd 可能无法读取生成的 MD5 散列密码。如果使用 -d 开关运行相同的命令,则使用 crypt() 加密,vsftpd 的密码变得可读,但其缺点是安全性较低,密码限制为8个字符。 Openssl 可用于使用算法1生成基于 MD5 的 BSD 密码:<br />
# openssl passwd -1<br />
<br />
无论那个解决方案 {{ic|/etc/vsftpd/.passwd}} 应该如下所示:<br />
username1:hashed_password1<br />
username2:hashed_password2<br />
...<br />
<br />
接下来,您需要使用 {{ic|pam_pwdfile.so}} 和生成的 {{ic|/etc/vsftpd/.passwd}} 文件创建 PAM 服务。在本例中,我们为 ''vsftpd'' 创建了一个 PAM 策略,其中包含以下内容:<br />
{{hc|/etc/pam.d/vsftpd|auth required pam_pwdfile.so pwdfile /etc/vsftpd/.passwd<br />
account required pam_permit.so}}<br />
<br />
现在是为虚拟用户创建一个 home 的时候了。在示例中,决定用 {{ic|/srv/ftp}} 为虚拟用户托管数据,这也反映了 Arch 的默认目录结构。首先创建 virtual 用户并使 {{ic|/srv/ftp}} 成为它的 home:<br />
# useradd -d /srv/ftp virtual<br />
让 virtual 成为所有者<br />
# chown virtual:virtual /srv/ftp<br />
<br />
一个基本的没有私人文件夹配置的 /etc/vsftpd,默认的虚拟用户的 home 文件夹:<br />
# 指向正确的 PAM 服务文件<br />
pam_service_name=vsftpd<br />
write_enable=YES<br />
hide_ids=YES<br />
listen=YES<br />
connect_from_port_20=YES<br />
anonymous_enable=NO<br />
local_enable=YES<br />
dirmessage_enable=YES<br />
xferlog_enable=YES<br />
chroot_local_user=YES<br />
guest_enable=YES<br />
guest_username=virtual<br />
virtual_use_local_privs=YES<br />
<br />
您自己的设置可能不需要一些参数。如果您希望 chroot 环境可写,您将需要将以下内容添加到配置文件中:<br />
allow_writeable_chroot = YES<br />
否则 vsftpd 的默认安全设置会抱怨,如果它检测到 chroot 是可写的。<br />
<br />
[[Start]] {{ic|vsftpd.service}}。<br />
<br />
您现在应该可以使用存储在 {{ic|/etc/vsftpd/.passwd}} 中的任何用户和密码从FTP客户端登录。<br />
<br />
==== 为虚拟用户创建私有目录 ====<br />
首先创建用户文件夹<br />
# mkdir /srv/ftp/user1<br />
# mkdir /srv/ftp/user2<br />
# chown virtual:virtual /srv/ftp/user?/<br />
<br />
随后, 在 {{ic|/etc/vsftpd.conf}} 增加如下行:<br />
local_root=/srv/ftp/$USER<br />
user_sub_token=$USER<br />
<br />
== 问题解决 ==<br />
<br />
=== vsftpd: Error 500 with kernel 4.18+ ===<br />
[[Wikipedia:seccomp|seccomp]] 在 vsftpd 中默认激活,这导致某些内核版本出现兼容性问题。<br />
如果在列出具有多个文件的目录时遇到故障,将其添加到 {{ic|/etc/vsftpd.conf}}:<br />
seccomp_sandbox=NO<br />
<br />
=== vsftpd: refusing to run with writable root inside chroot() ===<br />
从 vsftpd 2.3.5 开始,用户被锁定的 chroot 目录不可写。这是为了防止安全漏洞。<br />
<br />
允许上传的安全方法是保持 chroot 启用,并配置您的 FTP 目录。<br />
<br />
local_root=/srv/ftp/user<br />
<br />
# mkdir -p /srv/ftp/user/upload<br />
#<br />
# chmod 550 /srv/ftp/user<br />
# chmod 750 /srv/ftp/user/upload<br />
<br />
如果你必须这么做:<br />
<br />
您可以将其放入您的 {{ic|/etc/vsftpd.conf}} 以解决此安全性增强(自vsftpd 3.0.0;来自 [http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/ Fixing 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()]):<br />
allow_writeable_chroot=YES<br />
或者:<br />
<br />
安装 {{AUR|vsftpd-ext}} {{Broken package link|{{aur-mirror|vsftpd-ext}}}} 并在 conf 文件中设置<br />
allow_writable_chroot=YES<br />
<br />
=== FileZilla Client: GnuTLS error -8 -15 -110 when connecting via SSL ===<br />
vsftpd 尝试在 SSL 会话中显示纯文本错误消息。为了进行调试,暂时禁用加密,您将看到正确的错误消息。[http://ramblings.linkerror.com/?p=45] [https://serverfault.com/questions/772494/vsftpd-list-causes-gnutls-error-15]<br />
<br />
=== vsftpd.service fails to run on boot ===<br />
如果您启用了 {{ic|vsftpd.service}},并且无法在启动时运行,请确保它已在服务文件中设置为在 {{ic|network.target}} 之后加载:<br />
<br />
{{hc|/usr/lib/systemd/system/vsftpd.service|2=<br />
[Unit]<br />
Description=vsftpd daemon<br />
After=network.target}}<br />
<br />
=== Passive mode replies with the local IP address to a remote connection ===<br />
<br />
如果 vsftpd 将本地地址返回给远程连接,如:<br />
227 Entering Passive Mode (192,168,0,19,192,27).<br />
<br />
It may be that the FTP server is behind a NAT router and while some devices monitor FTP connections and dynamically replace the IP address specification for packets containing the PASV response, some do not.<br />
可能是 FTP 服务器位于 NAT 路由器后面,而有些设备会监视 FTP 连接并动态替换包含 PASV 响应的数据包的 IP 地址规范,但有些设备却不会。<br />
<br />
使用以下命令在 vsftpd 配置中指示外部IP地址:<br />
pasv_address=''externalIPaddress''<br />
<br />
或者可选地:<br />
pasv_addr_resolve=YES<br />
pasv_address=''my.domain.name''<br />
<br />
如果在更改后无法进行内部连接,则可能需要运行 2 个 vsftpd,一个用于内部连接,一个用于外部连接。<br />
<br />
{{提示|要找出 NAT 路由器是否拦截 PASV 响应并用外部 IP 替换内部 IP,可以在 TLS 模式下检查客户端的服务器响应。加密的数据包不能被路由器识别并且未被修改。}}<br />
<br />
=== ipv6 only fails with: 500 OOPS: run two copies of vsftpd for IPv4 and IPv6 ===<br />
你很有可能已经注释了这一行<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
#listen=YES<br />
#<br />
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6<br />
# sockets, you must run two copies of vsftpd with two configuration files.<br />
# Make sure, that one of the listen options is commented !!<br />
listen_ipv6=YES<br />
<br />
而不是设置<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
listen=NO<br />
<br />
=== vsftpd 连接在使用 nis 的机器上失败: yp_bind_client_create_v2: RPC: Unable to send ===<br />
as mentioned on the vsftpd faq page, "...built-in sandboxing uses network isolation on Linux. This<br />
may be interfering with any module that needs to use the network to perform operations or lookups"<br />
正如在 vsftpd fap 页面上提到的那样,“...内置沙盒使用 linux 上的网络隔离可能会干扰任何需要使用网络执行操作或查找的模块”<br />
<br />
将这个未公开的行添加到你的 {{ic|/etc/vsftpd.conf}}<br />
isolate_network=NO<br />
<br />
== 更多资源 ==<br />
* [http://vsftpd.beasts.org/ vsftpd official homepage]<br />
* [http://vsftpd.beasts.org/vsftpd_conf.html vsftpd.conf man page]<br />
* [https://security.appspot.com/vsftpd/FAQ.txt vsftpd FAQ]</div>
745275633
https://wiki.archlinux.org/index.php?title=Very_Secure_FTP_Daemon_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=529041
Very Secure FTP Daemon (简体中文)
2018-07-07T04:46:04Z
<p>745275633: 528991 (flag for style)</p>
<hr />
<div>[[Category:FTP servers (简体中文)]]<br />
[[cs:Very Secure FTP Daemon]]<br />
[[en:Very Secure FTP Daemon]]<br />
[[es:Very Secure FTP Daemon]]<br />
[[it:Very Secure FTP Daemon]]<br />
[[ja:Very Secure FTP Daemon]]<br />
[[ru:Very Secure FTP Daemon]]<br />
{{TranslationStatus (简体中文)|Very Secure FTP Daemon|2018-07-07|528991}}<br />
[https://security.appspot.com/vsftpd.html vsftpd] (“Very Secure FTP Daemon“) 是一个为 UNIX 类系统开发的轻量,稳定和安全的 FTP 服务器端。<br />
== 安装 ==<br />
[[安装]] {{pkg|vsftpd}} 然后 [[Systemd (简体中文)#使用单元|启动/启用]] {{ic|vsftpd.service}} 守护程序。<br />
<br />
使用 [[Wikipedia:xinetd|xinetd]] 监视和控制 vsftpd 连接,请参见 [[#使用 xinetd]]。<br />
<br />
== 配置 ==<br />
vsftpd 的大多数配置都可以通过编辑 {{ic|/etc/vsftpd.conf}} 文件实现。 该文件本身自带大量注释说明,所以这一章节只就一些重要的配置予以说明。有关所有可用选项和文档,请参阅 {{man|5|vsftpd.conf}} 手册页。默认情况下,由 {{ic|/srv/ftp}} 提供文件。<br />
<br />
允许的连接 {{ic|/etc/hosts.allow}}:<br />
# 允许所有连接<br />
vsftpd: ALL<br />
# IP 地址范围<br />
vsftpd: 10.0.0.0/255.255.255.0<br />
<br />
=== 允许上传 ===<br />
需要将 {{ic|/etc/vsftpd.conf}} 中的 {{ic|write_enable}} 值设为 YES,以便允许修改文件系统(如上传):<br />
write_enable=YES<br />
<br />
=== 本地用户登录 ===<br />
需要修改 {{ic|/etc/vsftpd.conf}} 中的如下值,以便允许 {{ic|/etc/passwd}} 中的用户登录:<br />
local_enable=YES<br />
<br />
=== 匿名用户登录 ===<br />
以下行控制匿名用户是否可以登录。默认情况下,匿名登录只能从 {{ic|/srv/ftp}} 下载:<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
...<br />
# 允许匿名 FTP? (当心 - 默认情况下允许除非您将其注释)。<br />
anonymous_enable=YES<br />
...<br />
# 取消注释以允许匿名 FTP 用户上传文件。<br />
# 只有上述全局写入被激活,才会有效果。<br />
# 另外,你显然需要创建 FTP 用户有写权限的目录。<br />
# anon_upload_enable=YES<br />
#<br />
# 如果您希望匿名 FTP 用户能够创建新目录,请取消注释。<br />
# anon_mkdir_write_enable=YES<br />
...<br />
}}<br />
<br />
您也可以添加以下选项(详见 {{man|5|vsftpd.conf}}):<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
# 匿名登录不需要密码<br />
no_anon_password=YES<br />
<br />
# 匿名客户端的最大传输速率(以 Bytes/秒 为单位)<br />
anon_max_rate=30000<br />
<br />
# 用于匿名登录的目录<br />
anon_root=/example/directory/<br />
}}<br />
<br />
=== Chroot 限制 ===<br />
为了阻止用户离开家目录,可以设置 chroot 环境。要启用此功能,请在 {{ic|/etc/vsftpd.conf}} 中添加以下行:<br />
chroot_list_enable=YES<br />
chroot_list_file=/etc/vsftpd.chroot_list<br />
{{ic|chroot_list_file}} 定义了被 chroot 限制的用户列表。<br />
<br />
对于更严格的环境,请指定以下行:<br />
chroot_local_user=YES<br />
这将默认为所有用户启用 chroot 环境。 在这种情况下,{{ic|chroot_list_file}} 定义了'''不受''' chroot 限制的用户列表。<br />
<br />
=== 限制用户登录 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加以下两行来阻止特定用户登录FTP服务器:<br />
userlist_enable=YES<br />
userlist_file=/etc/vsftpd.user_list<br />
{{ic|userlist_file}} 文件列出'''不允许'''登录的用户。<br />
<br />
如果您只想允许特定的用户登录,请添加以下行:<br />
userlist_deny=NO<br />
此时 {{ic|userlist_file}} 文件指定'''允许'''登录的用户。<br />
<br />
=== 限制连接数 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加如下信息来限制本地用户的数据传输速率:<br />
local_max_rate=1000000 # 最大数据传输速率(单位: Bytes/秒)<br />
max_clients=50 # 可以同时连接的最大客户端数<br />
max_per_ip=2 # 每个 IP 允许的最大连接数<br />
<br />
=== 使用 xinetd ===<br />
Xinetd 提供增强的监控和控制连接功能。对于基本的可以工作的 vsftpd-server 是不必要的<br />
<br />
安装 vsftpd 将会添加必要的服务文件 {{ic|/etc/xinetd.d/vsftpd}},默认情况下,服务被禁用。<br />
<br />
启用ftp服务:<br />
<pre><br />
service ftp<br />
{<br />
socket_type = stream<br />
wait = no<br />
user = root<br />
server = /usr/sbin/vsftpd<br />
log_on_success += HOST DURATION<br />
log_on_failure += HOST<br />
disable = no<br />
}<br />
</pre><br />
<br />
如果您将 vsftpd 守护程序设置为以独立模式运行,而不是启动 vsftpd 守护程序和 [[Systemd (简体中文)#使用单元|启用]] {{ic|xinetd.service}},请在 {{ic|/etc/vsftpd.conf}} 中进行以下更改:<br />
listen=NO<br />
否则连接将失败:<br />
500 OOPS: could not bind listening IPv4 socket<br />
<br />
=== 使用 SSL/TLS 来保护 FTP ===<br />
<br />
{{Style|Do not duplicate [[OpenSSL#Certificates]].}}<br />
<br />
首先,您需要一个 ''X.509 SSL/TLS'' 证书才能使用TLS。如果您没有,可以轻松生成如下的自签名证书:<br />
<br />
# cd /etc/ssl/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout vsftpd.pem -out vsftpd.pem<br />
# chmod 600 vsftpd.pem<br />
<br />
你会被问到关于你公司的问题,等等。由于你的证书不是一个可信任的,所填的内容并不重要,它只会被用于加密。要使用可信证书,您可以从 [[Let's Encrypt]] 这样的证书颁发机构获得证书。<br />
<br />
然后,编辑配置文件:<br />
{{hc|/etc/vsftpd.conf|2=ssl_enable=YES<br />
<br />
# 如果你接受匿名连接你可能要启用这个设置<br />
# allow_anon_ssl=NO<br />
<br />
# 默认情况下所有非匿名登录被迫使用 SSL 发送和接收密码和数据,设置为 NO,以允许不安全的连接<br />
force_local_logins_ssl=NO<br />
force_local_data_ssl=NO<br />
<br />
# 选择你想要的<br />
force_local_logins_ssl=YES<br />
<br />
# TLS v1 协议连接是首选,默认情况下启用此模式,而禁用 SSL v2 和 v3 时,以下设置是默认设置,不需要更改,除非您特别需要 SSL<br />
# ssl_tlsv1=YES<br />
# ssl_sslv2=NO<br />
# ssl_sslv3=NO<br />
# 提供您的证书和私钥注释的路径,它们可以包含在同一个文件中或不同的文件中<br />
rsa_cert_file=/etc/ssl/certs/vsftpd.pem<br />
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem<br />
<br />
# 此设置默认设置为 YES,并要求所有数据连接都显示会话重用,这证明他们知道控制通道的秘密。这种方式更安全,但不受许多 FTP 客户端的支持,为了更好的兼容性而设置为 NO<br />
require_ssl_reuse=NO<br />
}}<br />
<br />
=== 在被动模式下解析主机名 ===<br />
要覆盖 vsftpd 在被动模式下通过服务器的主机名发布的 IP 地址,并在启动时解析 DNS,在 {{ic|/etc/vsftpd.conf}} 中增加以下两行:<br />
pasv_addr_resolve=YES<br />
pasv_address=''yourdomain.org''<br />
<br />
{{注意|<br />
* 对于动态DNS,定期更新 ''pasv_address'' 并重新启动服务器是不必要的,因为它有时可以被读取。<br />
* 您可能无法通过 LAN 以被动模式连接,在这种情况下,请尝试使用主动模式而不是LAN客户端。<br />
}}<br />
<br />
=== 端口配置 ===<br />
可能需要调整默认FTP侦听端口和被动模式数据端口:<br />
<br />
* 对于暴露于 Web 的 FTP 服务器,为了减少服务器受到攻击的可能性,可以将侦听端口改为除标准端口 21 以外的端口。<br />
* 要限制被动模式将打开的端口,可以提供一个范围。<br />
这些端口配置更改可以使用以下几行完成:<br />
{{hc|/etc/vsftpd.conf|2=<br />
listen_port=2211<br />
pasv_min_port=5000<br />
pasv_max_port=5003<br />
}}<br />
<br />
=== 配置 iptables ===<br />
通常,运行FTP守护进程的服务器受 [[Iptables (简体中文)|iptables]] 防火墙的保护。要允许访问FTP服务器,需要打开相应的端口,如:<br />
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT<br />
本文不会提供有关如何设置iptables的任何说明,但这里是一个例子:[[Simple stateful firewall (简体中文)|Simple stateful firewall]]。<br />
<br />
有一些内核模块需要在这里引用的 iptables 正确的处理 FTP 连接。 其中特别是 ''nf_conntrack_ftp''。这是需要的,因为 FTP 使用给定的 ''listen_port''(默认为21) 仅用于命令,所有的数据传输都是通过不同的端口完成的。这些端口由 FTP 守护程序为每个会话随机选择(也取决于是使用主动还是被动模式)。要告诉 iptables 应该接受端口上的数据包,需要 ''nf_conntrack_ftp''。要在启动时自动加载,请在 {{ic|/etc/modules-load.d}} 中创建新文件,例如:<br />
# echo nf_conntrack_ftp > /etc/modules-load.d/nf_conntrack_ftp.conf<br />
<br />
如果内核 >= 4.7,您需要通过 ''sysctl'' 设置 ''net.netfilter.nf_conntrack_helper = 1'',如:<br />
# echo net.netfilter.nf_conntrack_helper=1 > /etc/sysctl.d/70-conntrack.conf<br />
或使用<br />
# iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp<br />
<br />
== 小技巧 ==<br />
=== 虚拟用户的 PAM 认证 ===<br />
由于 [[PAM (简体中文)]] 不再提供 {{ic|pam_userdb.so}} 另一个简单的方法是使用 {{AUR|libpam_pwdfile}}。对于具有许多用户的环境,另一个选项可能是 {{AUR|pam_mysql}} {{Broken package link|{{aur-mirror|pam_mysql}}}}。但是,本节仅限于解释如何通过 {{ic|pam_pwdfile.so}} 配置 chroot 环境和身份验证。<br />
<br />
在此示例中,我们创建目录 {{ic|vsftpd}}:<br />
# mkdir /etc/vsftpd<br />
<br />
创建和存储用户名和密码的一个选择是使用 Apache 的生成器 htpasswd:<br />
# htpasswd -c /etc/vsftpd/.passwd<br />
上述命令的一个问题是 vsftpd 可能无法读取生成的 MD5 散列密码。如果使用 -d 开关运行相同的命令,则使用 crypt() 加密,vsftpd 的密码变得可读,但其缺点是安全性较低,密码限制为8个字符。 Openssl 可用于使用算法1生成基于 MD5 的 BSD 密码:<br />
# openssl passwd -1<br />
<br />
无论那个解决方案 {{ic|/etc/vsftpd/.passwd}} 应该如下所示:<br />
username1:hashed_password1<br />
username2:hashed_password2<br />
...<br />
<br />
接下来,您需要使用 {{ic|pam_pwdfile.so}} 和生成的 {{ic|/etc/vsftpd/.passwd}} 文件创建 PAM 服务。在本例中,我们为 ''vsftpd'' 创建了一个 PAM 策略,其中包含以下内容:<br />
{{hc|/etc/pam.d/vsftpd|auth required pam_pwdfile.so pwdfile /etc/vsftpd/.passwd<br />
account required pam_permit.so}}<br />
<br />
现在是为虚拟用户创建一个 home 的时候了。在示例中,决定用 {{ic|/srv/ftp}} 为虚拟用户托管数据,这也反映了 Arch 的默认目录结构。首先创建 virtual 用户并使 {{ic|/srv/ftp}} 成为它的 home:<br />
# useradd -d /srv/ftp virtual<br />
让 virtual 成为所有者<br />
# chown virtual:virtual /srv/ftp<br />
<br />
一个基本的没有私人文件夹配置的 /etc/vsftpd,默认的虚拟用户的 home 文件夹:<br />
# 指向正确的 PAM 服务文件<br />
pam_service_name=vsftpd<br />
write_enable=YES<br />
hide_ids=YES<br />
listen=YES<br />
connect_from_port_20=YES<br />
anonymous_enable=NO<br />
local_enable=YES<br />
dirmessage_enable=YES<br />
xferlog_enable=YES<br />
chroot_local_user=YES<br />
guest_enable=YES<br />
guest_username=virtual<br />
virtual_use_local_privs=YES<br />
<br />
您自己的设置可能不需要一些参数。如果您希望 chroot 环境可写,您将需要将以下内容添加到配置文件中:<br />
allow_writeable_chroot = YES<br />
否则 vsftpd 的默认安全设置会抱怨,如果它检测到 chroot 是可写的。<br />
<br />
[[Start]] {{ic|vsftpd.service}}。<br />
<br />
您现在应该可以使用存储在 {{ic|/etc/vsftpd/.passwd}} 中的任何用户和密码从FTP客户端登录。<br />
<br />
==== 为虚拟用户创建私有目录 ====<br />
首先创建用户文件夹<br />
# mkdir /srv/ftp/user1<br />
# mkdir /srv/ftp/user2<br />
# chown virtual:virtual /srv/ftp/user?/<br />
<br />
随后, 在 {{ic|/etc/vsftpd.conf}} 增加如下行:<br />
local_root=/srv/ftp/$USER<br />
user_sub_token=$USER<br />
<br />
== 问题解决 ==<br />
<br />
=== vsftpd: no connection (Error 500) with recent kernels (3.5 and newer) and .service ===<br />
如果在列出具有多个文件的目录时遇到故障,将其添加到您的 {{ic|/etc/vsftpd.conf}}:<br />
seccomp_sandbox=NO<br />
<br />
=== vsftpd: refusing to run with writable root inside chroot() ===<br />
从 vsftpd 2.3.5 开始,用户被锁定的 chroot 目录不可写。这是为了防止安全漏洞。<br />
<br />
允许上传的安全方法是保持 chroot 启用,并配置您的 FTP 目录。<br />
<br />
local_root=/srv/ftp/user<br />
<br />
# mkdir -p /srv/ftp/user/upload<br />
#<br />
# chmod 550 /srv/ftp/user<br />
# chmod 750 /srv/ftp/user/upload<br />
<br />
如果你必须这么做:<br />
<br />
您可以将其放入您的 {{ic|/etc/vsftpd.conf}} 以解决此安全性增强(自vsftpd 3.0.0;来自 [http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/ Fixing 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()]):<br />
allow_writeable_chroot=YES<br />
或者:<br />
<br />
安装 {{AUR|vsftpd-ext}} {{Broken package link|{{aur-mirror|vsftpd-ext}}}} 并在 conf 文件中设置<br />
allow_writable_chroot=YES<br />
<br />
=== FileZilla Client: GnuTLS error -8 -15 -110 when connecting via SSL ===<br />
vsftpd 尝试在 SSL 会话中显示纯文本错误消息。为了进行调试,暂时禁用加密,您将看到正确的错误消息。[http://ramblings.linkerror.com/?p=45] [https://serverfault.com/questions/772494/vsftpd-list-causes-gnutls-error-15]<br />
<br />
=== vsftpd.service fails to run on boot ===<br />
如果您启用了 {{ic|vsftpd.service}},并且无法在启动时运行,请确保它已在服务文件中设置为在 {{ic|network.target}} 之后加载:<br />
<br />
{{hc|/usr/lib/systemd/system/vsftpd.service|2=<br />
[Unit]<br />
Description=vsftpd daemon<br />
After=network.target}}<br />
<br />
=== Passive mode replies with the local IP address to a remote connection ===<br />
<br />
如果 vsftpd 将本地地址返回给远程连接,如:<br />
227 Entering Passive Mode (192,168,0,19,192,27).<br />
<br />
It may be that the FTP server is behind a NAT router and while some devices monitor FTP connections and dynamically replace the IP address specification for packets containing the PASV response, some do not.<br />
可能是 FTP 服务器位于 NAT 路由器后面,而有些设备会监视 FTP 连接并动态替换包含 PASV 响应的数据包的 IP 地址规范,但有些设备却不会。<br />
<br />
使用以下命令在 vsftpd 配置中指示外部IP地址:<br />
pasv_address=''externalIPaddress''<br />
<br />
或者可选地:<br />
pasv_addr_resolve=YES<br />
pasv_address=''my.domain.name''<br />
<br />
如果在更改后无法进行内部连接,则可能需要运行 2 个 vsftpd,一个用于内部连接,一个用于外部连接。<br />
<br />
{{提示|要找出 NAT 路由器是否拦截 PASV 响应并用外部 IP 替换内部 IP,可以在 TLS 模式下检查客户端的服务器响应。加密的数据包不能被路由器识别并且未被修改。}}<br />
<br />
=== ipv6 only fails with: 500 OOPS: run two copies of vsftpd for IPv4 and IPv6 ===<br />
你很有可能已经注释了这一行<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
#listen=YES<br />
#<br />
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6<br />
# sockets, you must run two copies of vsftpd with two configuration files.<br />
# Make sure, that one of the listen options is commented !!<br />
listen_ipv6=YES<br />
<br />
而不是设置<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
listen=NO<br />
<br />
=== vsftpd 连接在使用 nis 的机器上失败: yp_bind_client_create_v2: RPC: Unable to send ===<br />
as mentioned on the vsftpd faq page, "...built-in sandboxing uses network isolation on Linux. This<br />
may be interfering with any module that needs to use the network to perform operations or lookups"<br />
正如在 vsftpd fap 页面上提到的那样,“...内置沙盒使用 linux 上的网络隔离可能会干扰任何需要使用网络执行操作或查找的模块”<br />
<br />
将这个未公开的行添加到你的 {{ic|/etc/vsftpd.conf}}<br />
isolate_network=NO<br />
<br />
== 更多资源 ==<br />
* [http://vsftpd.beasts.org/ vsftpd official homepage]<br />
* [http://vsftpd.beasts.org/vsftpd_conf.html vsftpd.conf man page]<br />
* [https://security.appspot.com/vsftpd/FAQ.txt vsftpd FAQ]</div>
745275633
https://wiki.archlinux.org/index.php?title=Power_management_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)/Suspend_and_hibernate_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=527851
Power management (简体中文)/Suspend and hibernate (简体中文)
2018-06-28T02:01:31Z
<p>745275633: out of date</p>
<hr />
<div>[[Category:简体中文]]<br />
[[Category:Laptops (简体中文)]]<br />
[[Category:Power management (简体中文)]]<br />
[[en:Power management/Suspend and hibernate]]<br />
[[ja:サスペンドとハイバネート]]<br />
[[ru:Power management/Suspend and hibernate]]<br />
{{out of date}}<br />
本文参照[[Power management/Suspend and hibernate]]翻译,但增删部分内容,旨在简要描述挂起、睡眠和休眠的工作原理以及实现方式。<br />
<br />
==挂起、睡眠和休眠的区别==<br />
<br />
暂停并保存当前系统运行状态(前后台进程服务,不包含buff和cache等)有三种方法:<br />
<br />
* 挂起到内存:'''suspend to ram'''(简称str)<br />
通常被称为'''挂起''',设备通电,低功耗。<br />
<br />
挂起也被称为暂停或待机,一般的,系统一段时间没有操作,系统就会挂起(到内存中),多数外围设备会关闭,某些设备会运行(如键盘鼠标),可以快速响应这些设备从而唤醒系统。<br />
<br />
<br />
*挂起到磁盘:'''suspend to disk'''(简称std)<br />
通常被称为'''休眠''',设备断电,即设备会关机。<br />
<br />
休眠也被称为冬眠(hibernate实为冬眠之意),保存运行状态存到硬盘中,然后关机。下次开机后,系统从硬盘中读取存储的数据并恢复到关机前的状态。<br />
<br />
<br />
* 混合挂起:'''suspend to ram and disk'''(简称strd)<br />
通常被称为睡眠,设备通电,低功耗。<br />
<br />
睡眠更准确的名称应该是混合睡眠,所谓混合即存储方式上包含了挂起和休眠两种方式,唤醒时会优先从内存中读取数据,如果设备在此状态下断电(例如笔记本电脑在睡眠时外部电源断掉,而睡眠一段时间后内部电源耗尽),就和休眠一样了。<br />
<br />
==休眠设置==<br />
ArchLiux的休眠功能需要用户设置后才能使用。<br />
<br />
这里介绍使用systemd休眠,此外可选择{{aur|pm-utils}}实现,参看[[Pm-utils (简体中文)]]。<br />
<br />
===开启休眠===<br />
<br />
按照以下步骤设置。<br />
<br />
====划分合适大小的swap分区====<br />
<br />
休眠(hibernate)需要将内存中的内容写入磁盘的swap分区,如果swap分区大小比当前休眠所需空间小,则无法保证能够正确地休眠。具体的swap的大小根据个人使用情况(要休眠时的内存占用)而定。<br />
<br />
如果 swap 分区过小,需增大swap分区或减小/sys/power/image_size 。<br />
<br />
{{注意|brtfs格式无法设置swap分区。}}<br />
<br />
====在bootloader 中增加resume内核参数====<br />
<br />
需要添加resume=/dev/sdxY (sdxY 是swap分区的名字) ,让系统在启动时读取swap分区中的内容。<br />
<br />
例如,使用了grub2作为bootloader,swap的分区是/dev/sda3。<br />
<br />
1. 编辑{{ic|/etc/default/grub}}文件,在GRUB_CMDLINE_LINUX_DEFAULT中添加resume=/dev/sda3 ,假如该行的原有内容是:<br />
<br />
GRUB_CMDLINE_LINUX_DEFAULT=”quiet intel_pstate=enable”<br />
<br />
添加resume参数后就是:<br />
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_pstate=enable resume=/dev/sda3"<br />
<br />
2. 更新 grub 配置:<br />
grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
====配置 initramfs的resume钩子====<br />
1. 添加resume钩子<br />
编辑{{ic|/etc/mkinitcpio.conf}},在HOOKS行中添加resume钩子:<br />
例如该行原有内容是:<br />
HOOKS="base udev autodetect modconf block filesystems keyboard fsck"<br />
<br />
添加resume后就是:<br />
HOOKS="base udev resume autodetect modconf block filesystems keyboard fsck"<br />
<br />
{{注意|如果使用lvm分区,需要将resume放在lvm后面}}使用lvm的示例:<br />
HOOKS="base udev autodetect modconf block lvm2 resume filesystems keyboard fsck"<br />
<br />
2. 重新生成 initramfs 镜像: <br />
mkinitcpio -p linux<br />
<br />
===设置低电量休眠===<br />
用于带有内置电池的设备。<br />
<br />
当电池电量极低时,使其休眠,以免丢失数据。<br />
修改{{ic|/etc/UPower/UPower.conf}}相关配置.示例,在电量低至%5时自动休眠:<br />
<br />
PercentageLow=15 #<=15%低电量<br />
PercentageCritical=10 #<=10%警告电量<br />
PercentageAction=5 #<=5%执行动作(即CriticalPowerAction)的电量<br />
CriticalPowerAction=Hibernate #(在本示例中是电量<=5%)执行关机<br />
<br />
当电池低至5%,设备会自动休眠。<br />
<br />
CriticalPowerAction的取值有Poweroff、Hibernate和Hybid-sleep。<br />
<br />
更多配置项参考该文件中的说明。<br />
<br />
===设置盖上笔记本盖子或按下电源键休眠===<br />
<br />
1. 编辑{{ic|/etc/systemd/logind.conf}} ,<br />
盖上盖子休眠,添加:<br />
HandleLidSwitch=hibernate<br />
<br />
按下电源键休眠,添加:<br />
HandlePowerKey=hibernate<br />
<br />
2. 执行以下命令使其立即生效:<br />
systemctl restart systemd-logind<br />
<br />
其他详细的设置请参考 [[Power management (简体中文)|电源管理页面]]。<br />
<br />
==参看==<br />
[https://github.com/levinit/itnotes/blob/master/linux/laptop%E7%AC%94%E8%AE%B0%E6%9C%AC%E7%9B%B8%E5%85%B3.md linux-laptop笔记本相关]<br />
[http://www.cnblogs.com/unkownarea/p/7471285.html linux笔记本设置休眠]</div>
745275633
https://wiki.archlinux.org/index.php?title=Archiso_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=527779
Archiso (简体中文)
2018-06-27T11:16:09Z
<p>745275633: 527427(archiso 仅支持 x86_64)</p>
<hr />
<div>[[Category:简体中文]]<br />
[[Category:Live Arch systems (简体中文)]]<br />
[[Category:Getting and installing Arch (简体中文)]]<br />
[[Category:Arch projects (简体中文)]]<br />
[[ar:Archiso]]<br />
[[el:Archiso]]<br />
[[en:Archiso]]<br />
[[es:Archiso]]<br />
[[fr:Archiso]]<br />
[[it:Archiso]]<br />
[[ja:Archiso]]<br />
[[nl:Archiso]]<br />
[[ru:Archiso]]<br />
[[sk:Archiso]]<br />
{{TranslationStatus (简体中文)|Archiso|2018-06-27|527427}}<br />
{{Related articles start (简体中文)}}<br />
{{Related|Remastering the Install ISO}}<br />
{{Related2|PXE (简体中文)|PXE}}<br />
{{Related2|Archboot (简体中文)|Archboot}}<br />
{{Related articles end}}<br />
'''Archiso''' 是一组 bash 脚本,它能够建立功能全面的 Arch Linux 的 Live CD/DVD/USB 映像。它同样是用来生成官方映像的工具,但由于它是一个非常通用的工具,所以它可以被用来生成从救援系统、安装盘,到特殊爱好的 Live CD/DVD/USB 系统——无人知晓还有其他什么。简单地说,如果要将 Arch 放在一条闪光的船上,它可以帮你做到这一点。Archiso 的核心以及灵魂是 ''mkarchiso''。它的所有选项都写在它的用法输出上,所以它的直接使用方法将不在这里讨论。相反,这篇 wiki 文章将导引你迅速建立你的 Live 介质。<br />
<br />
== 安装和配置 ==<br />
<br />
{{注意|以下操作请在ROOT权限下使用,在错误的权限下操作会造成问题。}}<br />
当你开始之前, [[install|安装]] {{Pkg|archiso}} 或 {{AUR|archiso-git}}。<br />
<br />
Archiso 附带2个预定义配置(profiles): ''releng'' 和''baseline''。<br />
<br />
* 如果您想要创建完全定制的 Live Arch Linux ,并预装所有您喜爱的程序和配置,使用 ''releng''。<br />
<br />
* 如果您只是想构建一个简易 Live 镜像,无预装软件并仅有基础配置,那么使用 ''baseline''。<br />
<br />
现在,将您选择的配置文件复制到目录(在下面的示例中为 ''archlive''),您可以在其中进行调整和构建。 执行以下操作,用 {{ic|releng}} 或 {{ic|baseline}} 替换 {{ic|'''profile'''}}。<br />
<br />
# cp -r /usr/share/archiso/configs/'''profile''' ''archlive''<br />
<br />
* 如果你使用 {{ic|releng}} 配置文件来创建一个完全自定义的镜像,那么你可以继续到:[[#配置 Live 介质]]。<br />
<br />
* 如果您使用 {{ic|baseline}} 配置文件创建一个简易映像,那么你不需要做任何定制,并可以直接继续到 [[#构建ISO]].<br />
<br />
== 配置 Live 介质 ==<br />
<br />
本节详细介绍该如何配置您将创建的映像,允许您定义哪些包以及配置将被您的 Live 映像所包含。<br />
在 [[#安装和配置]] 中创建的{{ic|''archlive''}}目录中有许多文件和目录; 我们只关注其中一部分,主要是<br />
* {{ic|packages.*}} - 在这里一行行列出你想要安装的包,和 <br />
* {{ic|airootfs}} 目录——这是一个覆盖目录,你将在这里完成所有的定制工作。<br />
一般来说,您在全新安装之后所执行的每个管理任务(不包括软件包安装)可以被写入这个脚本: {{ic|''archlive''/airootfs/root/customize_airootfs.sh}}。您必须从新环境的角度来写该脚本,所以脚本中的 / 代表方才被创建的 Live ISO 的根。<br />
<br />
=== 安装包 ===<br />
<br />
[[Edit|编辑]] {{ic|packages.i686}},{{ic|packages.x86_64}} 或 {{ic|packages.both}} 中的程序包列表,以指示要在 live 媒体上安装那些程序包。这里的后缀表示包可用的架构。<br />
<br />
{{Note|如果要在 Live CD 中使用 [[窗口管理器]],则必须添加必要且正确的 [[video drivers]],否则 WM 可能在加载时冻结。}}<br />
<br />
==== 自定义本地库 ====<br />
<br />
{{Merge|Pacman/Tips_and_tricks_(简体中文)#自建本地仓库|移动一般信息 (如:仓库目录树) 到主文章.|Talk:Archiso}}<br />
<br />
为了准备自定义包或是从 [[Arch User Repository (简体中文)|AUR]]/[[Arch Build System (简体中文)|ABS]] 安装包,你也可以 [[Custom local repository|创建自定义本地资源库]]。如果您希望支持多种体系结构,则应采取预防措施来防止发生错误。每个架构应该有自己的目录树:<br />
<br />
{{hc|$ tree ~/customrepo/ {{!}} sed "s/$(uname -m)/<arch>/g"|<br />
/home/archie/customrepo/<br />
└── <arch><br />
├── customrepo.db -> customrepo.db.tar.xz<br />
├── customrepo.db.tar.xz<br />
├── customrepo.files -> customrepo.files.tar.xz<br />
├── customrepo.files.tar.xz<br />
└── personal-website-git-b99cce0-1-<arch>.pkg.tar.xz<br />
<br />
1 directory, 5 files<br />
}}<br />
<br />
如此后,您可以添加您的仓库——把下面的句子加入 {{ic|~/archlive/pacman.conf}},并置于其他仓库条目上面(优先级最高):<br />
<br />
{{hc|~/archlive/pacman.conf|...<br />
# custom repository<br />
[customrepo]<br />
SigLevel <nowiki>=</nowiki> Optional TrustAll<br />
Server <nowiki>=</nowiki> file:///home/'''user'''/customrepo/$arch<br />
...}}<br />
<br />
''repo-add'' 可执行文件检查软件包是否合适。如果不,那么你将得到与此类似的错误消息:<br />
<br />
==> ERROR: '/home/archie/customrepo/<arch>/foo-<arch>.pkg.tar.xz' does not have a valid database archive extension.<br />
<br />
==== 避免安装属于base组的包 ====<br />
<br />
默认情况下,{{ic|/usr/bin/mkarchiso}}——一个被 {{ic|~/archlive/build.sh}} 使用的脚本——会调用 {{Pkg|arch-install-scripts}} 中一个名为 {{ic|pacstrap}} 的程序,且在调用时不使用 {{ic|-i}} 标志——这将使 [[Pacman]] 在安装过程中不等待用户输入。<br />
<br />
当 base 组软件包被加入黑名单——把它们写到 {{ic|~/archlive/pacman.conf}} 中的 {{ic|IgnorePkg}} 行——时,[[Pacman]] 会询问是否仍然安装它们——意味着如果用户输入被跳过,它们就会被安装。为了避免安装这些包,这里有一些选择:<br />
<br />
* '''丑陋'''方案(Dirty):在 {{ic|/usr/bin/mkarchiso}} 中每次调用 {{ic|pacstrap}} 的行上加入 {{ic|i}} 标志。<br />
<br />
* '''整洁'''方案(Clean):创建 {{ic|/usr/bin/mkarchiso}} 的一份复制。在该复制中增加此标志,并修改 {{ic|~/archlive/build.sh}} 以使其调用修改过的 mkarchiso 脚本。<br />
<br />
* '''高级'''方案(Advanced): 在 {{ic|~/archlive/build.sh}} 中创建一个函数,该函数将在基础安装结束后显式移除那些包。若这样做,可以免去在安装过程中多次按回车键的麻烦。<br />
<br />
==== Installing packages from multilib ====<br />
<br />
要从 [[Multilib (简体中文)|Multilib]] 资源库安装软件包,您必须创建两个 pacman 配置文件:一个用于 x86_64,一个用于 i686。 将 {{ic|pacman.conf}} 复制到 {{ic|pacmanx86_64.conf}} 和 {{ic|pacmani686.conf}}。 取消注释以下行以{{ic|pacmanx86_64.conf}} 中启用 ''multilib''):<br />
<br />
{{hc|pacmanx86_64.conf|2=<br />
[multilib]<br />
SigLevel = PackageRequired<br />
Include = /etc/pacman.d/mirrorlist<br />
}}<br />
<br />
然后用编辑器编辑 {{ic|build.sh}}。 把:<br />
<br />
{{hc|build.sh|<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in i686 x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
done<br />
<br />
run_once make_packages_efi<br />
<br />
for arch in i686 x86_64; do<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
改为:<br />
<br />
{{hc|build.sh|<br />
cp -v releng/pacmanx86_64.conf releng/pacman.conf<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
<br />
echo make_pacman_conf i686<br />
cp -v releng/pacmani686.conf releng/pacman.conf<br />
cp -v releng/pacmani686.conf ${work_dir}/pacman.conf<br />
<br />
<br />
for arch in i686; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
这样,x86_64 和 i686 的软件包将安装有自己的pacman配置文件。<br />
<br />
=== 向映像里添加文件===<br />
<br />
{{注意|你必须使用 root 权限来完成这件事,不要改变任何你复制过来的文件的所有权,airootfs 中的'''所有'''文件必须为 root 用户所有。适当的所有制将在不久被解决。}}<br />
<br />
airootfs 目录作为要覆盖的文件,把它看作是在当前系统上的根目录'/',所以你在这个目录中放置的任何文件都将在开机时被复制。<br />
<br />
所以,如果你在当前系统上有一组 iptables 脚本且想要在 Live 映像上使用,请这样复制:<br />
# cp -r /etc/iptables ~/archlive/airootfs/etc<br />
<br />
在用户 home 文件夹里放置文件的方法有些许不同。不要把它们放在 {{ic|airootfs/home}},而是在 airootfs/ 里创建 skel 目录并将其放置在那里。然后我们会将相关命令添加到 {{ic|customize_airootfs.sh}}——我们要使用它在引导时复制文件以及梳理权限。<br />
<br />
首先,创建 skel 目录<br />
# mkdir ~/archlive/airootfs/etc/skel<br />
<br />
现在,复制 'home' 的文件到 skel 目录。例如,对于 {{ic|.bashrc}}:<br />
# cp ~/.bashrc ~/archlive/airootfs/etc/skel/<br />
<br />
当 {{ic|~/archlive/airootfs/root/customize_airootfs.sh}} 被执行,并且一个新用户已被创建, skel 目录中的文件将自动被复制到新的 home 文件夹中,并被设置正确的权限。<br />
<br />
类似地,需要注意位于层次结构下方的特殊配置文件。作为示例,配置文件 {{ic|/etc/X11/xinit/xinitrc}} 位于可能被安装包覆盖的路径上。要将 {{ic|xinitrc}} 的配置文件放在 {{ic|~/archlive/airootfs/etc/skel/}} ,然后修改 {{ic|customize_airootfs.sh}} 以适当地移动。<br />
<br />
=== 引导器 ===<br />
<br />
默认的文件应该可以正常工作,所以你应该不需要去碰它。<br />
<br />
由于 isolinux 的模块化性质,你能够使用很多插件,因为所有 *.c32 都被复制且可以可供您使用。看看[http://syslinux.zytor.com/wiki/index.php/SYSLINUX syslinux 官方网站] 和 [https://projects.archlinux.org/archiso.git/tree/configs/syslinux-iso/boot-files Archiso Git Repo]。使用所述插件,便有可能做出更具视觉吸引力及复杂的菜单。参见 [http://syslinux.zytor.com/wiki/index.php/Comboot/menu.c32 此处]。<br />
<br />
=== 登录管理器 ===<br />
<br />
通过启用您登录管理器的 [[Systemd (简体中文)|systemd]] 服务来做到在引导时启动 X 。如果您知道哪一个 .service 文件需要软链接,那就太好了。如果不知道,你也可以轻松找出——如果你在创建 iso 所用的系统上使用相同的程序的话。只需使用:<br />
<br />
$ ls -l /etc/systemd/system/display-manager.service<br />
<br />
现在在 {{ic|~/archlive/airootfs/etc/systemd/system}} 中创建相同的软链接。如 LXDM:<br />
<br />
# ln -s /usr/lib/systemd/system/lxdm.service ~/archlive/airootfs/etc/systemd/system/display-manager.service<br />
<br />
这将使您在 live 系统启用在系统上启动 LXDM。(This will enable LXDM at system start on your live system.)<br />
<br />
或者,您也可以启用 {{ic|airootfs/root/customize_airootfs.sh}} 中的服务以及其中启用的其他服务。<br />
<br />
如果您希望图形环境在启动过程中自动启动,请确保编辑 {{ic|airootfs/root/customize_airootfs.sh}} 并替换<br />
systemctl set-default multi-user.target<br />
为<br />
systemctl set-default graphical.target<br />
<br />
=== 改变自动登录状态 ===<br />
<br />
Getty 的自动登录配置位于 {{ic|airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf}}。 <br />
<br />
您可以修改这个文件来更改自动登录用户:<br />
<br />
[Service]<br />
ExecStart=<br />
ExecStart=-/sbin/agetty --autologin '''isouser''' --noclear %I 38400 linux<br />
<br />
或者干脆删除它来禁用自动登录。<br />
<br />
== 构建ISO ==<br />
<br />
现在,你已经准备好把你的文件转换成 .iso,以便可以刻录到 CD 或 USB:<br />
<br />
首先创建 {{ic|out/}} 目录(可选,如果没有的话 build.sh 将会创建它),<br />
<br />
# mkdir ~/archlive/out/<br />
<br />
然后在 {{ic|~/archlive}} 里面执行:<br />
<br />
# ./build.sh -v<br />
<br />
该脚本将现在下载并安装你指定的软件包到 {{ic|work/*/airootfs}},创建内核和 init 映像(initramfs),应用您的修改,并最终把 ISO 建立到 {{ic|out/}}。<br />
<br />
=== 重建ISO ===<br />
<br />
在修改之后重建 ISO 不被官方支持。但是,通过应用两个步骤很容易。首先,您必须删除工作目录中的锁定文件:<br />
<br />
# rm -v work/build.make_*<br />
<br />
此外,需要编辑脚本 {{ic|airootfs/root/customize_airootfs.sh}},并在 {{ic|useradd}} 行的开头添加 {{ic|id}} 命令,如下所示。否则,重建将在此处停止,因为要添加的用户已经存在 [https://bugs.archlinux.org/task/41865]。<br />
{{Style|typo?}}<br />
<br />
! id arch && useradd -m -p "" -g users -G "adm,audio,floppy,log,network,rfkill,scanner,storage,optical,power,wheel" -s /usr/bin/zsh arch<br />
<br />
同时删除创建的用户或符号链接,如 {{ic|/etc/sudoers}} 等持久性数据。<br />
<br />
{{Expansion|报告需要删除或重置的更多数据。}}<br />
<br />
通过编辑 pacstrap 脚本(位于 /bin/pacstrap)并在第 361 行更改以下内容,可以稍微加快重建速度:<br />
<br />
修改前:<br />
<br />
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then<br />
<br />
修改后:<br />
<br />
if ! pacman -r "$newroot" -Sy --needed "${pacman_args[@]}"; then<br />
<br />
这增加了初始引导的速度,因为它不必下载和安装任何已经安装的基础包。<br />
<br />
== 使用ISO ==<br />
<br />
有关各种选项,请参见 [[:Category:Getting_and_installing_Arch_(简体中文)#安装方式]] 部分。<br />
<br />
== 提示和技巧 ==<br />
<br />
=== 在沒有互联网连接的情况下安装 Archiso ===<br />
{{Move|Installation without Internet access|似乎这可以独立成一篇|Talk:Archiso}}<br />
{{Accuracy|可以将 Arch 镜像上提供的 “bootstrap” 映像直接提取到目标磁盘,而不是从 archiso 复制文件。 你将得到一个最小的系统,而不需要处理 archiso 修改。|Talk:Archiso}}<br />
<br />
若你想在没有互联网连接或者你不想重复下载你想要的包的情况下安装 archiso(例如[https://www.archlinux.org/download/ 官方的每月发布版]):<br />
<br />
首先,按照[[Installation guide (简体中文)|安装指南]],并跳过一些步骤(如[[Installation guide (简体中文)#连接到因特网|连接到因特网]]),直到[[Installation guide (简体中文)#安装基本系统|安装基本系统]]之前。<br />
<br />
==== 安装 archiso 到新的 root ====<br />
<br />
复制 Live 环境的''所有文件''到新的根目录,而不是使用 {{ic|pacstrap}}(这将尝试从远程存储库下载):<br />
# cp -ax / /mnt<br />
{{注意|The option ({{ic|-x}})排除了一些特殊目录,因为它们不应该被复制到新的根目录。}}<br />
<br />
然后,创建一些目录并复制内核映像到新的根,以保证新系统的完整性:<br />
<br />
# cp -vaT /run/archiso/bootmnt/arch/boot/$(uname -m)/vmlinuz /mnt/boot/vmlinuz-linux<br />
<br />
完成之后,请按[[Installation guide (简体中文)#Fstab]]所述生成 fstab。<br />
<br />
==== Chroot 并配置基本系统 ====<br />
<br />
下一步,chroot 到您新安装的系统:<br />
<br />
# arch-chroot /mnt /bin/bash<br />
<br />
请注意,在您配置 locale、键盘映射等之前,你仍然需要为了避免延续 Live 环境的轨迹——或者说对 archiso 所做的一些不适用于非 Live 环境的修改——而做一些事情。<br />
<br />
===== 恢复 journald 的配置 =====<br />
[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/root/customize_airootfs.sh#n19 archiso 的这个修改]会导致日志存储在 RAM 上——它意味着在重启后日志便会丢失。为了解决这个问题,执行:<br />
<br />
# sed -i 's/Storage=volatile/#Storage=auto/' /etc/systemd/journald.conf<br />
<br />
===== 删除特殊的 udev 规则 =====<br />
如果有任何有线网络接口,[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/etc/udev/rules.d/81-dhcpcd.rules udev 的这个规则]会自动启动dhcpcd。<br />
<br />
# rm /etc/udev/rules.d/81-dhcpcd.rules<br />
<br />
===== 禁用和移除 archiso 创建的服务 =====<br />
有一些服务文件是为 Live 环境创建的,请禁用这些服务并移除文件——因为它们对于新系统来说没必要存在:<br />
<br />
# systemctl disable pacman-init.service choose-mirror.service<br />
# rm -r /etc/systemd/system/{choose-mirror.service,pacman-init.service,etc-pacman.d-gnupg.mount,getty@tty1.service.d}<br />
# rm /etc/systemd/scripts/choose-mirror<br />
<br />
===== 移除 Live 环境的特殊脚本 =====<br />
在 live 系统中通过 archiso 脚本安装了一些脚本,这对于新系统是不必要的:<br />
<br />
# rm /etc/systemd/system/getty@tty1.service.d/autologin.conf<br />
# rm /root/{.automated_script.sh,.zlogin}<br />
# rm /etc/mkinitcpio-archiso.conf<br />
# rm -r /etc/initcpio<br />
<br />
===== 导入archlinux密钥 =====<br />
<br />
为了使用官方存储库,我们需要导入 archlinux 主密钥([[Pacman/Package signing (简体中文)#初始化密钥环]])。这一步通常是通过 pacstrap 完成的,但是可以通过<br />
<br />
# pacman-key --init<br />
# pacman-key --populate archlinux<br />
<br />
{{注意|Keyboard or mouse activity is needed to generate entropy and speed-up the first step.}}<br />
<br />
===== 配置系统 =====<br />
<br />
现在,您可以按照 [[Installation guide (简体中文)#配置系统]] 中跳过的步骤(设置语言环境,时区,主机名等),并通过创建初始 ramdisk 来完成安装,如 [[Installation guide (简体中文)#Initramfs]]。<br />
<br />
===== 启用图形登录(可选) =====<br />
<br />
如果使用像GDM这样的显示管理器,则可能需要将 systemd 默认目标从 multi-user.target 更改为允许图形登录的目标。<br />
# systemctl disable multi-user.target<br />
# systemctl enable graphical.target<br />
<br />
== 参阅 ==<br />
=== 文档和教程 ===<br />
* [https://projects.archlinux.org/archiso.git Archiso 项目页面]<br />
* [https://projects.archlinux.org/archiso.git/tree/docs 官方文档]<br />
<br />
=== 示例自定义模板 ===<br />
* [http://easy.open.and.free.fr/didjix/ A live DJ distribution powered by ArchLinux and built with Archiso]</div>
745275633
https://wiki.archlinux.org/index.php?title=Archiso_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=527778
Archiso (简体中文)
2018-06-27T11:14:40Z
<p>745275633: Undo revision 527777 by 745275633 (talk)</p>
<hr />
<div>[[Category:简体中文]]<br />
[[Category:Live Arch systems (简体中文)]]<br />
[[Category:Getting and installing Arch (简体中文)]]<br />
[[Category:Arch projects (简体中文)]]<br />
[[ar:Archiso]]<br />
[[el:Archiso]]<br />
[[en:Archiso]]<br />
[[es:Archiso]]<br />
[[fr:Archiso]]<br />
[[it:Archiso]]<br />
[[ja:Archiso]]<br />
[[nl:Archiso]]<br />
[[ru:Archiso]]<br />
[[sk:Archiso]]<br />
{{TranslationStatus (简体中文)|Archiso|2018-06-21|527132}}<br />
{{Related articles start (简体中文)}}<br />
{{Related|Remastering the Install ISO}}<br />
{{Related2|PXE (简体中文)|PXE}}<br />
{{Related2|Archboot (简体中文)|Archboot}}<br />
{{Related articles end}}<br />
'''Archiso''' 是一组 bash 脚本,它能够建立功能全面的 Arch Linux 的 Live CD/DVD/USB 映像。它同样是用来生成官方映像的工具,但由于它是一个非常通用的工具,所以它可以被用来生成从救援系统、安装盘,到特殊爱好的 Live CD/DVD/USB 系统——无人知晓还有其他什么。简单地说,如果要将 Arch 放在一条闪光的船上,它可以帮你做到这一点。Archiso 的核心以及灵魂是 ''mkarchiso''。它的所有选项都写在它的用法输出上,所以它的直接使用方法将不在这里讨论。相反,这篇 wiki 文章将导引你迅速建立你的 Live 介质。<br />
<br />
== 安装和配置 ==<br />
<br />
{{注意|<br />
* 您必须在 x86_64 上运行 Archiso。 [https://projects.archlinux.org/archiso.git/tree/docs/README.build#n67]<br />
* 以下操作请在ROOT权限下使用,在错误的权限下操作会造成一下问题。}}<br />
当你开始之前, [[install|安装]] {{Pkg|archiso}} 或 {{AUR|archiso-git}}。<br />
<br />
Archiso 附带2个预定义配置(profiles): ''releng'' 和''baseline''。<br />
<br />
* 如果您想要创建完全定制的 Live Arch Linux ,并预装所有您喜爱的程序和配置,使用 ''releng''。<br />
<br />
* 如果您只是想构建一个简易 Live 镜像,无预装软件并仅有基础配置,那么使用 ''baseline''。<br />
<br />
现在,将您选择的配置文件复制到目录(在下面的示例中为 ''archlive''),您可以在其中进行调整和构建。 执行以下操作,用 {{ic|releng}} 或 {{ic|baseline}} 替换 {{ic|'''profile'''}}。<br />
<br />
# cp -r /usr/share/archiso/configs/'''profile''' ''archlive''<br />
<br />
* 如果你使用 {{ic|releng}} 配置文件来创建一个完全自定义的镜像,那么你可以继续到:[[#配置 Live 介质]]。<br />
<br />
* 如果您使用 {{ic|baseline}} 配置文件创建一个简易映像,那么你不需要做任何定制,并可以直接继续到 [[#构建ISO]].<br />
<br />
== 配置 Live 介质 ==<br />
<br />
本节详细介绍该如何配置您将创建的映像,允许您定义哪些包以及配置将被您的 Live 映像所包含。<br />
在 [[#安装和配置]] 中创建的{{ic|''archlive''}}目录中有许多文件和目录; 我们只关注其中一部分,主要是<br />
* {{ic|packages.*}} - 在这里一行行列出你想要安装的包,和 <br />
* {{ic|airootfs}} 目录——这是一个覆盖目录,你将在这里完成所有的定制工作。<br />
一般来说,您在全新安装之后所执行的每个管理任务(不包括软件包安装)可以被写入这个脚本: {{ic|''archlive''/airootfs/root/customize_airootfs.sh}}。您必须从新环境的角度来写该脚本,所以脚本中的 / 代表方才被创建的 Live ISO 的根。<br />
<br />
=== 安装包 ===<br />
<br />
[[Edit|编辑]] {{ic|packages.i686}},{{ic|packages.x86_64}} 或 {{ic|packages.both}} 中的程序包列表,以指示要在 live 媒体上安装那些程序包。这里的后缀表示包可用的架构。<br />
<br />
{{Note|如果要在 Live CD 中使用 [[窗口管理器]],则必须添加必要且正确的 [[video drivers]],否则 WM 可能在加载时冻结。}}<br />
<br />
==== 自定义本地库 ====<br />
<br />
{{Merge|Pacman/Tips_and_tricks_(简体中文)#自建本地仓库|移动一般信息 (如:仓库目录树) 到主文章.|Talk:Archiso}}<br />
<br />
为了准备自定义包或是从 [[Arch User Repository (简体中文)|AUR]]/[[Arch Build System (简体中文)|ABS]] 安装包,你也可以 [[Custom local repository|创建自定义本地资源库]]。如果您希望支持多种体系结构,则应采取预防措施来防止发生错误。每个架构应该有自己的目录树:<br />
<br />
{{hc|$ tree ~/customrepo/ {{!}} sed "s/$(uname -m)/<arch>/g"|<br />
/home/archie/customrepo/<br />
└── <arch><br />
├── customrepo.db -> customrepo.db.tar.xz<br />
├── customrepo.db.tar.xz<br />
├── customrepo.files -> customrepo.files.tar.xz<br />
├── customrepo.files.tar.xz<br />
└── personal-website-git-b99cce0-1-<arch>.pkg.tar.xz<br />
<br />
1 directory, 5 files<br />
}}<br />
<br />
如此后,您可以添加您的仓库——把下面的句子加入 {{ic|~/archlive/pacman.conf}},并置于其他仓库条目上面(优先级最高):<br />
<br />
{{hc|~/archlive/pacman.conf|...<br />
# custom repository<br />
[customrepo]<br />
SigLevel <nowiki>=</nowiki> Optional TrustAll<br />
Server <nowiki>=</nowiki> file:///home/'''user'''/customrepo/$arch<br />
...}}<br />
<br />
''repo-add'' 可执行文件检查软件包是否合适。如果不,那么你将得到与此类似的错误消息:<br />
<br />
==> ERROR: '/home/archie/customrepo/<arch>/foo-<arch>.pkg.tar.xz' does not have a valid database archive extension.<br />
<br />
==== 避免安装属于base组的包 ====<br />
<br />
默认情况下,{{ic|/usr/bin/mkarchiso}}——一个被 {{ic|~/archlive/build.sh}} 使用的脚本——会调用 {{Pkg|arch-install-scripts}} 中一个名为 {{ic|pacstrap}} 的程序,且在调用时不使用 {{ic|-i}} 标志——这将使 [[Pacman]] 在安装过程中不等待用户输入。<br />
<br />
当 base 组软件包被加入黑名单——把它们写到 {{ic|~/archlive/pacman.conf}} 中的 {{ic|IgnorePkg}} 行——时,[[Pacman]] 会询问是否仍然安装它们——意味着如果用户输入被跳过,它们就会被安装。为了避免安装这些包,这里有一些选择:<br />
<br />
* '''丑陋'''方案(Dirty):在 {{ic|/usr/bin/mkarchiso}} 中每次调用 {{ic|pacstrap}} 的行上加入 {{ic|i}} 标志。<br />
<br />
* '''整洁'''方案(Clean):创建 {{ic|/usr/bin/mkarchiso}} 的一份复制。在该复制中增加此标志,并修改 {{ic|~/archlive/build.sh}} 以使其调用修改过的 mkarchiso 脚本。<br />
<br />
* '''高级'''方案(Advanced): 在 {{ic|~/archlive/build.sh}} 中创建一个函数,该函数将在基础安装结束后显式移除那些包。若这样做,可以免去在安装过程中多次按回车键的麻烦。<br />
<br />
==== Installing packages from multilib ====<br />
<br />
要从 [[Multilib (简体中文)|Multilib]] 资源库安装软件包,您必须创建两个 pacman 配置文件:一个用于 x86_64,一个用于 i686。 将 {{ic|pacman.conf}} 复制到 {{ic|pacmanx86_64.conf}} 和 {{ic|pacmani686.conf}}。 取消注释以下行以{{ic|pacmanx86_64.conf}} 中启用 ''multilib''):<br />
<br />
{{hc|pacmanx86_64.conf|2=<br />
[multilib]<br />
SigLevel = PackageRequired<br />
Include = /etc/pacman.d/mirrorlist<br />
}}<br />
<br />
然后用编辑器编辑 {{ic|build.sh}}。 把:<br />
<br />
{{hc|build.sh|<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in i686 x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
done<br />
<br />
run_once make_packages_efi<br />
<br />
for arch in i686 x86_64; do<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
改为:<br />
<br />
{{hc|build.sh|<br />
cp -v releng/pacmanx86_64.conf releng/pacman.conf<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
<br />
echo make_pacman_conf i686<br />
cp -v releng/pacmani686.conf releng/pacman.conf<br />
cp -v releng/pacmani686.conf ${work_dir}/pacman.conf<br />
<br />
<br />
for arch in i686; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
这样,x86_64 和 i686 的软件包将安装有自己的pacman配置文件。<br />
<br />
=== 向映像里添加文件===<br />
<br />
{{注意|你必须使用 root 权限来完成这件事,不要改变任何你复制过来的文件的所有权,airootfs 中的'''所有'''文件必须为 root 用户所有。适当的所有制将在不久被解决。}}<br />
<br />
airootfs 目录作为要覆盖的文件,把它看作是在当前系统上的根目录'/',所以你在这个目录中放置的任何文件都将在开机时被复制。<br />
<br />
所以,如果你在当前系统上有一组 iptables 脚本且想要在 Live 映像上使用,请这样复制:<br />
# cp -r /etc/iptables ~/archlive/airootfs/etc<br />
<br />
在用户 home 文件夹里放置文件的方法有些许不同。不要把它们放在 {{ic|airootfs/home}},而是在 airootfs/ 里创建 skel 目录并将其放置在那里。然后我们会将相关命令添加到 {{ic|customize_airootfs.sh}}——我们要使用它在引导时复制文件以及梳理权限。<br />
<br />
首先,创建 skel 目录<br />
# mkdir ~/archlive/airootfs/etc/skel<br />
<br />
现在,复制 'home' 的文件到 skel 目录。例如,对于 {{ic|.bashrc}}:<br />
# cp ~/.bashrc ~/archlive/airootfs/etc/skel/<br />
<br />
当 {{ic|~/archlive/airootfs/root/customize_airootfs.sh}} 被执行,并且一个新用户已被创建, skel 目录中的文件将自动被复制到新的 home 文件夹中,并被设置正确的权限。<br />
<br />
类似地,需要注意位于层次结构下方的特殊配置文件。作为示例,配置文件 {{ic|/etc/X11/xinit/xinitrc}} 位于可能被安装包覆盖的路径上。要将 {{ic|xinitrc}} 的配置文件放在 {{ic|~/archlive/airootfs/etc/skel/}} ,然后修改 {{ic|customize_airootfs.sh}} 以适当地移动。<br />
<br />
=== 引导器 ===<br />
<br />
默认的文件应该可以正常工作,所以你应该不需要去碰它。<br />
<br />
由于 isolinux 的模块化性质,你能够使用很多插件,因为所有 *.c32 都被复制且可以可供您使用。看看[http://syslinux.zytor.com/wiki/index.php/SYSLINUX syslinux 官方网站] 和 [https://projects.archlinux.org/archiso.git/tree/configs/syslinux-iso/boot-files Archiso Git Repo]。使用所述插件,便有可能做出更具视觉吸引力及复杂的菜单。参见 [http://syslinux.zytor.com/wiki/index.php/Comboot/menu.c32 此处]。<br />
<br />
=== 登录管理器 ===<br />
<br />
通过启用您登录管理器的 [[Systemd (简体中文)|systemd]] 服务来做到在引导时启动 X 。如果您知道哪一个 .service 文件需要软链接,那就太好了。如果不知道,你也可以轻松找出——如果你在创建 iso 所用的系统上使用相同的程序的话。只需使用:<br />
<br />
$ ls -l /etc/systemd/system/display-manager.service<br />
<br />
现在在 {{ic|~/archlive/airootfs/etc/systemd/system}} 中创建相同的软链接。如 LXDM:<br />
<br />
# ln -s /usr/lib/systemd/system/lxdm.service ~/archlive/airootfs/etc/systemd/system/display-manager.service<br />
<br />
这将使您在 live 系统启用在系统上启动 LXDM。(This will enable LXDM at system start on your live system.)<br />
<br />
或者,您也可以启用 {{ic|airootfs/root/customize_airootfs.sh}} 中的服务以及其中启用的其他服务。<br />
<br />
如果您希望图形环境在启动过程中自动启动,请确保编辑 {{ic|airootfs/root/customize_airootfs.sh}} 并替换<br />
systemctl set-default multi-user.target<br />
为<br />
systemctl set-default graphical.target<br />
<br />
=== 改变自动登录状态 ===<br />
<br />
Getty 的自动登录配置位于 {{ic|airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf}}。 <br />
<br />
您可以修改这个文件来更改自动登录用户:<br />
<br />
[Service]<br />
ExecStart=<br />
ExecStart=-/sbin/agetty --autologin '''isouser''' --noclear %I 38400 linux<br />
<br />
或者干脆删除它来禁用自动登录。<br />
<br />
== 构建ISO ==<br />
<br />
现在,你已经准备好把你的文件转换成 .iso,以便可以刻录到 CD 或 USB:<br />
<br />
首先创建 {{ic|out/}} 目录(可选,如果没有的话 build.sh 将会创建它),<br />
<br />
# mkdir ~/archlive/out/<br />
<br />
然后在 {{ic|~/archlive}} 里面执行:<br />
<br />
# ./build.sh -v<br />
<br />
该脚本将现在下载并安装你指定的软件包到 {{ic|work/*/airootfs}},创建内核和 init 映像(initramfs),应用您的修改,并最终把 ISO 建立到 {{ic|out/}}。<br />
<br />
=== 重建ISO ===<br />
<br />
在修改之后重建 ISO 不被官方支持。但是,通过应用两个步骤很容易。首先,您必须删除工作目录中的锁定文件:<br />
<br />
# rm -v work/build.make_*<br />
<br />
此外,需要编辑脚本 {{ic|airootfs/root/customize_airootfs.sh}},并在 {{ic|useradd}} 行的开头添加 {{ic|id}} 命令,如下所示。否则,重建将在此处停止,因为要添加的用户已经存在 [https://bugs.archlinux.org/task/41865]。<br />
{{Style|typo?}}<br />
<br />
! id arch && useradd -m -p "" -g users -G "adm,audio,floppy,log,network,rfkill,scanner,storage,optical,power,wheel" -s /usr/bin/zsh arch<br />
<br />
同时删除创建的用户或符号链接,如 {{ic|/etc/sudoers}} 等持久性数据。<br />
<br />
{{Expansion|报告需要删除或重置的更多数据。}}<br />
<br />
通过编辑 pacstrap 脚本(位于 /bin/pacstrap)并在第 361 行更改以下内容,可以稍微加快重建速度:<br />
<br />
修改前:<br />
<br />
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then<br />
<br />
修改后:<br />
<br />
if ! pacman -r "$newroot" -Sy --needed "${pacman_args[@]}"; then<br />
<br />
这增加了初始引导的速度,因为它不必下载和安装任何已经安装的基础包。<br />
<br />
== 使用ISO ==<br />
<br />
有关各种选项,请参见 [[:Category:Getting_and_installing_Arch_(简体中文)#安装方式]] 部分。<br />
<br />
== 提示和技巧 ==<br />
<br />
=== 在沒有互联网连接的情况下安装 Archiso ===<br />
{{Move|Installation without Internet access|似乎这可以独立成一篇|Talk:Archiso}}<br />
{{Accuracy|可以将 Arch 镜像上提供的 “bootstrap” 映像直接提取到目标磁盘,而不是从 archiso 复制文件。 你将得到一个最小的系统,而不需要处理 archiso 修改。|Talk:Archiso}}<br />
<br />
若你想在没有互联网连接或者你不想重复下载你想要的包的情况下安装 archiso(例如[https://www.archlinux.org/download/ 官方的每月发布版]):<br />
<br />
首先,按照[[Installation guide (简体中文)|安装指南]],并跳过一些步骤(如[[Installation guide (简体中文)#连接到因特网|连接到因特网]]),直到[[Installation guide (简体中文)#安装基本系统|安装基本系统]]之前。<br />
<br />
==== 安装 archiso 到新的 root ====<br />
<br />
复制 Live 环境的''所有文件''到新的根目录,而不是使用 {{ic|pacstrap}}(这将尝试从远程存储库下载):<br />
# cp -ax / /mnt<br />
{{注意|The option ({{ic|-x}})排除了一些特殊目录,因为它们不应该被复制到新的根目录。}}<br />
<br />
然后,创建一些目录并复制内核映像到新的根,以保证新系统的完整性:<br />
<br />
# cp -vaT /run/archiso/bootmnt/arch/boot/$(uname -m)/vmlinuz /mnt/boot/vmlinuz-linux<br />
<br />
完成之后,请按[[Installation guide (简体中文)#Fstab]]所述生成 fstab。<br />
<br />
==== Chroot 并配置基本系统 ====<br />
<br />
下一步,chroot 到您新安装的系统:<br />
<br />
# arch-chroot /mnt /bin/bash<br />
<br />
请注意,在您配置 locale、键盘映射等之前,你仍然需要为了避免延续 Live 环境的轨迹——或者说对 archiso 所做的一些不适用于非 Live 环境的修改——而做一些事情。<br />
<br />
===== 恢复 journald 的配置 =====<br />
[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/root/customize_airootfs.sh#n19 archiso 的这个修改]会导致日志存储在 RAM 上——它意味着在重启后日志便会丢失。为了解决这个问题,执行:<br />
<br />
# sed -i 's/Storage=volatile/#Storage=auto/' /etc/systemd/journald.conf<br />
<br />
===== 删除特殊的 udev 规则 =====<br />
如果有任何有线网络接口,[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/etc/udev/rules.d/81-dhcpcd.rules udev 的这个规则]会自动启动dhcpcd。<br />
<br />
# rm /etc/udev/rules.d/81-dhcpcd.rules<br />
<br />
===== 禁用和移除 archiso 创建的服务 =====<br />
有一些服务文件是为 Live 环境创建的,请禁用这些服务并移除文件——因为它们对于新系统来说没必要存在:<br />
<br />
# systemctl disable pacman-init.service choose-mirror.service<br />
# rm -r /etc/systemd/system/{choose-mirror.service,pacman-init.service,etc-pacman.d-gnupg.mount,getty@tty1.service.d}<br />
# rm /etc/systemd/scripts/choose-mirror<br />
<br />
===== 移除 Live 环境的特殊脚本 =====<br />
在 live 系统中通过 archiso 脚本安装了一些脚本,这对于新系统是不必要的:<br />
<br />
# rm /etc/systemd/system/getty@tty1.service.d/autologin.conf<br />
# rm /root/{.automated_script.sh,.zlogin}<br />
# rm /etc/mkinitcpio-archiso.conf<br />
# rm -r /etc/initcpio<br />
<br />
===== 导入archlinux密钥 =====<br />
<br />
为了使用官方存储库,我们需要导入 archlinux 主密钥([[Pacman/Package signing (简体中文)#初始化密钥环]])。这一步通常是通过 pacstrap 完成的,但是可以通过<br />
<br />
# pacman-key --init<br />
# pacman-key --populate archlinux<br />
<br />
{{注意|Keyboard or mouse activity is needed to generate entropy and speed-up the first step.}}<br />
<br />
===== 配置系统 =====<br />
<br />
现在,您可以按照 [[Installation guide (简体中文)#配置系统]] 中跳过的步骤(设置语言环境,时区,主机名等),并通过创建初始 ramdisk 来完成安装,如 [[Installation guide (简体中文)#Initramfs]]。<br />
<br />
===== 启用图形登录(可选) =====<br />
<br />
如果使用像GDM这样的显示管理器,则可能需要将 systemd 默认目标从 multi-user.target 更改为允许图形登录的目标。<br />
# systemctl disable multi-user.target<br />
# systemctl enable graphical.target<br />
<br />
== 参阅 ==<br />
=== 文档和教程 ===<br />
* [https://projects.archlinux.org/archiso.git Archiso 项目页面]<br />
* [https://projects.archlinux.org/archiso.git/tree/docs 官方文档]<br />
<br />
=== 示例自定义模板 ===<br />
* [http://easy.open.and.free.fr/didjix/ A live DJ distribution powered by ArchLinux and built with Archiso]</div>
745275633
https://wiki.archlinux.org/index.php?title=Archiso_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=527777
Archiso (简体中文)
2018-06-27T11:12:36Z
<p>745275633: 527427</p>
<hr />
<div>[[Category:简体中文]]<br />
[[Category:Live Arch systems (简体中文)]]<br />
[[Category:Getting and installing Arch (简体中文)]]<br />
[[Category:Arch projects (简体中文)]]<br />
[[ar:Archiso]]<br />
[[el:Archiso]]<br />
[[en:Archiso]]<br />
[[es:Archiso]]<br />
[[fr:Archiso]]<br />
[[it:Archiso]]<br />
[[ja:Archiso]]<br />
[[nl:Archiso]]<br />
[[ru:Archiso]]<br />
[[sk:Archiso]]<br />
{{TranslationStatus (简体中文)|Archiso|2018-06-27|527427}}<br />
{{Related articles start (简体中文)}}<br />
{{Related|Remastering the Install ISO}}<br />
{{Related2|PXE (简体中文)|PXE}}<br />
{{Related2|Archboot (简体中文)|Archboot}}<br />
{{Related articles end}}<br />
'''Archiso''' 是一组 bash 脚本,它能够建立功能全面的 Arch Linux 的 Live CD/DVD/USB 映像。它同样是用来生成官方映像的工具,但由于它是一个非常通用的工具,所以它可以被用来生成从救援系统、安装盘,到特殊爱好的 Live CD/DVD/USB 系统——无人知晓还有其他什么。简单地说,如果要将 Arch 放在一条闪光的船上,它可以帮你做到这一点。Archiso 的核心以及灵魂是 ''mkarchiso''。它的所有选项都写在它的用法输出上,所以它的直接使用方法将不在这里讨论。相反,这篇 wiki 文章将导引你迅速建立你的 Live 介质。<br />
<br />
== 安装和配置 ==<br />
<br />
{{注意|建议在以下所有步骤中使用 root 用户。如果不使用的话,那么之后很可能会出现权限的问题。}}<br />
当你开始之前, [[install|安装]] {{Pkg|archiso}} 或 {{AUR|archiso-git}}。<br />
<br />
Archiso 附带2个预定义配置(profiles): ''releng'' 和''baseline''。<br />
<br />
* 如果您想要创建完全定制的 Live Arch Linux ,并预装所有您喜爱的程序和配置,使用 ''releng''。<br />
<br />
* 如果您只是想构建一个简易 Live 镜像,无预装软件并仅有基础配置,那么使用 ''baseline''。<br />
<br />
现在,将您选择的配置文件复制到目录(在下面的示例中为 ''archlive''),您可以在其中进行调整和构建。 执行以下操作,用 {{ic|releng}} 或 {{ic|baseline}} 替换 {{ic|'''profile'''}}。<br />
<br />
# cp -r /usr/share/archiso/configs/'''profile''' ''archlive''<br />
<br />
* 如果你使用 {{ic|releng}} 配置文件来创建一个完全自定义的镜像,那么你可以继续到:[[#配置 Live 介质]]。<br />
<br />
* 如果您使用 {{ic|baseline}} 配置文件创建一个简易映像,那么你不需要做任何定制,并可以直接继续到 [[#构建ISO]].<br />
<br />
== 配置 Live 介质 ==<br />
<br />
本节详细介绍该如何配置您将创建的映像,允许您定义哪些包以及配置将被您的 Live 映像所包含。<br />
在 [[#安装和配置]] 中创建的{{ic|''archlive''}}目录中有许多文件和目录; 我们只关注其中一部分,主要是<br />
* {{ic|packages.*}} - 在这里一行行列出你想要安装的包,和 <br />
* {{ic|airootfs}} 目录——这是一个覆盖目录,你将在这里完成所有的定制工作。<br />
一般来说,您在全新安装之后所执行的每个管理任务(不包括软件包安装)可以被写入这个脚本: {{ic|''archlive''/airootfs/root/customize_airootfs.sh}}。您必须从新环境的角度来写该脚本,所以脚本中的 / 代表方才被创建的 Live ISO 的根。<br />
<br />
=== 安装包 ===<br />
<br />
[[Edit|编辑]] {{ic|packages.i686}},{{ic|packages.x86_64}} 或 {{ic|packages.both}} 中的程序包列表,以指示要在 live 媒体上安装那些程序包。这里的后缀表示包可用的架构。<br />
<br />
{{Note|如果要在 Live CD 中使用 [[窗口管理器]],则必须添加必要且正确的 [[video drivers]],否则 WM 可能在加载时冻结。}}<br />
<br />
==== 自定义本地库 ====<br />
<br />
{{Merge|Pacman/Tips_and_tricks_(简体中文)#自建本地仓库|移动一般信息 (如:仓库目录树) 到主文章.|Talk:Archiso}}<br />
<br />
为了准备自定义包或是从 [[Arch User Repository (简体中文)|AUR]]/[[Arch Build System (简体中文)|ABS]] 安装包,你也可以 [[Custom local repository|创建自定义本地资源库]]。如果您希望支持多种体系结构,则应采取预防措施来防止发生错误。每个架构应该有自己的目录树:<br />
<br />
{{hc|$ tree ~/customrepo/ {{!}} sed "s/$(uname -m)/<arch>/g"|<br />
/home/archie/customrepo/<br />
└── <arch><br />
├── customrepo.db -> customrepo.db.tar.xz<br />
├── customrepo.db.tar.xz<br />
├── customrepo.files -> customrepo.files.tar.xz<br />
├── customrepo.files.tar.xz<br />
└── personal-website-git-b99cce0-1-<arch>.pkg.tar.xz<br />
<br />
1 directory, 5 files<br />
}}<br />
<br />
如此后,您可以添加您的仓库——把下面的句子加入 {{ic|~/archlive/pacman.conf}},并置于其他仓库条目上面(优先级最高):<br />
<br />
{{hc|~/archlive/pacman.conf|...<br />
# custom repository<br />
[customrepo]<br />
SigLevel <nowiki>=</nowiki> Optional TrustAll<br />
Server <nowiki>=</nowiki> file:///home/'''user'''/customrepo/$arch<br />
...}}<br />
<br />
''repo-add'' 可执行文件检查软件包是否合适。如果不,那么你将得到与此类似的错误消息:<br />
<br />
==> ERROR: '/home/archie/customrepo/<arch>/foo-<arch>.pkg.tar.xz' does not have a valid database archive extension.<br />
<br />
==== 避免安装属于base组的包 ====<br />
<br />
默认情况下,{{ic|/usr/bin/mkarchiso}}——一个被 {{ic|~/archlive/build.sh}} 使用的脚本——会调用 {{Pkg|arch-install-scripts}} 中一个名为 {{ic|pacstrap}} 的程序,且在调用时不使用 {{ic|-i}} 标志——这将使 [[Pacman]] 在安装过程中不等待用户输入。<br />
<br />
当 base 组软件包被加入黑名单——把它们写到 {{ic|~/archlive/pacman.conf}} 中的 {{ic|IgnorePkg}} 行——时,[[Pacman]] 会询问是否仍然安装它们——意味着如果用户输入被跳过,它们就会被安装。为了避免安装这些包,这里有一些选择:<br />
<br />
* '''丑陋'''方案(Dirty):在 {{ic|/usr/bin/mkarchiso}} 中每次调用 {{ic|pacstrap}} 的行上加入 {{ic|i}} 标志。<br />
<br />
* '''整洁'''方案(Clean):创建 {{ic|/usr/bin/mkarchiso}} 的一份复制。在该复制中增加此标志,并修改 {{ic|~/archlive/build.sh}} 以使其调用修改过的 mkarchiso 脚本。<br />
<br />
* '''高级'''方案(Advanced): 在 {{ic|~/archlive/build.sh}} 中创建一个函数,该函数将在基础安装结束后显式移除那些包。若这样做,可以免去在安装过程中多次按回车键的麻烦。<br />
<br />
==== Installing packages from multilib ====<br />
<br />
要从 [[Multilib (简体中文)|Multilib]] 资源库安装软件包,您必须创建两个 pacman 配置文件:一个用于 x86_64,一个用于 i686。 将 {{ic|pacman.conf}} 复制到 {{ic|pacmanx86_64.conf}} 和 {{ic|pacmani686.conf}}。 取消注释以下行以{{ic|pacmanx86_64.conf}} 中启用 ''multilib''):<br />
<br />
{{hc|pacmanx86_64.conf|2=<br />
[multilib]<br />
SigLevel = PackageRequired<br />
Include = /etc/pacman.d/mirrorlist<br />
}}<br />
<br />
然后用编辑器编辑 {{ic|build.sh}}。 把:<br />
<br />
{{hc|build.sh|<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in i686 x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
done<br />
<br />
run_once make_packages_efi<br />
<br />
for arch in i686 x86_64; do<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
改为:<br />
<br />
{{hc|build.sh|<br />
cp -v releng/pacmanx86_64.conf releng/pacman.conf<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
<br />
echo make_pacman_conf i686<br />
cp -v releng/pacmani686.conf releng/pacman.conf<br />
cp -v releng/pacmani686.conf ${work_dir}/pacman.conf<br />
<br />
<br />
for arch in i686; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
这样,x86_64 和 i686 的软件包将安装有自己的pacman配置文件。<br />
<br />
=== 向映像里添加文件===<br />
<br />
{{注意|你必须使用 root 权限来完成这件事,不要改变任何你复制过来的文件的所有权,airootfs 中的'''所有'''文件必须为 root 用户所有。适当的所有制将在不久被解决。}}<br />
<br />
airootfs 目录作为要覆盖的文件,把它看作是在当前系统上的根目录'/',所以你在这个目录中放置的任何文件都将在开机时被复制。<br />
<br />
所以,如果你在当前系统上有一组 iptables 脚本且想要在 Live 映像上使用,请这样复制:<br />
# cp -r /etc/iptables ~/archlive/airootfs/etc<br />
<br />
在用户 home 文件夹里放置文件的方法有些许不同。不要把它们放在 {{ic|airootfs/home}},而是在 airootfs/ 里创建 skel 目录并将其放置在那里。然后我们会将相关命令添加到 {{ic|customize_airootfs.sh}}——我们要使用它在引导时复制文件以及梳理权限。<br />
<br />
首先,创建 skel 目录<br />
# mkdir ~/archlive/airootfs/etc/skel<br />
<br />
现在,复制 'home' 的文件到 skel 目录。例如,对于 {{ic|.bashrc}}:<br />
# cp ~/.bashrc ~/archlive/airootfs/etc/skel/<br />
<br />
当 {{ic|~/archlive/airootfs/root/customize_airootfs.sh}} 被执行,并且一个新用户已被创建, skel 目录中的文件将自动被复制到新的 home 文件夹中,并被设置正确的权限。<br />
<br />
类似地,需要注意位于层次结构下方的特殊配置文件。作为示例,配置文件 {{ic|/etc/X11/xinit/xinitrc}} 位于可能被安装包覆盖的路径上。要将 {{ic|xinitrc}} 的配置文件放在 {{ic|~/archlive/airootfs/etc/skel/}} ,然后修改 {{ic|customize_airootfs.sh}} 以适当地移动。<br />
<br />
=== 引导器 ===<br />
<br />
默认的文件应该可以正常工作,所以你应该不需要去碰它。<br />
<br />
由于 isolinux 的模块化性质,你能够使用很多插件,因为所有 *.c32 都被复制且可以可供您使用。看看[http://syslinux.zytor.com/wiki/index.php/SYSLINUX syslinux 官方网站] 和 [https://projects.archlinux.org/archiso.git/tree/configs/syslinux-iso/boot-files Archiso Git Repo]。使用所述插件,便有可能做出更具视觉吸引力及复杂的菜单。参见 [http://syslinux.zytor.com/wiki/index.php/Comboot/menu.c32 此处]。<br />
<br />
=== 登录管理器 ===<br />
<br />
通过启用您登录管理器的 [[Systemd (简体中文)|systemd]] 服务来做到在引导时启动 X 。如果您知道哪一个 .service 文件需要软链接,那就太好了。如果不知道,你也可以轻松找出——如果你在创建 iso 所用的系统上使用相同的程序的话。只需使用:<br />
<br />
$ ls -l /etc/systemd/system/display-manager.service<br />
<br />
现在在 {{ic|~/archlive/airootfs/etc/systemd/system}} 中创建相同的软链接。如 LXDM:<br />
<br />
# ln -s /usr/lib/systemd/system/lxdm.service ~/archlive/airootfs/etc/systemd/system/display-manager.service<br />
<br />
这将使您在 live 系统启用在系统上启动 LXDM。(This will enable LXDM at system start on your live system.)<br />
<br />
或者,您也可以启用 {{ic|airootfs/root/customize_airootfs.sh}} 中的服务以及其中启用的其他服务。<br />
<br />
如果您希望图形环境在启动过程中自动启动,请确保编辑 {{ic|airootfs/root/customize_airootfs.sh}} 并替换<br />
systemctl set-default multi-user.target<br />
为<br />
systemctl set-default graphical.target<br />
<br />
=== 改变自动登录状态 ===<br />
<br />
Getty 的自动登录配置位于 {{ic|airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf}}。 <br />
<br />
您可以修改这个文件来更改自动登录用户:<br />
<br />
[Service]<br />
ExecStart=<br />
ExecStart=-/sbin/agetty --autologin '''isouser''' --noclear %I 38400 linux<br />
<br />
或者干脆删除它来禁用自动登录。<br />
<br />
== 构建ISO ==<br />
<br />
现在,你已经准备好把你的文件转换成 .iso,以便可以刻录到 CD 或 USB:<br />
<br />
首先创建 {{ic|out/}} 目录(可选,如果没有的话 build.sh 将会创建它),<br />
<br />
# mkdir ~/archlive/out/<br />
<br />
然后在 {{ic|~/archlive}} 里面执行:<br />
<br />
# ./build.sh -v<br />
<br />
该脚本将现在下载并安装你指定的软件包到 {{ic|work/*/airootfs}},创建内核和 init 映像(initramfs),应用您的修改,并最终把 ISO 建立到 {{ic|out/}}。<br />
<br />
=== 重建ISO ===<br />
<br />
在修改之后重建 ISO 不被官方支持。但是,通过应用两个步骤很容易。首先,您必须删除工作目录中的锁定文件:<br />
<br />
# rm -v work/build.make_*<br />
<br />
此外,需要编辑脚本 {{ic|airootfs/root/customize_airootfs.sh}},并在 {{ic|useradd}} 行的开头添加 {{ic|id}} 命令,如下所示。否则,重建将在此处停止,因为要添加的用户已经存在 [https://bugs.archlinux.org/task/41865]。<br />
{{Style|typo?}}<br />
<br />
! id arch && useradd -m -p "" -g users -G "adm,audio,floppy,log,network,rfkill,scanner,storage,optical,power,wheel" -s /usr/bin/zsh arch<br />
<br />
同时删除创建的用户或符号链接,如 {{ic|/etc/sudoers}} 等持久性数据。<br />
<br />
{{Expansion|报告需要删除或重置的更多数据。}}<br />
<br />
通过编辑 pacstrap 脚本(位于 /bin/pacstrap)并在第 361 行更改以下内容,可以稍微加快重建速度:<br />
<br />
修改前:<br />
<br />
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then<br />
<br />
修改后:<br />
<br />
if ! pacman -r "$newroot" -Sy --needed "${pacman_args[@]}"; then<br />
<br />
这增加了初始引导的速度,因为它不必下载和安装任何已经安装的基础包。<br />
<br />
== 使用ISO ==<br />
<br />
有关各种选项,请参见 [[:Category:Getting_and_installing_Arch_(简体中文)#安装方式]] 部分。<br />
<br />
== 提示和技巧 ==<br />
<br />
=== 在沒有互联网连接的情况下安装 Archiso ===<br />
{{Move|Installation without Internet access|似乎这可以独立成一篇|Talk:Archiso}}<br />
{{Accuracy|可以将 Arch 镜像上提供的 “bootstrap” 映像直接提取到目标磁盘,而不是从 archiso 复制文件。 你将得到一个最小的系统,而不需要处理 archiso 修改。|Talk:Archiso}}<br />
<br />
若你想在没有互联网连接或者你不想重复下载你想要的包的情况下安装 archiso(例如[https://www.archlinux.org/download/ 官方的每月发布版]):<br />
<br />
首先,按照[[Installation guide (简体中文)|安装指南]],并跳过一些步骤(如[[Installation guide (简体中文)#连接到因特网|连接到因特网]]),直到[[Installation guide (简体中文)#安装基本系统|安装基本系统]]之前。<br />
<br />
==== 安装 archiso 到新的 root ====<br />
<br />
复制 Live 环境的''所有文件''到新的根目录,而不是使用 {{ic|pacstrap}}(这将尝试从远程存储库下载):<br />
# cp -ax / /mnt<br />
{{注意|The option ({{ic|-x}})排除了一些特殊目录,因为它们不应该被复制到新的根目录。}}<br />
<br />
然后,创建一些目录并复制内核映像到新的根,以保证新系统的完整性:<br />
<br />
# cp -vaT /run/archiso/bootmnt/arch/boot/$(uname -m)/vmlinuz /mnt/boot/vmlinuz-linux<br />
<br />
完成之后,请按[[Installation guide (简体中文)#Fstab]]所述生成 fstab。<br />
<br />
==== Chroot 并配置基本系统 ====<br />
<br />
下一步,chroot 到您新安装的系统:<br />
<br />
# arch-chroot /mnt /bin/bash<br />
<br />
请注意,在您配置 locale、键盘映射等之前,你仍然需要为了避免延续 Live 环境的轨迹——或者说对 archiso 所做的一些不适用于非 Live 环境的修改——而做一些事情。<br />
<br />
===== 恢复 journald 的配置 =====<br />
[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/root/customize_airootfs.sh#n19 archiso 的这个修改]会导致日志存储在 RAM 上——它意味着在重启后日志便会丢失。为了解决这个问题,执行:<br />
<br />
# sed -i 's/Storage=volatile/#Storage=auto/' /etc/systemd/journald.conf<br />
<br />
===== 删除特殊的 udev 规则 =====<br />
如果有任何有线网络接口,[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/etc/udev/rules.d/81-dhcpcd.rules udev 的这个规则]会自动启动dhcpcd。<br />
<br />
# rm /etc/udev/rules.d/81-dhcpcd.rules<br />
<br />
===== 禁用和移除 archiso 创建的服务 =====<br />
有一些服务文件是为 Live 环境创建的,请禁用这些服务并移除文件——因为它们对于新系统来说没必要存在:<br />
<br />
# systemctl disable pacman-init.service choose-mirror.service<br />
# rm -r /etc/systemd/system/{choose-mirror.service,pacman-init.service,etc-pacman.d-gnupg.mount,getty@tty1.service.d}<br />
# rm /etc/systemd/scripts/choose-mirror<br />
<br />
===== 移除 Live 环境的特殊脚本 =====<br />
在 live 系统中通过 archiso 脚本安装了一些脚本,这对于新系统是不必要的:<br />
<br />
# rm /etc/systemd/system/getty@tty1.service.d/autologin.conf<br />
# rm /root/{.automated_script.sh,.zlogin}<br />
# rm /etc/mkinitcpio-archiso.conf<br />
# rm -r /etc/initcpio<br />
<br />
===== 导入archlinux密钥 =====<br />
<br />
为了使用官方存储库,我们需要导入 archlinux 主密钥([[Pacman/Package signing (简体中文)#初始化密钥环]])。这一步通常是通过 pacstrap 完成的,但是可以通过<br />
<br />
# pacman-key --init<br />
# pacman-key --populate archlinux<br />
<br />
{{注意|Keyboard or mouse activity is needed to generate entropy and speed-up the first step.}}<br />
<br />
===== 配置系统 =====<br />
<br />
现在,您可以按照 [[Installation guide (简体中文)#配置系统]] 中跳过的步骤(设置语言环境,时区,主机名等),并通过创建初始 ramdisk 来完成安装,如 [[Installation guide (简体中文)#Initramfs]]。<br />
<br />
===== 启用图形登录(可选) =====<br />
<br />
如果使用像GDM这样的显示管理器,则可能需要将 systemd 默认目标从 multi-user.target 更改为允许图形登录的目标。<br />
# systemctl disable multi-user.target<br />
# systemctl enable graphical.target<br />
<br />
== 参阅 ==<br />
=== 文档和教程 ===<br />
* [https://projects.archlinux.org/archiso.git Archiso 项目页面]<br />
* [https://projects.archlinux.org/archiso.git/tree/docs 官方文档]<br />
<br />
=== 示例自定义模板 ===<br />
* [http://easy.open.and.free.fr/didjix/ A live DJ distribution powered by ArchLinux and built with Archiso]</div>
745275633
https://wiki.archlinux.org/index.php?title=Archiso_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=527135
Archiso (简体中文)
2018-06-21T01:00:19Z
<p>745275633: 527132</p>
<hr />
<div>[[Category:简体中文]]<br />
[[Category:Live Arch systems (简体中文)]]<br />
[[Category:Getting and installing Arch (简体中文)]]<br />
[[Category:Arch projects (简体中文)]]<br />
[[ar:Archiso]]<br />
[[el:Archiso]]<br />
[[en:Archiso]]<br />
[[es:Archiso]]<br />
[[fr:Archiso]]<br />
[[it:Archiso]]<br />
[[ja:Archiso]]<br />
[[nl:Archiso]]<br />
[[ru:Archiso]]<br />
[[sk:Archiso]]<br />
{{TranslationStatus (简体中文)|Archiso|2018-06-21|527132}}<br />
{{Related articles start (简体中文)}}<br />
{{Related|Remastering the Install ISO}}<br />
{{Related2|PXE (简体中文)|PXE}}<br />
{{Related2|Archboot (简体中文)|Archboot}}<br />
{{Related articles end}}<br />
'''Archiso''' 是一组 bash 脚本,它能够建立功能全面的 Arch Linux 的 Live CD/DVD/USB 映像。它同样是用来生成官方映像的工具,但由于它是一个非常通用的工具,所以它可以被用来生成从救援系统、安装盘,到特殊爱好的 Live CD/DVD/USB 系统——无人知晓还有其他什么。简单地说,如果要将 Arch 放在一条闪光的船上,它可以帮你做到这一点。Archiso 的核心以及灵魂是 ''mkarchiso''。它的所有选项都写在它的用法输出上,所以它的直接使用方法将不在这里讨论。相反,这篇 wiki 文章将导引你迅速建立你的 Live 介质。<br />
<br />
== 安装和配置 ==<br />
<br />
{{注意|<br />
* 您必须在 x86_64 上运行 Archiso。 [https://projects.archlinux.org/archiso.git/tree/docs/README.build#n67]<br />
* 以下操作请在ROOT权限下使用,在错误的权限下操作会造成一下问题。}}<br />
当你开始之前, [[install|安装]] {{Pkg|archiso}} 或 {{AUR|archiso-git}}。<br />
<br />
Archiso 附带2个预定义配置(profiles): ''releng'' 和''baseline''。<br />
<br />
* 如果您想要创建完全定制的 Live Arch Linux ,并预装所有您喜爱的程序和配置,使用 ''releng''。<br />
<br />
* 如果您只是想构建一个简易 Live 镜像,无预装软件并仅有基础配置,那么使用 ''baseline''。<br />
<br />
现在,将您选择的配置文件复制到目录(在下面的示例中为 ''archlive''),您可以在其中进行调整和构建。 执行以下操作,用 {{ic|releng}} 或 {{ic|baseline}} 替换 {{ic|'''profile'''}}。<br />
<br />
# cp -r /usr/share/archiso/configs/'''profile''' ''archlive''<br />
<br />
* 如果你使用 {{ic|releng}} 配置文件来创建一个完全自定义的镜像,那么你可以继续到:[[#配置 Live 介质]]。<br />
<br />
* 如果您使用 {{ic|baseline}} 配置文件创建一个简易映像,那么你不需要做任何定制,并可以直接继续到 [[#构建ISO]].<br />
<br />
== 配置 Live 介质 ==<br />
<br />
本节详细介绍该如何配置您将创建的映像,允许您定义哪些包以及配置将被您的 Live 映像所包含。<br />
在 [[#安装和配置]] 中创建的{{ic|''archlive''}}目录中有许多文件和目录; 我们只关注其中一部分,主要是<br />
* {{ic|packages.*}} - 在这里一行行列出你想要安装的包,和 <br />
* {{ic|airootfs}} 目录——这是一个覆盖目录,你将在这里完成所有的定制工作。<br />
一般来说,您在全新安装之后所执行的每个管理任务(不包括软件包安装)可以被写入这个脚本: {{ic|''archlive''/airootfs/root/customize_airootfs.sh}}。您必须从新环境的角度来写该脚本,所以脚本中的 / 代表方才被创建的 Live ISO 的根。<br />
<br />
=== 安装包 ===<br />
<br />
[[Edit|编辑]] {{ic|packages.i686}},{{ic|packages.x86_64}} 或 {{ic|packages.both}} 中的程序包列表,以指示要在 live 媒体上安装那些程序包。这里的后缀表示包可用的架构。<br />
<br />
{{Note|如果要在 Live CD 中使用 [[窗口管理器]],则必须添加必要且正确的 [[video drivers]],否则 WM 可能在加载时冻结。}}<br />
<br />
==== 自定义本地库 ====<br />
<br />
{{Merge|Pacman/Tips_and_tricks_(简体中文)#自建本地仓库|移动一般信息 (如:仓库目录树) 到主文章.|Talk:Archiso}}<br />
<br />
为了准备自定义包或是从 [[Arch User Repository (简体中文)|AUR]]/[[Arch Build System (简体中文)|ABS]] 安装包,你也可以 [[Custom local repository|创建自定义本地资源库]]。如果您希望支持多种体系结构,则应采取预防措施来防止发生错误。每个架构应该有自己的目录树:<br />
<br />
{{hc|$ tree ~/customrepo/ {{!}} sed "s/$(uname -m)/<arch>/g"|<br />
/home/archie/customrepo/<br />
└── <arch><br />
├── customrepo.db -> customrepo.db.tar.xz<br />
├── customrepo.db.tar.xz<br />
├── customrepo.files -> customrepo.files.tar.xz<br />
├── customrepo.files.tar.xz<br />
└── personal-website-git-b99cce0-1-<arch>.pkg.tar.xz<br />
<br />
1 directory, 5 files<br />
}}<br />
<br />
如此后,您可以添加您的仓库——把下面的句子加入 {{ic|~/archlive/pacman.conf}},并置于其他仓库条目上面(优先级最高):<br />
<br />
{{hc|~/archlive/pacman.conf|...<br />
# custom repository<br />
[customrepo]<br />
SigLevel <nowiki>=</nowiki> Optional TrustAll<br />
Server <nowiki>=</nowiki> file:///home/'''user'''/customrepo/$arch<br />
...}}<br />
<br />
''repo-add'' 可执行文件检查软件包是否合适。如果不,那么你将得到与此类似的错误消息:<br />
<br />
==> ERROR: '/home/archie/customrepo/<arch>/foo-<arch>.pkg.tar.xz' does not have a valid database archive extension.<br />
<br />
==== 避免安装属于base组的包 ====<br />
<br />
默认情况下,{{ic|/usr/bin/mkarchiso}}——一个被 {{ic|~/archlive/build.sh}} 使用的脚本——会调用 {{Pkg|arch-install-scripts}} 中一个名为 {{ic|pacstrap}} 的程序,且在调用时不使用 {{ic|-i}} 标志——这将使 [[Pacman]] 在安装过程中不等待用户输入。<br />
<br />
当 base 组软件包被加入黑名单——把它们写到 {{ic|~/archlive/pacman.conf}} 中的 {{ic|IgnorePkg}} 行——时,[[Pacman]] 会询问是否仍然安装它们——意味着如果用户输入被跳过,它们就会被安装。为了避免安装这些包,这里有一些选择:<br />
<br />
* '''丑陋'''方案(Dirty):在 {{ic|/usr/bin/mkarchiso}} 中每次调用 {{ic|pacstrap}} 的行上加入 {{ic|i}} 标志。<br />
<br />
* '''整洁'''方案(Clean):创建 {{ic|/usr/bin/mkarchiso}} 的一份复制。在该复制中增加此标志,并修改 {{ic|~/archlive/build.sh}} 以使其调用修改过的 mkarchiso 脚本。<br />
<br />
* '''高级'''方案(Advanced): 在 {{ic|~/archlive/build.sh}} 中创建一个函数,该函数将在基础安装结束后显式移除那些包。若这样做,可以免去在安装过程中多次按回车键的麻烦。<br />
<br />
==== Installing packages from multilib ====<br />
<br />
要从 [[Multilib (简体中文)|Multilib]] 资源库安装软件包,您必须创建两个 pacman 配置文件:一个用于 x86_64,一个用于 i686。 将 {{ic|pacman.conf}} 复制到 {{ic|pacmanx86_64.conf}} 和 {{ic|pacmani686.conf}}。 取消注释以下行以{{ic|pacmanx86_64.conf}} 中启用 ''multilib''):<br />
<br />
{{hc|pacmanx86_64.conf|2=<br />
[multilib]<br />
SigLevel = PackageRequired<br />
Include = /etc/pacman.d/mirrorlist<br />
}}<br />
<br />
然后用编辑器编辑 {{ic|build.sh}}。 把:<br />
<br />
{{hc|build.sh|<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in i686 x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
done<br />
<br />
run_once make_packages_efi<br />
<br />
for arch in i686 x86_64; do<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
改为:<br />
<br />
{{hc|build.sh|<br />
cp -v releng/pacmanx86_64.conf releng/pacman.conf<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
<br />
echo make_pacman_conf i686<br />
cp -v releng/pacmani686.conf releng/pacman.conf<br />
cp -v releng/pacmani686.conf ${work_dir}/pacman.conf<br />
<br />
<br />
for arch in i686; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
这样,x86_64 和 i686 的软件包将安装有自己的pacman配置文件。<br />
<br />
=== 向映像里添加文件===<br />
<br />
{{注意|你必须使用 root 权限来完成这件事,不要改变任何你复制过来的文件的所有权,airootfs 中的'''所有'''文件必须为 root 用户所有。适当的所有制将在不久被解决。}}<br />
<br />
airootfs 目录作为要覆盖的文件,把它看作是在当前系统上的根目录'/',所以你在这个目录中放置的任何文件都将在开机时被复制。<br />
<br />
所以,如果你在当前系统上有一组 iptables 脚本且想要在 Live 映像上使用,请这样复制:<br />
# cp -r /etc/iptables ~/archlive/airootfs/etc<br />
<br />
在用户 home 文件夹里放置文件的方法有些许不同。不要把它们放在 {{ic|airootfs/home}},而是在 airootfs/ 里创建 skel 目录并将其放置在那里。然后我们会将相关命令添加到 {{ic|customize_airootfs.sh}}——我们要使用它在引导时复制文件以及梳理权限。<br />
<br />
首先,创建 skel 目录<br />
# mkdir ~/archlive/airootfs/etc/skel<br />
<br />
现在,复制 'home' 的文件到 skel 目录。例如,对于 {{ic|.bashrc}}:<br />
# cp ~/.bashrc ~/archlive/airootfs/etc/skel/<br />
<br />
当 {{ic|~/archlive/airootfs/root/customize_airootfs.sh}} 被执行,并且一个新用户已被创建, skel 目录中的文件将自动被复制到新的 home 文件夹中,并被设置正确的权限。<br />
<br />
类似地,需要注意位于层次结构下方的特殊配置文件。作为示例,配置文件 {{ic|/etc/X11/xinit/xinitrc}} 位于可能被安装包覆盖的路径上。要将 {{ic|xinitrc}} 的配置文件放在 {{ic|~/archlive/airootfs/etc/skel/}} ,然后修改 {{ic|customize_airootfs.sh}} 以适当地移动。<br />
<br />
=== 引导器 ===<br />
<br />
默认的文件应该可以正常工作,所以你应该不需要去碰它。<br />
<br />
由于 isolinux 的模块化性质,你能够使用很多插件,因为所有 *.c32 都被复制且可以可供您使用。看看[http://syslinux.zytor.com/wiki/index.php/SYSLINUX syslinux 官方网站] 和 [https://projects.archlinux.org/archiso.git/tree/configs/syslinux-iso/boot-files Archiso Git Repo]。使用所述插件,便有可能做出更具视觉吸引力及复杂的菜单。参见 [http://syslinux.zytor.com/wiki/index.php/Comboot/menu.c32 此处]。<br />
<br />
=== 登录管理器 ===<br />
<br />
通过启用您登录管理器的 [[Systemd (简体中文)|systemd]] 服务来做到在引导时启动 X 。如果您知道哪一个 .service 文件需要软链接,那就太好了。如果不知道,你也可以轻松找出——如果你在创建 iso 所用的系统上使用相同的程序的话。只需使用:<br />
<br />
$ ls -l /etc/systemd/system/display-manager.service<br />
<br />
现在在 {{ic|~/archlive/airootfs/etc/systemd/system}} 中创建相同的软链接。如 LXDM:<br />
<br />
# ln -s /usr/lib/systemd/system/lxdm.service ~/archlive/airootfs/etc/systemd/system/display-manager.service<br />
<br />
这将使您在 live 系统启用在系统上启动 LXDM。(This will enable LXDM at system start on your live system.)<br />
<br />
或者,您也可以启用 {{ic|airootfs/root/customize_airootfs.sh}} 中的服务以及其中启用的其他服务。<br />
<br />
如果您希望图形环境在启动过程中自动启动,请确保编辑 {{ic|airootfs/root/customize_airootfs.sh}} 并替换<br />
systemctl set-default multi-user.target<br />
为<br />
systemctl set-default graphical.target<br />
<br />
=== 改变自动登录状态 ===<br />
<br />
Getty 的自动登录配置位于 {{ic|airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf}}。 <br />
<br />
您可以修改这个文件来更改自动登录用户:<br />
<br />
[Service]<br />
ExecStart=<br />
ExecStart=-/sbin/agetty --autologin '''isouser''' --noclear %I 38400 linux<br />
<br />
或者干脆删除它来禁用自动登录。<br />
<br />
== 构建ISO ==<br />
<br />
现在,你已经准备好把你的文件转换成 .iso,以便可以刻录到 CD 或 USB:<br />
<br />
首先创建 {{ic|out/}} 目录(可选,如果没有的话 build.sh 将会创建它),<br />
<br />
# mkdir ~/archlive/out/<br />
<br />
然后在 {{ic|~/archlive}} 里面执行:<br />
<br />
# ./build.sh -v<br />
<br />
该脚本将现在下载并安装你指定的软件包到 {{ic|work/*/airootfs}},创建内核和 init 映像(initramfs),应用您的修改,并最终把 ISO 建立到 {{ic|out/}}。<br />
<br />
=== 重建ISO ===<br />
<br />
在修改之后重建 ISO 不被官方支持。但是,通过应用两个步骤很容易。首先,您必须删除工作目录中的锁定文件:<br />
<br />
# rm -v work/build.make_*<br />
<br />
此外,需要编辑脚本 {{ic|airootfs/root/customize_airootfs.sh}},并在 {{ic|useradd}} 行的开头添加 {{ic|id}} 命令,如下所示。否则,重建将在此处停止,因为要添加的用户已经存在 [https://bugs.archlinux.org/task/41865]。<br />
{{Style|typo?}}<br />
<br />
! id arch && useradd -m -p "" -g users -G "adm,audio,floppy,log,network,rfkill,scanner,storage,optical,power,wheel" -s /usr/bin/zsh arch<br />
<br />
同时删除创建的用户或符号链接,如 {{ic|/etc/sudoers}} 等持久性数据。<br />
<br />
{{Expansion|报告需要删除或重置的更多数据。}}<br />
<br />
通过编辑 pacstrap 脚本(位于 /bin/pacstrap)并在第 361 行更改以下内容,可以稍微加快重建速度:<br />
<br />
修改前:<br />
<br />
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then<br />
<br />
修改后:<br />
<br />
if ! pacman -r "$newroot" -Sy --needed "${pacman_args[@]}"; then<br />
<br />
这增加了初始引导的速度,因为它不必下载和安装任何已经安装的基础包。<br />
<br />
== 使用ISO ==<br />
<br />
有关各种选项,请参见 [[:Category:Getting_and_installing_Arch_(简体中文)#安装方式]] 部分。<br />
<br />
== 提示和技巧 ==<br />
<br />
=== 在沒有互联网连接的情况下安装 Archiso ===<br />
{{Move|Installation without Internet access|似乎这可以独立成一篇|Talk:Archiso}}<br />
{{Accuracy|可以将 Arch 镜像上提供的 “bootstrap” 映像直接提取到目标磁盘,而不是从 archiso 复制文件。 你将得到一个最小的系统,而不需要处理 archiso 修改。|Talk:Archiso}}<br />
<br />
若你想在没有互联网连接或者你不想重复下载你想要的包的情况下安装 archiso(例如[https://www.archlinux.org/download/ 官方的每月发布版]):<br />
<br />
首先,按照[[Installation guide (简体中文)|安装指南]],并跳过一些步骤(如[[Installation guide (简体中文)#连接到因特网|连接到因特网]]),直到[[Installation guide (简体中文)#安装基本系统|安装基本系统]]之前。<br />
<br />
==== 安装 archiso 到新的 root ====<br />
<br />
复制 Live 环境的''所有文件''到新的根目录,而不是使用 {{ic|pacstrap}}(这将尝试从远程存储库下载):<br />
# cp -ax / /mnt<br />
{{注意|The option ({{ic|-x}})排除了一些特殊目录,因为它们不应该被复制到新的根目录。}}<br />
<br />
然后,创建一些目录并复制内核映像到新的根,以保证新系统的完整性:<br />
<br />
# cp -vaT /run/archiso/bootmnt/arch/boot/$(uname -m)/vmlinuz /mnt/boot/vmlinuz-linux<br />
<br />
完成之后,请按[[Installation guide (简体中文)#Fstab]]所述生成 fstab。<br />
<br />
==== Chroot 并配置基本系统 ====<br />
<br />
下一步,chroot 到您新安装的系统:<br />
<br />
# arch-chroot /mnt /bin/bash<br />
<br />
请注意,在您配置 locale、键盘映射等之前,你仍然需要为了避免延续 Live 环境的轨迹——或者说对 archiso 所做的一些不适用于非 Live 环境的修改——而做一些事情。<br />
<br />
===== 恢复 journald 的配置 =====<br />
[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/root/customize_airootfs.sh#n19 archiso 的这个修改]会导致日志存储在 RAM 上——它意味着在重启后日志便会丢失。为了解决这个问题,执行:<br />
<br />
# sed -i 's/Storage=volatile/#Storage=auto/' /etc/systemd/journald.conf<br />
<br />
===== 删除特殊的 udev 规则 =====<br />
如果有任何有线网络接口,[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/etc/udev/rules.d/81-dhcpcd.rules udev 的这个规则]会自动启动dhcpcd。<br />
<br />
# rm /etc/udev/rules.d/81-dhcpcd.rules<br />
<br />
===== 禁用和移除 archiso 创建的服务 =====<br />
有一些服务文件是为 Live 环境创建的,请禁用这些服务并移除文件——因为它们对于新系统来说没必要存在:<br />
<br />
# systemctl disable pacman-init.service choose-mirror.service<br />
# rm -r /etc/systemd/system/{choose-mirror.service,pacman-init.service,etc-pacman.d-gnupg.mount,getty@tty1.service.d}<br />
# rm /etc/systemd/scripts/choose-mirror<br />
<br />
===== 移除 Live 环境的特殊脚本 =====<br />
在 live 系统中通过 archiso 脚本安装了一些脚本,这对于新系统是不必要的:<br />
<br />
# rm /etc/systemd/system/getty@tty1.service.d/autologin.conf<br />
# rm /root/{.automated_script.sh,.zlogin}<br />
# rm /etc/mkinitcpio-archiso.conf<br />
# rm -r /etc/initcpio<br />
<br />
===== 导入archlinux密钥 =====<br />
<br />
为了使用官方存储库,我们需要导入 archlinux 主密钥([[Pacman/Package signing (简体中文)#初始化密钥环]])。这一步通常是通过 pacstrap 完成的,但是可以通过<br />
<br />
# pacman-key --init<br />
# pacman-key --populate archlinux<br />
<br />
{{注意|Keyboard or mouse activity is needed to generate entropy and speed-up the first step.}}<br />
<br />
===== 配置系统 =====<br />
<br />
现在,您可以按照 [[Installation guide (简体中文)#配置系统]] 中跳过的步骤(设置语言环境,时区,主机名等),并通过创建初始 ramdisk 来完成安装,如 [[Installation guide (简体中文)#Initramfs]]。<br />
<br />
===== 启用图形登录(可选) =====<br />
<br />
如果使用像GDM这样的显示管理器,则可能需要将 systemd 默认目标从 multi-user.target 更改为允许图形登录的目标。<br />
# systemctl disable multi-user.target<br />
# systemctl enable graphical.target<br />
<br />
== 参阅 ==<br />
=== 文档和教程 ===<br />
* [https://projects.archlinux.org/archiso.git Archiso 项目页面]<br />
* [https://projects.archlinux.org/archiso.git/tree/docs 官方文档]<br />
<br />
=== 示例自定义模板 ===<br />
* [http://easy.open.and.free.fr/didjix/ A live DJ distribution powered by ArchLinux and built with Archiso]</div>
745275633
https://wiki.archlinux.org/index.php?title=Very_Secure_FTP_Daemon_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=527011
Very Secure FTP Daemon (简体中文)
2018-06-20T04:15:17Z
<p>745275633: 526972(tip to check the original packet)</p>
<hr />
<div>[[Category:FTP servers (简体中文)]]<br />
[[cs:Very Secure FTP Daemon]]<br />
[[en:Very Secure FTP Daemon]]<br />
[[es:Very Secure FTP Daemon]]<br />
[[it:Very Secure FTP Daemon]]<br />
[[ja:Very Secure FTP Daemon]]<br />
[[ru:Very Secure FTP Daemon]]<br />
{{TranslationStatus (简体中文)|Very Secure FTP Daemon|2018-05-02|526972}}<br />
[https://security.appspot.com/vsftpd.html vsftpd] (“Very Secure FTP Daemon“) 是一个为 UNIX 类系统开发的轻量,稳定和安全的 FTP 服务器端。<br />
== 安装 ==<br />
[[安装]] {{pkg|vsftpd}} 然后 [[Systemd (简体中文)#使用单元|启动/启用]] {{ic|vsftpd.service}} 守护程序。<br />
<br />
使用 [[Wikipedia:xinetd|xinetd]] 监视和控制 vsftpd 连接,请参见 [[#使用 xinetd]]。<br />
<br />
== 配置 ==<br />
vsftpd 的大多数配置都可以通过编辑 {{ic|/etc/vsftpd.conf}} 文件实现。 该文件本身自带大量注释说明,所以这一章节只就一些重要的配置予以说明。有关所有可用选项和文档,请参阅 {{man|5|vsftpd.conf}} 手册页。默认情况下,由 {{ic|/srv/ftp}} 提供文件。<br />
<br />
允许的连接 {{ic|/etc/hosts.allow}}:<br />
# 允许所有连接<br />
vsftpd: ALL<br />
# IP 地址范围<br />
vsftpd: 10.0.0.0/255.255.255.0<br />
<br />
=== 允许上传 ===<br />
需要将 {{ic|/etc/vsftpd.conf}} 中的 {{ic|write_enable}} 值设为 YES,以便允许修改文件系统(如上传):<br />
write_enable=YES<br />
<br />
=== 本地用户登录 ===<br />
需要修改 {{ic|/etc/vsftpd.conf}} 中的如下值,以便允许 {{ic|/etc/passwd}} 中的用户登录:<br />
local_enable=YES<br />
<br />
=== 匿名用户登录 ===<br />
以下行控制匿名用户是否可以登录。默认情况下,匿名登录只能从 {{ic|/srv/ftp}} 下载:<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
...<br />
# 允许匿名 FTP? (当心 - 默认情况下允许除非您将其注释)。<br />
anonymous_enable=YES<br />
...<br />
# 取消注释以允许匿名 FTP 用户上传文件。<br />
# 只有上述全局写入被激活,才会有效果。<br />
# 另外,你显然需要创建 FTP 用户有写权限的目录。<br />
# anon_upload_enable=YES<br />
#<br />
# 如果您希望匿名 FTP 用户能够创建新目录,请取消注释。<br />
# anon_mkdir_write_enable=YES<br />
...<br />
}}<br />
<br />
您也可以添加以下选项(详见 {{man|5|vsftpd.conf}}):<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
# 匿名登录不需要密码<br />
no_anon_password=YES<br />
<br />
# 匿名客户端的最大传输速率(以 Bytes/秒 为单位)<br />
anon_max_rate=30000<br />
<br />
# 用于匿名登录的目录<br />
anon_root=/example/directory/<br />
}}<br />
<br />
=== Chroot 限制 ===<br />
为了阻止用户离开家目录,可以设置 chroot 环境。要启用此功能,请在 {{ic|/etc/vsftpd.conf}} 中添加以下行:<br />
chroot_list_enable=YES<br />
chroot_list_file=/etc/vsftpd.chroot_list<br />
{{ic|chroot_list_file}} 定义了被 chroot 限制的用户列表。<br />
<br />
对于更严格的环境,请指定以下行:<br />
chroot_local_user=YES<br />
这将默认为所有用户启用 chroot 环境。 在这种情况下,{{ic|chroot_list_file}} 定义了'''不受''' chroot 限制的用户列表。<br />
<br />
=== 限制用户登录 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加以下两行来阻止特定用户登录FTP服务器:<br />
userlist_enable=YES<br />
userlist_file=/etc/vsftpd.user_list<br />
{{ic|userlist_file}} 文件列出'''不允许'''登录的用户。<br />
<br />
如果您只想允许特定的用户登录,请添加以下行:<br />
userlist_deny=NO<br />
此时 {{ic|userlist_file}} 文件指定'''允许'''登录的用户。<br />
<br />
=== 限制连接数 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加如下信息来限制本地用户的数据传输速率:<br />
local_max_rate=1000000 # 最大数据传输速率(单位: Bytes/秒)<br />
max_clients=50 # 可以同时连接的最大客户端数<br />
max_per_ip=2 # 每个 IP 允许的最大连接数<br />
<br />
=== 使用 xinetd ===<br />
Xinetd 提供增强的监控和控制连接功能。对于基本的可以工作的 vsftpd-server 是不必要的<br />
<br />
安装 vsftpd 将会添加必要的服务文件 {{ic|/etc/xinetd.d/vsftpd}},默认情况下,服务被禁用。<br />
<br />
启用ftp服务:<br />
<pre><br />
service ftp<br />
{<br />
socket_type = stream<br />
wait = no<br />
user = root<br />
server = /usr/sbin/vsftpd<br />
log_on_success += HOST DURATION<br />
log_on_failure += HOST<br />
disable = no<br />
}<br />
</pre><br />
<br />
如果您将 vsftpd 守护程序设置为以独立模式运行,而不是启动 vsftpd 守护程序和 [[Systemd (简体中文)#使用单元|启用]] {{ic|xinetd.service}},请在 {{ic|/etc/vsftpd.conf}} 中进行以下更改:<br />
listen=NO<br />
否则连接将失败:<br />
500 OOPS: could not bind listening IPv4 socket<br />
<br />
=== 使用 SSL/TLS 来保护 FTP ===<br />
首先,您需要一个 ''X.509 SSL/TLS'' 证书才能使用TLS。如果您没有,可以轻松生成如下的自签名证书:<br />
<br />
# cd /etc/ssl/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout vsftpd.pem -out vsftpd.pem<br />
# chmod 600 vsftpd.pem<br />
<br />
你会被问到关于你公司的问题,等等。由于你的证书不是一个可信任的,所填的内容并不重要,它只会被用于加密。要使用可信证书,您可以从 [[Let's Encrypt]] 这样的证书颁发机构获得证书。<br />
<br />
然后,编辑配置文件:<br />
{{hc|/etc/vsftpd.conf|2=ssl_enable=YES<br />
<br />
# 如果你接受匿名连接你可能要启用这个设置<br />
# allow_anon_ssl=NO<br />
<br />
# 默认情况下所有非匿名登录被迫使用 SSL 发送和接收密码和数据,设置为 NO,以允许不安全的连接<br />
force_local_logins_ssl=NO<br />
force_local_data_ssl=NO<br />
<br />
# 选择你想要的<br />
force_local_logins_ssl=YES<br />
<br />
# TLS v1 协议连接是首选,默认情况下启用此模式,而禁用 SSL v2 和 v3 时,以下设置是默认设置,不需要更改,除非您特别需要 SSL<br />
# ssl_tlsv1=YES<br />
# ssl_sslv2=NO<br />
# ssl_sslv3=NO<br />
# 提供您的证书和私钥注释的路径,它们可以包含在同一个文件中或不同的文件中<br />
rsa_cert_file=/etc/ssl/certs/vsftpd.pem<br />
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem<br />
<br />
# 此设置默认设置为 YES,并要求所有数据连接都显示会话重用,这证明他们知道控制通道的秘密。这种方式更安全,但不受许多 FTP 客户端的支持,为了更好的兼容性而设置为 NO<br />
require_ssl_reuse=NO<br />
}}<br />
<br />
=== 在被动模式下解析主机名 ===<br />
要覆盖 vsftpd 在被动模式下通过服务器的主机名发布的 IP 地址,并在启动时解析 DNS,在 {{ic|/etc/vsftpd.conf}} 中增加以下两行:<br />
pasv_addr_resolve=YES<br />
pasv_address=''yourdomain.org''<br />
<br />
{{注意|<br />
* 对于动态DNS,定期更新 ''pasv_address'' 并重新启动服务器是不必要的,因为它有时可以被读取。<br />
* 您可能无法通过 LAN 以被动模式连接,在这种情况下,请尝试使用主动模式而不是LAN客户端。<br />
}}<br />
<br />
=== 端口配置 ===<br />
可能需要调整默认FTP侦听端口和被动模式数据端口:<br />
<br />
* 对于暴露于 Web 的 FTP 服务器,为了减少服务器受到攻击的可能性,可以将侦听端口改为除标准端口 21 以外的端口。<br />
* 要限制被动模式将打开的端口,可以提供一个范围。<br />
这些端口配置更改可以使用以下几行完成:<br />
{{hc|/etc/vsftpd.conf|2=<br />
listen_port=2211<br />
pasv_min_port=5000<br />
pasv_max_port=5003<br />
}}<br />
<br />
=== 配置 iptables ===<br />
通常,运行FTP守护进程的服务器受 [[Iptables (简体中文)|iptables]] 防火墙的保护。要允许访问FTP服务器,需要打开相应的端口,如:<br />
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT<br />
本文不会提供有关如何设置iptables的任何说明,但这里是一个例子:[[Simple stateful firewall (简体中文)|Simple stateful firewall]]。<br />
<br />
有一些内核模块需要在这里引用的 iptables 正确的处理 FTP 连接。 其中特别是 ''nf_conntrack_ftp''。这是需要的,因为 FTP 使用给定的 ''listen_port''(默认为21) 仅用于命令,所有的数据传输都是通过不同的端口完成的。这些端口由 FTP 守护程序为每个会话随机选择(也取决于是使用主动还是被动模式)。要告诉 iptables 应该接受端口上的数据包,需要 ''nf_conntrack_ftp''。要在启动时自动加载,请在 {{ic|/etc/modules-load.d}} 中创建新文件,例如:<br />
# echo nf_conntrack_ftp > /etc/modules-load.d/nf_conntrack_ftp.conf<br />
<br />
如果内核 >= 4.7,您需要通过 ''sysctl'' 设置 ''net.netfilter.nf_conntrack_helper = 1'',如:<br />
# echo net.netfilter.nf_conntrack_helper=1 > /etc/sysctl.d/70-conntrack.conf<br />
或使用<br />
# iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp<br />
<br />
== 小技巧 ==<br />
=== 虚拟用户的 PAM 认证 ===<br />
由于 [[PAM (简体中文)]] 不再提供 {{ic|pam_userdb.so}} 另一个简单的方法是使用 {{AUR|libpam_pwdfile}}。对于具有许多用户的环境,另一个选项可能是 {{AUR|pam_mysql}} {{Broken package link|{{aur-mirror|pam_mysql}}}}。但是,本节仅限于解释如何通过 {{ic|pam_pwdfile.so}} 配置 chroot 环境和身份验证。<br />
<br />
在此示例中,我们创建目录 {{ic|vsftpd}}:<br />
# mkdir /etc/vsftpd<br />
<br />
创建和存储用户名和密码的一个选择是使用 Apache 的生成器 htpasswd:<br />
# htpasswd -c /etc/vsftpd/.passwd<br />
上述命令的一个问题是 vsftpd 可能无法读取生成的 MD5 散列密码。如果使用 -d 开关运行相同的命令,则使用 crypt() 加密,vsftpd 的密码变得可读,但其缺点是安全性较低,密码限制为8个字符。 Openssl 可用于使用算法1生成基于 MD5 的 BSD 密码:<br />
# openssl passwd -1<br />
<br />
无论那个解决方案 {{ic|/etc/vsftpd/.passwd}} 应该如下所示:<br />
username1:hashed_password1<br />
username2:hashed_password2<br />
...<br />
<br />
接下来,您需要使用 {{ic|pam_pwdfile.so}} 和生成的 {{ic|/etc/vsftpd/.passwd}} 文件创建 PAM 服务。在本例中,我们为 ''vsftpd'' 创建了一个 PAM 策略,其中包含以下内容:<br />
{{hc|/etc/pam.d/vsftpd|auth required pam_pwdfile.so pwdfile /etc/vsftpd/.passwd<br />
account required pam_permit.so}}<br />
<br />
现在是为虚拟用户创建一个 home 的时候了。在示例中,决定用 {{ic|/srv/ftp}} 为虚拟用户托管数据,这也反映了 Arch 的默认目录结构。首先创建 virtual 用户并使 {{ic|/srv/ftp}} 成为它的 home:<br />
# useradd -d /srv/ftp virtual<br />
让 virtual 成为所有者<br />
# chown virtual:virtual /srv/ftp<br />
<br />
一个基本的没有私人文件夹配置的 /etc/vsftpd,默认的虚拟用户的 home 文件夹:<br />
# 指向正确的 PAM 服务文件<br />
pam_service_name=vsftpd<br />
write_enable=YES<br />
hide_ids=YES<br />
listen=YES<br />
connect_from_port_20=YES<br />
anonymous_enable=NO<br />
local_enable=YES<br />
dirmessage_enable=YES<br />
xferlog_enable=YES<br />
chroot_local_user=YES<br />
guest_enable=YES<br />
guest_username=virtual<br />
virtual_use_local_privs=YES<br />
<br />
您自己的设置可能不需要一些参数。如果您希望 chroot 环境可写,您将需要将以下内容添加到配置文件中:<br />
allow_writeable_chroot = YES<br />
否则 vsftpd 的默认安全设置会抱怨,如果它检测到 chroot 是可写的。<br />
<br />
[[Start]] {{ic|vsftpd.service}}。<br />
<br />
您现在应该可以使用存储在 {{ic|/etc/vsftpd/.passwd}} 中的任何用户和密码从FTP客户端登录。<br />
<br />
==== 为虚拟用户创建私有目录 ====<br />
首先创建用户文件夹<br />
# mkdir /srv/ftp/user1<br />
# mkdir /srv/ftp/user2<br />
# chown virtual:virtual /srv/ftp/user?/<br />
<br />
随后, 在 {{ic|/etc/vsftpd.conf}} 增加如下行:<br />
local_root=/srv/ftp/$USER<br />
user_sub_token=$USER<br />
<br />
== 问题解决 ==<br />
<br />
=== vsftpd: no connection (Error 500) with recent kernels (3.5 and newer) and .service ===<br />
如果在列出具有多个文件的目录时遇到故障,将其添加到您的 {{ic|/etc/vsftpd.conf}}:<br />
seccomp_sandbox=NO<br />
<br />
=== vsftpd: refusing to run with writable root inside chroot() ===<br />
从 vsftpd 2.3.5 开始,用户被锁定的 chroot 目录不可写。这是为了防止安全漏洞。<br />
<br />
允许上传的安全方法是保持 chroot 启用,并配置您的 FTP 目录。<br />
<br />
local_root=/srv/ftp/user<br />
<br />
# mkdir -p /srv/ftp/user/upload<br />
#<br />
# chmod 550 /srv/ftp/user<br />
# chmod 750 /srv/ftp/user/upload<br />
<br />
如果你必须这么做:<br />
<br />
您可以将其放入您的 {{ic|/etc/vsftpd.conf}} 以解决此安全性增强(自vsftpd 3.0.0;来自 [http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/ Fixing 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()]):<br />
allow_writeable_chroot=YES<br />
或者:<br />
<br />
安装 {{AUR|vsftpd-ext}} {{Broken package link|{{aur-mirror|vsftpd-ext}}}} 并在 conf 文件中设置<br />
allow_writable_chroot=YES<br />
<br />
=== FileZilla Client: GnuTLS error -8 -15 -110 when connecting via SSL ===<br />
vsftpd 尝试在 SSL 会话中显示纯文本错误消息。为了进行调试,暂时禁用加密,您将看到正确的错误消息。[http://ramblings.linkerror.com/?p=45] [https://serverfault.com/questions/772494/vsftpd-list-causes-gnutls-error-15]<br />
<br />
=== vsftpd.service fails to run on boot ===<br />
如果您启用了 {{ic|vsftpd.service}},并且无法在启动时运行,请确保它已在服务文件中设置为在 {{ic|network.target}} 之后加载:<br />
<br />
{{hc|/usr/lib/systemd/system/vsftpd.service|2=<br />
[Unit]<br />
Description=vsftpd daemon<br />
After=network.target}}<br />
<br />
=== Passive mode replies with the local IP address to a remote connection ===<br />
<br />
如果 vsftpd 将本地地址返回给远程连接,如:<br />
227 Entering Passive Mode (192,168,0,19,192,27).<br />
<br />
It may be that the FTP server is behind a NAT router and while some devices monitor FTP connections and dynamically replace the IP address specification for packets containing the PASV response, some do not.<br />
可能是 FTP 服务器位于 NAT 路由器后面,而有些设备会监视 FTP 连接并动态替换包含 PASV 响应的数据包的 IP 地址规范,但有些设备却不会。<br />
<br />
使用以下命令在 vsftpd 配置中指示外部IP地址:<br />
pasv_address=''externalIPaddress''<br />
<br />
或者可选地:<br />
pasv_addr_resolve=YES<br />
pasv_address=''my.domain.name''<br />
<br />
如果在更改后无法进行内部连接,则可能需要运行 2 个 vsftpd,一个用于内部连接,一个用于外部连接。<br />
<br />
{{提示|要找出 NAT 路由器是否拦截 PASV 响应并用外部 IP 替换内部 IP,可以在 TLS 模式下检查客户端的服务器响应。加密的数据包不能被路由器识别并且未被修改。}}<br />
<br />
=== ipv6 only fails with: 500 OOPS: run two copies of vsftpd for IPv4 and IPv6 ===<br />
你很有可能已经注释了这一行<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
#listen=YES<br />
#<br />
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6<br />
# sockets, you must run two copies of vsftpd with two configuration files.<br />
# Make sure, that one of the listen options is commented !!<br />
listen_ipv6=YES<br />
<br />
而不是设置<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
listen=NO<br />
<br />
=== vsftpd 连接在使用 nis 的机器上失败: yp_bind_client_create_v2: RPC: Unable to send ===<br />
as mentioned on the vsftpd faq page, "...built-in sandboxing uses network isolation on Linux. This<br />
may be interfering with any module that needs to use the network to perform operations or lookups"<br />
正如在 vsftpd fap 页面上提到的那样,“...内置沙盒使用 linux 上的网络隔离可能会干扰任何需要使用网络执行操作或查找的模块”<br />
<br />
将这个未公开的行添加到你的 {{ic|/etc/vsftpd.conf}}<br />
isolate_network=NO<br />
<br />
== 更多资源 ==<br />
* [http://vsftpd.beasts.org/ vsftpd official homepage]<br />
* [http://vsftpd.beasts.org/vsftpd_conf.html vsftpd.conf man page]<br />
* [https://security.appspot.com/vsftpd/FAQ.txt vsftpd FAQ]</div>
745275633
https://wiki.archlinux.org/index.php?title=Very_Secure_FTP_Daemon_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=526699
Very Secure FTP Daemon (简体中文)
2018-06-18T01:07:58Z
<p>745275633: 526631 Passive mode replies with the local IP address to a remote connection: more explanations</p>
<hr />
<div>[[Category:FTP servers (简体中文)]]<br />
[[cs:Very Secure FTP Daemon]]<br />
[[en:Very Secure FTP Daemon]]<br />
[[es:Very Secure FTP Daemon]]<br />
[[it:Very Secure FTP Daemon]]<br />
[[ja:Very Secure FTP Daemon]]<br />
[[ru:Very Secure FTP Daemon]]<br />
{{TranslationStatus (简体中文)|Very Secure FTP Daemon|2018-05-02|526631}}<br />
[https://security.appspot.com/vsftpd.html vsftpd] (“Very Secure FTP Daemon“) 是一个为 UNIX 类系统开发的轻量,稳定和安全的 FTP 服务器端。<br />
== 安装 ==<br />
[[安装]] {{pkg|vsftpd}} 然后 [[Systemd (简体中文)#使用单元|启动/启用]] {{ic|vsftpd.service}} 守护程序。<br />
<br />
使用 [[Wikipedia:xinetd|xinetd]] 监视和控制 vsftpd 连接,请参见 [[#使用 xinetd]]。<br />
<br />
== 配置 ==<br />
vsftpd 的大多数配置都可以通过编辑 {{ic|/etc/vsftpd.conf}} 文件实现。 该文件本身自带大量注释说明,所以这一章节只就一些重要的配置予以说明。有关所有可用选项和文档,请参阅 {{man|5|vsftpd.conf}} 手册页。默认情况下,由 {{ic|/srv/ftp}} 提供文件。<br />
<br />
允许的连接 {{ic|/etc/hosts.allow}}:<br />
# 允许所有连接<br />
vsftpd: ALL<br />
# IP 地址范围<br />
vsftpd: 10.0.0.0/255.255.255.0<br />
<br />
=== 允许上传 ===<br />
需要将 {{ic|/etc/vsftpd.conf}} 中的 {{ic|write_enable}} 值设为 YES,以便允许修改文件系统(如上传):<br />
write_enable=YES<br />
<br />
=== 本地用户登录 ===<br />
需要修改 {{ic|/etc/vsftpd.conf}} 中的如下值,以便允许 {{ic|/etc/passwd}} 中的用户登录:<br />
local_enable=YES<br />
<br />
=== 匿名用户登录 ===<br />
以下行控制匿名用户是否可以登录。默认情况下,匿名登录只能从 {{ic|/srv/ftp}} 下载:<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
...<br />
# 允许匿名 FTP? (当心 - 默认情况下允许除非您将其注释)。<br />
anonymous_enable=YES<br />
...<br />
# 取消注释以允许匿名 FTP 用户上传文件。<br />
# 只有上述全局写入被激活,才会有效果。<br />
# 另外,你显然需要创建 FTP 用户有写权限的目录。<br />
# anon_upload_enable=YES<br />
#<br />
# 如果您希望匿名 FTP 用户能够创建新目录,请取消注释。<br />
# anon_mkdir_write_enable=YES<br />
...<br />
}}<br />
<br />
您也可以添加以下选项(详见 {{man|5|vsftpd.conf}}):<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
# 匿名登录不需要密码<br />
no_anon_password=YES<br />
<br />
# 匿名客户端的最大传输速率(以 Bytes/秒 为单位)<br />
anon_max_rate=30000<br />
<br />
# 用于匿名登录的目录<br />
anon_root=/example/directory/<br />
}}<br />
<br />
=== Chroot 限制 ===<br />
为了阻止用户离开家目录,可以设置 chroot 环境。要启用此功能,请在 {{ic|/etc/vsftpd.conf}} 中添加以下行:<br />
chroot_list_enable=YES<br />
chroot_list_file=/etc/vsftpd.chroot_list<br />
{{ic|chroot_list_file}} 定义了被 chroot 限制的用户列表。<br />
<br />
对于更严格的环境,请指定以下行:<br />
chroot_local_user=YES<br />
这将默认为所有用户启用 chroot 环境。 在这种情况下,{{ic|chroot_list_file}} 定义了'''不受''' chroot 限制的用户列表。<br />
<br />
=== 限制用户登录 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加以下两行来阻止特定用户登录FTP服务器:<br />
userlist_enable=YES<br />
userlist_file=/etc/vsftpd.user_list<br />
{{ic|userlist_file}} 文件列出'''不允许'''登录的用户。<br />
<br />
如果您只想允许特定的用户登录,请添加以下行:<br />
userlist_deny=NO<br />
此时 {{ic|userlist_file}} 文件指定'''允许'''登录的用户。<br />
<br />
=== 限制连接数 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加如下信息来限制本地用户的数据传输速率:<br />
local_max_rate=1000000 # 最大数据传输速率(单位: Bytes/秒)<br />
max_clients=50 # 可以同时连接的最大客户端数<br />
max_per_ip=2 # 每个 IP 允许的最大连接数<br />
<br />
=== 使用 xinetd ===<br />
Xinetd 提供增强的监控和控制连接功能。对于基本的可以工作的 vsftpd-server 是不必要的<br />
<br />
安装 vsftpd 将会添加必要的服务文件 {{ic|/etc/xinetd.d/vsftpd}},默认情况下,服务被禁用。<br />
<br />
启用ftp服务:<br />
<pre><br />
service ftp<br />
{<br />
socket_type = stream<br />
wait = no<br />
user = root<br />
server = /usr/sbin/vsftpd<br />
log_on_success += HOST DURATION<br />
log_on_failure += HOST<br />
disable = no<br />
}<br />
</pre><br />
<br />
如果您将 vsftpd 守护程序设置为以独立模式运行,而不是启动 vsftpd 守护程序和 [[Systemd (简体中文)#使用单元|启用]] {{ic|xinetd.service}},请在 {{ic|/etc/vsftpd.conf}} 中进行以下更改:<br />
listen=NO<br />
否则连接将失败:<br />
500 OOPS: could not bind listening IPv4 socket<br />
<br />
=== 使用 SSL/TLS 来保护 FTP ===<br />
首先,您需要一个 ''X.509 SSL/TLS'' 证书才能使用TLS。如果您没有,可以轻松生成如下的自签名证书:<br />
<br />
# cd /etc/ssl/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout vsftpd.pem -out vsftpd.pem<br />
# chmod 600 vsftpd.pem<br />
<br />
你会被问到关于你公司的问题,等等。由于你的证书不是一个可信任的,所填的内容并不重要,它只会被用于加密。要使用可信证书,您可以从 [[Let's Encrypt]] 这样的证书颁发机构获得证书。<br />
<br />
然后,编辑配置文件:<br />
{{hc|/etc/vsftpd.conf|2=ssl_enable=YES<br />
<br />
# 如果你接受匿名连接你可能要启用这个设置<br />
# allow_anon_ssl=NO<br />
<br />
# 默认情况下所有非匿名登录被迫使用 SSL 发送和接收密码和数据,设置为 NO,以允许不安全的连接<br />
force_local_logins_ssl=NO<br />
force_local_data_ssl=NO<br />
<br />
# 选择你想要的<br />
force_local_logins_ssl=YES<br />
<br />
# TLS v1 协议连接是首选,默认情况下启用此模式,而禁用 SSL v2 和 v3 时,以下设置是默认设置,不需要更改,除非您特别需要 SSL<br />
# ssl_tlsv1=YES<br />
# ssl_sslv2=NO<br />
# ssl_sslv3=NO<br />
# 提供您的证书和私钥注释的路径,它们可以包含在同一个文件中或不同的文件中<br />
rsa_cert_file=/etc/ssl/certs/vsftpd.pem<br />
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem<br />
<br />
# 此设置默认设置为 YES,并要求所有数据连接都显示会话重用,这证明他们知道控制通道的秘密。这种方式更安全,但不受许多 FTP 客户端的支持,为了更好的兼容性而设置为 NO<br />
require_ssl_reuse=NO<br />
}}<br />
<br />
=== 在被动模式下解析主机名 ===<br />
要覆盖 vsftpd 在被动模式下通过服务器的主机名发布的 IP 地址,并在启动时解析 DNS,在 {{ic|/etc/vsftpd.conf}} 中增加以下两行:<br />
pasv_addr_resolve=YES<br />
pasv_address=''yourdomain.org''<br />
<br />
{{注意|<br />
* 对于动态DNS,定期更新 ''pasv_address'' 并重新启动服务器是不必要的,因为它有时可以被读取。<br />
* 您可能无法通过 LAN 以被动模式连接,在这种情况下,请尝试使用主动模式而不是LAN客户端。<br />
}}<br />
<br />
=== 端口配置 ===<br />
可能需要调整默认FTP侦听端口和被动模式数据端口:<br />
<br />
* 对于暴露于 Web 的 FTP 服务器,为了减少服务器受到攻击的可能性,可以将侦听端口改为除标准端口 21 以外的端口。<br />
* 要限制被动模式将打开的端口,可以提供一个范围。<br />
这些端口配置更改可以使用以下几行完成:<br />
{{hc|/etc/vsftpd.conf|2=<br />
listen_port=2211<br />
pasv_min_port=5000<br />
pasv_max_port=5003<br />
}}<br />
<br />
=== 配置 iptables ===<br />
通常,运行FTP守护进程的服务器受 [[Iptables (简体中文)|iptables]] 防火墙的保护。要允许访问FTP服务器,需要打开相应的端口,如:<br />
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT<br />
本文不会提供有关如何设置iptables的任何说明,但这里是一个例子:[[Simple stateful firewall (简体中文)|Simple stateful firewall]]。<br />
<br />
有一些内核模块需要在这里引用的 iptables 正确的处理 FTP 连接。 其中特别是 ''nf_conntrack_ftp''。这是需要的,因为 FTP 使用给定的 ''listen_port''(默认为21) 仅用于命令,所有的数据传输都是通过不同的端口完成的。这些端口由 FTP 守护程序为每个会话随机选择(也取决于是使用主动还是被动模式)。要告诉 iptables 应该接受端口上的数据包,需要 ''nf_conntrack_ftp''。要在启动时自动加载,请在 {{ic|/etc/modules-load.d}} 中创建新文件,例如:<br />
# echo nf_conntrack_ftp > /etc/modules-load.d/nf_conntrack_ftp.conf<br />
<br />
如果内核 >= 4.7,您需要通过 ''sysctl'' 设置 ''net.netfilter.nf_conntrack_helper = 1'',如:<br />
# echo net.netfilter.nf_conntrack_helper=1 > /etc/sysctl.d/70-conntrack.conf<br />
或使用<br />
# iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp<br />
<br />
== 小技巧 ==<br />
=== 虚拟用户的 PAM 认证 ===<br />
由于 [[PAM (简体中文)]] 不再提供 {{ic|pam_userdb.so}} 另一个简单的方法是使用 {{AUR|libpam_pwdfile}}。对于具有许多用户的环境,另一个选项可能是 {{AUR|pam_mysql}} {{Broken package link|{{aur-mirror|pam_mysql}}}}。但是,本节仅限于解释如何通过 {{ic|pam_pwdfile.so}} 配置 chroot 环境和身份验证。<br />
<br />
在此示例中,我们创建目录 {{ic|vsftpd}}:<br />
# mkdir /etc/vsftpd<br />
<br />
创建和存储用户名和密码的一个选择是使用 Apache 的生成器 htpasswd:<br />
# htpasswd -c /etc/vsftpd/.passwd<br />
上述命令的一个问题是 vsftpd 可能无法读取生成的 MD5 散列密码。如果使用 -d 开关运行相同的命令,则使用 crypt() 加密,vsftpd 的密码变得可读,但其缺点是安全性较低,密码限制为8个字符。 Openssl 可用于使用算法1生成基于 MD5 的 BSD 密码:<br />
# openssl passwd -1<br />
<br />
无论那个解决方案 {{ic|/etc/vsftpd/.passwd}} 应该如下所示:<br />
username1:hashed_password1<br />
username2:hashed_password2<br />
...<br />
<br />
接下来,您需要使用 {{ic|pam_pwdfile.so}} 和生成的 {{ic|/etc/vsftpd/.passwd}} 文件创建 PAM 服务。在本例中,我们为 ''vsftpd'' 创建了一个 PAM 策略,其中包含以下内容:<br />
{{hc|/etc/pam.d/vsftpd|auth required pam_pwdfile.so pwdfile /etc/vsftpd/.passwd<br />
account required pam_permit.so}}<br />
<br />
现在是为虚拟用户创建一个 home 的时候了。在示例中,决定用 {{ic|/srv/ftp}} 为虚拟用户托管数据,这也反映了 Arch 的默认目录结构。首先创建 virtual 用户并使 {{ic|/srv/ftp}} 成为它的 home:<br />
# useradd -d /srv/ftp virtual<br />
让 virtual 成为所有者<br />
# chown virtual:virtual /srv/ftp<br />
<br />
一个基本的没有私人文件夹配置的 /etc/vsftpd,默认的虚拟用户的 home 文件夹:<br />
# 指向正确的 PAM 服务文件<br />
pam_service_name=vsftpd<br />
write_enable=YES<br />
hide_ids=YES<br />
listen=YES<br />
connect_from_port_20=YES<br />
anonymous_enable=NO<br />
local_enable=YES<br />
dirmessage_enable=YES<br />
xferlog_enable=YES<br />
chroot_local_user=YES<br />
guest_enable=YES<br />
guest_username=virtual<br />
virtual_use_local_privs=YES<br />
<br />
您自己的设置可能不需要一些参数。如果您希望 chroot 环境可写,您将需要将以下内容添加到配置文件中:<br />
allow_writeable_chroot = YES<br />
否则 vsftpd 的默认安全设置会抱怨,如果它检测到 chroot 是可写的。<br />
<br />
[[Start]] {{ic|vsftpd.service}}。<br />
<br />
您现在应该可以使用存储在 {{ic|/etc/vsftpd/.passwd}} 中的任何用户和密码从FTP客户端登录。<br />
<br />
==== 为虚拟用户创建私有目录 ====<br />
首先创建用户文件夹<br />
# mkdir /srv/ftp/user1<br />
# mkdir /srv/ftp/user2<br />
# chown virtual:virtual /srv/ftp/user?/<br />
<br />
随后, 在 {{ic|/etc/vsftpd.conf}} 增加如下行:<br />
local_root=/srv/ftp/$USER<br />
user_sub_token=$USER<br />
<br />
== 问题解决 ==<br />
<br />
=== vsftpd: no connection (Error 500) with recent kernels (3.5 and newer) and .service ===<br />
如果在列出具有多个文件的目录时遇到故障,将其添加到您的 {{ic|/etc/vsftpd.conf}}:<br />
seccomp_sandbox=NO<br />
<br />
=== vsftpd: refusing to run with writable root inside chroot() ===<br />
从 vsftpd 2.3.5 开始,用户被锁定的 chroot 目录不可写。这是为了防止安全漏洞。<br />
<br />
允许上传的安全方法是保持 chroot 启用,并配置您的 FTP 目录。<br />
<br />
local_root=/srv/ftp/user<br />
<br />
# mkdir -p /srv/ftp/user/upload<br />
#<br />
# chmod 550 /srv/ftp/user<br />
# chmod 750 /srv/ftp/user/upload<br />
<br />
如果你必须这么做:<br />
<br />
您可以将其放入您的 {{ic|/etc/vsftpd.conf}} 以解决此安全性增强(自vsftpd 3.0.0;来自 [http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/ Fixing 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()]):<br />
allow_writeable_chroot=YES<br />
或者:<br />
<br />
安装 {{AUR|vsftpd-ext}} {{Broken package link|{{aur-mirror|vsftpd-ext}}}} 并在 conf 文件中设置<br />
allow_writable_chroot=YES<br />
<br />
=== FileZilla Client: GnuTLS error -8 -15 -110 when connecting via SSL ===<br />
vsftpd 尝试在 SSL 会话中显示纯文本错误消息。为了进行调试,暂时禁用加密,您将看到正确的错误消息。[http://ramblings.linkerror.com/?p=45] [https://serverfault.com/questions/772494/vsftpd-list-causes-gnutls-error-15]<br />
<br />
=== vsftpd.service fails to run on boot ===<br />
如果您启用了 {{ic|vsftpd.service}},并且无法在启动时运行,请确保它已在服务文件中设置为在 {{ic|network.target}} 之后加载:<br />
<br />
{{hc|/usr/lib/systemd/system/vsftpd.service|2=<br />
[Unit]<br />
Description=vsftpd daemon<br />
After=network.target}}<br />
<br />
=== Passive mode replies with the local IP address to a remote connection ===<br />
<br />
如果 vsftpd 将本地地址返回给远程连接,如:<br />
227 Entering Passive Mode (192,168,0,19,192,27).<br />
<br />
It may be that the FTP server is behind a NAT router and while some devices monitor FTP connections and dynamically replace the IP address specification for packets containing the PASV response, some do not.<br />
可能是 FTP 服务器位于 NAT 路由器后面,而有些设备会监视 FTP 连接并动态替换包含 PASV 响应的数据包的 IP 地址规范,但有些设备却不会。<br />
<br />
使用以下命令在 vsftpd 配置中指示外部IP地址:<br />
pasv_address=''externalIPaddress''<br />
<br />
或者可选地:<br />
pasv_addr_resolve=YES<br />
pasv_address=''my.domain.name''<br />
<br />
如果在更改后无法进行内部连接,则可能需要运行 2 个 vsftpd,一个用于内部连接,一个用于外部连接。<br />
<br />
=== ipv6 only fails with: 500 OOPS: run two copies of vsftpd for IPv4 and IPv6 ===<br />
你很有可能已经注释了这一行<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
#listen=YES<br />
#<br />
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6<br />
# sockets, you must run two copies of vsftpd with two configuration files.<br />
# Make sure, that one of the listen options is commented !!<br />
listen_ipv6=YES<br />
<br />
而不是设置<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
listen=NO<br />
<br />
=== vsftpd 连接在使用 nis 的机器上失败: yp_bind_client_create_v2: RPC: Unable to send ===<br />
as mentioned on the vsftpd faq page, "...built-in sandboxing uses network isolation on Linux. This<br />
may be interfering with any module that needs to use the network to perform operations or lookups"<br />
正如在 vsftpd fap 页面上提到的那样,“...内置沙盒使用 linux 上的网络隔离可能会干扰任何需要使用网络执行操作或查找的模块”<br />
<br />
将这个未公开的行添加到你的 {{ic|/etc/vsftpd.conf}}<br />
isolate_network=NO<br />
<br />
== 更多资源 ==<br />
* [http://vsftpd.beasts.org/ vsftpd official homepage]<br />
* [http://vsftpd.beasts.org/vsftpd_conf.html vsftpd.conf man page]<br />
* [https://security.appspot.com/vsftpd/FAQ.txt vsftpd FAQ]</div>
745275633
https://wiki.archlinux.org/index.php?title=Very_Secure_FTP_Daemon_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=519963
Very Secure FTP Daemon (简体中文)
2018-05-02T12:44:52Z
<p>745275633: 519962</p>
<hr />
<div>[[Category:FTP servers (简体中文)]]<br />
[[cs:Very Secure FTP Daemon]]<br />
[[en:Very Secure FTP Daemon]]<br />
[[es:Very Secure FTP Daemon]]<br />
[[it:Very Secure FTP Daemon]]<br />
[[ja:Very Secure FTP Daemon]]<br />
[[ru:Very Secure FTP Daemon]]<br />
{{TranslationStatus (简体中文)|Very Secure FTP Daemon|2018-05-02|519962}}<br />
[https://security.appspot.com/vsftpd.html vsftpd] (“Very Secure FTP Daemon“) 是一个为 UNIX 类系统开发的轻量,稳定和安全的 FTP 服务器端。<br />
== 安装 ==<br />
[[安装]] {{pkg|vsftpd}} 然后 [[Systemd (简体中文)#使用单元|启动/启用]] {{ic|vsftpd.service}} 守护程序。<br />
<br />
使用 [[Wikipedia:xinetd|xinetd]] 监视和控制 vsftpd 连接,请参见 [[#使用 xinetd]]。<br />
<br />
== 配置 ==<br />
vsftpd 的大多数配置都可以通过编辑 {{ic|/etc/vsftpd.conf}} 文件实现。 该文件本身自带大量注释说明,所以这一章节只就一些重要的配置予以说明。有关所有可用选项和文档,请参阅 {{man|5|vsftpd.conf}} 手册页。默认情况下,由 {{ic|/srv/ftp}} 提供文件。<br />
<br />
允许的连接 {{ic|/etc/hosts.allow}}:<br />
# 允许所有连接<br />
vsftpd: ALL<br />
# IP 地址范围<br />
vsftpd: 10.0.0.0/255.255.255.0<br />
<br />
=== 允许上传 ===<br />
需要将 {{ic|/etc/vsftpd.conf}} 中的 {{ic|write_enable}} 值设为 YES,以便允许修改文件系统(如上传):<br />
write_enable=YES<br />
<br />
=== 本地用户登录 ===<br />
需要修改 {{ic|/etc/vsftpd.conf}} 中的如下值,以便允许 {{ic|/etc/passwd}} 中的用户登录:<br />
local_enable=YES<br />
<br />
=== 匿名用户登录 ===<br />
以下行控制匿名用户是否可以登录。默认情况下,匿名登录只能从 {{ic|/srv/ftp}} 下载:<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
...<br />
# 允许匿名 FTP? (当心 - 默认情况下允许除非您将其注释)。<br />
anonymous_enable=YES<br />
...<br />
# 取消注释以允许匿名 FTP 用户上传文件。<br />
# 只有上述全局写入被激活,才会有效果。<br />
# 另外,你显然需要创建 FTP 用户有写权限的目录。<br />
# anon_upload_enable=YES<br />
#<br />
# 如果您希望匿名 FTP 用户能够创建新目录,请取消注释。<br />
# anon_mkdir_write_enable=YES<br />
...<br />
}}<br />
<br />
您也可以添加以下选项(详见 {{man|5|vsftpd.conf}}):<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
# 匿名登录不需要密码<br />
no_anon_password=YES<br />
<br />
# 匿名客户端的最大传输速率(以 Bytes/秒 为单位)<br />
anon_max_rate=30000<br />
<br />
# 用于匿名登录的目录<br />
anon_root=/example/directory/<br />
}}<br />
<br />
=== Chroot 限制 ===<br />
为了阻止用户离开家目录,可以设置 chroot 环境。要启用此功能,请在 {{ic|/etc/vsftpd.conf}} 中添加以下行:<br />
chroot_list_enable=YES<br />
chroot_list_file=/etc/vsftpd.chroot_list<br />
{{ic|chroot_list_file}} 定义了被 chroot 限制的用户列表。<br />
<br />
对于更严格的环境,请指定以下行:<br />
chroot_local_user=YES<br />
这将默认为所有用户启用 chroot 环境。 在这种情况下,{{ic|chroot_list_file}} 定义了'''不受''' chroot 限制的用户列表。<br />
<br />
=== 限制用户登录 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加以下两行来阻止特定用户登录FTP服务器:<br />
userlist_enable=YES<br />
userlist_file=/etc/vsftpd.user_list<br />
{{ic|userlist_file}} 文件列出'''不允许'''登录的用户。<br />
<br />
如果您只想允许特定的用户登录,请添加以下行:<br />
userlist_deny=NO<br />
此时 {{ic|userlist_file}} 文件指定'''允许'''登录的用户。<br />
<br />
=== 限制连接数 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加如下信息来限制本地用户的数据传输速率:<br />
local_max_rate=1000000 # 最大数据传输速率(单位: Bytes/秒)<br />
max_clients=50 # 可以同时连接的最大客户端数<br />
max_per_ip=2 # 每个 IP 允许的最大连接数<br />
<br />
=== 使用 xinetd ===<br />
Xinetd 提供增强的监控和控制连接功能。对于基本的可以工作的 vsftpd-server 是不必要的<br />
<br />
安装 vsftpd 将会添加必要的服务文件 {{ic|/etc/xinetd.d/vsftpd}},默认情况下,服务被禁用。<br />
<br />
启用ftp服务:<br />
<pre><br />
service ftp<br />
{<br />
socket_type = stream<br />
wait = no<br />
user = root<br />
server = /usr/sbin/vsftpd<br />
log_on_success += HOST DURATION<br />
log_on_failure += HOST<br />
disable = no<br />
}<br />
</pre><br />
<br />
如果您将 vsftpd 守护程序设置为以独立模式运行,而不是启动 vsftpd 守护程序和 [[Systemd (简体中文)#使用单元|启用]] {{ic|xinetd.service}},请在 {{ic|/etc/vsftpd.conf}} 中进行以下更改:<br />
listen=NO<br />
否则连接将失败:<br />
500 OOPS: could not bind listening IPv4 socket<br />
<br />
=== 使用 SSL/TLS 来保护 FTP ===<br />
首先,您需要一个 ''X.509 SSL/TLS'' 证书才能使用TLS。如果您没有,可以轻松生成如下的自签名证书:<br />
<br />
# cd /etc/ssl/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout vsftpd.pem -out vsftpd.pem<br />
# chmod 600 vsftpd.pem<br />
<br />
你会被问到关于你公司的问题,等等。由于你的证书不是一个可信任的,所填的内容并不重要,它只会被用于加密。要使用可信证书,您可以从 [[Let's Encrypt]] 这样的证书颁发机构获得证书。<br />
<br />
然后,编辑配置文件:<br />
{{hc|/etc/vsftpd.conf|2=ssl_enable=YES<br />
<br />
# 如果你接受匿名连接你可能要启用这个设置<br />
# allow_anon_ssl=NO<br />
<br />
# 默认情况下所有非匿名登录被迫使用 SSL 发送和接收密码和数据,设置为 NO,以允许不安全的连接<br />
force_local_logins_ssl=NO<br />
force_local_data_ssl=NO<br />
<br />
# 选择你想要的<br />
force_local_logins_ssl=YES<br />
<br />
# TLS v1 协议连接是首选,默认情况下启用此模式,而禁用 SSL v2 和 v3 时,以下设置是默认设置,不需要更改,除非您特别需要 SSL<br />
# ssl_tlsv1=YES<br />
# ssl_sslv2=NO<br />
# ssl_sslv3=NO<br />
# 提供您的证书和私钥注释的路径,它们可以包含在同一个文件中或不同的文件中<br />
rsa_cert_file=/etc/ssl/certs/vsftpd.pem<br />
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem<br />
<br />
# 此设置默认设置为 YES,并要求所有数据连接都显示会话重用,这证明他们知道控制通道的秘密。这种方式更安全,但不受许多 FTP 客户端的支持,为了更好的兼容性而设置为 NO<br />
require_ssl_reuse=NO<br />
}}<br />
<br />
=== 在被动模式下解析主机名 ===<br />
要覆盖 vsftpd 在被动模式下通过服务器的主机名发布的 IP 地址,并在启动时解析 DNS,在 {{ic|/etc/vsftpd.conf}} 中增加以下两行:<br />
pasv_addr_resolve=YES<br />
pasv_address=''yourdomain.org''<br />
<br />
{{注意|<br />
* 对于动态DNS,定期更新 ''pasv_address'' 并重新启动服务器是不必要的,因为它有时可以被读取。<br />
* 您可能无法通过 LAN 以被动模式连接,在这种情况下,请尝试使用主动模式而不是LAN客户端。<br />
}}<br />
<br />
=== 端口配置 ===<br />
可能需要调整默认FTP侦听端口和被动模式数据端口:<br />
<br />
* 对于暴露于 Web 的 FTP 服务器,为了减少服务器受到攻击的可能性,可以将侦听端口改为除标准端口 21 以外的端口。<br />
* 要限制被动模式将打开的端口,可以提供一个范围。<br />
这些端口配置更改可以使用以下几行完成:<br />
{{hc|/etc/vsftpd.conf|2=<br />
listen_port=2211<br />
pasv_min_port=5000<br />
pasv_max_port=5003<br />
}}<br />
<br />
=== 配置 iptables ===<br />
通常,运行FTP守护进程的服务器受 [[Iptables (简体中文)|iptables]] 防火墙的保护。要允许访问FTP服务器,需要打开相应的端口,如:<br />
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT<br />
本文不会提供有关如何设置iptables的任何说明,但这里是一个例子:[[Simple stateful firewall (简体中文)|Simple stateful firewall]]。<br />
<br />
有一些内核模块需要在这里引用的 iptables 正确的处理 FTP 连接。 其中特别是 ''nf_conntrack_ftp''。这是需要的,因为 FTP 使用给定的 ''listen_port''(默认为21) 仅用于命令,所有的数据传输都是通过不同的端口完成的。这些端口由 FTP 守护程序为每个会话随机选择(也取决于是使用主动还是被动模式)。要告诉 iptables 应该接受端口上的数据包,需要 ''nf_conntrack_ftp''。要在启动时自动加载,请在 {{ic|/etc/modules-load.d}} 中创建新文件,例如:<br />
# echo nf_conntrack_ftp > /etc/modules-load.d/nf_conntrack_ftp.conf<br />
<br />
如果内核 >= 4.7,您需要通过 ''sysctl'' 设置 ''net.netfilter.nf_conntrack_helper = 1'',如:<br />
# echo net.netfilter.nf_conntrack_helper=1 > /etc/sysctl.d/70-conntrack.conf<br />
或使用<br />
# iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp<br />
<br />
== 小技巧 ==<br />
=== 虚拟用户的 PAM 认证 ===<br />
由于 [[PAM (简体中文)]] 不再提供 {{ic|pam_userdb.so}} 另一个简单的方法是使用 {{AUR|libpam_pwdfile}}。对于具有许多用户的环境,另一个选项可能是 {{AUR|pam_mysql}} {{Broken package link|{{aur-mirror|pam_mysql}}}}。但是,本节仅限于解释如何通过 {{ic|pam_pwdfile.so}} 配置 chroot 环境和身份验证。<br />
<br />
在此示例中,我们创建目录 {{ic|vsftpd}}:<br />
# mkdir /etc/vsftpd<br />
<br />
创建和存储用户名和密码的一个选择是使用 Apache 的生成器 htpasswd:<br />
# htpasswd -c /etc/vsftpd/.passwd<br />
上述命令的一个问题是 vsftpd 可能无法读取生成的 MD5 散列密码。如果使用 -d 开关运行相同的命令,则使用 crypt() 加密,vsftpd 的密码变得可读,但其缺点是安全性较低,密码限制为8个字符。 Openssl 可用于使用算法1生成基于 MD5 的 BSD 密码:<br />
# openssl passwd -1<br />
<br />
无论那个解决方案 {{ic|/etc/vsftpd/.passwd}} 应该如下所示:<br />
username1:hashed_password1<br />
username2:hashed_password2<br />
...<br />
<br />
接下来,您需要使用 {{ic|pam_pwdfile.so}} 和生成的 {{ic|/etc/vsftpd/.passwd}} 文件创建 PAM 服务。在本例中,我们为 ''vsftpd'' 创建了一个 PAM 策略,其中包含以下内容:<br />
{{hc|/etc/pam.d/vsftpd|auth required pam_pwdfile.so pwdfile /etc/vsftpd/.passwd<br />
account required pam_permit.so}}<br />
<br />
现在是为虚拟用户创建一个 home 的时候了。在示例中,决定用 {{ic|/srv/ftp}} 为虚拟用户托管数据,这也反映了 Arch 的默认目录结构。首先创建 virtual 用户并使 {{ic|/srv/ftp}} 成为它的 home:<br />
# useradd -d /srv/ftp virtual<br />
让 virtual 成为所有者<br />
# chown virtual:virtual /srv/ftp<br />
<br />
一个基本的没有私人文件夹配置的 /etc/vsftpd,默认的虚拟用户的 home 文件夹:<br />
# 指向正确的 PAM 服务文件<br />
pam_service_name=vsftpd<br />
write_enable=YES<br />
hide_ids=YES<br />
listen=YES<br />
connect_from_port_20=YES<br />
anonymous_enable=NO<br />
local_enable=YES<br />
dirmessage_enable=YES<br />
xferlog_enable=YES<br />
chroot_local_user=YES<br />
guest_enable=YES<br />
guest_username=virtual<br />
virtual_use_local_privs=YES<br />
<br />
您自己的设置可能不需要一些参数。如果您希望 chroot 环境可写,您将需要将以下内容添加到配置文件中:<br />
allow_writeable_chroot = YES<br />
否则 vsftpd 的默认安全设置会抱怨,如果它检测到 chroot 是可写的。<br />
<br />
[[Start]] {{ic|vsftpd.service}}。<br />
<br />
您现在应该可以使用存储在 {{ic|/etc/vsftpd/.passwd}} 中的任何用户和密码从FTP客户端登录。<br />
<br />
==== 为虚拟用户创建私有目录 ====<br />
首先创建用户文件夹<br />
# mkdir /srv/ftp/user1<br />
# mkdir /srv/ftp/user2<br />
# chown virtual:virtual /srv/ftp/user?/<br />
<br />
随后, 在 {{ic|/etc/vsftpd.conf}} 增加如下行:<br />
local_root=/srv/ftp/$USER<br />
user_sub_token=$USER<br />
<br />
== 问题解决 ==<br />
<br />
=== vsftpd: no connection (Error 500) with recent kernels (3.5 and newer) and .service ===<br />
如果在列出具有多个文件的目录时遇到故障,将其添加到您的 {{ic|/etc/vsftpd.conf}}:<br />
seccomp_sandbox=NO<br />
<br />
=== vsftpd: refusing to run with writable root inside chroot() ===<br />
从 vsftpd 2.3.5 开始,用户被锁定的 chroot 目录不可写。这是为了防止安全漏洞。<br />
<br />
允许上传的安全方法是保持 chroot 启用,并配置您的 FTP 目录。<br />
<br />
local_root=/srv/ftp/user<br />
<br />
# mkdir -p /srv/ftp/user/upload<br />
#<br />
# chmod 550 /srv/ftp/user<br />
# chmod 750 /srv/ftp/user/upload<br />
<br />
如果你必须这么做:<br />
<br />
您可以将其放入您的 {{ic|/etc/vsftpd.conf}} 以解决此安全性增强(自vsftpd 3.0.0;来自 [http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/ Fixing 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()]):<br />
allow_writeable_chroot=YES<br />
或者:<br />
<br />
安装 {{AUR|vsftpd-ext}} {{Broken package link|{{aur-mirror|vsftpd-ext}}}} 并在 conf 文件中设置<br />
allow_writable_chroot=YES<br />
<br />
=== FileZilla Client: GnuTLS error -8 -15 -110 when connecting via SSL ===<br />
vsftpd 尝试在 SSL 会话中显示纯文本错误消息。为了进行调试,暂时禁用加密,您将看到正确的错误消息。[http://ramblings.linkerror.com/?p=45] [https://serverfault.com/questions/772494/vsftpd-list-causes-gnutls-error-15]<br />
<br />
=== vsftpd.service fails to run on boot ===<br />
如果您启用了 {{ic|vsftpd.service}},并且无法在启动时运行,请确保它已在服务文件中设置为在 {{ic|network.target}} 之后加载:<br />
<br />
{{hc|/usr/lib/systemd/system/vsftpd.service|2=<br />
[Unit]<br />
Description=vsftpd daemon<br />
After=network.target}}<br />
<br />
=== ipv6 only fails with: 500 OOPS: run two copies of vsftpd for IPv4 and IPv6 ===<br />
你很有可能已经注释了这一行<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
#listen=YES<br />
#<br />
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6<br />
# sockets, you must run two copies of vsftpd with two configuration files.<br />
# Make sure, that one of the listen options is commented !!<br />
listen_ipv6=YES<br />
<br />
而不是设置<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
listen=NO<br />
<br />
=== vsftpd 连接在使用 nis 的机器上失败: yp_bind_client_create_v2: RPC: Unable to send ===<br />
as mentioned on the vsftpd faq page, "...built-in sandboxing uses network isolation on Linux. This<br />
may be interfering with any module that needs to use the network to perform operations or lookups"<br />
正如在 vsftpd fap 页面上提到的那样,“...内置沙盒使用 linux 上的网络隔离可能会干扰任何需要使用网络执行操作或查找的模块”<br />
<br />
将这个未公开的行添加到你的 {{ic|/etc/vsftpd.conf}}<br />
isolate_network=NO<br />
<br />
== 更多资源 ==<br />
* [http://vsftpd.beasts.org/ vsftpd official homepage]<br />
* [http://vsftpd.beasts.org/vsftpd_conf.html vsftpd.conf man page]<br />
* [https://security.appspot.com/vsftpd/FAQ.txt vsftpd FAQ]</div>
745275633
https://wiki.archlinux.org/index.php?title=Very_Secure_FTP_Daemon&diff=518619
Very Secure FTP Daemon
2018-04-25T11:03:51Z
<p>745275633: /* vsftpd connections fail on a machine using nis with: yp_bind_client_create_v2: RPC: Unable to send */ add ic template</p>
<hr />
<div>[[Category:FTP servers]]<br />
[[cs:Very Secure FTP Daemon]]<br />
[[es:Very Secure FTP Daemon]]<br />
[[it:Very Secure FTP Daemon]]<br />
[[ja:Very Secure FTP Daemon]]<br />
[[ru:Very Secure FTP Daemon]]<br />
[[zh-hans:Very Secure FTP Daemon]]<br />
[https://security.appspot.com/vsftpd.html vsftpd] (''Very Secure FTP Daemon'') is a lightweight, stable and secure FTP server for UNIX-like systems.<br />
<br />
== Installation ==<br />
<br />
[[Install]] {{pkg|vsftpd}} and [[start/enable]] the {{ic|vsftpd.service}} daemon.<br />
<br />
To use [[Wikipedia:xinetd|xinetd]] for monitoring and controlling vsftpd connections, see [[#Using xinetd]].<br />
<br />
== Configuration ==<br />
Most of the settings in vsftpd are done by editing the file {{ic|/etc/vsftpd.conf}}. The file itself is well-documented, so this section only highlights some important changes you may want to modify. For all available options and documentation, see the {{man|5|vsftpd.conf}} man page. Files are served by default from {{ic|/srv/ftp}}.<br />
<br />
Enable connections {{ic|/etc/hosts.allow}}:<br />
# Allow all connections<br />
vsftpd: ALL<br />
# IP address range<br />
vsftpd: 10.0.0.0/255.255.255.0<br />
<br />
=== Enabling uploading ===<br />
The {{Ic|WRITE_ENABLE}} flag must be set to YES in {{ic|/etc/vsftpd.conf}} in order to allow changes to the filesystem, such as uploading:<br />
write_enable=YES<br />
<br />
=== Local user login ===<br />
One must set the line {{ic|local_enable}} in {{ic|/etc/vsftpd.conf}} to {{ic|YES}} in order to allow users in {{ic|/etc/passwd}} to login:<br />
local_enable=YES<br />
<br />
=== Anonymous login ===<br />
These lines controls whether anonymous users can login. By default, anonymous logins are enabled for download only from {{ic|/srv/ftp}}:<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
...<br />
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).<br />
anonymous_enable=YES<br />
...<br />
# Uncomment this to allow the anonymous FTP user to upload files. This only<br />
# has an effect if the above global write enable is activated. Also, you will<br />
# obviously need to create a directory writable by the FTP user.<br />
#anon_upload_enable=YES<br />
#<br />
# Uncomment this if you want the anonymous FTP user to be able to create<br />
# new directories.<br />
#anon_mkdir_write_enable=YES<br />
...<br />
}}<br />
You may also add e.g. the following options (see {{man|5|vsftpd.conf}} for more):<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
# No password is required for an anonymous login <br />
no_anon_password=YES<br />
<br />
# Maximum transfer rate for an anonymous client in Bytes/second <br />
anon_max_rate=30000<br />
<br />
# Directory to be used for an anonymous login <br />
anon_root=/example/directory/<br />
}}<br />
<br />
=== Chroot jail ===<br />
A chroot environment that prevents the user from leaving its home directory can be set up. To enable this, add the following lines to {{ic|/etc/vsftpd.conf}}:<br />
chroot_list_enable=YES<br />
chroot_list_file=/etc/vsftpd.chroot_list<br />
The {{Ic|chroot_list_file}} variable specifies the file which contains users that are jailed.<br />
<br />
For a more restricted environment, specify the line:<br />
chroot_local_user=YES<br />
This will make local users jailed by default. In this case, the file specified by {{Ic|chroot_list_file}} lists users that are '''not''' in a chroot jail.<br />
<br />
=== Limiting user login ===<br />
It's possible to prevent users from logging into the FTP server by adding two lines to {{ic|/etc/vsftpd.conf}}:<br />
userlist_enable=YES<br />
userlist_file=/etc/vsftpd.user_list<br />
{{Ic|userlist_file}} now specifies the file which lists users that are not able to login.<br />
<br />
If you only want to allow certain users to login, add the line:<br />
userlist_deny=NO<br />
The file specified by {{Ic|userlist_file}} will now contain users that are able to login.<br />
<br />
=== Limiting connections ===<br />
The data transfer rate, i.e. number of clients and connections per IP for local users can be limited by adding the information in {{ic|/etc/vsftpd.conf}}:<br />
local_max_rate=1000000 # Maximum data transfer rate in bytes per second<br />
max_clients=50 # Maximum number of clients that may be connected<br />
max_per_ip=2 # Maximum connections per IP<br />
<br />
=== Using xinetd ===<br />
<br />
Xinetd provides enhanced capabilities for monitoring and controlling connections. It is not necessary though for a basic good working vsftpd-server.<br />
<br />
Installation of vsftpd will add a necessary service file, {{ic|/etc/xinetd.d/vsftpd}}. By default services are disabled. Enable the ftp service:<br />
<pre><br />
service ftp<br />
{<br />
socket_type = stream<br />
wait = no<br />
user = root<br />
server = /usr/bin/vsftpd<br />
log_on_success += HOST DURATION<br />
log_on_failure += HOST<br />
disable = no<br />
}<br />
</pre><br />
<br />
If you have set the vsftpd daemon to run in standalone mode make the following change in {{ic|/etc/vsftpd.conf}}:<br />
listen=NO<br />
Otherwise connection will fail:<br />
500 OOPS: could not bind listening IPv4 socket<br />
<br />
Instead of starting the vsftpd daemon start and [[enable]] {{ic|xinetd.service}}.<br />
<br />
=== Using SSL/TLS to secure FTP ===<br />
<br />
First, you need a ''X.509 SSL/TLS'' certificate to use TLS. If you do not have one, you can easily generate a self-signed certificate as follows: <br />
# cd /etc/ssl/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout vsftpd.pem -out vsftpd.pem<br />
# chmod 600 vsftpd.pem<br />
You will be asked questions about your company, etc. As your certificate is not a trusted one, it does not really matter what is filled in, it will just be used for encryption. To use a trusted certificate, you can get one from a certificate authority like [[Let's Encrypt]]. <br />
<br />
Then, edit the configuration file:<br />
{{hc|/etc/vsftpd.conf|2=<br />
ssl_enable=YES<br />
<br />
# if you accept anonymous connections, you may want to enable this setting<br />
#allow_anon_ssl=NO<br />
<br />
# by default all non anonymous logins and forced to use SSL to send and receive password and data, set to NO to allow non secure connections<br />
force_local_logins_ssl=NO<br />
force_local_data_ssl=NO<br />
<br />
# TLS v1 protocol connections are preferred and this mode is enabled by default while SSL v2 and v3 are disabled<br />
# the settings below are the default ones and do not need to be changed unless you specifically need SSL<br />
#ssl_tlsv1=YES<br />
#ssl_sslv2=NO<br />
#ssl_sslv3=NO<br />
<br />
# provide the path of your certificate and of your private key<br />
# note that both can be contained in the same file or in different files<br />
rsa_cert_file=/etc/ssl/certs/vsftpd.pem<br />
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem<br />
<br />
# this setting is set to YES by default and requires all data connections exhibit session reuse which proves they know the secret of the control channel.<br />
# this is more secure but is not supported by many FTP clients, set to NO for better compatibility<br />
require_ssl_reuse=NO<br />
}}<br />
<br />
=== Resolve hostname in passive mode ===<br />
To override the IP address vsftpd advertises in passive mode by the hostname of your server and have it DNS resolved at startup, add the following two lines in {{ic|/etc/vsftpd.conf}}:<br />
pasv_addr_resolve=YES<br />
pasv_address=''yourdomain.org''<br />
<br />
{{Note|<br />
* For dynamic DNS, it is '''not''' necessary to periodically update ''pasv_address'' and restart the server as it can sometimes be read.<br />
* You may not be able to connect in passive mode via LAN anymore, in this case try the active mode instead from the LAN clients.<br />
}}<br />
<br />
=== Port configurations ===<br />
It may be necessary to adjust the default FTP listening port and the passive mode data ports:<br />
* For FTP servers exposed to the web, to reduce the likelihood of the server being attacked, the listening port can be changed to something other than the standard port 21. <br />
* To limit the passive mode ports to open ports, a range can be provided.<br />
The ports can be defined in the configuration file as illustrated below:<br />
{{hc|/etc/vsftpd.conf|2=<br />
listen_port=2211<br />
<br />
pasv_min_port=5000<br />
pasv_max_port=5003<br />
}}<br />
<br />
=== Configuring iptables ===<br />
Often the server running the FTP daemon is protected by an [[iptables]] firewall. To allow access to the FTP server the corresponding port needs to be opened using something like<br />
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT<br />
This article won't provide any instruction on how to set up iptables but here is an example: [[Simple stateful firewall]].<br />
<br />
There are some kernel modules needed for proper FTP connection handling by iptables that should be referenced here. Among those especially ''nf_conntrack_ftp''. It is needed as FTP uses the given ''listen_port'' (21 by default) for commands only; all the data transfer is done over different ports. These ports are chosen by the FTP daemon at random and for each session (also depending on whether active or passive mode is used). To tell iptables that packets on ports should be accepted, ''nf_conntrack_ftp'' is required. To load it automatically on boot create a new file in {{ic|/etc/modules-load.d}} e.g.:<br />
# echo nf_conntrack_ftp > /etc/modules-load.d/nf_conntrack_ftp.conf<br />
<br />
If the kernel >= 4.7 you either need to set ''net.netfilter.nf_conntrack_helper=1'' via ''sysctl'' e.g. <br />
# echo net.netfilter.nf_conntrack_helper=1 > /etc/sysctl.d/70-conntrack.conf<br />
or use<br />
# iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp<br />
<br />
== Tips and tricks ==<br />
=== PAM with virtual users ===<br />
Since [[PAM]] no longer provides {{ic|pam_userdb.so}} another easy method is to use {{AUR|libpam_pwdfile}}. For environments with many users another option could be {{AUR|pam_mysql}}{{Broken package link|{{aur-mirror|pam_mysql}}}}. This section is however limited to explain how to configure a chroot environment and authentication by {{ic|pam_pwdfile.so}}.<br />
<br />
In this example we create the directory {{ic|vsftpd}}:<br />
# mkdir /etc/vsftpd<br />
<br />
One option to create and store user names and passwords is to use the Apache generator htpasswd:<br />
# htpasswd -c /etc/vsftpd/.passwd<br />
A problem with the above command is that vsftpd might not be able to read the generated MD5 hashed password. If running the same command with the -d switch, crypt() encryption, password become readable by vsftpd, but the downside of this is less security and a password limited to 8 characters. Openssl could be used to produce a MD5 based BSD password with algorithm 1:<br />
# openssl passwd -1<br />
<br />
Whatever solution the produced {{ic|/etc/vsftpd/.passwd}} should look like this:<br />
username1:hashed_password1<br />
username2:hashed_password2<br />
...<br />
<br />
Next you need to create a PAM service using {{ic|pam_pwdfile.so}} and the generated {{ic|/etc/vsftpd/.passwd}} file. In this example we create a PAM policy for ''vsftpd'' with the following content:<br />
{{hc|/etc/pam.d/vsftpd|auth required pam_pwdfile.so pwdfile /etc/vsftpd/.passwd<br />
account required pam_permit.so}}<br />
<br />
Now it is time to create a home for the virtual users. In the example {{ic|/srv/ftp}} is decided to host data for virtual users, which also reflects the default directory structure of Arch. First create the general user virtual and make {{ic|/srv/ftp}} its home:<br />
# useradd -d /srv/ftp virtual<br />
Make virtual the owner:<br />
# chown virtual:virtual /srv/ftp<br />
<br />
A basic {{ic|/etc/vsftpd.conf}} with no private folders configured, which will default to the home folder of the virtual user:<br />
# pointing to the correct PAM service file<br />
pam_service_name=vsftpd<br />
write_enable=YES<br />
hide_ids=YES<br />
listen=YES<br />
connect_from_port_20=YES<br />
anonymous_enable=NO<br />
local_enable=YES<br />
dirmessage_enable=YES<br />
xferlog_enable=YES<br />
chroot_local_user=YES<br />
guest_enable=YES<br />
guest_username=virtual<br />
virtual_use_local_privs=YES<br />
<br />
Some parameters might not be necessary for your own setup. If you want the chroot environment to be writable you will need to add the following to the configuration file:<br />
allow_writeable_chroot=YES<br />
Otherwise vsftpd because of default security settings will complain if it detects that chroot is writable.<br />
<br />
[[Start]] {{ic|vsftpd.service}}.<br />
<br />
You should now be able to login from a ftp-client with any of the users and passwords stored in {{ic|/etc/vsftpd/.passwd}}.<br />
<br />
==== Adding private folders for the virtual users ====<br />
First create directories for users:<br />
# mkdir /srv/ftp/user1<br />
# mkdir /srv/ftp/user2<br />
# chown virtual:virtual /srv/ftp/user?/<br />
<br />
Then, add the following lines to {{ic|/etc/vsftpd.conf}}:<br />
local_root=/srv/ftp/$USER<br />
user_sub_token=$USER<br />
<br />
== Troubleshooting ==<br />
<br />
=== vsftpd: no connection (Error 500) with recent kernels (3.5 and newer) and .service ===<br />
add this to your /etc/vsftpd.conf<br />
seccomp_sandbox=NO<br />
<br />
=== vsftpd: refusing to run with writable root inside chroot() ===<br />
As of vsftpd 2.3.5, the chroot directory that users are locked to must not be writable. This is in order to prevent a security vulnerabilty.<br />
<br />
The safe way to allow upload is to keep chroot enabled, and configure your FTP directories.<br />
<br />
local_root=/srv/ftp/user<br />
<br />
# mkdir -p /srv/ftp/user/upload<br />
#<br />
# chmod 550 /srv/ftp/user<br />
# chmod 750 /srv/ftp/user/upload<br />
<br />
If you must:<br />
<br />
You can put this into your {{ic|/etc/vsftpd.conf}} to workaround this security enhancement (since vsftpd 3.0.0; from [http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/ Fixing 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()]):<br />
allow_writeable_chroot=YES<br />
or alternative:<br />
<br />
Install {{AUR|vsftpd-ext}}{{Broken package link|{{aur-mirror|vsftpd-ext}}}} and set in the conf file allow_writable_root=YES<br />
<br />
=== FileZilla Client: GnuTLS error -8 -15 -110 when connecting via SSL ===<br />
vsftpd tries to display plain-text error messages in the SSL session. In order to debug this, temporarily disable encryption and you will see the correct error message.[http://ramblings.linkerror.com/?p=45] [https://serverfault.com/questions/772494/vsftpd-list-causes-gnutls-error-15]<br />
<br />
=== vsftpd.service fails to run on boot ===<br />
If you have enabled {{ic|vsftpd.service}} and it fails to run on boot, make sure it is set to load after {{ic|network.target}} in the service file:<br />
<br />
{{hc|/usr/lib/systemd/system/vsftpd.service|2=<br />
[Unit]<br />
Description=vsftpd daemon<br />
After=network.target}}<br />
<br />
=== ipv6 only fails with: 500 OOPS: run two copies of vsftpd for IPv4 and IPv6 ===<br />
you most likely have commented out the line<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
#listen=YES<br />
#<br />
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6<br />
# sockets, you must run two copies of vsftpd with two configuration files.<br />
# Make sure, that one of the listen options is commented !!<br />
listen_ipv6=YES<br />
<br />
instead of setting<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
listen=NO<br />
<br />
=== vsftpd connections fail on a machine using nis with: yp_bind_client_create_v2: RPC: Unable to send ===<br />
as mentioned on the vsftpd faq page, "...built-in sandboxing uses network isolation on Linux. This<br />
may be interfering with any module that needs to use the network to perform operations or lookups"<br />
<br />
add this undocumented line to your {{ic|/etc/vsftpd.conf}}<br />
isolate_network=NO<br />
<br />
== See also ==<br />
* [http://vsftpd.beasts.org/ vsftpd official homepage]<br />
* [http://vsftpd.beasts.org/vsftpd_conf.html vsftpd.conf man page]<br />
* [https://security.appspot.com/vsftpd/FAQ.txt vsftpd FAQ]</div>
745275633
https://wiki.archlinux.org/index.php?title=Very_Secure_FTP_Daemon_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=518618
Very Secure FTP Daemon (简体中文)
2018-04-25T11:03:25Z
<p>745275633: 518526</p>
<hr />
<div>[[Category:FTP servers (简体中文)]]<br />
[[cs:Very Secure FTP Daemon]]<br />
[[en:Very Secure FTP Daemon]]<br />
[[es:Very Secure FTP Daemon]]<br />
[[it:Very Secure FTP Daemon]]<br />
[[ja:Very Secure FTP Daemon]]<br />
[[ru:Very Secure FTP Daemon]]<br />
{{TranslationStatus (简体中文)|Very Secure FTP Daemon|2018-02-27|518526}}<br />
[https://security.appspot.com/vsftpd.html vsftpd] (“Very Secure FTP Daemon“) 是一个为 UNIX 类系统开发的轻量,稳定和安全的 FTP 服务器端。<br />
== 安装 ==<br />
[[安装]] {{pkg|vsftpd}} 然后 [[Systemd (简体中文)#使用单元|启动/启用]] {{ic|vsftpd.service}} 守护程序。<br />
<br />
使用 [[Wikipedia:xinetd|xinetd]] 监视和控制 vsftpd 连接,请参见 [[#使用 xinetd]]。<br />
<br />
== 配置 ==<br />
vsftpd 的大多数配置都可以通过编辑 {{ic|/etc/vsftpd.conf}} 文件实现。 该文件本身自带大量注释说明,所以这一章节只就一些重要的配置予以说明。有关所有可用选项和文档,请参阅 {{man|5|vsftpd.conf}} 手册页。默认情况下,由 {{ic|/srv/ftp}} 提供文件。<br />
<br />
允许的连接 {{ic|/etc/hosts.allow}}:<br />
# 允许所有连接<br />
vsftpd: ALL<br />
# IP 地址范围<br />
vsftpd: 10.0.0.0/255.255.255.0<br />
<br />
=== 允许上传 ===<br />
需要将 {{ic|/etc/vsftpd.conf}} 中的 {{ic|write_enable}} 值设为 YES,以便允许修改文件系统(如上传):<br />
write_enable=YES<br />
<br />
=== 本地用户登录 ===<br />
需要修改 {{ic|/etc/vsftpd.conf}} 中的如下值,以便允许 {{ic|/etc/passwd}} 中的用户登录:<br />
local_enable=YES<br />
<br />
=== 匿名用户登录 ===<br />
以下行控制匿名用户是否可以登录。默认情况下,匿名登录只能从 {{ic|/srv/ftp}} 下载:<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
...<br />
# 允许匿名 FTP? (当心 - 默认情况下允许除非您将其注释)。<br />
anonymous_enable=YES<br />
...<br />
# 取消注释以允许匿名 FTP 用户上传文件。<br />
# 只有上述全局写入被激活,才会有效果。<br />
# 另外,你显然需要创建 FTP 用户有写权限的目录。<br />
# anon_upload_enable=YES<br />
#<br />
# 如果您希望匿名 FTP 用户能够创建新目录,请取消注释。<br />
# anon_mkdir_write_enable=YES<br />
...<br />
}}<br />
<br />
您也可以添加以下选项(详见 {{man|5|vsftpd.conf}}):<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
# 匿名登录不需要密码<br />
no_anon_password=YES<br />
<br />
# 匿名客户端的最大传输速率(以 Bytes/秒 为单位)<br />
anon_max_rate=30000<br />
<br />
# 用于匿名登录的目录<br />
anon_root=/example/directory/<br />
}}<br />
<br />
=== Chroot 限制 ===<br />
为了阻止用户离开家目录,可以设置 chroot 环境。要启用此功能,请在 {{ic|/etc/vsftpd.conf}} 中添加以下行:<br />
chroot_list_enable=YES<br />
chroot_list_file=/etc/vsftpd.chroot_list<br />
{{ic|chroot_list_file}} 定义了被 chroot 限制的用户列表。<br />
<br />
对于更严格的环境,请指定以下行:<br />
chroot_local_user=YES<br />
这将默认为所有用户启用 chroot 环境。 在这种情况下,{{ic|chroot_list_file}} 定义了'''不受''' chroot 限制的用户列表。<br />
<br />
=== 限制用户登录 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加以下两行来阻止特定用户登录FTP服务器:<br />
userlist_enable=YES<br />
userlist_file=/etc/vsftpd.user_list<br />
{{ic|userlist_file}} 文件列出'''不允许'''登录的用户。<br />
<br />
如果您只想允许特定的用户登录,请添加以下行:<br />
userlist_deny=NO<br />
此时 {{ic|userlist_file}} 文件指定'''允许'''登录的用户。<br />
<br />
=== 限制连接数 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加如下信息来限制本地用户的数据传输速率:<br />
local_max_rate=1000000 # 最大数据传输速率(单位: Bytes/秒)<br />
max_clients=50 # 可以同时连接的最大客户端数<br />
max_per_ip=2 # 每个 IP 允许的最大连接数<br />
<br />
=== 使用 xinetd ===<br />
Xinetd 提供增强的监控和控制连接功能。对于基本的可以工作的 vsftpd-server 是不必要的<br />
<br />
安装 vsftpd 将会添加必要的服务文件 {{ic|/etc/xinetd.d/vsftpd}},默认情况下,服务被禁用。<br />
<br />
启用ftp服务:<br />
<pre><br />
service ftp<br />
{<br />
socket_type = stream<br />
wait = no<br />
user = root<br />
server = /usr/sbin/vsftpd<br />
log_on_success += HOST DURATION<br />
log_on_failure += HOST<br />
disable = no<br />
}<br />
</pre><br />
<br />
如果您将 vsftpd 守护程序设置为以独立模式运行,而不是启动 vsftpd 守护程序和 [[Systemd (简体中文)#使用单元|启用]] {{ic|xinetd.service}},请在 {{ic|/etc/vsftpd.conf}} 中进行以下更改:<br />
listen=NO<br />
否则连接将失败:<br />
500 OOPS: could not bind listening IPv4 socket<br />
<br />
=== 使用 SSL/TLS 来保护 FTP ===<br />
首先,您需要一个 ''X.509 SSL/TLS'' 证书才能使用TLS。如果您没有,可以轻松生成如下的自签名证书:<br />
<br />
# cd /etc/ssl/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout vsftpd.pem -out vsftpd.pem<br />
# chmod 600 vsftpd.pem<br />
<br />
你会被问到关于你公司的问题,等等。由于你的证书不是一个可信任的,所填的内容并不重要,它只会被用于加密。要使用可信证书,您可以从 [[Let's Encrypt]] 这样的证书颁发机构获得证书。<br />
<br />
然后,编辑配置文件:<br />
{{hc|/etc/vsftpd.conf|2=ssl_enable=YES<br />
<br />
# 如果你接受匿名连接你可能要启用这个设置<br />
# allow_anon_ssl=NO<br />
<br />
# 默认情况下所有非匿名登录被迫使用 SSL 发送和接收密码和数据,设置为 NO,以允许不安全的连接<br />
force_local_logins_ssl=NO<br />
force_local_data_ssl=NO<br />
<br />
# 选择你想要的<br />
force_local_logins_ssl=YES<br />
<br />
# TLS v1 协议连接是首选,默认情况下启用此模式,而禁用 SSL v2 和 v3 时,以下设置是默认设置,不需要更改,除非您特别需要 SSL<br />
# ssl_tlsv1=YES<br />
# ssl_sslv2=NO<br />
# ssl_sslv3=NO<br />
# 提供您的证书和私钥注释的路径,它们可以包含在同一个文件中或不同的文件中<br />
rsa_cert_file=/etc/ssl/certs/vsftpd.pem<br />
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem<br />
<br />
# 此设置默认设置为 YES,并要求所有数据连接都显示会话重用,这证明他们知道控制通道的秘密。这种方式更安全,但不受许多 FTP 客户端的支持,为了更好的兼容性而设置为 NO<br />
require_ssl_reuse=NO<br />
}}<br />
<br />
=== 在被动模式下解析主机名 ===<br />
要覆盖 vsftpd 在被动模式下通过服务器的主机名发布的 IP 地址,并在启动时解析 DNS,在 {{ic|/etc/vsftpd.conf}} 中增加以下两行:<br />
pasv_addr_resolve=YES<br />
pasv_address=''yourdomain.org''<br />
<br />
{{注意|<br />
* 对于动态DNS,定期更新 ''pasv_address'' 并重新启动服务器是不必要的,因为它有时可以被读取。<br />
* 您可能无法通过 LAN 以被动模式连接,在这种情况下,请尝试使用主动模式而不是LAN客户端。<br />
}}<br />
<br />
=== 端口配置 ===<br />
可能需要调整默认FTP侦听端口和被动模式数据端口:<br />
<br />
* 对于暴露于 Web 的 FTP 服务器,为了减少服务器受到攻击的可能性,可以将侦听端口改为除标准端口 21 以外的端口。<br />
* 要限制被动模式将打开的端口,可以提供一个范围。<br />
这些端口配置更改可以使用以下几行完成:<br />
{{hc|/etc/vsftpd.conf|2=<br />
listen_port=2211<br />
pasv_min_port=5000<br />
pasv_max_port=5003<br />
}}<br />
<br />
=== 配置 iptables ===<br />
通常,运行FTP守护进程的服务器受 [[Iptables (简体中文)|iptables]] 防火墙的保护。要允许访问FTP服务器,需要打开相应的端口,如:<br />
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT<br />
本文不会提供有关如何设置iptables的任何说明,但这里是一个例子:[[Simple stateful firewall (简体中文)|Simple stateful firewall]]。<br />
<br />
有一些内核模块需要在这里引用的 iptables 正确的处理 FTP 连接。 其中特别是 ''nf_conntrack_ftp''。这是需要的,因为 FTP 使用给定的 ''listen_port''(默认为21) 仅用于命令,所有的数据传输都是通过不同的端口完成的。这些端口由 FTP 守护程序为每个会话随机选择(也取决于是使用主动还是被动模式)。要告诉 iptables 应该接受端口上的数据包,需要 ''nf_conntrack_ftp''。要在启动时自动加载,请在 {{ic|/etc/modules-load.d}} 中创建新文件,例如:<br />
# echo nf_conntrack_ftp > /etc/modules-load.d/nf_conntrack_ftp.conf<br />
<br />
如果内核 >= 4.7,您需要通过 ''sysctl'' 设置 ''net.netfilter.nf_conntrack_helper = 1'',如:<br />
# echo net.netfilter.nf_conntrack_helper=1 > /etc/sysctl.d/70-conntrack.conf<br />
或使用<br />
# iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp<br />
<br />
== 小技巧 ==<br />
=== 虚拟用户的 PAM 认证 ===<br />
由于 [[PAM (简体中文)]] 不再提供 {{ic|pam_userdb.so}} 另一个简单的方法是使用 {{AUR|libpam_pwdfile}}。对于具有许多用户的环境,另一个选项可能是 {{AUR|pam_mysql}} {{Broken package link|{{aur-mirror|pam_mysql}}}}。但是,本节仅限于解释如何通过 {{ic|pam_pwdfile.so}} 配置 chroot 环境和身份验证。<br />
<br />
在此示例中,我们创建目录 {{ic|vsftpd}}:<br />
# mkdir /etc/vsftpd<br />
<br />
创建和存储用户名和密码的一个选择是使用 Apache 的生成器 htpasswd:<br />
# htpasswd -c /etc/vsftpd/.passwd<br />
上述命令的一个问题是 vsftpd 可能无法读取生成的 MD5 散列密码。如果使用 -d 开关运行相同的命令,则使用 crypt() 加密,vsftpd 的密码变得可读,但其缺点是安全性较低,密码限制为8个字符。 Openssl 可用于使用算法1生成基于 MD5 的 BSD 密码:<br />
# openssl passwd -1<br />
<br />
无论那个解决方案 {{ic|/etc/vsftpd/.passwd}} 应该如下所示:<br />
username1:hashed_password1<br />
username2:hashed_password2<br />
...<br />
<br />
接下来,您需要使用 {{ic|pam_pwdfile.so}} 和生成的 {{ic|/etc/vsftpd/.passwd}} 文件创建 PAM 服务。在本例中,我们为 ''vsftpd'' 创建了一个 PAM 策略,其中包含以下内容:<br />
{{hc|/etc/pam.d/vsftpd|auth required pam_pwdfile.so pwdfile /etc/vsftpd/.passwd<br />
account required pam_permit.so}}<br />
<br />
现在是为虚拟用户创建一个 home 的时候了。在示例中,决定用 {{ic|/srv/ftp}} 为虚拟用户托管数据,这也反映了 Arch 的默认目录结构。首先创建 virtual 用户并使 {{ic|/srv/ftp}} 成为它的 home:<br />
# useradd -d /srv/ftp virtual<br />
让 virtual 成为所有者<br />
# chown virtual:virtual /srv/ftp<br />
<br />
一个基本的没有私人文件夹配置的 /etc/vsftpd,默认的虚拟用户的 home 文件夹:<br />
# 指向正确的 PAM 服务文件<br />
pam_service_name=vsftpd<br />
write_enable=YES<br />
hide_ids=YES<br />
listen=YES<br />
connect_from_port_20=YES<br />
anonymous_enable=NO<br />
local_enable=YES<br />
dirmessage_enable=YES<br />
xferlog_enable=YES<br />
chroot_local_user=YES<br />
guest_enable=YES<br />
guest_username=virtual<br />
virtual_use_local_privs=YES<br />
<br />
您自己的设置可能不需要一些参数。如果您希望 chroot 环境可写,您将需要将以下内容添加到配置文件中:<br />
allow_writeable_chroot = YES<br />
否则 vsftpd 的默认安全设置会抱怨,如果它检测到 chroot 是可写的。<br />
<br />
[[Start]] {{ic|vsftpd.service}}。<br />
<br />
您现在应该可以使用存储在 {{ic|/etc/vsftpd/.passwd}} 中的任何用户和密码从FTP客户端登录。<br />
<br />
==== 为虚拟用户创建私有目录 ====<br />
首先创建用户文件夹<br />
# mkdir /srv/ftp/user1<br />
# mkdir /srv/ftp/user2<br />
# chown virtual:virtual /srv/ftp/user?/<br />
<br />
随后, 在 {{ic|/etc/vsftpd.conf}} 增加如下行:<br />
local_root=/srv/ftp/$USER<br />
user_sub_token=$USER<br />
<br />
== 问题解决 ==<br />
<br />
=== vsftpd: no connection (Error 500) with recent kernels (3.5 and newer) and .service ===<br />
将其添加到您的 {{ic|/etc/vsftpd.conf}}:<br />
seccomp_sandbox=NO<br />
<br />
=== vsftpd: refusing to run with writable root inside chroot() ===<br />
从 vsftpd 2.3.5 开始,用户被锁定的 chroot 目录不可写。这是为了防止安全漏洞。<br />
<br />
允许上传的安全方法是保持 chroot 启用,并配置您的 FTP 目录。<br />
<br />
local_root=/srv/ftp/user<br />
<br />
# mkdir -p /srv/ftp/user/upload<br />
#<br />
# chmod 550 /srv/ftp/user<br />
# chmod 750 /srv/ftp/user/upload<br />
<br />
如果你必须这么做:<br />
<br />
您可以将其放入您的 {{ic|/etc/vsftpd.conf}} 以解决此安全性增强(自vsftpd 3.0.0;来自 [http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/ Fixing 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()]):<br />
allow_writeable_chroot=YES<br />
或者:<br />
<br />
安装 {{AUR|vsftpd-ext}} {{Broken package link|{{aur-mirror|vsftpd-ext}}}} 并在 conf 文件中设置<br />
allow_writable_chroot=YES<br />
<br />
=== FileZilla Client: GnuTLS error -8 -15 -110 when connecting via SSL ===<br />
vsftpd 尝试在 SSL 会话中显示纯文本错误消息。为了进行调试,暂时禁用加密,您将看到正确的错误消息。[http://ramblings.linkerror.com/?p=45] [https://serverfault.com/questions/772494/vsftpd-list-causes-gnutls-error-15]<br />
<br />
=== vsftpd.service fails to run on boot ===<br />
如果您启用了 {{ic|vsftpd.service}},并且无法在启动时运行,请确保它已在服务文件中设置为在 {{ic|network.target}} 之后加载:<br />
<br />
{{hc|/usr/lib/systemd/system/vsftpd.service|2=<br />
[Unit]<br />
Description=vsftpd daemon<br />
After=network.target}}<br />
<br />
=== ipv6 only fails with: 500 OOPS: run two copies of vsftpd for IPv4 and IPv6 ===<br />
你很有可能已经注释了这一行<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
#listen=YES<br />
#<br />
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6<br />
# sockets, you must run two copies of vsftpd with two configuration files.<br />
# Make sure, that one of the listen options is commented !!<br />
listen_ipv6=YES<br />
<br />
而不是设置<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
listen=NO<br />
<br />
=== vsftpd 连接在使用 nis 的机器上失败: yp_bind_client_create_v2: RPC: Unable to send ===<br />
as mentioned on the vsftpd faq page, "...built-in sandboxing uses network isolation on Linux. This<br />
may be interfering with any module that needs to use the network to perform operations or lookups"<br />
正如在 vsftpd fap 页面上提到的那样,“...内置沙盒使用 linux 上的网络隔离可能会干扰任何需要使用网络执行操作或查找的模块”<br />
<br />
将这个未公开的行添加到你的 {{ic|/etc/vsftpd.conf}}<br />
isolate_network=NO<br />
<br />
== 更多资源 ==<br />
* [http://vsftpd.beasts.org/ vsftpd official homepage]<br />
* [http://vsftpd.beasts.org/vsftpd_conf.html vsftpd.conf man page]<br />
* [https://security.appspot.com/vsftpd/FAQ.txt vsftpd FAQ]</div>
745275633
https://wiki.archlinux.org/index.php?title=Archiso_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=518099
Archiso (简体中文)
2018-04-21T03:25:28Z
<p>745275633: 518033</p>
<hr />
<div>[[Category:简体中文]]<br />
[[Category:Live Arch systems (简体中文)]]<br />
[[Category:Getting and installing Arch (简体中文)]]<br />
[[Category:Arch projects (简体中文)]]<br />
[[ar:Archiso]]<br />
[[el:Archiso]]<br />
[[en:Archiso]]<br />
[[es:Archiso]]<br />
[[fr:Archiso]]<br />
[[it:Archiso]]<br />
[[ja:Archiso]]<br />
[[nl:Archiso]]<br />
[[ru:Archiso]]<br />
[[sk:Archiso]]<br />
{{TranslationStatus (简体中文)|Archiso|2018-04-21|518033}}<br />
{{Related articles start (简体中文)}}<br />
{{Related|Remastering the Install ISO}}<br />
{{Related2|PXE (简体中文)|PXE}}<br />
{{Related2|Archboot (简体中文)|Archboot}}<br />
{{Related articles end}}<br />
'''Archiso''' 是一组 bash 脚本,它能够建立功能全面的 Arch Linux 的 Live CD/DVD/USB 映像。它同样是用来生成官方映像的工具,但由于它是一个非常通用的工具,所以它可以被用来生成从救援系统、安装盘,到特殊爱好的 Live CD/DVD/USB 系统——无人知晓还有其他什么。简单地说,如果要将 Arch 放在一条闪光的船上,它可以帮你做到这一点。Archiso 的核心以及灵魂是 ''mkarchiso''。它的所有选项都写在它的用法输出上,所以它的直接使用方法将不在这里讨论。相反,这篇 wiki 文章将导引你迅速建立你的 Live 介质。<br />
<br />
== 安装和配置 ==<br />
<br />
{{注意|<br />
* 您必须在 x86_64 上运行 Archiso。 [https://projects.archlinux.org/archiso.git/tree/docs/README.build#n67]<br />
* 以下操作请在ROOT权限下使用,在错误的权限下操作会造成一下问题。}}<br />
当你开始之前, [[install|安装]] {{Pkg|archiso}} 或 {{AUR|archiso-git}}。<br />
<br />
创建一个用于工作的目录, 实时镜像将会在这里被处理。 {{ic|~/archlive}} 是一个好选择。<br />
$ mkdir ~/archlive<br />
<br />
现在要将早先安装到主机的 archiso 脚本复制到你新建的工作目录内。<br />
<br />
Archiso 附带2个预定义配置(profiles): ''releng'' 和''baseline''。<br />
<br />
* 如果您想要创建完全定制的 Live Arch Linux ,并预装所有您喜爱的程序和配置,使用 ''releng''。<br />
<br />
* 如果您只是想构建一个简易 Live 镜像,无预装软件并仅有基础配置,那么使用 ''baseline''。<br />
<br />
现在,将您选择的配置文件复制到目录(在下面的示例中为 ''archlive''),您可以在其中进行调整和构建。 执行以下操作,用 {{ic|releng}} 或 {{ic|baseline}} 替换 {{ic|'''profile'''}}。<br />
<br />
# cp -r /usr/share/archiso/configs/'''profile'''/* ''archlive''<br />
<br />
* 如果你使用 {{ic|releng}} 配置文件来创建一个完全自定义的镜像,那么你可以继续到:[[#配置 Live 介质]]。<br />
<br />
* 如果您使用 {{ic|baseline}} 配置文件创建一个简易映像,那么你不需要做任何定制,并可以直接继续到 [[#构建ISO]].<br />
<br />
== 配置 Live 介质 ==<br />
<br />
本节详细介绍该如何配置您将创建的映像,允许您定义哪些包以及配置将被您的 Live 映像所包含。<br />
在 [[#安装和配置]] 中创建的{{ic|''archlive''}}目录中有许多文件和目录; 我们只关注其中一部分,主要是<br />
* {{ic|packages.*}} - 在这里一行行列出你想要安装的包,和 <br />
* {{ic|airootfs}} 目录——这是一个覆盖目录,你将在这里完成所有的定制工作。<br />
一般来说,您在全新安装之后所执行的每个管理任务(不包括软件包安装)可以被写入这个脚本: {{ic|''archlive''/airootfs/root/customize_airootfs.sh}}。您必须从新环境的角度来写该脚本,所以脚本中的 / 代表方才被创建的 Live ISO 的根。<br />
<br />
=== 安装包 ===<br />
<br />
[[Edit|编辑]] {{ic|packages.i686}},{{ic|packages.x86_64}} 或 {{ic|packages.both}} 中的程序包列表,以指示要在 live 媒体上安装那些程序包。这里的后缀表示包可用的架构。<br />
<br />
{{Note|如果要在 Live CD 中使用 [[窗口管理器]],则必须添加必要且正确的 [[video drivers]],否则 WM 可能在加载时冻结。}}<br />
<br />
==== 自定义本地库 ====<br />
<br />
{{Merge|Pacman/Tips_and_tricks_(简体中文)#自建本地仓库|移动一般信息 (如:仓库目录树) 到主文章.|Talk:Archiso}}<br />
<br />
为了准备自定义包或是从 [[Arch User Repository (简体中文)|AUR]]/[[Arch Build System (简体中文)|ABS]] 安装包,你也可以 [[Custom local repository|创建自定义本地资源库]]。如果您希望支持多种体系结构,则应采取预防措施来防止发生错误。每个架构应该有自己的目录树:<br />
<br />
{{hc|$ tree ~/customrepo/ {{!}} sed "s/$(uname -m)/<arch>/g"|<br />
/home/archie/customrepo/<br />
└── <arch><br />
├── customrepo.db -> customrepo.db.tar.xz<br />
├── customrepo.db.tar.xz<br />
├── customrepo.files -> customrepo.files.tar.xz<br />
├── customrepo.files.tar.xz<br />
└── personal-website-git-b99cce0-1-<arch>.pkg.tar.xz<br />
<br />
1 directory, 5 files<br />
}}<br />
<br />
如此后,您可以添加您的仓库——把下面的句子加入 {{ic|~/archlive/pacman.conf}},并置于其他仓库条目上面(优先级最高):<br />
<br />
{{hc|~/archlive/pacman.conf|...<br />
# custom repository<br />
[customrepo]<br />
SigLevel <nowiki>=</nowiki> Optional TrustAll<br />
Server <nowiki>=</nowiki> file:///home/'''user'''/customrepo/$arch<br />
...}}<br />
<br />
''repo-add'' 可执行文件检查软件包是否合适。如果不,那么你将得到与此类似的错误消息:<br />
<br />
==> ERROR: '/home/archie/customrepo/<arch>/foo-<arch>.pkg.tar.xz' does not have a valid database archive extension.<br />
<br />
==== 避免安装属于base组的包 ====<br />
<br />
默认情况下,{{ic|/usr/bin/mkarchiso}}——一个被 {{ic|~/archlive/build.sh}} 使用的脚本——会调用 {{Pkg|arch-install-scripts}} 中一个名为 {{ic|pacstrap}} 的程序,且在调用时不使用 {{ic|-i}} 标志——这将使 [[Pacman]] 在安装过程中不等待用户输入。<br />
<br />
当 base 组软件包被加入黑名单——把它们写到 {{ic|~/archlive/pacman.conf}} 中的 {{ic|IgnorePkg}} 行——时,[[Pacman]] 会询问是否仍然安装它们——意味着如果用户输入被跳过,它们就会被安装。为了避免安装这些包,这里有一些选择:<br />
<br />
* '''丑陋'''方案(Dirty):在 {{ic|/usr/bin/mkarchiso}} 中每次调用 {{ic|pacstrap}} 的行上加入 {{ic|i}} 标志。<br />
<br />
* '''整洁'''方案(Clean):创建 {{ic|/usr/bin/mkarchiso}} 的一份复制。在该复制中增加此标志,并修改 {{ic|~/archlive/build.sh}} 以使其调用修改过的 mkarchiso 脚本。<br />
<br />
* '''高级'''方案(Advanced): 在 {{ic|~/archlive/build.sh}} 中创建一个函数,该函数将在基础安装结束后显式移除那些包。若这样做,可以免去在安装过程中多次按回车键的麻烦。<br />
<br />
==== Installing packages from multilib ====<br />
<br />
要从 [[Multilib (简体中文)|Multilib]] 资源库安装软件包,您必须创建两个 pacman 配置文件:一个用于 x86_64,一个用于 i686。 将 {{ic|pacman.conf}} 复制到 {{ic|pacmanx86_64.conf}} 和 {{ic|pacmani686.conf}}。 取消注释以下行以{{ic|pacmanx86_64.conf}} 中启用 ''multilib''):<br />
<br />
{{hc|pacmanx86_64.conf|2=<br />
[multilib]<br />
SigLevel = PackageRequired<br />
Include = /etc/pacman.d/mirrorlist<br />
}}<br />
<br />
然后用编辑器编辑 {{ic|build.sh}}。 把:<br />
<br />
{{hc|build.sh|<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in i686 x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
done<br />
<br />
run_once make_packages_efi<br />
<br />
for arch in i686 x86_64; do<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
改为:<br />
<br />
{{hc|build.sh|<br />
cp -v releng/pacmanx86_64.conf releng/pacman.conf<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
<br />
echo make_pacman_conf i686<br />
cp -v releng/pacmani686.conf releng/pacman.conf<br />
cp -v releng/pacmani686.conf ${work_dir}/pacman.conf<br />
<br />
<br />
for arch in i686; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
这样,x86_64 和 i686 的软件包将安装有自己的pacman配置文件。<br />
<br />
=== 向映像里添加文件===<br />
<br />
{{注意|你必须使用 root 权限来完成这件事,不要改变任何你复制过来的文件的所有权,airootfs 中的'''所有'''文件必须为 root 用户所有。适当的所有制将在不久被解决。}}<br />
<br />
airootfs 目录作为要覆盖的文件,把它看作是在当前系统上的根目录'/',所以你在这个目录中放置的任何文件都将在开机时被复制。<br />
<br />
所以,如果你在当前系统上有一组 iptables 脚本且想要在 Live 映像上使用,请这样复制:<br />
# cp -r /etc/iptables ~/archlive/airootfs/etc<br />
<br />
在用户 home 文件夹里放置文件的方法有些许不同。不要把它们放在 {{ic|airootfs/home}},而是在 airootfs/ 里创建 skel 目录并将其放置在那里。然后我们会将相关命令添加到 {{ic|customize_airootfs.sh}}——我们要使用它在引导时复制文件以及梳理权限。<br />
<br />
首先,创建 skel 目录<br />
# mkdir ~/archlive/airootfs/etc/skel<br />
<br />
现在,复制 'home' 的文件到 skel 目录。例如,对于 {{ic|.bashrc}}:<br />
# cp ~/.bashrc ~/archlive/airootfs/etc/skel/<br />
<br />
当 {{ic|~/archlive/airootfs/root/customize_airootfs.sh}} 被执行,并且一个新用户已被创建, skel 目录中的文件将自动被复制到新的 home 文件夹中,并被设置正确的权限。<br />
<br />
类似地,需要注意位于层次结构下方的特殊配置文件。作为示例,配置文件 {{ic|/etc/X11/xinit/xinitrc}} 位于可能被安装包覆盖的路径上。要将 {{ic|xinitrc}} 的配置文件放在 {{ic|~/archlive/airootfs/etc/skel/}} ,然后修改 {{ic|customize_airootfs.sh}} 以适当地移动。<br />
<br />
=== 引导器 ===<br />
<br />
默认的文件应该可以正常工作,所以你应该不需要去碰它。<br />
<br />
由于 isolinux 的模块化性质,你能够使用很多插件,因为所有 *.c32 都被复制且可以可供您使用。看看[http://syslinux.zytor.com/wiki/index.php/SYSLINUX syslinux 官方网站] 和 [https://projects.archlinux.org/archiso.git/tree/configs/syslinux-iso/boot-files Archiso Git Repo]。使用所述插件,便有可能做出更具视觉吸引力及复杂的菜单。参见 [http://syslinux.zytor.com/wiki/index.php/Comboot/menu.c32 此处]。<br />
<br />
=== 登录管理器 ===<br />
<br />
通过启用您登录管理器的 [[Systemd (简体中文)|systemd]] 服务来做到在引导时启动 X 。如果您知道哪一个 .service 文件需要软链接,那就太好了。如果不知道,你也可以轻松找出——如果你在创建 iso 所用的系统上使用相同的程序的话。只需使用:<br />
<br />
$ ls -l /etc/systemd/system/display-manager.service<br />
<br />
现在在 {{ic|~/archlive/airootfs/etc/systemd/system}} 中创建相同的软链接。如 LXDM:<br />
<br />
# ln -s /usr/lib/systemd/system/lxdm.service ~/archlive/airootfs/etc/systemd/system/display-manager.service<br />
<br />
这将使您在 live 系统启用在系统上启动 LXDM。(This will enable LXDM at system start on your live system.)<br />
<br />
或者,您也可以启用 {{ic|airootfs/root/customize_airootfs.sh}} 中的服务以及其中启用的其他服务。<br />
<br />
如果您希望图形环境在启动过程中自动启动,请确保编辑 {{ic|airootfs/root/customize_airootfs.sh}} 并替换<br />
systemctl set-default multi-user.target<br />
为<br />
systemctl set-default graphical.target<br />
<br />
=== 改变自动登录状态 ===<br />
<br />
Getty 的自动登录配置位于 {{ic|airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf}}。 <br />
<br />
您可以修改这个文件来更改自动登录用户:<br />
<br />
[Service]<br />
ExecStart=<br />
ExecStart=-/sbin/agetty --autologin '''isouser''' --noclear %I 38400 linux<br />
<br />
或者干脆删除它来禁用自动登录。<br />
<br />
== 构建ISO ==<br />
<br />
现在,你已经准备好把你的文件转换成 .iso,以便可以刻录到 CD 或 USB:<br />
<br />
首先创建 {{ic|out/}} 目录(可选,如果没有的话 build.sh 将会创建它),<br />
<br />
# mkdir ~/archlive/out/<br />
<br />
然后在 {{ic|~/archlive}} 里面执行:<br />
<br />
# ./build.sh -v<br />
<br />
该脚本将现在下载并安装你指定的软件包到 {{ic|work/*/airootfs}},创建内核和 init 映像(initramfs),应用您的修改,并最终把 ISO 建立到 {{ic|out/}}。<br />
<br />
=== 重建ISO ===<br />
<br />
在修改之后重建 ISO 不被官方支持。但是,通过应用两个步骤很容易。首先,您必须删除工作目录中的锁定文件:<br />
<br />
# rm -v work/build.make_*<br />
<br />
此外,需要编辑脚本 {{ic|airootfs/root/customize_airootfs.sh}},并在 {{ic|useradd}} 行的开头添加 {{ic|id}} 命令,如下所示。否则,重建将在此处停止,因为要添加的用户已经存在 [https://bugs.archlinux.org/task/41865]。<br />
{{Style|typo?}}<br />
<br />
! id arch && useradd -m -p "" -g users -G "adm,audio,floppy,log,network,rfkill,scanner,storage,optical,power,wheel" -s /usr/bin/zsh arch<br />
<br />
同时删除创建的用户或符号链接,如 {{ic|/etc/sudoers}} 等持久性数据。<br />
<br />
{{Expansion|报告需要删除或重置的更多数据。}}<br />
<br />
通过编辑 pacstrap 脚本(位于 /bin/pacstrap)并在第 361 行更改以下内容,可以稍微加快重建速度:<br />
<br />
修改前:<br />
<br />
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then<br />
<br />
修改后:<br />
<br />
if ! pacman -r "$newroot" -Sy --needed "${pacman_args[@]}"; then<br />
<br />
这增加了初始引导的速度,因为它不必下载和安装任何已经安装的基础包。<br />
<br />
== 使用ISO ==<br />
<br />
有关各种选项,请参见 [[:Category:Getting_and_installing_Arch_(简体中文)#安装方式]] 部分。<br />
<br />
== 提示和技巧 ==<br />
<br />
=== 在沒有互联网连接的情况下安装 Archiso ===<br />
{{Move|Installation without Internet access|似乎这可以独立成一篇|Talk:Archiso}}<br />
{{Accuracy|可以将 Arch 镜像上提供的 “bootstrap” 映像直接提取到目标磁盘,而不是从 archiso 复制文件。 你将得到一个最小的系统,而不需要处理 archiso 修改。|Talk:Archiso}}<br />
<br />
若你想在没有互联网连接或者你不想重复下载你想要的包的情况下安装 archiso(例如[https://www.archlinux.org/download/ 官方的每月发布版]):<br />
<br />
首先,按照[[Installation guide (简体中文)|安装指南]],并跳过一些步骤(如[[Installation guide (简体中文)#连接到因特网|连接到因特网]]),直到[[Installation guide (简体中文)#安装基本系统|安装基本系统]]之前。<br />
<br />
==== 安装 archiso 到新的 root ====<br />
<br />
复制 Live 环境的''所有文件''到新的根目录,而不是使用 {{ic|pacstrap}}(这将尝试从远程存储库下载):<br />
# cp -ax / /mnt<br />
{{注意|The option ({{ic|-x}})排除了一些特殊目录,因为它们不应该被复制到新的根目录。}}<br />
<br />
然后,创建一些目录并复制内核映像到新的根,以保证新系统的完整性:<br />
<br />
# cp -vaT /run/archiso/bootmnt/arch/boot/$(uname -m)/vmlinuz /mnt/boot/vmlinuz-linux<br />
<br />
完成之后,请按[[Installation guide (简体中文)#Fstab]]所述生成 fstab。<br />
<br />
==== Chroot 并配置基本系统 ====<br />
<br />
下一步,chroot 到您新安装的系统:<br />
<br />
# arch-chroot /mnt /bin/bash<br />
<br />
请注意,在您配置 locale、键盘映射等之前,你仍然需要为了避免延续 Live 环境的轨迹——或者说对 archiso 所做的一些不适用于非 Live 环境的修改——而做一些事情。<br />
<br />
===== 恢复 journald 的配置 =====<br />
[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/root/customize_airootfs.sh#n19 archiso 的这个修改]会导致日志存储在 RAM 上——它意味着在重启后日志便会丢失。为了解决这个问题,执行:<br />
<br />
# sed -i 's/Storage=volatile/#Storage=auto/' /etc/systemd/journald.conf<br />
<br />
===== 删除特殊的 udev 规则 =====<br />
如果有任何有线网络接口,[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/etc/udev/rules.d/81-dhcpcd.rules udev 的这个规则]会自动启动dhcpcd。<br />
<br />
# rm /etc/udev/rules.d/81-dhcpcd.rules<br />
<br />
===== 禁用和移除 archiso 创建的服务 =====<br />
有一些服务文件是为 Live 环境创建的,请禁用这些服务并移除文件——因为它们对于新系统来说没必要存在:<br />
<br />
# systemctl disable pacman-init.service choose-mirror.service<br />
# rm -r /etc/systemd/system/{choose-mirror.service,pacman-init.service,etc-pacman.d-gnupg.mount,getty@tty1.service.d}<br />
# rm /etc/systemd/scripts/choose-mirror<br />
<br />
===== 移除 Live 环境的特殊脚本 =====<br />
在 live 系统中通过 archiso 脚本安装了一些脚本,这对于新系统是不必要的:<br />
<br />
# rm /etc/systemd/system/getty@tty1.service.d/autologin.conf<br />
# rm /root/{.automated_script.sh,.zlogin}<br />
# rm /etc/mkinitcpio-archiso.conf<br />
# rm -r /etc/initcpio<br />
<br />
===== 导入archlinux密钥 =====<br />
<br />
为了使用官方存储库,我们需要导入 archlinux 主密钥([[Pacman/Package signing (简体中文)#初始化密钥环]])。这一步通常是通过 pacstrap 完成的,但是可以通过<br />
<br />
# pacman-key --init<br />
# pacman-key --populate archlinux<br />
<br />
{{注意|Keyboard or mouse activity is needed to generate entropy and speed-up the first step.}}<br />
<br />
===== 配置系统 =====<br />
<br />
现在,您可以按照 [[Installation guide (简体中文)#配置系统]] 中跳过的步骤(设置语言环境,时区,主机名等),并通过创建初始 ramdisk 来完成安装,如 [[Installation guide (简体中文)#Initramfs]]。<br />
<br />
===== 启用图形登录(可选) =====<br />
<br />
如果使用像GDM这样的显示管理器,则可能需要将 systemd 默认目标从 multi-user.target 更改为允许图形登录的目标。<br />
# systemctl disable multi-user.target<br />
# systemctl enable graphical.target<br />
<br />
== 参阅 ==<br />
=== 文档和教程 ===<br />
* [https://projects.archlinux.org/archiso.git Archiso 项目页面]<br />
* [https://projects.archlinux.org/archiso.git/tree/docs 官方文档]<br />
<br />
=== 示例自定义模板 ===<br />
* [http://easy.open.and.free.fr/didjix/ A live DJ distribution powered by ArchLinux and built with Archiso]</div>
745275633
https://wiki.archlinux.org/index.php?title=Archiso_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=517550
Archiso (简体中文)
2018-04-15T04:55:33Z
<p>745275633: 516683(remove rm on non existing files)</p>
<hr />
<div>[[Category:简体中文]]<br />
[[Category:Live Arch systems (简体中文)]]<br />
[[Category:Getting and installing Arch (简体中文)]]<br />
[[Category:Arch projects (简体中文)]]<br />
[[ar:Archiso]]<br />
[[el:Archiso]]<br />
[[en:Archiso]]<br />
[[es:Archiso]]<br />
[[fr:Archiso]]<br />
[[it:Archiso]]<br />
[[ja:Archiso]]<br />
[[nl:Archiso]]<br />
[[ru:Archiso]]<br />
[[sk:Archiso]]<br />
{{TranslationStatus (简体中文)|Archiso|2018-04-07|516683}}<br />
{{Related articles start (简体中文)}}<br />
{{Related|Remastering the Install ISO}}<br />
{{Related2|PXE (简体中文)|PXE}}<br />
{{Related2|Archboot (简体中文)|Archboot}}<br />
{{Related articles end}}<br />
'''Archiso''' 是一组 bash 脚本,它能够建立功能全面的 Arch Linux 的 Live CD/DVD/USB 映像。它同样是用来生成官方映像的工具,但由于它是一个非常通用的工具,所以它可以被用来生成从救援系统、安装盘,到特殊爱好的 Live CD/DVD/USB 系统——无人知晓还有其他什么。简单地说,如果要将 Arch 放在一条闪光的船上,它可以帮你做到这一点。Archiso 的核心以及灵魂是 ''mkarchiso''。它的所有选项都写在它的用法输出上,所以它的直接使用方法将不在这里讨论。相反,这篇 wiki 文章将导引你迅速建立你的 Live 介质。<br />
<br />
== 安装和配置 ==<br />
<br />
{{注意|<br />
* 您必须在 x86_64 上运行 Archiso。 [https://projects.archlinux.org/archiso.git/tree/docs/README.build#n67]<br />
* 以下操作请在ROOT权限下使用,在错误的权限下操作会造成一下问题。}}<br />
当你开始之前, [[install|安装]] {{Pkg|archiso}} 或 {{AUR|archiso-git}}。<br />
<br />
创建一个用于工作的目录, 实时镜像将会在这里被处理。 {{ic|~/archlive}} 是一个好选择。<br />
$ mkdir ~/archlive<br />
<br />
现在要将早先安装到主机的 archiso 脚本复制到你新建的工作目录内。<br />
<br />
Archiso 附带2个预定义配置(profiles): ''releng'' 和''baseline''。<br />
<br />
* 如果您想要创建完全定制的 Live Arch Linux ,并预装所有您喜爱的程序和配置,使用 ''releng''。<br />
<br />
* 如果您只是想构建一个简易 Live 镜像,无预装软件并仅有基础配置,那么使用 ''baseline''。<br />
<br />
现在,将您选择的配置文件复制到目录(在下面的示例中为 ''archlive''),您可以在其中进行调整和构建。 执行以下操作,用 {{ic|releng}} 或 {{ic|baseline}} 替换 {{ic|'''profile'''}}。<br />
<br />
# cp -r /usr/share/archiso/configs/* ''archlive''<br />
<br />
* 如果你使用 {{ic|releng}} 配置文件来创建一个完全自定义的镜像,那么你可以继续到:[[#配置 Live 介质]]。<br />
<br />
* 如果您使用 {{ic|baseline}} 配置文件创建一个简易映像,那么你不需要做任何定制,并可以直接继续到 [[#构建ISO]].<br />
<br />
== 配置 Live 介质 ==<br />
<br />
本节详细介绍该如何配置您将创建的映像,允许您定义哪些包以及配置将被您的 Live 映像所包含。<br />
在 [[#安装和配置]] 中创建的{{ic|''archlive''}}目录中有许多文件和目录; 我们只关注其中一部分,主要是<br />
* {{ic|packages.*}} - 在这里一行行列出你想要安装的包,和 <br />
* {{ic|airootfs}} 目录——这是一个覆盖目录,你将在这里完成所有的定制工作。<br />
一般来说,您在全新安装之后所执行的每个管理任务(不包括软件包安装)可以被写入这个脚本: {{ic|''archlive''/airootfs/root/customize_airootfs.sh}}。您必须从新环境的角度来写该脚本,所以脚本中的 / 代表方才被创建的 Live ISO 的根。<br />
<br />
=== 安装包 ===<br />
<br />
[[Edit|编辑]] {{ic|packages.i686}},{{ic|packages.x86_64}} 或 {{ic|packages.both}} 中的程序包列表,以指示要在 live 媒体上安装那些程序包。这里的后缀表示包可用的架构。<br />
<br />
{{Note|如果要在 Live CD 中使用 [[窗口管理器]],则必须添加必要且正确的 [[video drivers]],否则 WM 可能在加载时冻结。}}<br />
<br />
==== 自定义本地库 ====<br />
<br />
{{Merge|Pacman/Tips_and_tricks_(简体中文)#自建本地仓库|移动一般信息 (如:仓库目录树) 到主文章.|Talk:Archiso}}<br />
<br />
为了准备自定义包或是从 [[Arch User Repository (简体中文)|AUR]]/[[Arch Build System (简体中文)|ABS]] 安装包,你也可以 [[Custom local repository|创建自定义本地资源库]]。如果您希望支持多种体系结构,则应采取预防措施来防止发生错误。每个架构应该有自己的目录树:<br />
<br />
{{hc|$ tree ~/customrepo/ {{!}} sed "s/$(uname -m)/<arch>/g"|<br />
/home/archie/customrepo/<br />
└── <arch><br />
├── customrepo.db -> customrepo.db.tar.xz<br />
├── customrepo.db.tar.xz<br />
├── customrepo.files -> customrepo.files.tar.xz<br />
├── customrepo.files.tar.xz<br />
└── personal-website-git-b99cce0-1-<arch>.pkg.tar.xz<br />
<br />
1 directory, 5 files<br />
}}<br />
<br />
如此后,您可以添加您的仓库——把下面的句子加入 {{ic|~/archlive/pacman.conf}},并置于其他仓库条目上面(优先级最高):<br />
<br />
{{hc|~/archlive/pacman.conf|...<br />
# custom repository<br />
[customrepo]<br />
SigLevel <nowiki>=</nowiki> Optional TrustAll<br />
Server <nowiki>=</nowiki> file:///home/'''user'''/customrepo/$arch<br />
...}}<br />
<br />
''repo-add'' 可执行文件检查软件包是否合适。如果不,那么你将得到与此类似的错误消息:<br />
<br />
==> ERROR: '/home/archie/customrepo/<arch>/foo-<arch>.pkg.tar.xz' does not have a valid database archive extension.<br />
<br />
==== 避免安装属于base组的包 ====<br />
<br />
默认情况下,{{ic|/usr/bin/mkarchiso}}——一个被 {{ic|~/archlive/build.sh}} 使用的脚本——会调用 {{Pkg|arch-install-scripts}} 中一个名为 {{ic|pacstrap}} 的程序,且在调用时不使用 {{ic|-i}} 标志——这将使 [[Pacman]] 在安装过程中不等待用户输入。<br />
<br />
当 base 组软件包被加入黑名单——把它们写到 {{ic|~/archlive/pacman.conf}} 中的 {{ic|IgnorePkg}} 行——时,[[Pacman]] 会询问是否仍然安装它们——意味着如果用户输入被跳过,它们就会被安装。为了避免安装这些包,这里有一些选择:<br />
<br />
* '''丑陋'''方案(Dirty):在 {{ic|/usr/bin/mkarchiso}} 中每次调用 {{ic|pacstrap}} 的行上加入 {{ic|i}} 标志。<br />
<br />
* '''整洁'''方案(Clean):创建 {{ic|/usr/bin/mkarchiso}} 的一份复制。在该复制中增加此标志,并修改 {{ic|~/archlive/build.sh}} 以使其调用修改过的 mkarchiso 脚本。<br />
<br />
* '''高级'''方案(Advanced): 在 {{ic|~/archlive/build.sh}} 中创建一个函数,该函数将在基础安装结束后显式移除那些包。若这样做,可以免去在安装过程中多次按回车键的麻烦。<br />
<br />
==== Installing packages from multilib ====<br />
<br />
要从 [[Multilib (简体中文)|Multilib]] 资源库安装软件包,您必须创建两个 pacman 配置文件:一个用于 x86_64,一个用于 i686。 将 {{ic|pacman.conf}} 复制到 {{ic|pacmanx86_64.conf}} 和 {{ic|pacmani686.conf}}。 取消注释以下行以{{ic|pacmanx86_64.conf}} 中启用 ''multilib''):<br />
<br />
{{hc|pacmanx86_64.conf|2=<br />
[multilib]<br />
SigLevel = PackageRequired<br />
Include = /etc/pacman.d/mirrorlist<br />
}}<br />
<br />
然后用编辑器编辑 {{ic|build.sh}}。 把:<br />
<br />
{{hc|build.sh|<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in i686 x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
done<br />
<br />
run_once make_packages_efi<br />
<br />
for arch in i686 x86_64; do<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
改为:<br />
<br />
{{hc|build.sh|<br />
cp -v releng/pacmanx86_64.conf releng/pacman.conf<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
<br />
echo make_pacman_conf i686<br />
cp -v releng/pacmani686.conf releng/pacman.conf<br />
cp -v releng/pacmani686.conf ${work_dir}/pacman.conf<br />
<br />
<br />
for arch in i686; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
这样,x86_64 和 i686 的软件包将安装有自己的pacman配置文件。<br />
<br />
=== 向映像里添加文件===<br />
<br />
{{注意|你必须使用 root 权限来完成这件事,不要改变任何你复制过来的文件的所有权,airootfs 中的'''所有'''文件必须为 root 用户所有。适当的所有制将在不久被解决。}}<br />
<br />
airootfs 目录作为要覆盖的文件,把它看作是在当前系统上的根目录'/',所以你在这个目录中放置的任何文件都将在开机时被复制。<br />
<br />
所以,如果你在当前系统上有一组 iptables 脚本且想要在 Live 映像上使用,请这样复制:<br />
# cp -r /etc/iptables ~/archlive/airootfs/etc<br />
<br />
在用户 home 文件夹里放置文件的方法有些许不同。不要把它们放在 {{ic|airootfs/home}},而是在 airootfs/ 里创建 skel 目录并将其放置在那里。然后我们会将相关命令添加到 {{ic|customize_airootfs.sh}}——我们要使用它在引导时复制文件以及梳理权限。<br />
<br />
首先,创建 skel 目录<br />
# mkdir ~/archlive/airootfs/etc/skel<br />
<br />
现在,复制 'home' 的文件到 skel 目录。例如,对于 {{ic|.bashrc}}:<br />
# cp ~/.bashrc ~/archlive/airootfs/etc/skel/<br />
<br />
当 {{ic|~/archlive/airootfs/root/customize_airootfs.sh}} 被执行,并且一个新用户已被创建, skel 目录中的文件将自动被复制到新的 home 文件夹中,并被设置正确的权限。<br />
<br />
类似地,需要注意位于层次结构下方的特殊配置文件。作为示例,配置文件 {{ic|/etc/X11/xinit/xinitrc}} 位于可能被安装包覆盖的路径上。要将 {{ic|xinitrc}} 的配置文件放在 {{ic|~/archlive/airootfs/etc/skel/}} ,然后修改 {{ic|customize_airootfs.sh}} 以适当地移动。<br />
<br />
=== 引导器 ===<br />
<br />
默认的文件应该可以正常工作,所以你应该不需要去碰它。<br />
<br />
由于 isolinux 的模块化性质,你能够使用很多插件,因为所有 *.c32 都被复制且可以可供您使用。看看[http://syslinux.zytor.com/wiki/index.php/SYSLINUX syslinux 官方网站] 和 [https://projects.archlinux.org/archiso.git/tree/configs/syslinux-iso/boot-files Archiso Git Repo]。使用所述插件,便有可能做出更具视觉吸引力及复杂的菜单。参见 [http://syslinux.zytor.com/wiki/index.php/Comboot/menu.c32 此处]。<br />
<br />
=== 登录管理器 ===<br />
<br />
通过启用您登录管理器的 [[Systemd (简体中文)|systemd]] 服务来做到在引导时启动 X 。如果您知道哪一个 .service 文件需要软链接,那就太好了。如果不知道,你也可以轻松找出——如果你在创建 iso 所用的系统上使用相同的程序的话。只需使用:<br />
<br />
$ ls -l /etc/systemd/system/display-manager.service<br />
<br />
现在在 {{ic|~/archlive/airootfs/etc/systemd/system}} 中创建相同的软链接。如 LXDM:<br />
<br />
# ln -s /usr/lib/systemd/system/lxdm.service ~/archlive/airootfs/etc/systemd/system/display-manager.service<br />
<br />
这将使您在 live 系统启用在系统上启动 LXDM。(This will enable LXDM at system start on your live system.)<br />
<br />
或者,您也可以启用 {{ic|airootfs/root/customize_airootfs.sh}} 中的服务以及其中启用的其他服务。<br />
<br />
如果您希望图形环境在启动过程中自动启动,请确保编辑 {{ic|airootfs/root/customize_airootfs.sh}} 并替换<br />
systemctl set-default multi-user.target<br />
为<br />
systemctl set-default graphical.target<br />
<br />
=== 改变自动登录状态 ===<br />
<br />
Getty 的自动登录配置位于 {{ic|airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf}}。 <br />
<br />
您可以修改这个文件来更改自动登录用户:<br />
<br />
[Service]<br />
ExecStart=<br />
ExecStart=-/sbin/agetty --autologin '''isouser''' --noclear %I 38400 linux<br />
<br />
或者干脆删除它来禁用自动登录。<br />
<br />
== 构建ISO ==<br />
<br />
现在,你已经准备好把你的文件转换成 .iso,以便可以刻录到 CD 或 USB:<br />
<br />
首先创建 {{ic|out/}} 目录(可选,如果没有的话 build.sh 将会创建它),<br />
<br />
# mkdir ~/archlive/out/<br />
<br />
然后在 {{ic|~/archlive}} 里面执行:<br />
<br />
# ./build.sh -v<br />
<br />
该脚本将现在下载并安装你指定的软件包到 {{ic|work/*/airootfs}},创建内核和 init 映像(initramfs),应用您的修改,并最终把 ISO 建立到 {{ic|out/}}。<br />
<br />
=== 重建ISO ===<br />
<br />
在修改之后重建 ISO 不被官方支持。但是,通过应用两个步骤很容易。首先,您必须删除工作目录中的锁定文件:<br />
<br />
# rm -v work/build.make_*<br />
<br />
此外,需要编辑脚本 {{ic|airootfs/root/customize_airootfs.sh}},并在 {{ic|useradd}} 行的开头添加 {{ic|id}} 命令,如下所示。否则,重建将在此处停止,因为要添加的用户已经存在 [https://bugs.archlinux.org/task/41865]。<br />
{{Style|typo?}}<br />
<br />
! id arch && useradd -m -p "" -g users -G "adm,audio,floppy,log,network,rfkill,scanner,storage,optical,power,wheel" -s /usr/bin/zsh arch<br />
<br />
同时删除创建的用户或符号链接,如 {{ic|/etc/sudoers}} 等持久性数据。<br />
<br />
{{Expansion|报告需要删除或重置的更多数据。}}<br />
<br />
通过编辑 pacstrap 脚本(位于 /bin/pacstrap)并在第 361 行更改以下内容,可以稍微加快重建速度:<br />
<br />
修改前:<br />
<br />
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then<br />
<br />
修改后:<br />
<br />
if ! pacman -r "$newroot" -Sy --needed "${pacman_args[@]}"; then<br />
<br />
这增加了初始引导的速度,因为它不必下载和安装任何已经安装的基础包。<br />
<br />
== 使用ISO ==<br />
<br />
有关各种选项,请参见 [[:Category:Getting_and_installing_Arch_(简体中文)#安装方式]] 部分。<br />
<br />
== 提示和技巧 ==<br />
<br />
=== 在沒有互联网连接的情况下安装 Archiso ===<br />
{{Move|Installation without Internet access|似乎这可以独立成一篇|Talk:Archiso}}<br />
{{Accuracy|可以将 Arch 镜像上提供的 “bootstrap” 映像直接提取到目标磁盘,而不是从 archiso 复制文件。 你将得到一个最小的系统,而不需要处理 archiso 修改。|Talk:Archiso}}<br />
<br />
若你想在没有互联网连接或者你不想重复下载你想要的包的情况下安装 archiso(例如[https://www.archlinux.org/download/ 官方的每月发布版]):<br />
<br />
首先,按照[[Installation guide (简体中文)|安装指南]],并跳过一些步骤(如[[Installation guide (简体中文)#连接到因特网|连接到因特网]]),直到[[Installation guide (简体中文)#安装基本系统|安装基本系统]]之前。<br />
<br />
==== 安装 archiso 到新的 root ====<br />
<br />
复制 Live 环境的''所有文件''到新的根目录,而不是使用 {{ic|pacstrap}}(这将尝试从远程存储库下载):<br />
# cp -ax / /mnt<br />
{{注意|The option ({{ic|-x}})排除了一些特殊目录,因为它们不应该被复制到新的根目录。}}<br />
<br />
然后,创建一些目录并复制内核映像到新的根,以保证新系统的完整性:<br />
<br />
# cp -vaT /run/archiso/bootmnt/arch/boot/$(uname -m)/vmlinuz /mnt/boot/vmlinuz-linux<br />
<br />
完成之后,请按[[Installation guide (简体中文)#Fstab]]所述生成 fstab。<br />
<br />
==== Chroot 并配置基本系统 ====<br />
<br />
下一步,chroot 到您新安装的系统:<br />
<br />
# arch-chroot /mnt /bin/bash<br />
<br />
请注意,在您配置 locale、键盘映射等之前,你仍然需要为了避免延续 Live 环境的轨迹——或者说对 archiso 所做的一些不适用于非 Live 环境的修改——而做一些事情。<br />
<br />
===== 恢复 journald 的配置 =====<br />
[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/root/customize_airootfs.sh#n19 archiso 的这个修改]会导致日志存储在 RAM 上——它意味着在重启后日志便会丢失。为了解决这个问题,执行:<br />
<br />
# sed -i 's/Storage=volatile/#Storage=auto/' /etc/systemd/journald.conf<br />
<br />
===== 删除特殊的 udev 规则 =====<br />
如果有任何有线网络接口,[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/etc/udev/rules.d/81-dhcpcd.rules udev 的这个规则]会自动启动dhcpcd。<br />
<br />
# rm /etc/udev/rules.d/81-dhcpcd.rules<br />
<br />
===== 禁用和移除 archiso 创建的服务 =====<br />
有一些服务文件是为 Live 环境创建的,请禁用这些服务并移除文件——因为它们对于新系统来说没必要存在:<br />
<br />
# systemctl disable pacman-init.service choose-mirror.service<br />
# rm -r /etc/systemd/system/{choose-mirror.service,pacman-init.service,etc-pacman.d-gnupg.mount,getty@tty1.service.d}<br />
# rm /etc/systemd/scripts/choose-mirror<br />
<br />
===== 移除 Live 环境的特殊脚本 =====<br />
在 live 系统中通过 archiso 脚本安装了一些脚本,这对于新系统是不必要的:<br />
<br />
# rm /etc/systemd/system/getty@tty1.service.d/autologin.conf<br />
# rm /root/{.automated_script.sh,.zlogin}<br />
# rm /etc/mkinitcpio-archiso.conf<br />
# rm -r /etc/initcpio<br />
<br />
===== 导入archlinux密钥 =====<br />
<br />
为了使用官方存储库,我们需要导入 archlinux 主密钥([[Pacman/Package signing (简体中文)#初始化密钥环]])。这一步通常是通过 pacstrap 完成的,但是可以通过<br />
<br />
# pacman-key --init<br />
# pacman-key --populate archlinux<br />
<br />
{{注意|Keyboard or mouse activity is needed to generate entropy and speed-up the first step.}}<br />
<br />
===== 配置系统 =====<br />
<br />
现在,您可以按照 [[Installation guide (简体中文)#配置系统]] 中跳过的步骤(设置语言环境,时区,主机名等),并通过创建初始 ramdisk 来完成安装,如 [[Installation guide (简体中文)#Initramfs]]。<br />
<br />
===== 启用图形登录(可选) =====<br />
<br />
如果使用像GDM这样的显示管理器,则可能需要将 systemd 默认目标从 multi-user.target 更改为允许图形登录的目标。<br />
# systemctl disable multi-user.target<br />
# systemctl enable graphical.target<br />
<br />
== 参阅 ==<br />
=== 文档和教程 ===<br />
* [https://projects.archlinux.org/archiso.git Archiso 项目页面]<br />
* [https://projects.archlinux.org/archiso.git/tree/docs 官方文档]<br />
<br />
=== 示例自定义模板 ===<br />
* [http://easy.open.and.free.fr/didjix/ A live DJ distribution powered by ArchLinux and built with Archiso]</div>
745275633
https://wiki.archlinux.org/index.php?title=Archiso_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=516402
Archiso (简体中文)
2018-04-07T09:21:42Z
<p>745275633: Category:Arch projects (简体中文)</p>
<hr />
<div>[[Category:简体中文]]<br />
[[Category:Live Arch systems (简体中文)]]<br />
[[Category:Getting and installing Arch (简体中文)]]<br />
[[Category:Arch projects (简体中文)]]<br />
[[ar:Archiso]]<br />
[[el:Archiso]]<br />
[[en:Archiso]]<br />
[[es:Archiso]]<br />
[[fr:Archiso]]<br />
[[it:Archiso]]<br />
[[ja:Archiso]]<br />
[[nl:Archiso]]<br />
[[ru:Archiso]]<br />
[[sk:Archiso]]<br />
{{TranslationStatus (简体中文)|Archiso|2018-04-07|516323}}<br />
{{Related articles start (简体中文)}}<br />
{{Related|Remastering the Install ISO}}<br />
{{Related2|PXE (简体中文)|PXE}}<br />
{{Related2|Archboot (简体中文)|Archboot}}<br />
{{Related articles end}}<br />
'''Archiso''' 是一组 bash 脚本,它能够建立功能全面的 Arch Linux 的 Live CD/DVD/USB 映像。它同样是用来生成官方映像的工具,但由于它是一个非常通用的工具,所以它可以被用来生成从救援系统、安装盘,到特殊爱好的 Live CD/DVD/USB 系统——无人知晓还有其他什么。简单地说,如果要将 Arch 放在一条闪光的船上,它可以帮你做到这一点。Archiso 的核心以及灵魂是 ''mkarchiso''。它的所有选项都写在它的用法输出上,所以它的直接使用方法将不在这里讨论。相反,这篇 wiki 文章将导引你迅速建立你的 Live 介质。<br />
<br />
== 安装和配置 ==<br />
<br />
{{注意|<br />
* 您必须在 x86_64 上运行 Archiso。 [https://projects.archlinux.org/archiso.git/tree/docs/README.build#n67]<br />
* 以下操作请在ROOT权限下使用,在错误的权限下操作会造成一下问题。}}<br />
当你开始之前, [[install|安装]] {{Pkg|archiso}} 或 {{AUR|archiso-git}}。<br />
<br />
创建一个用于工作的目录, 实时镜像将会在这里被处理。 {{ic|~/archlive}} 是一个好选择。<br />
$ mkdir ~/archlive<br />
<br />
现在要将早先安装到主机的 archiso 脚本复制到你新建的工作目录内。<br />
<br />
Archiso 附带2个预定义配置(profiles): ''releng'' 和''baseline''。<br />
<br />
* 如果您想要创建完全定制的 Live Arch Linux ,并预装所有您喜爱的程序和配置,使用 ''releng''。<br />
<br />
* 如果您只是想构建一个简易 Live 镜像,无预装软件并仅有基础配置,那么使用 ''baseline''。<br />
<br />
现在,将您选择的配置文件复制到目录(在下面的示例中为 ''archlive''),您可以在其中进行调整和构建。 执行以下操作,用 {{ic|releng}} 或 {{ic|baseline}} 替换 {{ic|'''profile'''}}。<br />
<br />
# cp -r /usr/share/archiso/configs/* ''archlive''<br />
<br />
* 如果你使用 {{ic|releng}} 配置文件来创建一个完全自定义的镜像,那么你可以继续到:[[#配置 Live 介质]]。<br />
<br />
* 如果您使用 {{ic|baseline}} 配置文件创建一个简易映像,那么你不需要做任何定制,并可以直接继续到 [[#构建ISO]].<br />
<br />
== 配置 Live 介质 ==<br />
<br />
本节详细介绍该如何配置您将创建的映像,允许您定义哪些包以及配置将被您的 Live 映像所包含。<br />
在 [[#安装和配置]] 中创建的{{ic|''archlive''}}目录中有许多文件和目录; 我们只关注其中一部分,主要是<br />
* {{ic|packages.*}} - 在这里一行行列出你想要安装的包,和 <br />
* {{ic|airootfs}} 目录——这是一个覆盖目录,你将在这里完成所有的定制工作。<br />
一般来说,您在全新安装之后所执行的每个管理任务(不包括软件包安装)可以被写入这个脚本: {{ic|''archlive''/airootfs/root/customize_airootfs.sh}}。您必须从新环境的角度来写该脚本,所以脚本中的 / 代表方才被创建的 Live ISO 的根。<br />
<br />
=== 安装包 ===<br />
<br />
[[Edit|编辑]] {{ic|packages.i686}},{{ic|packages.x86_64}} 或 {{ic|packages.both}} 中的程序包列表,以指示要在 live 媒体上安装那些程序包。这里的后缀表示包可用的架构。<br />
<br />
{{Note|如果要在 Live CD 中使用 [[窗口管理器]],则必须添加必要且正确的 [[video drivers]],否则 WM 可能在加载时冻结。}}<br />
<br />
==== 自定义本地库 ====<br />
<br />
{{Merge|Pacman/Tips_and_tricks_(简体中文)#自建本地仓库|移动一般信息 (如:仓库目录树) 到主文章.|Talk:Archiso}}<br />
<br />
为了准备自定义包或是从 [[Arch User Repository (简体中文)|AUR]]/[[Arch Build System (简体中文)|ABS]] 安装包,你也可以 [[Custom local repository|创建自定义本地资源库]]。如果您希望支持多种体系结构,则应采取预防措施来防止发生错误。每个架构应该有自己的目录树:<br />
<br />
{{hc|$ tree ~/customrepo/ {{!}} sed "s/$(uname -m)/<arch>/g"|<br />
/home/archie/customrepo/<br />
└── <arch><br />
├── customrepo.db -> customrepo.db.tar.xz<br />
├── customrepo.db.tar.xz<br />
├── customrepo.files -> customrepo.files.tar.xz<br />
├── customrepo.files.tar.xz<br />
└── personal-website-git-b99cce0-1-<arch>.pkg.tar.xz<br />
<br />
1 directory, 5 files<br />
}}<br />
<br />
如此后,您可以添加您的仓库——把下面的句子加入 {{ic|~/archlive/pacman.conf}},并置于其他仓库条目上面(优先级最高):<br />
<br />
{{hc|~/archlive/pacman.conf|...<br />
# custom repository<br />
[customrepo]<br />
SigLevel <nowiki>=</nowiki> Optional TrustAll<br />
Server <nowiki>=</nowiki> file:///home/'''user'''/customrepo/$arch<br />
...}}<br />
<br />
''repo-add'' 可执行文件检查软件包是否合适。如果不,那么你将得到与此类似的错误消息:<br />
<br />
==> ERROR: '/home/archie/customrepo/<arch>/foo-<arch>.pkg.tar.xz' does not have a valid database archive extension.<br />
<br />
==== 避免安装属于base组的包 ====<br />
<br />
默认情况下,{{ic|/usr/bin/mkarchiso}}——一个被 {{ic|~/archlive/build.sh}} 使用的脚本——会调用 {{Pkg|arch-install-scripts}} 中一个名为 {{ic|pacstrap}} 的程序,且在调用时不使用 {{ic|-i}} 标志——这将使 [[Pacman]] 在安装过程中不等待用户输入。<br />
<br />
当 base 组软件包被加入黑名单——把它们写到 {{ic|~/archlive/pacman.conf}} 中的 {{ic|IgnorePkg}} 行——时,[[Pacman]] 会询问是否仍然安装它们——意味着如果用户输入被跳过,它们就会被安装。为了避免安装这些包,这里有一些选择:<br />
<br />
* '''丑陋'''方案(Dirty):在 {{ic|/usr/bin/mkarchiso}} 中每次调用 {{ic|pacstrap}} 的行上加入 {{ic|i}} 标志。<br />
<br />
* '''整洁'''方案(Clean):创建 {{ic|/usr/bin/mkarchiso}} 的一份复制。在该复制中增加此标志,并修改 {{ic|~/archlive/build.sh}} 以使其调用修改过的 mkarchiso 脚本。<br />
<br />
* '''高级'''方案(Advanced): 在 {{ic|~/archlive/build.sh}} 中创建一个函数,该函数将在基础安装结束后显式移除那些包。若这样做,可以免去在安装过程中多次按回车键的麻烦。<br />
<br />
==== Installing packages from multilib ====<br />
<br />
要从 [[Multilib (简体中文)|Multilib]] 资源库安装软件包,您必须创建两个 pacman 配置文件:一个用于 x86_64,一个用于 i686。 将 {{ic|pacman.conf}} 复制到 {{ic|pacmanx86_64.conf}} 和 {{ic|pacmani686.conf}}。 取消注释以下行以{{ic|pacmanx86_64.conf}} 中启用 ''multilib''):<br />
<br />
{{hc|pacmanx86_64.conf|2=<br />
[multilib]<br />
SigLevel = PackageRequired<br />
Include = /etc/pacman.d/mirrorlist<br />
}}<br />
<br />
然后用编辑器编辑 {{ic|build.sh}}。 把:<br />
<br />
{{hc|build.sh|<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in i686 x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
done<br />
<br />
run_once make_packages_efi<br />
<br />
for arch in i686 x86_64; do<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
改为:<br />
<br />
{{hc|build.sh|<br />
cp -v releng/pacmanx86_64.conf releng/pacman.conf<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
<br />
echo make_pacman_conf i686<br />
cp -v releng/pacmani686.conf releng/pacman.conf<br />
cp -v releng/pacmani686.conf ${work_dir}/pacman.conf<br />
<br />
<br />
for arch in i686; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
这样,x86_64 和 i686 的软件包将安装有自己的pacman配置文件。<br />
<br />
=== 向映像里添加文件===<br />
<br />
{{注意|你必须使用 root 权限来完成这件事,不要改变任何你复制过来的文件的所有权,airootfs 中的'''所有'''文件必须为 root 用户所有。适当的所有制将在不久被解决。}}<br />
<br />
airootfs 目录作为要覆盖的文件,把它看作是在当前系统上的根目录'/',所以你在这个目录中放置的任何文件都将在开机时被复制。<br />
<br />
所以,如果你在当前系统上有一组 iptables 脚本且想要在 Live 映像上使用,请这样复制:<br />
# cp -r /etc/iptables ~/archlive/airootfs/etc<br />
<br />
在用户 home 文件夹里放置文件的方法有些许不同。不要把它们放在 {{ic|airootfs/home}},而是在 airootfs/ 里创建 skel 目录并将其放置在那里。然后我们会将相关命令添加到 {{ic|customize_airootfs.sh}}——我们要使用它在引导时复制文件以及梳理权限。<br />
<br />
首先,创建 skel 目录<br />
# mkdir ~/archlive/airootfs/etc/skel<br />
<br />
现在,复制 'home' 的文件到 skel 目录。例如,对于 {{ic|.bashrc}}:<br />
# cp ~/.bashrc ~/archlive/airootfs/etc/skel/<br />
<br />
当 {{ic|~/archlive/airootfs/root/customize_airootfs.sh}} 被执行,并且一个新用户已被创建, skel 目录中的文件将自动被复制到新的 home 文件夹中,并被设置正确的权限。<br />
<br />
类似地,需要注意位于层次结构下方的特殊配置文件。作为示例,配置文件 {{ic|/etc/X11/xinit/xinitrc}} 位于可能被安装包覆盖的路径上。要将 {{ic|xinitrc}} 的配置文件放在 {{ic|~/archlive/airootfs/etc/skel/}} ,然后修改 {{ic|customize_airootfs.sh}} 以适当地移动。<br />
<br />
=== 引导器 ===<br />
<br />
默认的文件应该可以正常工作,所以你应该不需要去碰它。<br />
<br />
由于 isolinux 的模块化性质,你能够使用很多插件,因为所有 *.c32 都被复制且可以可供您使用。看看[http://syslinux.zytor.com/wiki/index.php/SYSLINUX syslinux 官方网站] 和 [https://projects.archlinux.org/archiso.git/tree/configs/syslinux-iso/boot-files Archiso Git Repo]。使用所述插件,便有可能做出更具视觉吸引力及复杂的菜单。参见 [http://syslinux.zytor.com/wiki/index.php/Comboot/menu.c32 此处]。<br />
<br />
=== 登录管理器 ===<br />
<br />
通过启用您登录管理器的 [[Systemd (简体中文)|systemd]] 服务来做到在引导时启动 X 。如果您知道哪一个 .service 文件需要软链接,那就太好了。如果不知道,你也可以轻松找出——如果你在创建 iso 所用的系统上使用相同的程序的话。只需使用:<br />
<br />
$ ls -l /etc/systemd/system/display-manager.service<br />
<br />
现在在 {{ic|~/archlive/airootfs/etc/systemd/system}} 中创建相同的软链接。如 LXDM:<br />
<br />
# ln -s /usr/lib/systemd/system/lxdm.service ~/archlive/airootfs/etc/systemd/system/display-manager.service<br />
<br />
这将使您在 live 系统启用在系统上启动 LXDM。(This will enable LXDM at system start on your live system.)<br />
<br />
或者,您也可以启用 {{ic|airootfs/root/customize_airootfs.sh}} 中的服务以及其中启用的其他服务。<br />
<br />
如果您希望图形环境在启动过程中自动启动,请确保编辑 {{ic|airootfs/root/customize_airootfs.sh}} 并替换<br />
systemctl set-default multi-user.target<br />
为<br />
systemctl set-default graphical.target<br />
<br />
=== 改变自动登录状态 ===<br />
<br />
Getty 的自动登录配置位于 {{ic|airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf}}。 <br />
<br />
您可以修改这个文件来更改自动登录用户:<br />
<br />
[Service]<br />
ExecStart=<br />
ExecStart=-/sbin/agetty --autologin '''isouser''' --noclear %I 38400 linux<br />
<br />
或者干脆删除它来禁用自动登录。<br />
<br />
== 构建ISO ==<br />
<br />
现在,你已经准备好把你的文件转换成 .iso,以便可以刻录到 CD 或 USB:<br />
<br />
首先创建 {{ic|out/}} 目录(可选,如果没有的话 build.sh 将会创建它),<br />
<br />
# mkdir ~/archlive/out/<br />
<br />
然后在 {{ic|~/archlive}} 里面执行:<br />
<br />
# ./build.sh -v<br />
<br />
该脚本将现在下载并安装你指定的软件包到 {{ic|work/*/airootfs}},创建内核和 init 映像(initramfs),应用您的修改,并最终把 ISO 建立到 {{ic|out/}}。<br />
<br />
=== 重建ISO ===<br />
<br />
在修改之后重建 ISO 不被官方支持。但是,通过应用两个步骤很容易。首先,您必须删除工作目录中的锁定文件:<br />
<br />
# rm -v work/build.make_*<br />
<br />
此外,需要编辑脚本 {{ic|airootfs/root/customize_airootfs.sh}},并在 {{ic|useradd}} 行的开头添加 {{ic|id}} 命令,如下所示。否则,重建将在此处停止,因为要添加的用户已经存在 [https://bugs.archlinux.org/task/41865]。<br />
{{Style|typo?}}<br />
<br />
! id arch && useradd -m -p "" -g users -G "adm,audio,floppy,log,network,rfkill,scanner,storage,optical,power,wheel" -s /usr/bin/zsh arch<br />
<br />
同时删除创建的用户或符号链接,如 {{ic|/etc/sudoers}} 等持久性数据。<br />
<br />
{{Expansion|报告需要删除或重置的更多数据。}}<br />
<br />
通过编辑 pacstrap 脚本(位于 /bin/pacstrap)并在第 361 行更改以下内容,可以稍微加快重建速度:<br />
<br />
修改前:<br />
<br />
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then<br />
<br />
修改后:<br />
<br />
if ! pacman -r "$newroot" -Sy --needed "${pacman_args[@]}"; then<br />
<br />
这增加了初始引导的速度,因为它不必下载和安装任何已经安装的基础包。<br />
<br />
== 使用ISO ==<br />
<br />
有关各种选项,请参见 [[:Category:Getting_and_installing_Arch_(简体中文)#安装方式]] 部分。<br />
<br />
== 提示和技巧 ==<br />
<br />
=== 在沒有互联网连接的情况下安装 Archiso ===<br />
{{Move|Installation without Internet access|似乎这可以独立成一篇|Talk:Archiso}}<br />
{{Accuracy|可以将 Arch 镜像上提供的 “bootstrap” 映像直接提取到目标磁盘,而不是从 archiso 复制文件。 你将得到一个最小的系统,而不需要处理 archiso 修改。|Talk:Archiso}}<br />
<br />
若你想在没有互联网连接或者你不想重复下载你想要的包的情况下安装 archiso(例如[https://www.archlinux.org/download/ 官方的每月发布版]):<br />
<br />
首先,按照[[Installation guide (简体中文)|安装指南]],并跳过一些步骤(如[[Installation guide (简体中文)#连接到因特网|连接到因特网]]),直到[[Installation guide (简体中文)#安装基本系统|安装基本系统]]之前。<br />
<br />
==== 安装 archiso 到新的 root ====<br />
<br />
复制 Live 环境的''所有文件''到新的根目录,而不是使用 {{ic|pacstrap}}(这将尝试从远程存储库下载):<br />
# cp -ax / /mnt<br />
{{注意|The option ({{ic|-x}})排除了一些特殊目录,因为它们不应该被复制到新的根目录。}}<br />
<br />
然后,创建一些目录并复制内核映像到新的根,以保证新系统的完整性:<br />
<br />
# cp -vaT /run/archiso/bootmnt/arch/boot/$(uname -m)/vmlinuz /mnt/boot/vmlinuz-linux<br />
<br />
完成之后,请按[[Installation guide (简体中文)#Fstab]]所述生成 fstab。<br />
<br />
==== Chroot 并配置基本系统 ====<br />
<br />
下一步,chroot 到您新安装的系统:<br />
<br />
# arch-chroot /mnt /bin/bash<br />
<br />
请注意,在您配置 locale、键盘映射等之前,你仍然需要为了避免延续 Live 环境的轨迹——或者说对 archiso 所做的一些不适用于非 Live 环境的修改——而做一些事情。<br />
<br />
===== 恢复 journald 的配置 =====<br />
[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/root/customize_airootfs.sh#n19 archiso 的这个修改]会导致日志存储在 RAM 上——它意味着在重启后日志便会丢失。为了解决这个问题,执行:<br />
<br />
# sed -i 's/Storage=volatile/#Storage=auto/' /etc/systemd/journald.conf<br />
<br />
===== 删除特殊的 udev 规则 =====<br />
如果有任何有线网络接口,[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/etc/udev/rules.d/81-dhcpcd.rules udev 的这个规则]会自动启动dhcpcd。<br />
<br />
# rm /etc/udev/rules.d/81-dhcpcd.rules<br />
<br />
===== 禁用和移除 archiso 创建的服务 =====<br />
有一些服务文件是为 Live 环境创建的,请禁用这些服务并移除文件——因为它们对于新系统来说没必要存在:<br />
<br />
# systemctl disable pacman-init.service choose-mirror.service<br />
# rm -r /etc/systemd/system/{choose-mirror.service,pacman-init.service,etc-pacman.d-gnupg.mount,getty@tty1.service.d}<br />
# rm /etc/systemd/scripts/choose-mirror<br />
# rm /etc/systemd/system/archiso-start.service<br />
# rm /etc/systemd/system/multi-user.target.wants/archiso-start.service<br />
<br />
===== 移除 Live 环境的特殊脚本 =====<br />
在 live 系统中通过 archiso 脚本安装了一些脚本,这对于新系统是不必要的:<br />
<br />
# rm /etc/systemd/system/getty@tty1.service.d/autologin.conf<br />
# rm /root/{.automated_script.sh,.zlogin}<br />
# rm /etc/mkinitcpio-archiso.conf<br />
# rm -r /etc/initcpio<br />
<br />
===== 导入archlinux密钥 =====<br />
<br />
为了使用官方存储库,我们需要导入 archlinux 主密钥([[Pacman/Package signing (简体中文)#初始化密钥环]])。这一步通常是通过 pacstrap 完成的,但是可以通过<br />
<br />
# pacman-key --init<br />
# pacman-key --populate archlinux<br />
<br />
{{注意|Keyboard or mouse activity is needed to generate entropy and speed-up the first step.}}<br />
<br />
===== 配置系统 =====<br />
<br />
现在,您可以按照 [[Installation guide (简体中文)#配置系统]] 中跳过的步骤(设置语言环境,时区,主机名等),并通过创建初始 ramdisk 来完成安装,如 [[Installation guide (简体中文)#Initramfs]]。<br />
<br />
===== 启用图形登录(可选) =====<br />
<br />
如果使用像GDM这样的显示管理器,则可能需要将 systemd 默认目标从 multi-user.target 更改为允许图形登录的目标。<br />
# systemctl disable multi-user.target<br />
# systemctl enable graphical.target<br />
<br />
== 参阅 ==<br />
=== 文档和教程 ===<br />
* [https://projects.archlinux.org/archiso.git Archiso 项目页面]<br />
* [https://projects.archlinux.org/archiso.git/tree/docs 官方文档]<br />
<br />
=== 示例自定义模板 ===<br />
* [http://easy.open.and.free.fr/didjix/ A live DJ distribution powered by ArchLinux and built with Archiso]</div>
745275633
https://wiki.archlinux.org/index.php?title=Category:Arch_projects&diff=516400
Category:Arch projects
2018-04-07T09:20:15Z
<p>745275633: zh-hans</p>
<hr />
<div>[[Category:About Arch]]<br />
[[zh-hans:Category:Arch projects]]<br />
https://git.archlinux.org/<br />
<br />
https://lists.archlinux.org/listinfo/arch-projects</div>
745275633
https://wiki.archlinux.org/index.php?title=Category:Servers&diff=516396
Category:Servers
2018-04-07T09:15:53Z
<p>745275633: fix zh-hans</p>
<hr />
<div>[[Category:Networking]]<br />
[[zh-hans:Category:Servers]]</div>
745275633
https://wiki.archlinux.org/index.php?title=Category:Servers&diff=516395
Category:Servers
2018-04-07T09:15:00Z
<p>745275633: zh-hans</p>
<hr />
<div>[[Category:Networking]]<br />
[[zh-hans:Category:Networking]]</div>
745275633
https://wiki.archlinux.org/index.php?title=Archiso_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=516392
Archiso (简体中文)
2018-04-07T09:11:54Z
<p>745275633: 516323</p>
<hr />
<div>[[Category:简体中文]]<br />
[[Category:Live Arch systems (简体中文)]]<br />
[[Category:Getting and installing Arch (简体中文)]]<br />
[[Category:Arch projects]]<br />
[[ar:Archiso]]<br />
[[el:Archiso]]<br />
[[en:Archiso]]<br />
[[es:Archiso]]<br />
[[fr:Archiso]]<br />
[[it:Archiso]]<br />
[[ja:Archiso]]<br />
[[nl:Archiso]]<br />
[[ru:Archiso]]<br />
[[sk:Archiso]]<br />
{{TranslationStatus (简体中文)|Archiso|2018-04-07|516323}}<br />
{{Related articles start (简体中文)}}<br />
{{Related|Remastering the Install ISO}}<br />
{{Related2|PXE (简体中文)|PXE}}<br />
{{Related2|Archboot (简体中文)|Archboot}}<br />
{{Related articles end}}<br />
'''Archiso''' 是一组 bash 脚本,它能够建立功能全面的 Arch Linux 的 Live CD/DVD/USB 映像。它同样是用来生成官方映像的工具,但由于它是一个非常通用的工具,所以它可以被用来生成从救援系统、安装盘,到特殊爱好的 Live CD/DVD/USB 系统——无人知晓还有其他什么。简单地说,如果要将 Arch 放在一条闪光的船上,它可以帮你做到这一点。Archiso 的核心以及灵魂是 ''mkarchiso''。它的所有选项都写在它的用法输出上,所以它的直接使用方法将不在这里讨论。相反,这篇 wiki 文章将导引你迅速建立你的 Live 介质。<br />
<br />
== 安装和配置 ==<br />
<br />
{{注意|<br />
* 您必须在 x86_64 上运行 Archiso。 [https://projects.archlinux.org/archiso.git/tree/docs/README.build#n67]<br />
* 以下操作请在ROOT权限下使用,在错误的权限下操作会造成一下问题。}}<br />
当你开始之前, [[install|安装]] {{Pkg|archiso}} 或 {{AUR|archiso-git}}。<br />
<br />
创建一个用于工作的目录, 实时镜像将会在这里被处理。 {{ic|~/archlive}} 是一个好选择。<br />
$ mkdir ~/archlive<br />
<br />
现在要将早先安装到主机的 archiso 脚本复制到你新建的工作目录内。<br />
<br />
Archiso 附带2个预定义配置(profiles): ''releng'' 和''baseline''。<br />
<br />
* 如果您想要创建完全定制的 Live Arch Linux ,并预装所有您喜爱的程序和配置,使用 ''releng''。<br />
<br />
* 如果您只是想构建一个简易 Live 镜像,无预装软件并仅有基础配置,那么使用 ''baseline''。<br />
<br />
现在,将您选择的配置文件复制到目录(在下面的示例中为 ''archlive''),您可以在其中进行调整和构建。 执行以下操作,用 {{ic|releng}} 或 {{ic|baseline}} 替换 {{ic|'''profile'''}}。<br />
<br />
# cp -r /usr/share/archiso/configs/* ''archlive''<br />
<br />
* 如果你使用 {{ic|releng}} 配置文件来创建一个完全自定义的镜像,那么你可以继续到:[[#配置 Live 介质]]。<br />
<br />
* 如果您使用 {{ic|baseline}} 配置文件创建一个简易映像,那么你不需要做任何定制,并可以直接继续到 [[#构建ISO]].<br />
<br />
== 配置 Live 介质 ==<br />
<br />
本节详细介绍该如何配置您将创建的映像,允许您定义哪些包以及配置将被您的 Live 映像所包含。<br />
在 [[#安装和配置]] 中创建的{{ic|''archlive''}}目录中有许多文件和目录; 我们只关注其中一部分,主要是<br />
* {{ic|packages.*}} - 在这里一行行列出你想要安装的包,和 <br />
* {{ic|airootfs}} 目录——这是一个覆盖目录,你将在这里完成所有的定制工作。<br />
一般来说,您在全新安装之后所执行的每个管理任务(不包括软件包安装)可以被写入这个脚本: {{ic|''archlive''/airootfs/root/customize_airootfs.sh}}。您必须从新环境的角度来写该脚本,所以脚本中的 / 代表方才被创建的 Live ISO 的根。<br />
<br />
=== 安装包 ===<br />
<br />
[[Edit|编辑]] {{ic|packages.i686}},{{ic|packages.x86_64}} 或 {{ic|packages.both}} 中的程序包列表,以指示要在 live 媒体上安装那些程序包。这里的后缀表示包可用的架构。<br />
<br />
{{Note|如果要在 Live CD 中使用 [[窗口管理器]],则必须添加必要且正确的 [[video drivers]],否则 WM 可能在加载时冻结。}}<br />
<br />
==== 自定义本地库 ====<br />
<br />
{{Merge|Pacman/Tips_and_tricks_(简体中文)#自建本地仓库|移动一般信息 (如:仓库目录树) 到主文章.|Talk:Archiso}}<br />
<br />
为了准备自定义包或是从 [[Arch User Repository (简体中文)|AUR]]/[[Arch Build System (简体中文)|ABS]] 安装包,你也可以 [[Custom local repository|创建自定义本地资源库]]。如果您希望支持多种体系结构,则应采取预防措施来防止发生错误。每个架构应该有自己的目录树:<br />
<br />
{{hc|$ tree ~/customrepo/ {{!}} sed "s/$(uname -m)/<arch>/g"|<br />
/home/archie/customrepo/<br />
└── <arch><br />
├── customrepo.db -> customrepo.db.tar.xz<br />
├── customrepo.db.tar.xz<br />
├── customrepo.files -> customrepo.files.tar.xz<br />
├── customrepo.files.tar.xz<br />
└── personal-website-git-b99cce0-1-<arch>.pkg.tar.xz<br />
<br />
1 directory, 5 files<br />
}}<br />
<br />
如此后,您可以添加您的仓库——把下面的句子加入 {{ic|~/archlive/pacman.conf}},并置于其他仓库条目上面(优先级最高):<br />
<br />
{{hc|~/archlive/pacman.conf|...<br />
# custom repository<br />
[customrepo]<br />
SigLevel <nowiki>=</nowiki> Optional TrustAll<br />
Server <nowiki>=</nowiki> file:///home/'''user'''/customrepo/$arch<br />
...}}<br />
<br />
''repo-add'' 可执行文件检查软件包是否合适。如果不,那么你将得到与此类似的错误消息:<br />
<br />
==> ERROR: '/home/archie/customrepo/<arch>/foo-<arch>.pkg.tar.xz' does not have a valid database archive extension.<br />
<br />
==== 避免安装属于base组的包 ====<br />
<br />
默认情况下,{{ic|/usr/bin/mkarchiso}}——一个被 {{ic|~/archlive/build.sh}} 使用的脚本——会调用 {{Pkg|arch-install-scripts}} 中一个名为 {{ic|pacstrap}} 的程序,且在调用时不使用 {{ic|-i}} 标志——这将使 [[Pacman]] 在安装过程中不等待用户输入。<br />
<br />
当 base 组软件包被加入黑名单——把它们写到 {{ic|~/archlive/pacman.conf}} 中的 {{ic|IgnorePkg}} 行——时,[[Pacman]] 会询问是否仍然安装它们——意味着如果用户输入被跳过,它们就会被安装。为了避免安装这些包,这里有一些选择:<br />
<br />
* '''丑陋'''方案(Dirty):在 {{ic|/usr/bin/mkarchiso}} 中每次调用 {{ic|pacstrap}} 的行上加入 {{ic|i}} 标志。<br />
<br />
* '''整洁'''方案(Clean):创建 {{ic|/usr/bin/mkarchiso}} 的一份复制。在该复制中增加此标志,并修改 {{ic|~/archlive/build.sh}} 以使其调用修改过的 mkarchiso 脚本。<br />
<br />
* '''高级'''方案(Advanced): 在 {{ic|~/archlive/build.sh}} 中创建一个函数,该函数将在基础安装结束后显式移除那些包。若这样做,可以免去在安装过程中多次按回车键的麻烦。<br />
<br />
==== Installing packages from multilib ====<br />
<br />
要从 [[Multilib (简体中文)|Multilib]] 资源库安装软件包,您必须创建两个 pacman 配置文件:一个用于 x86_64,一个用于 i686。 将 {{ic|pacman.conf}} 复制到 {{ic|pacmanx86_64.conf}} 和 {{ic|pacmani686.conf}}。 取消注释以下行以{{ic|pacmanx86_64.conf}} 中启用 ''multilib''):<br />
<br />
{{hc|pacmanx86_64.conf|2=<br />
[multilib]<br />
SigLevel = PackageRequired<br />
Include = /etc/pacman.d/mirrorlist<br />
}}<br />
<br />
然后用编辑器编辑 {{ic|build.sh}}。 把:<br />
<br />
{{hc|build.sh|<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in i686 x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
done<br />
<br />
run_once make_packages_efi<br />
<br />
for arch in i686 x86_64; do<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
改为:<br />
<br />
{{hc|build.sh|<br />
cp -v releng/pacmanx86_64.conf releng/pacman.conf<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
<br />
echo make_pacman_conf i686<br />
cp -v releng/pacmani686.conf releng/pacman.conf<br />
cp -v releng/pacmani686.conf ${work_dir}/pacman.conf<br />
<br />
<br />
for arch in i686; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
这样,x86_64 和 i686 的软件包将安装有自己的pacman配置文件。<br />
<br />
=== 向映像里添加文件===<br />
<br />
{{注意|你必须使用 root 权限来完成这件事,不要改变任何你复制过来的文件的所有权,airootfs 中的'''所有'''文件必须为 root 用户所有。适当的所有制将在不久被解决。}}<br />
<br />
airootfs 目录作为要覆盖的文件,把它看作是在当前系统上的根目录'/',所以你在这个目录中放置的任何文件都将在开机时被复制。<br />
<br />
所以,如果你在当前系统上有一组 iptables 脚本且想要在 Live 映像上使用,请这样复制:<br />
# cp -r /etc/iptables ~/archlive/airootfs/etc<br />
<br />
在用户 home 文件夹里放置文件的方法有些许不同。不要把它们放在 {{ic|airootfs/home}},而是在 airootfs/ 里创建 skel 目录并将其放置在那里。然后我们会将相关命令添加到 {{ic|customize_airootfs.sh}}——我们要使用它在引导时复制文件以及梳理权限。<br />
<br />
首先,创建 skel 目录<br />
# mkdir ~/archlive/airootfs/etc/skel<br />
<br />
现在,复制 'home' 的文件到 skel 目录。例如,对于 {{ic|.bashrc}}:<br />
# cp ~/.bashrc ~/archlive/airootfs/etc/skel/<br />
<br />
当 {{ic|~/archlive/airootfs/root/customize_airootfs.sh}} 被执行,并且一个新用户已被创建, skel 目录中的文件将自动被复制到新的 home 文件夹中,并被设置正确的权限。<br />
<br />
类似地,需要注意位于层次结构下方的特殊配置文件。作为示例,配置文件 {{ic|/etc/X11/xinit/xinitrc}} 位于可能被安装包覆盖的路径上。要将 {{ic|xinitrc}} 的配置文件放在 {{ic|~/archlive/airootfs/etc/skel/}} ,然后修改 {{ic|customize_airootfs.sh}} 以适当地移动。<br />
<br />
=== 引导器 ===<br />
<br />
默认的文件应该可以正常工作,所以你应该不需要去碰它。<br />
<br />
由于 isolinux 的模块化性质,你能够使用很多插件,因为所有 *.c32 都被复制且可以可供您使用。看看[http://syslinux.zytor.com/wiki/index.php/SYSLINUX syslinux 官方网站] 和 [https://projects.archlinux.org/archiso.git/tree/configs/syslinux-iso/boot-files Archiso Git Repo]。使用所述插件,便有可能做出更具视觉吸引力及复杂的菜单。参见 [http://syslinux.zytor.com/wiki/index.php/Comboot/menu.c32 此处]。<br />
<br />
=== 登录管理器 ===<br />
<br />
通过启用您登录管理器的 [[Systemd (简体中文)|systemd]] 服务来做到在引导时启动 X 。如果您知道哪一个 .service 文件需要软链接,那就太好了。如果不知道,你也可以轻松找出——如果你在创建 iso 所用的系统上使用相同的程序的话。只需使用:<br />
<br />
$ ls -l /etc/systemd/system/display-manager.service<br />
<br />
现在在 {{ic|~/archlive/airootfs/etc/systemd/system}} 中创建相同的软链接。如 LXDM:<br />
<br />
# ln -s /usr/lib/systemd/system/lxdm.service ~/archlive/airootfs/etc/systemd/system/display-manager.service<br />
<br />
这将使您在 live 系统启用在系统上启动 LXDM。(This will enable LXDM at system start on your live system.)<br />
<br />
或者,您也可以启用 {{ic|airootfs/root/customize_airootfs.sh}} 中的服务以及其中启用的其他服务。<br />
<br />
如果您希望图形环境在启动过程中自动启动,请确保编辑 {{ic|airootfs/root/customize_airootfs.sh}} 并替换<br />
systemctl set-default multi-user.target<br />
为<br />
systemctl set-default graphical.target<br />
<br />
=== 改变自动登录状态 ===<br />
<br />
Getty 的自动登录配置位于 {{ic|airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf}}。 <br />
<br />
您可以修改这个文件来更改自动登录用户:<br />
<br />
[Service]<br />
ExecStart=<br />
ExecStart=-/sbin/agetty --autologin '''isouser''' --noclear %I 38400 linux<br />
<br />
或者干脆删除它来禁用自动登录。<br />
<br />
== 构建ISO ==<br />
<br />
现在,你已经准备好把你的文件转换成 .iso,以便可以刻录到 CD 或 USB:<br />
<br />
首先创建 {{ic|out/}} 目录(可选,如果没有的话 build.sh 将会创建它),<br />
<br />
# mkdir ~/archlive/out/<br />
<br />
然后在 {{ic|~/archlive}} 里面执行:<br />
<br />
# ./build.sh -v<br />
<br />
该脚本将现在下载并安装你指定的软件包到 {{ic|work/*/airootfs}},创建内核和 init 映像(initramfs),应用您的修改,并最终把 ISO 建立到 {{ic|out/}}。<br />
<br />
=== 重建ISO ===<br />
<br />
在修改之后重建 ISO 不被官方支持。但是,通过应用两个步骤很容易。首先,您必须删除工作目录中的锁定文件:<br />
<br />
# rm -v work/build.make_*<br />
<br />
此外,需要编辑脚本 {{ic|airootfs/root/customize_airootfs.sh}},并在 {{ic|useradd}} 行的开头添加 {{ic|id}} 命令,如下所示。否则,重建将在此处停止,因为要添加的用户已经存在 [https://bugs.archlinux.org/task/41865]。<br />
{{Style|typo?}}<br />
<br />
! id arch && useradd -m -p "" -g users -G "adm,audio,floppy,log,network,rfkill,scanner,storage,optical,power,wheel" -s /usr/bin/zsh arch<br />
<br />
同时删除创建的用户或符号链接,如 {{ic|/etc/sudoers}} 等持久性数据。<br />
<br />
{{Expansion|报告需要删除或重置的更多数据。}}<br />
<br />
通过编辑 pacstrap 脚本(位于 /bin/pacstrap)并在第 361 行更改以下内容,可以稍微加快重建速度:<br />
<br />
修改前:<br />
<br />
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then<br />
<br />
修改后:<br />
<br />
if ! pacman -r "$newroot" -Sy --needed "${pacman_args[@]}"; then<br />
<br />
这增加了初始引导的速度,因为它不必下载和安装任何已经安装的基础包。<br />
<br />
== 使用ISO ==<br />
<br />
有关各种选项,请参见 [[:Category:Getting_and_installing_Arch_(简体中文)#安装方式]] 部分。<br />
<br />
== 提示和技巧 ==<br />
<br />
=== 在沒有互联网连接的情况下安装 Archiso ===<br />
{{Move|Installation without Internet access|似乎这可以独立成一篇|Talk:Archiso}}<br />
{{Accuracy|可以将 Arch 镜像上提供的 “bootstrap” 映像直接提取到目标磁盘,而不是从 archiso 复制文件。 你将得到一个最小的系统,而不需要处理 archiso 修改。|Talk:Archiso}}<br />
<br />
若你想在没有互联网连接或者你不想重复下载你想要的包的情况下安装 archiso(例如[https://www.archlinux.org/download/ 官方的每月发布版]):<br />
<br />
首先,按照[[Installation guide (简体中文)|安装指南]],并跳过一些步骤(如[[Installation guide (简体中文)#连接到因特网|连接到因特网]]),直到[[Installation guide (简体中文)#安装基本系统|安装基本系统]]之前。<br />
<br />
==== 安装 archiso 到新的 root ====<br />
<br />
复制 Live 环境的''所有文件''到新的根目录,而不是使用 {{ic|pacstrap}}(这将尝试从远程存储库下载):<br />
# cp -ax / /mnt<br />
{{注意|The option ({{ic|-x}})排除了一些特殊目录,因为它们不应该被复制到新的根目录。}}<br />
<br />
然后,创建一些目录并复制内核映像到新的根,以保证新系统的完整性:<br />
<br />
# cp -vaT /run/archiso/bootmnt/arch/boot/$(uname -m)/vmlinuz /mnt/boot/vmlinuz-linux<br />
<br />
完成之后,请按[[Installation guide (简体中文)#Fstab]]所述生成 fstab。<br />
<br />
==== Chroot 并配置基本系统 ====<br />
<br />
下一步,chroot 到您新安装的系统:<br />
<br />
# arch-chroot /mnt /bin/bash<br />
<br />
请注意,在您配置 locale、键盘映射等之前,你仍然需要为了避免延续 Live 环境的轨迹——或者说对 archiso 所做的一些不适用于非 Live 环境的修改——而做一些事情。<br />
<br />
===== 恢复 journald 的配置 =====<br />
[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/root/customize_airootfs.sh#n19 archiso 的这个修改]会导致日志存储在 RAM 上——它意味着在重启后日志便会丢失。为了解决这个问题,执行:<br />
<br />
# sed -i 's/Storage=volatile/#Storage=auto/' /etc/systemd/journald.conf<br />
<br />
===== 删除特殊的 udev 规则 =====<br />
如果有任何有线网络接口,[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/etc/udev/rules.d/81-dhcpcd.rules udev 的这个规则]会自动启动dhcpcd。<br />
<br />
# rm /etc/udev/rules.d/81-dhcpcd.rules<br />
<br />
===== 禁用和移除 archiso 创建的服务 =====<br />
有一些服务文件是为 Live 环境创建的,请禁用这些服务并移除文件——因为它们对于新系统来说没必要存在:<br />
<br />
# systemctl disable pacman-init.service choose-mirror.service<br />
# rm -r /etc/systemd/system/{choose-mirror.service,pacman-init.service,etc-pacman.d-gnupg.mount,getty@tty1.service.d}<br />
# rm /etc/systemd/scripts/choose-mirror<br />
# rm /etc/systemd/system/archiso-start.service<br />
# rm /etc/systemd/system/multi-user.target.wants/archiso-start.service<br />
<br />
===== 移除 Live 环境的特殊脚本 =====<br />
在 live 系统中通过 archiso 脚本安装了一些脚本,这对于新系统是不必要的:<br />
<br />
# rm /etc/systemd/system/getty@tty1.service.d/autologin.conf<br />
# rm /root/{.automated_script.sh,.zlogin}<br />
# rm /etc/mkinitcpio-archiso.conf<br />
# rm -r /etc/initcpio<br />
<br />
===== 导入archlinux密钥 =====<br />
<br />
为了使用官方存储库,我们需要导入 archlinux 主密钥([[Pacman/Package signing (简体中文)#初始化密钥环]])。这一步通常是通过 pacstrap 完成的,但是可以通过<br />
<br />
# pacman-key --init<br />
# pacman-key --populate archlinux<br />
<br />
{{注意|Keyboard or mouse activity is needed to generate entropy and speed-up the first step.}}<br />
<br />
===== 配置系统 =====<br />
<br />
现在,您可以按照 [[Installation guide (简体中文)#配置系统]] 中跳过的步骤(设置语言环境,时区,主机名等),并通过创建初始 ramdisk 来完成安装,如 [[Installation guide (简体中文)#Initramfs]]。<br />
<br />
===== 启用图形登录(可选) =====<br />
<br />
如果使用像GDM这样的显示管理器,则可能需要将 systemd 默认目标从 multi-user.target 更改为允许图形登录的目标。<br />
# systemctl disable multi-user.target<br />
# systemctl enable graphical.target<br />
<br />
== 参阅 ==<br />
=== 文档和教程 ===<br />
* [https://projects.archlinux.org/archiso.git Archiso 项目页面]<br />
* [https://projects.archlinux.org/archiso.git/tree/docs 官方文档]<br />
<br />
=== 示例自定义模板 ===<br />
* [http://easy.open.and.free.fr/didjix/ A live DJ distribution powered by ArchLinux and built with Archiso]</div>
745275633
https://wiki.archlinux.org/index.php?title=Very_Secure_FTP_Daemon_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=512342
Very Secure FTP Daemon (简体中文)
2018-03-01T09:51:55Z
<p>745275633: 512279</p>
<hr />
<div>[[Category:FTP servers (简体中文)]]<br />
[[cs:Very Secure FTP Daemon]]<br />
[[en:Very Secure FTP Daemon]]<br />
[[es:Very Secure FTP Daemon]]<br />
[[it:Very Secure FTP Daemon]]<br />
[[ja:Very Secure FTP Daemon]]<br />
[[ru:Very Secure FTP Daemon]]<br />
{{TranslationStatus (简体中文)|Very Secure FTP Daemon|2018-02-27|512279}}<br />
[https://security.appspot.com/vsftpd.html vsftpd] (“Very Secure FTP Daemon“) 是一个为 UNIX 类系统开发的轻量,稳定和安全的 FTP 服务器端。<br />
== 安装 ==<br />
[[安装]] {{pkg|vsftpd}} 然后 [[Systemd (简体中文)#使用单元|启动/启用]] {{ic|vsftpd.service}} 守护程序。<br />
<br />
使用 [[Wikipedia:xinetd|xinetd]] 监视和控制 vsftpd 连接,请参见 [[#使用 xinetd]]。<br />
<br />
== 配置 ==<br />
vsftpd 的大多数配置都可以通过编辑 {{ic|/etc/vsftpd.conf}} 文件实现。 该文件本身自带大量注释说明,所以这一章节只就一些重要的配置予以说明。有关所有可用选项和文档,请参阅 {{man|5|vsftpd.conf}} 手册页。默认情况下,由 {{ic|/srv/ftp}} 提供文件。<br />
<br />
允许的连接 {{ic|/etc/hosts.allow}}:<br />
# 允许所有连接<br />
vsftpd: ALL<br />
# IP 地址范围<br />
vsftpd: 10.0.0.0/255.255.255.0<br />
<br />
=== 允许上传 ===<br />
需要将 {{ic|/etc/vsftpd.conf}} 中的 {{ic|write_enable}} 值设为 YES,以便允许修改文件系统(如上传):<br />
write_enable=YES<br />
<br />
=== 本地用户登录 ===<br />
需要修改 {{ic|/etc/vsftpd.conf}} 中的如下值,以便允许 {{ic|/etc/passwd}} 中的用户登录:<br />
local_enable=YES<br />
<br />
=== 匿名用户登录 ===<br />
以下行控制匿名用户是否可以登录。默认情况下,匿名登录只能从 {{ic|/srv/ftp}} 下载:<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
...<br />
# 允许匿名 FTP? (当心 - 默认情况下允许除非您将其注释)。<br />
anonymous_enable=YES<br />
...<br />
# 取消注释以允许匿名 FTP 用户上传文件。<br />
# 只有上述全局写入被激活,才会有效果。<br />
# 另外,你显然需要创建 FTP 用户有写权限的目录。<br />
# anon_upload_enable=YES<br />
#<br />
# 如果您希望匿名 FTP 用户能够创建新目录,请取消注释。<br />
# anon_mkdir_write_enable=YES<br />
...<br />
}}<br />
<br />
您也可以添加以下选项(详见 {{man|5|vsftpd.conf}}):<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
# 匿名登录不需要密码<br />
no_anon_password=YES<br />
<br />
# 匿名客户端的最大传输速率(以 Bytes/秒 为单位)<br />
anon_max_rate=30000<br />
<br />
# 用于匿名登录的目录<br />
anon_root=/example/directory/<br />
}}<br />
<br />
=== Chroot 限制 ===<br />
为了阻止用户离开家目录,可以设置 chroot 环境。要启用此功能,请在 {{ic|/etc/vsftpd.conf}} 中添加以下行:<br />
chroot_list_enable=YES<br />
chroot_list_file=/etc/vsftpd.chroot_list<br />
{{ic|chroot_list_file}} 定义了被 chroot 限制的用户列表。<br />
<br />
对于更严格的环境,请指定以下行:<br />
chroot_local_user=YES<br />
这将默认为所有用户启用 chroot 环境。 在这种情况下,{{ic|chroot_list_file}} 定义了'''不受''' chroot 限制的用户列表。<br />
<br />
=== 限制用户登录 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加以下两行来阻止特定用户登录FTP服务器:<br />
userlist_enable=YES<br />
userlist_file=/etc/vsftpd.user_list<br />
{{ic|userlist_file}} 文件列出'''不允许'''登录的用户。<br />
<br />
如果您只想允许特定的用户登录,请添加以下行:<br />
userlist_deny=NO<br />
此时 {{ic|userlist_file}} 文件指定'''允许'''登录的用户。<br />
<br />
=== 限制连接数 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加如下信息来限制本地用户的数据传输速率:<br />
local_max_rate=1000000 # 最大数据传输速率(单位: Bytes/秒)<br />
max_clients=50 # 可以同时连接的最大客户端数<br />
max_per_ip=2 # 每个 IP 允许的最大连接数<br />
<br />
=== 使用 xinetd ===<br />
Xinetd 提供增强的监控和控制连接功能。对于基本的可以工作的 vsftpd-server 是不必要的<br />
<br />
安装 vsftpd 将会添加必要的服务文件 {{ic|/etc/xinetd.d/vsftpd}},默认情况下,服务被禁用。<br />
<br />
启用ftp服务:<br />
<pre><br />
service ftp<br />
{<br />
socket_type = stream<br />
wait = no<br />
user = root<br />
server = /usr/sbin/vsftpd<br />
log_on_success += HOST DURATION<br />
log_on_failure += HOST<br />
disable = no<br />
}<br />
</pre><br />
<br />
如果您将 vsftpd 守护程序设置为以独立模式运行,而不是启动 vsftpd 守护程序和 [[Systemd (简体中文)#使用单元|启用]] {{ic|xinetd.service}},请在 {{ic|/etc/vsftpd.conf}} 中进行以下更改:<br />
listen=NO<br />
否则连接将失败:<br />
500 OOPS: could not bind listening IPv4 socket<br />
<br />
=== 使用 SSL/TLS 来保护 FTP ===<br />
首先,您需要一个 ''X.509 SSL/TLS'' 证书才能使用TLS。如果您没有,可以轻松生成如下的自签名证书:<br />
<br />
# cd /etc/ssl/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout vsftpd.pem -out vsftpd.pem<br />
# chmod 600 vsftpd.pem<br />
<br />
你会被问到关于你公司的问题,等等。由于你的证书不是一个可信任的,所填的内容并不重要,它只会被用于加密。要使用可信证书,您可以从 [[Let's Encrypt]] 这样的证书颁发机构获得证书。<br />
<br />
然后,编辑配置文件:<br />
{{hc|/etc/vsftpd.conf|2=ssl_enable=YES<br />
<br />
# 如果你接受匿名连接你可能要启用这个设置<br />
# allow_anon_ssl=NO<br />
<br />
# 默认情况下所有非匿名登录被迫使用 SSL 发送和接收密码和数据,设置为 NO,以允许不安全的连接<br />
force_local_logins_ssl=NO<br />
force_local_data_ssl=NO<br />
<br />
# 选择你想要的<br />
force_local_logins_ssl=YES<br />
<br />
# TLS v1 协议连接是首选,默认情况下启用此模式,而禁用 SSL v2 和 v3 时,以下设置是默认设置,不需要更改,除非您特别需要 SSL<br />
# ssl_tlsv1=YES<br />
# ssl_sslv2=NO<br />
# ssl_sslv3=NO<br />
# 提供您的证书和私钥注释的路径,它们可以包含在同一个文件中或不同的文件中<br />
rsa_cert_file=/etc/ssl/certs/vsftpd.pem<br />
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem<br />
<br />
# 此设置默认设置为 YES,并要求所有数据连接都显示会话重用,这证明他们知道控制通道的秘密。这种方式更安全,但不受许多 FTP 客户端的支持,为了更好的兼容性而设置为 NO<br />
require_ssl_reuse=NO<br />
}}<br />
<br />
=== 在被动模式下解析主机名 ===<br />
要覆盖 vsftpd 在被动模式下通过服务器的主机名发布的 IP 地址,并在启动时解析 DNS,在 {{ic|/etc/vsftpd.conf}} 中增加以下两行:<br />
pasv_addr_resolve=YES<br />
pasv_address=''yourdomain.org''<br />
<br />
{{注意|<br />
* 对于动态DNS,定期更新 ''pasv_address'' 并重新启动服务器是不必要的,因为它有时可以被读取。<br />
* 您可能无法通过 LAN 以被动模式连接,在这种情况下,请尝试使用主动模式而不是LAN客户端。<br />
}}<br />
<br />
=== 端口配置 ===<br />
可能需要调整默认FTP侦听端口和被动模式数据端口:<br />
<br />
* 对于暴露于 Web 的 FTP 服务器,为了减少服务器受到攻击的可能性,可以将侦听端口改为除标准端口 21 以外的端口。<br />
* 要限制被动模式将打开的端口,可以提供一个范围。<br />
这些端口配置更改可以使用以下几行完成:<br />
{{hc|/etc/vsftpd.conf|2=<br />
listen_port=2211<br />
pasv_min_port=5000<br />
pasv_max_port=5003<br />
}}<br />
<br />
=== 配置 iptables ===<br />
通常,运行FTP守护进程的服务器受 [[Iptables (简体中文)|iptables]] 防火墙的保护。要允许访问FTP服务器,需要打开相应的端口,如:<br />
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT<br />
本文不会提供有关如何设置iptables的任何说明,但这里是一个例子:[[Simple stateful firewall (简体中文)|Simple stateful firewall]]。<br />
<br />
有一些内核模块需要在这里引用的 iptables 正确的处理 FTP 连接。 其中特别是 ''nf_conntrack_ftp''。这是需要的,因为 FTP 使用给定的 ''listen_port''(默认为21) 仅用于命令,所有的数据传输都是通过不同的端口完成的。这些端口由 FTP 守护程序为每个会话随机选择(也取决于是使用主动还是被动模式)。要告诉 iptables 应该接受端口上的数据包,需要 ''nf_conntrack_ftp''。要在启动时自动加载,请在 {{ic|/etc/modules-load.d}} 中创建新文件,例如:<br />
# echo nf_conntrack_ftp > /etc/modules-load.d/nf_conntrack_ftp.conf<br />
<br />
如果内核 >= 4.7,您需要通过 ''sysctl'' 设置 ''net.netfilter.nf_conntrack_helper = 1'',如:<br />
# echo net.netfilter.nf_conntrack_helper=1 > /etc/sysctl.d/70-conntrack.conf<br />
或使用<br />
# iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp<br />
<br />
== 小技巧 ==<br />
=== 虚拟用户的 PAM 认证 ===<br />
由于 [[PAM (简体中文)]] 不再提供 {{ic|pam_userdb.so}} 另一个简单的方法是使用 {{AUR|libpam_pwdfile}}。对于具有许多用户的环境,另一个选项可能是 {{AUR|pam_mysql}} {{Broken package link|{{aur-mirror|pam_mysql}}}}。但是,本节仅限于解释如何通过 {{ic|pam_pwdfile.so}} 配置 chroot 环境和身份验证。<br />
<br />
在此示例中,我们创建目录 {{ic|vsftpd}}:<br />
# mkdir /etc/vsftpd<br />
<br />
创建和存储用户名和密码的一个选择是使用 Apache 的生成器 htpasswd:<br />
# htpasswd -c /etc/vsftpd/.passwd<br />
上述命令的一个问题是 vsftpd 可能无法读取生成的 MD5 散列密码。如果使用 -d 开关运行相同的命令,则使用 crypt() 加密,vsftpd 的密码变得可读,但其缺点是安全性较低,密码限制为8个字符。 Openssl 可用于使用算法1生成基于 MD5 的 BSD 密码:<br />
# openssl passwd -1<br />
<br />
无论那个解决方案 {{ic|/etc/vsftpd/.passwd}} 应该如下所示:<br />
username1:hashed_password1<br />
username2:hashed_password2<br />
...<br />
<br />
接下来,您需要使用 {{ic|pam_pwdfile.so}} 和生成的 {{ic|/etc/vsftpd/.passwd}} 文件创建 PAM 服务。在本例中,我们为 ''vsftpd'' 创建了一个 PAM 策略,其中包含以下内容:<br />
{{hc|/etc/pam.d/vsftpd|auth required pam_pwdfile.so pwdfile /etc/vsftpd/.passwd<br />
account required pam_permit.so}}<br />
<br />
现在是为虚拟用户创建一个 home 的时候了。在示例中,决定用 {{ic|/srv/ftp}} 为虚拟用户托管数据,这也反映了 Arch 的默认目录结构。首先创建 virtual 用户并使 {{ic|/srv/ftp}} 成为它的 home:<br />
# useradd -d /srv/ftp virtual<br />
让 virtual 成为所有者<br />
# chown virtual:virtual /srv/ftp<br />
<br />
一个基本的没有私人文件夹配置的 /etc/vsftpd,默认的虚拟用户的 home 文件夹:<br />
# 指向正确的 PAM 服务文件<br />
pam_service_name=vsftpd<br />
write_enable=YES<br />
hide_ids=YES<br />
listen=YES<br />
connect_from_port_20=YES<br />
anonymous_enable=NO<br />
local_enable=YES<br />
dirmessage_enable=YES<br />
xferlog_enable=YES<br />
chroot_local_user=YES<br />
guest_enable=YES<br />
guest_username=virtual<br />
virtual_use_local_privs=YES<br />
<br />
您自己的设置可能不需要一些参数。如果您希望 chroot 环境可写,您将需要将以下内容添加到配置文件中:<br />
allow_writeable_chroot = YES<br />
否则 vsftpd 的默认安全设置会抱怨,如果它检测到 chroot 是可写的。<br />
<br />
[[Start]] {{ic|vsftpd.service}}。<br />
<br />
您现在应该可以使用存储在 {{ic|/etc/vsftpd/.passwd}} 中的任何用户和密码从FTP客户端登录。<br />
<br />
==== 为虚拟用户创建私有目录 ====<br />
首先创建用户文件夹<br />
# mkdir /srv/ftp/user1<br />
# mkdir /srv/ftp/user2<br />
# chown virtual:virtual /srv/ftp/user?/<br />
<br />
随后, 在 {{ic|/etc/vsftpd.conf}} 增加如下行:<br />
local_root=/srv/ftp/$USER<br />
user_sub_token=$USER<br />
<br />
== 问题解决 ==<br />
<br />
=== vsftpd: no connection (Error 500) with recent kernels (3.5 and newer) and .service ===<br />
将其添加到您的 {{ic|/etc/vsftpd.conf}}:<br />
seccomp_sandbox=NO<br />
<br />
=== vsftpd: refusing to run with writable root inside chroot() ===<br />
从 vsftpd 2.3.5 开始,用户被锁定的 chroot 目录不可写。这是为了防止安全漏洞。<br />
<br />
允许上传的安全方法是保持 chroot 启用,并配置您的 FTP 目录。<br />
<br />
local_root=/srv/ftp/user<br />
<br />
# mkdir -p /srv/ftp/user/upload<br />
#<br />
# chmod 550 /srv/ftp/user<br />
# chmod 750 /srv/ftp/user/upload<br />
<br />
如果你必须这么做:<br />
<br />
您可以将其放入您的 {{ic|/etc/vsftpd.conf}} 以解决此安全性增强(自vsftpd 3.0.0;来自 [http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/ Fixing 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()]):<br />
allow_writeable_chroot=YES<br />
或者:<br />
<br />
安装 {{AUR|vsftpd-ext}} {{Broken package link|{{aur-mirror|vsftpd-ext}}}} 并在 conf 文件中设置<br />
allow_writable_chroot=YES<br />
<br />
=== FileZilla Client: GnuTLS error -8 -15 -110 when connecting via SSL ===<br />
vsftpd 尝试在 SSL 会话中显示纯文本错误消息。为了进行调试,暂时禁用加密,您将看到正确的错误消息。[http://ramblings.linkerror.com/?p=45] [https://serverfault.com/questions/772494/vsftpd-list-causes-gnutls-error-15]<br />
<br />
=== vsftpd.service fails to run on boot ===<br />
如果您启用了 {{ic|vsftpd.service}},并且无法在启动时运行,请确保它已在服务文件中设置为在 {{ic|network.target}} 之后加载:<br />
<br />
{{hc|/usr/lib/systemd/system/vsftpd.service|2=<br />
[Unit]<br />
Description=vsftpd daemon<br />
After=network.target}}<br />
<br />
=== ipv6 only fails with: 500 OOPS: run two copies of vsftpd for IPv4 and IPv6 ===<br />
你很有可能已经注释了这一行<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
#listen=YES<br />
#<br />
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6<br />
# sockets, you must run two copies of vsftpd with two configuration files.<br />
# Make sure, that one of the listen options is commented !!<br />
listen_ipv6=YES<br />
<br />
而不是设置<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
listen=NO<br />
<br />
== 更多资源 ==<br />
* [http://vsftpd.beasts.org/ vsftpd official homepage]<br />
* [http://vsftpd.beasts.org/vsftpd_conf.html vsftpd.conf man page]</div>
745275633
https://wiki.archlinux.org/index.php?title=Very_Secure_FTP_Daemon_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=512260
Very Secure FTP Daemon (简体中文)
2018-02-28T01:26:39Z
<p>745275633: 512246</p>
<hr />
<div>[[Category:FTP servers (简体中文)]]<br />
[[cs:Very Secure FTP Daemon]]<br />
[[en:Very Secure FTP Daemon]]<br />
[[es:Very Secure FTP Daemon]]<br />
[[it:Very Secure FTP Daemon]]<br />
[[ja:Very Secure FTP Daemon]]<br />
[[ru:Very Secure FTP Daemon]]<br />
{{TranslationStatus (简体中文)|Very Secure FTP Daemon|2018-02-27|512246}}<br />
[https://security.appspot.com/vsftpd.html vsftpd] (“Very Secure FTP Daemon“) 是一个为 UNIX 类系统开发的轻量,稳定和安全的 FTP 服务器端。<br />
== 安装 ==<br />
[[安装]] {{pkg|vsftpd}} 然后 [[Systemd (简体中文)#使用单元|启动/启用]] {{ic|vsftpd.service}} 守护程序。<br />
<br />
使用 [[Wikipedia:xinetd|xinetd]] 监视和控制 vsftpd 连接,请参见 [[#使用 xinetd]]。<br />
<br />
== 配置 ==<br />
vsftpd 的大多数配置都可以通过编辑 {{ic|/etc/vsftpd.conf}} 文件实现。 该文件本身自带大量注释说明,所以这一章节只就一些重要的配置予以说明。有关所有可用选项和文档,请参阅 vsftpd.conf(5) 或 [https://security.appspot.com/vsftpd/vsftpd_conf.html 在线查看] 手册页。默认情况下,由 {{ic|/srv/ftp}} 提供文件。<br />
<br />
允许的连接 {{ic|/etc/hosts.allow}}:<br />
# 允许所有连接<br />
vsftpd: ALL<br />
# IP 地址范围<br />
vsftpd: 10.0.0.0/255.255.255.0<br />
<br />
=== 允许上传 ===<br />
需要将 {{ic|/etc/vsftpd.conf}} 中的 {{ic|write_enable}} 值设为 YES,以便允许修改文件系统(如上传):<br />
write_enable=YES<br />
<br />
=== 本地用户登录 ===<br />
需要修改 {{ic|/etc/vsftpd.conf}} 中的如下值,以便允许 {{ic|/etc/passwd}} 中的用户登录:<br />
local_enable=YES<br />
<br />
=== 匿名用户登录 ===<br />
以下行控制匿名用户是否可以登录。默认情况下,匿名登录只能从 {{ic|/srv/ftp}} 下载:<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
...<br />
# 允许匿名 FTP? (当心 - 默认情况下允许除非您将其注释)。<br />
anonymous_enable=YES<br />
...<br />
# 取消注释以允许匿名 FTP 用户上传文件。<br />
# 只有上述全局写入被激活,才会有效果。<br />
# 另外,你显然需要创建 FTP 用户有写权限的目录。<br />
# anon_upload_enable=YES<br />
#<br />
# 如果您希望匿名 FTP 用户能够创建新目录,请取消注释。<br />
# anon_mkdir_write_enable=YES<br />
...<br />
}}<br />
<br />
您也可以添加以下选项(详见 {{man|5|vsftpd.conf}}):<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
# 匿名登录不需要密码<br />
no_anon_password=YES<br />
<br />
# 匿名客户端的最大传输速率(以 Bytes/秒 为单位)<br />
anon_max_rate=30000<br />
<br />
# 用于匿名登录的目录<br />
anon_root=/example/directory/<br />
}}<br />
<br />
=== Chroot 限制 ===<br />
为了阻止用户离开家目录,可以设置 chroot 环境。要启用此功能,请在 {{ic|/etc/vsftpd.conf}} 中添加以下行:<br />
chroot_list_enable=YES<br />
chroot_list_file=/etc/vsftpd.chroot_list<br />
{{ic|chroot_list_file}} 定义了被 chroot 限制的用户列表。<br />
<br />
对于更严格的环境,请指定以下行:<br />
chroot_local_user=YES<br />
这将默认为所有用户启用 chroot 环境。 在这种情况下,{{ic|chroot_list_file}} 定义了'''不受''' chroot 限制的用户列表。<br />
<br />
=== 限制用户登录 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加以下两行来阻止特定用户登录FTP服务器:<br />
userlist_enable=YES<br />
userlist_file=/etc/vsftpd.user_list<br />
{{ic|userlist_file}} 文件列出'''不允许'''登录的用户。<br />
<br />
如果您只想允许特定的用户登录,请添加以下行:<br />
userlist_deny=NO<br />
此时 {{ic|userlist_file}} 文件指定'''允许'''登录的用户。<br />
<br />
=== 限制连接数 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加如下信息来限制本地用户的数据传输速率:<br />
local_max_rate=1000000 # 最大数据传输速率(单位: Bytes/秒)<br />
max_clients=50 # 可以同时连接的最大客户端数<br />
max_per_ip=2 # 每个 IP 允许的最大连接数<br />
<br />
=== 使用 xinetd ===<br />
Xinetd 提供增强的监控和控制连接功能。对于基本的可以工作的 vsftpd-server 是不必要的<br />
<br />
安装 vsftpd 将会添加必要的服务文件 {{ic|/etc/xinetd.d/vsftpd}},默认情况下,服务被禁用。<br />
<br />
启用ftp服务:<br />
<pre><br />
service ftp<br />
{<br />
socket_type = stream<br />
wait = no<br />
user = root<br />
server = /usr/sbin/vsftpd<br />
log_on_success += HOST DURATION<br />
log_on_failure += HOST<br />
disable = no<br />
}<br />
</pre><br />
<br />
如果您将 vsftpd 守护程序设置为以独立模式运行,而不是启动 vsftpd 守护程序和 [[Systemd (简体中文)#使用单元|启用]] {{ic|xinetd.service}},请在 {{ic|/etc/vsftpd.conf}} 中进行以下更改:<br />
listen=NO<br />
否则连接将失败:<br />
500 OOPS: could not bind listening IPv4 socket<br />
<br />
=== 使用 SSL/TLS 来保护 FTP ===<br />
首先,您需要一个 ''X.509 SSL/TLS'' 证书才能使用TLS。如果您没有,可以轻松生成如下的自签名证书:<br />
<br />
# cd /etc/ssl/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout vsftpd.pem -out vsftpd.pem<br />
# chmod 600 vsftpd.pem<br />
<br />
你会被问到关于你公司的问题,等等。由于你的证书不是一个可信任的,所填的内容并不重要,它只会被用于加密。要使用可信证书,您可以从 [[Let's Encrypt]] 这样的证书颁发机构获得证书。<br />
<br />
然后,编辑配置文件:<br />
{{hc|/etc/vsftpd.conf|2=ssl_enable=YES<br />
<br />
# 如果你接受匿名连接你可能要启用这个设置<br />
# allow_anon_ssl=NO<br />
<br />
# 默认情况下所有非匿名登录被迫使用 SSL 发送和接收密码和数据,设置为 NO,以允许不安全的连接<br />
force_local_logins_ssl=NO<br />
force_local_data_ssl=NO<br />
<br />
# 选择你想要的<br />
force_local_logins_ssl=YES<br />
<br />
# TLS v1 协议连接是首选,默认情况下启用此模式,而禁用 SSL v2 和 v3 时,以下设置是默认设置,不需要更改,除非您特别需要 SSL<br />
# ssl_tlsv1=YES<br />
# ssl_sslv2=NO<br />
# ssl_sslv3=NO<br />
# 提供您的证书和私钥注释的路径,它们可以包含在同一个文件中或不同的文件中<br />
rsa_cert_file=/etc/ssl/certs/vsftpd.pem<br />
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem<br />
<br />
# 此设置默认设置为 YES,并要求所有数据连接都显示会话重用,这证明他们知道控制通道的秘密。这种方式更安全,但不受许多 FTP 客户端的支持,为了更好的兼容性而设置为 NO<br />
require_ssl_reuse=NO<br />
}}<br />
<br />
=== 在被动模式下解析主机名 ===<br />
要覆盖 vsftpd 在被动模式下通过服务器的主机名发布的 IP 地址,并在启动时解析 DNS,在 {{ic|/etc/vsftpd.conf}} 中增加以下两行:<br />
pasv_addr_resolve=YES<br />
pasv_address=''yourdomain.org''<br />
<br />
{{注意|<br />
* 对于动态DNS,定期更新 ''pasv_address'' 并重新启动服务器是不必要的,因为它有时可以被读取。<br />
* 您可能无法通过 LAN 以被动模式连接,在这种情况下,请尝试使用主动模式而不是LAN客户端。<br />
}}<br />
<br />
=== 端口配置 ===<br />
可能需要调整默认FTP侦听端口和被动模式数据端口:<br />
<br />
* 对于暴露于 Web 的 FTP 服务器,为了减少服务器受到攻击的可能性,可以将侦听端口改为除标准端口 21 以外的端口。<br />
* 要限制被动模式将打开的端口,可以提供一个范围。<br />
这些端口配置更改可以使用以下几行完成:<br />
{{hc|/etc/vsftpd.conf|2=<br />
listen_port=2211<br />
pasv_min_port=5000<br />
pasv_max_port=5003<br />
}}<br />
<br />
=== 配置 iptables ===<br />
通常,运行FTP守护进程的服务器受 [[Iptables (简体中文)|iptables]] 防火墙的保护。要允许访问FTP服务器,需要打开相应的端口,如:<br />
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT<br />
本文不会提供有关如何设置iptables的任何说明,但这里是一个例子:[[Simple stateful firewall (简体中文)|Simple stateful firewall]]。<br />
<br />
有一些内核模块需要在这里引用的 iptables 正确的处理 FTP 连接。 其中特别是 ''nf_conntrack_ftp''。这是需要的,因为 FTP 使用给定的 ''listen_port''(默认为21) 仅用于命令,所有的数据传输都是通过不同的端口完成的。这些端口由 FTP 守护程序为每个会话随机选择(也取决于是使用主动还是被动模式)。要告诉 iptables 应该接受端口上的数据包,需要 ''nf_conntrack_ftp''。要在启动时自动加载,请在 {{ic|/etc/modules-load.d}} 中创建新文件,例如:<br />
# echo nf_conntrack_ftp > /etc/modules-load.d/nf_conntrack_ftp.conf<br />
<br />
如果内核 >= 4.7,您需要通过 ''sysctl'' 设置 ''net.netfilter.nf_conntrack_helper = 1'',如:<br />
# echo net.netfilter.nf_conntrack_helper=1 > /etc/sysctl.d/70-conntrack.conf<br />
或使用<br />
# iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp<br />
<br />
== 小技巧 ==<br />
=== 虚拟用户的 PAM 认证 ===<br />
由于 [[PAM (简体中文)]] 不再提供 {{ic|pam_userdb.so}} 另一个简单的方法是使用 {{AUR|libpam_pwdfile}}。对于具有许多用户的环境,另一个选项可能是 {{AUR|pam_mysql}} {{Broken package link|{{aur-mirror|pam_mysql}}}}。但是,本节仅限于解释如何通过 {{ic|pam_pwdfile.so}} 配置 chroot 环境和身份验证。<br />
<br />
在此示例中,我们创建目录 {{ic|vsftpd}}:<br />
# mkdir /etc/vsftpd<br />
<br />
创建和存储用户名和密码的一个选择是使用 Apache 的生成器 htpasswd:<br />
# htpasswd -c /etc/vsftpd/.passwd<br />
上述命令的一个问题是 vsftpd 可能无法读取生成的 MD5 散列密码。如果使用 -d 开关运行相同的命令,则使用 crypt() 加密,vsftpd 的密码变得可读,但其缺点是安全性较低,密码限制为8个字符。 Openssl 可用于使用算法1生成基于 MD5 的 BSD 密码:<br />
# openssl passwd -1<br />
<br />
无论那个解决方案 {{ic|/etc/vsftpd/.passwd}} 应该如下所示:<br />
username1:hashed_password1<br />
username2:hashed_password2<br />
...<br />
<br />
接下来,您需要使用 {{ic|pam_pwdfile.so}} 和生成的 {{ic|/etc/vsftpd/.passwd}} 文件创建 PAM 服务。在本例中,我们为 ''vsftpd'' 创建了一个 PAM 策略,其中包含以下内容:<br />
{{hc|/etc/pam.d/vsftpd|auth required pam_pwdfile.so pwdfile /etc/vsftpd/.passwd<br />
account required pam_permit.so}}<br />
<br />
现在是为虚拟用户创建一个 home 的时候了。在示例中,决定用 {{ic|/srv/ftp}} 为虚拟用户托管数据,这也反映了 Arch 的默认目录结构。首先创建 virtual 用户并使 {{ic|/srv/ftp}} 成为它的 home:<br />
# useradd -d /srv/ftp virtual<br />
让 virtual 成为所有者<br />
# chown virtual:virtual /srv/ftp<br />
<br />
一个基本的没有私人文件夹配置的 /etc/vsftpd,默认的虚拟用户的 home 文件夹:<br />
# 指向正确的 PAM 服务文件<br />
pam_service_name=vsftpd<br />
write_enable=YES<br />
hide_ids=YES<br />
listen=YES<br />
connect_from_port_20=YES<br />
anonymous_enable=NO<br />
local_enable=YES<br />
dirmessage_enable=YES<br />
xferlog_enable=YES<br />
chroot_local_user=YES<br />
guest_enable=YES<br />
guest_username=virtual<br />
virtual_use_local_privs=YES<br />
<br />
您自己的设置可能不需要一些参数。如果您希望 chroot 环境可写,您将需要将以下内容添加到配置文件中:<br />
allow_writeable_chroot = YES<br />
否则 vsftpd 的默认安全设置会抱怨,如果它检测到 chroot 是可写的。<br />
<br />
[[Start]] {{ic|vsftpd.service}}。<br />
<br />
您现在应该可以使用存储在 {{ic|/etc/vsftpd/.passwd}} 中的任何用户和密码从FTP客户端登录。<br />
<br />
==== 为虚拟用户创建私有目录 ====<br />
首先创建用户文件夹<br />
# mkdir /srv/ftp/user1<br />
# mkdir /srv/ftp/user2<br />
# chown virtual:virtual /srv/ftp/user?/<br />
<br />
随后, 在 {{ic|/etc/vsftpd.conf}} 增加如下行:<br />
local_root=/srv/ftp/$USER<br />
user_sub_token=$USER<br />
<br />
== 问题解决 ==<br />
<br />
=== vsftpd: no connection (Error 500) with recent kernels (3.5 and newer) and .service ===<br />
将其添加到您的 {{ic|/etc/vsftpd.conf}}:<br />
seccomp_sandbox=NO<br />
<br />
=== vsftpd: refusing to run with writable root inside chroot() ===<br />
从 vsftpd 2.3.5 开始,用户被锁定的 chroot 目录不可写。这是为了防止安全漏洞。<br />
<br />
允许上传的安全方法是保持 chroot 启用,并配置您的 FTP 目录。<br />
<br />
local_root=/srv/ftp/user<br />
<br />
# mkdir -p /srv/ftp/user/upload<br />
#<br />
# chmod 550 /srv/ftp/user<br />
# chmod 750 /srv/ftp/user/upload<br />
<br />
如果你必须这么做:<br />
<br />
您可以将其放入您的 {{ic|/etc/vsftpd.conf}} 以解决此安全性增强(自vsftpd 3.0.0;来自 [http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/ Fixing 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()]):<br />
allow_writeable_chroot=YES<br />
或者:<br />
<br />
安装 {{AUR|vsftpd-ext}} {{Broken package link|{{aur-mirror|vsftpd-ext}}}} 并在 conf 文件中设置<br />
allow_writable_chroot=YES<br />
<br />
=== FileZilla Client: GnuTLS error -8 -15 -110 when connecting via SSL ===<br />
vsftpd 尝试在 SSL 会话中显示纯文本错误消息。为了进行调试,暂时禁用加密,您将看到正确的错误消息。[http://ramblings.linkerror.com/?p=45] [https://serverfault.com/questions/772494/vsftpd-list-causes-gnutls-error-15]<br />
<br />
=== vsftpd.service fails to run on boot ===<br />
如果您启用了 {{ic|vsftpd.service}},并且无法在启动时运行,请确保它已在服务文件中设置为在 {{ic|network.target}} 之后加载:<br />
<br />
{{hc|/usr/lib/systemd/system/vsftpd.service|2=<br />
[Unit]<br />
Description=vsftpd daemon<br />
After=network.target}}<br />
<br />
=== ipv6 only fails with: 500 OOPS: run two copies of vsftpd for IPv4 and IPv6 ===<br />
你很有可能已经注释了这一行<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
#listen=YES<br />
#<br />
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6<br />
# sockets, you must run two copies of vsftpd with two configuration files.<br />
# Make sure, that one of the listen options is commented !!<br />
listen_ipv6=YES<br />
<br />
而不是设置<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
listen=NO<br />
<br />
== 更多资源 ==<br />
* [http://vsftpd.beasts.org/ vsftpd official homepage]<br />
* [http://vsftpd.beasts.org/vsftpd_conf.html vsftpd.conf man page]</div>
745275633
https://wiki.archlinux.org/index.php?title=Archiso_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=512177
Archiso (简体中文)
2018-02-27T10:47:13Z
<p>745275633: 512164</p>
<hr />
<div>[[Category:简体中文]]<br />
[[Category:Live Arch systems (简体中文)]]<br />
[[Category:Getting and installing Arch (简体中文)]]<br />
[[ar:Archiso]]<br />
[[el:Archiso]]<br />
[[en:Archiso]]<br />
[[es:Archiso]]<br />
[[fr:Archiso]]<br />
[[it:Archiso]]<br />
[[ja:Archiso]]<br />
[[nl:Archiso]]<br />
[[ru:Archiso]]<br />
[[sk:Archiso]]<br />
{{TranslationStatus (简体中文)|Archiso|2018-02-04|512164}}<br />
{{Related articles start (简体中文)}}<br />
{{Related|Remastering the Install ISO}}<br />
{{Related2|PXE (简体中文)|PXE}}<br />
{{Related2|Archboot (简体中文)|Archboot}}<br />
{{Related articles end}}<br />
'''Archiso''' 是一组 bash 脚本,它能够建立功能全面的 Arch Linux 的 Live CD/DVD/USB 映像。它同样是用来生成官方映像的工具,但由于它是一个非常通用的工具,所以它可以被用来生成从救援系统、安装盘,到特殊爱好的 Live CD/DVD/USB 系统——无人知晓还有其他什么。简单地说,如果要将 Arch 放在一条闪光的船上,它可以帮你做到这一点。Archiso 的核心以及灵魂是 ''mkarchiso''。它的所有选项都写在它的用法输出上,所以它的直接使用方法将不在这里讨论。相反,这篇 wiki 文章将导引你迅速建立你的 Live 介质。<br />
<br />
== 安装和配置 ==<br />
<br />
{{注意|<br />
* 您必须在 x86_64 上运行 Archiso。 [https://projects.archlinux.org/archiso.git/tree/docs/README.build#n67]<br />
* 以下操作请在ROOT权限下使用,在错误的权限下操作会造成一下问题。}}<br />
当你开始之前, [[install|安装]] {{Pkg|archiso}} 或 {{AUR|archiso-git}}。<br />
<br />
创建一个用于工作的目录, 实时镜像将会在这里被处理。 {{ic|~/archlive}} 是一个好选择。<br />
$ mkdir ~/archlive<br />
<br />
现在要将早先安装到主机的 archiso 脚本复制到你新建的工作目录内。<br />
<br />
Archiso 附带2个预定义配置( profiles ): ''releng'' 和''baseline''。<br />
<br />
* 如果您想要创建完全定制的 Live Arch Linux ,并预装所有您喜爱的程序和配置,使用 ''releng''。<br />
<br />
* 如果您只是想构建一个简易 Live 镜像,无预装软件并仅有基础配置,那么使用 ''baseline''。<br />
<br />
现在,将您选择的配置文件复制到目录(在下面的示例中为 ''archlive''),您可以在其中进行调整和构建。 执行以下操作,用 {{ic|releng}} 或 {{ic|baseline}} 替换 {{ic|'''profile'''}}。<br />
<br />
# cp -r /usr/share/archiso/configs/'''profile'''/* ''archlive''<br />
<br />
* 如果你使用 {{ic|releng}} 配置文件来创建一个完全自定义的镜像,那么你可以继续到:[[#配置 Live 介质]]。<br />
<br />
* 如果您使用 {{ic|baseline}} 配置文件创建一个简易映像,那么你不需要做任何定制,并可以直接继续到 [[#构建ISO]].<br />
<br />
== 配置 Live 介质 ==<br />
<br />
本节详细介绍该如何配置您将创建的映像,允许您定义哪些包以及配置将被您的 Live 映像所包含。<br />
在 [[#安装和配置]] 中创建的{{ic|''archlive''}}目录中有许多文件和目录; 我们只关注其中一部分,主要是<br />
* {{ic|packages.*}} - 在这里一行行列出你想要安装的包,和 <br />
* {{ic|airootfs}} 目录——这是一个覆盖目录,你将在这里完成所有的定制工作。<br />
一般来说,您在全新安装之后所执行的每个管理任务(不包括软件包安装)可以被写入这个脚本: {{ic|''archlive''/airootfs/root/customize_airootfs.sh}}。您必须从新环境的角度来写该脚本,所以脚本中的 / 代表方才被创建的 Live ISO 的根。<br />
<br />
=== 安装包 ===<br />
<br />
[[Edit|编辑]] {{ic|packages.i686}},{{ic|packages.x86_64}} 或 {{ic|packages.both}} 中的程序包列表,以指示要在 live 媒体上安装那些程序包。这里的后缀表示包可用的架构。<br />
<br />
{{Note|如果要在 Live CD 中使用 [[窗口管理器]],则必须添加必要且正确的 [[video drivers]],否则 WM 可能在加载时冻结。}}<br />
<br />
==== 自定义本地库 ====<br />
<br />
{{Merge|Pacman/Tips_and_tricks_(简体中文)#自建本地仓库|移动一般信息 (如:仓库目录树) 到主文章.|Talk:Archiso}}<br />
<br />
为了准备自定义包或是从 [[Arch User Repository (简体中文)|AUR]]/[[Arch Build System (简体中文)|ABS]] 安装包,你也可以 [[Custom local repository|创建自定义本地资源库]]。如果您希望支持多种体系结构,则应采取预防措施来防止发生错误。每个架构应该有自己的目录树:<br />
<br />
{{hc|$ tree ~/customrepo/ {{!}} sed "s/$(uname -m)/<arch>/g"|<br />
/home/archie/customrepo/<br />
└── <arch><br />
├── customrepo.db -> customrepo.db.tar.xz<br />
├── customrepo.db.tar.xz<br />
├── customrepo.files -> customrepo.files.tar.xz<br />
├── customrepo.files.tar.xz<br />
└── personal-website-git-b99cce0-1-<arch>.pkg.tar.xz<br />
<br />
1 directory, 5 files<br />
}}<br />
<br />
如此后,您可以添加您的仓库——把下面的句子加入 {{ic|~/archlive/pacman.conf}},并置于其他仓库条目上面(优先级最高):<br />
<br />
{{hc|~/archlive/pacman.conf|...<br />
# custom repository<br />
[customrepo]<br />
SigLevel <nowiki>=</nowiki> Optional TrustAll<br />
Server <nowiki>=</nowiki> file:///home/'''user'''/customrepo/$arch<br />
...}}<br />
<br />
''repo-add'' 可执行文件检查软件包是否合适。如果不,那么你将得到与此类似的错误消息:<br />
<br />
==> ERROR: '/home/archie/customrepo/<arch>/foo-<arch>.pkg.tar.xz' does not have a valid database archive extension.<br />
<br />
==== 避免安装属于base组的包 ====<br />
<br />
默认情况下,{{ic|/usr/bin/mkarchiso}}——一个被 {{ic|~/archlive/build.sh}} 使用的脚本——会调用 {{Pkg|arch-install-scripts}} 中一个名为 {{ic|pacstrap}} 的程序,且在调用时不使用 {{ic|-i}} 标志——这将使 [[Pacman]] 在安装过程中不等待用户输入。<br />
<br />
当 base 组软件包被加入黑名单——把它们写到 {{ic|~/archlive/pacman.conf}} 中的 {{ic|IgnorePkg}} 行——时,[[Pacman]] 会询问是否仍然安装它们——意味着如果用户输入被跳过,它们就会被安装。为了避免安装这些包,这里有一些选择:<br />
<br />
* '''丑陋'''方案(Dirty):在 {{ic|/usr/bin/mkarchiso}} 中每次调用 {{ic|pacstrap}} 的行上加入 {{ic|i}} 标志。<br />
<br />
* '''整洁'''方案(Clean):创建 {{ic|/usr/bin/mkarchiso}} 的一份复制。在该复制中增加此标志,并修改 {{ic|~/archlive/build.sh}} 以使其调用修改过的 mkarchiso 脚本。<br />
<br />
* '''高级'''方案(Advanced): 在 {{ic|~/archlive/build.sh}} 中创建一个函数,该函数将在基础安装结束后显式移除那些包。若这样做,可以免去在安装过程中多次按回车键的麻烦。<br />
<br />
==== Installing packages from multilib ====<br />
<br />
要从 [[Multilib (简体中文)|Multilib]] 资源库安装软件包,您必须创建两个 pacman 配置文件:一个用于 x86_64,一个用于 i686。 将 {{ic|pacman.conf}} 复制到 {{ic|pacmanx86_64.conf}} 和 {{ic|pacmani686.conf}}。 取消注释以下行以{{ic|pacmanx86_64.conf}} 中启用 ''multilib''):<br />
<br />
{{hc|pacmanx86_64.conf|2=<br />
[multilib]<br />
SigLevel = PackageRequired<br />
Include = /etc/pacman.d/mirrorlist<br />
}}<br />
<br />
然后用编辑器编辑 {{ic|build.sh}}。 把:<br />
<br />
{{hc|build.sh|<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in i686 x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
done<br />
<br />
run_once make_packages_efi<br />
<br />
for arch in i686 x86_64; do<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
改为:<br />
<br />
{{hc|build.sh|<br />
cp -v releng/pacmanx86_64.conf releng/pacman.conf<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
<br />
echo make_pacman_conf i686<br />
cp -v releng/pacmani686.conf releng/pacman.conf<br />
cp -v releng/pacmani686.conf ${work_dir}/pacman.conf<br />
<br />
<br />
for arch in i686; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
这样,x86_64 和 i686 的软件包将安装有自己的pacman配置文件。<br />
<br />
=== 向映像里添加文件===<br />
<br />
{{注意|你必须使用 root 权限来完成这件事,不要改变任何你复制过来的文件的所有权,airootfs 中的'''所有'''文件必须为 root 用户所有。适当的所有制将在不久被解决。}}<br />
<br />
airootfs 目录作为要覆盖的文件,把它看作是在当前系统上的根目录'/',所以你在这个目录中放置的任何文件都将在开机时被复制。<br />
<br />
所以,如果你在当前系统上有一组 iptables 脚本且想要在 Live 映像上使用,请这样复制:<br />
# cp -r /etc/iptables ~/archlive/airootfs/etc<br />
<br />
在用户 home 文件夹里放置文件的方法有些许不同。不要把它们放在 {{ic|airootfs/home}},而是在 airootfs/ 里创建 skel 目录并将其放置在那里。然后我们会将相关命令添加到 {{ic|customize_airootfs.sh}}——我们要使用它在引导时复制文件以及梳理权限。<br />
<br />
首先,创建 skel 目录<br />
# mkdir ~/archlive/airootfs/etc/skel<br />
<br />
现在,复制 'home' 的文件到 skel 目录。例如,对于 {{ic|.bashrc}}:<br />
# cp ~/.bashrc ~/archlive/airootfs/etc/skel/<br />
<br />
当 {{ic|~/archlive/airootfs/root/customize_airootfs.sh}} 被执行,并且一个新用户已被创建, skel 目录中的文件将自动被复制到新的 home 文件夹中,并被设置正确的权限。<br />
<br />
类似地,需要注意位于层次结构下方的特殊配置文件。作为示例,配置文件 {{ic|/etc/X11/xinit/xinitrc}} 位于可能被安装包覆盖的路径上。要将 {{ic|xinitrc}} 的配置文件放在 {{ic|~/archlive/airootfs/etc/skel/}} ,然后修改 {{ic|customize_airootfs.sh}} 以适当地移动。<br />
<br />
=== 引导器 ===<br />
<br />
默认的文件应该可以正常工作,所以你应该不需要去碰它。<br />
<br />
由于 isolinux 的模块化性质,你能够使用很多插件,因为所有 *.c32 都被复制且可以可供您使用。看看[http://syslinux.zytor.com/wiki/index.php/SYSLINUX syslinux 官方网站] 和 [https://projects.archlinux.org/archiso.git/tree/configs/syslinux-iso/boot-files Archiso Git Repo]。使用所述插件,便有可能做出更具视觉吸引力及复杂的菜单。参见 [http://syslinux.zytor.com/wiki/index.php/Comboot/menu.c32 此处]。<br />
<br />
=== 登录管理器 ===<br />
<br />
通过启用您登录管理器的 [[Systemd (简体中文)|systemd]] 服务来做到在引导时启动 X 。如果您知道哪一个 .service 文件需要软链接,那就太好了。如果不知道,你也可以轻松找出——如果你在创建 iso 所用的系统上使用相同的程序的话。只需使用:<br />
<br />
$ ls -l /etc/systemd/system/display-manager.service<br />
<br />
现在在 {{ic|~/archlive/airootfs/etc/systemd/system}} 中创建相同的软链接。如 LXDM:<br />
<br />
# ln -s /usr/lib/systemd/system/lxdm.service ~/archlive/airootfs/etc/systemd/system/display-manager.service<br />
<br />
这将使您在 live 系统启用在系统上启动 LXDM。(This will enable LXDM at system start on your live system.)<br />
<br />
或者,您也可以启用 {{ic|airootfs/root/customize_airootfs.sh}} 中的服务以及其中启用的其他服务。<br />
<br />
如果您希望图形环境在启动过程中自动启动,请确保编辑 {{ic|airootfs/root/customize_airootfs.sh}} 并替换<br />
systemctl set-default multi-user.target<br />
为<br />
systemctl set-default graphical.target<br />
<br />
=== 改变自动登录状态 ===<br />
<br />
Getty 的自动登录配置位于 {{ic|airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf}}。 <br />
<br />
您可以修改这个文件来更改自动登录用户:<br />
<br />
[Service]<br />
ExecStart=<br />
ExecStart=-/sbin/agetty --autologin '''isouser''' --noclear %I 38400 linux<br />
<br />
或者干脆删除它来禁用自动登录。<br />
<br />
== 构建ISO ==<br />
<br />
现在,你已经准备好把你的文件转换成 .iso,以便可以刻录到 CD 或 USB:<br />
<br />
首先创建 {{ic|out/}} 目录,<br />
<br />
# mkdir ~/archlive/out/<br />
<br />
然后在 {{ic|~/archlive}} 里面执行:<br />
<br />
# ./build.sh -v<br />
<br />
该脚本将现在下载并安装你指定的软件包到 {{ic|work/*/airootfs}},创建内核和 init 映像(initramfs),应用您的修改,并最终把 ISO 建立到 {{ic|out/}}。<br />
<br />
=== 重建ISO ===<br />
<br />
在修改之后重建 ISO 不被官方支持。但是,通过应用两个步骤很容易。首先,您必须删除工作目录中的锁定文件:<br />
<br />
# rm -v work/build.make_*<br />
<br />
此外,需要编辑脚本 {{ic|airootfs/root/customize_airootfs.sh}},并在 {{ic|useradd}} 行的开头添加 {{ic|id}} 命令,如下所示。否则,重建将在此处停止,因为要添加的用户已经存在 [https://bugs.archlinux.org/task/41865]。<br />
{{Style|typo?}}<br />
<br />
! id arch && useradd -m -p "" -g users -G "adm,audio,floppy,log,network,rfkill,scanner,storage,optical,power,wheel" -s /usr/bin/zsh arch<br />
<br />
同时删除创建的用户或符号链接,如 {{ic|/etc/sudoers}} 等持久性数据。<br />
<br />
{{Expansion|报告需要删除或重置的更多数据。}}<br />
<br />
通过编辑 pacstrap 脚本(位于 /bin/pacstrap)并在第 361 行更改以下内容,可以稍微加快重建速度:<br />
<br />
修改前:<br />
<br />
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then<br />
<br />
修改后:<br />
<br />
if ! pacman -r "$newroot" -Sy --needed "${pacman_args[@]}"; then<br />
<br />
这增加了初始引导的速度,因为它不必下载和安装任何已经安装的基础包。<br />
<br />
== 使用ISO ==<br />
<br />
有关各种选项,请参见 [[:Category:Getting_and_installing_Arch_(简体中文)#安装方式]] 部分。<br />
<br />
== 提示和技巧 ==<br />
<br />
=== 在沒有互联网连接的情况下安装 Archiso ===<br />
{{Move|Installation without Internet access|似乎这可以独立成一篇|Talk:Archiso}}<br />
{{Accuracy|可以将 Arch 镜像上提供的 “bootstrap” 映像直接提取到目标磁盘,而不是从 archiso 复制文件。 你将得到一个最小的系统,而不需要处理 archiso 修改。|Talk:Archiso}}<br />
<br />
若你想在没有互联网连接或者你不想重复下载你想要的包的情况下安装 archiso(例如[https://www.archlinux.org/download/ 官方的每月发布版]):<br />
<br />
首先,按照[[Installation guide (简体中文)|安装指南]],并跳过一些步骤(如[[Installation guide (简体中文)#连接到因特网|连接到因特网]]),直到[[Installation guide (简体中文)#安装基本系统|安装基本系统]]之前。<br />
<br />
==== 安装 archiso 到新的 root ====<br />
<br />
复制 Live 环境的''所有文件''到新的根目录,而不是使用 {{ic|pacstrap}}(这将尝试从远程存储库下载):<br />
# cp -ax / /mnt<br />
{{注意|The option ({{ic|-x}})排除了一些特殊目录,因为它们不应该被复制到新的根目录。}}<br />
<br />
然后,创建一些目录并复制内核映像到新的根,以保证新系统的完整性:<br />
<br />
# cp -vaT /run/archiso/bootmnt/arch/boot/$(uname -m)/vmlinuz /mnt/boot/vmlinuz-linux<br />
<br />
完成之后,请按[[Installation guide (简体中文)#Fstab]]所述生成 fstab。<br />
<br />
==== Chroot 并配置基本系统 ====<br />
<br />
下一步,chroot 到您新安装的系统:<br />
<br />
# arch-chroot /mnt /bin/bash<br />
<br />
请注意,在您配置 locale、键盘映射等之前,你仍然需要为了避免延续 Live 环境的轨迹——或者说对 archiso 所做的一些不适用于非 Live 环境的修改——而做一些事情。<br />
<br />
===== 恢复 journald 的配置 =====<br />
[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/root/customize_airootfs.sh#n19 archiso 的这个修改]会导致日志存储在 RAM 上——它意味着在重启后日志便会丢失。为了解决这个问题,执行:<br />
<br />
# sed -i 's/Storage=volatile/#Storage=auto/' /etc/systemd/journald.conf<br />
<br />
===== 删除特殊的 udev 规则 =====<br />
如果有任何有线网络接口,[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/etc/udev/rules.d/81-dhcpcd.rules udev 的这个规则]会自动启动dhcpcd。<br />
<br />
# rm /etc/udev/rules.d/81-dhcpcd.rules<br />
<br />
===== 禁用和移除 archiso 创建的服务 =====<br />
有一些服务文件是为 Live 环境创建的,请禁用这些服务并移除文件——因为它们对于新系统来说没必要存在:<br />
<br />
# systemctl disable pacman-init.service choose-mirror.service<br />
# rm -r /etc/systemd/system/{choose-mirror.service,pacman-init.service,etc-pacman.d-gnupg.mount,getty@tty1.service.d}<br />
# rm /etc/systemd/scripts/choose-mirror<br />
# rm /etc/systemd/system/archiso-start.service<br />
# rm /etc/systemd/system/multi-user.target.wants/archiso-start.service<br />
<br />
===== 移除 Live 环境的特殊脚本 =====<br />
在 live 系统中通过 archiso 脚本安装了一些脚本,这对于新系统是不必要的:<br />
<br />
# rm /etc/systemd/system/getty@tty1.service.d/autologin.conf<br />
# rm /root/{.automated_script.sh,.zlogin}<br />
# rm /etc/mkinitcpio-archiso.conf<br />
# rm -r /etc/initcpio<br />
<br />
===== 导入archlinux密钥 =====<br />
<br />
为了使用官方存储库,我们需要导入 archlinux 主密钥([[Pacman/Package signing (简体中文)#初始化密钥环]])。这一步通常是通过 pacstrap 完成的,但是可以通过<br />
<br />
# pacman-key --init<br />
# pacman-key --populate archlinux<br />
<br />
{{注意|Keyboard or mouse activity is needed to generate entropy and speed-up the first step.}}<br />
<br />
===== 配置系统 =====<br />
<br />
现在,您可以按照 [[Installation guide (简体中文)#配置系统]] 中跳过的步骤(设置语言环境,时区,主机名等),并通过创建初始 ramdisk 来完成安装,如 [[Installation guide (简体中文)#Initramfs]]。<br />
<br />
===== 启用图形登录(可选) =====<br />
<br />
如果使用像GDM这样的显示管理器,则可能需要将 systemd 默认目标从 multi-user.target 更改为允许图形登录的目标。<br />
# systemctl disable multi-user.target<br />
# systemctl enable graphical.target<br />
<br />
== 参阅 ==<br />
=== 文档和教程 ===<br />
* [https://projects.archlinux.org/archiso.git Archiso 项目页面]<br />
* [https://projects.archlinux.org/archiso.git/tree/docs 官方文档]<br />
<br />
=== 示例自定义模板 ===<br />
* [http://easy.open.and.free.fr/didjix/ A live DJ distribution powered by ArchLinux and built with Archiso]</div>
745275633
https://wiki.archlinux.org/index.php?title=Very_Secure_FTP_Daemon_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=512166
Very Secure FTP Daemon (简体中文)
2018-02-27T07:47:33Z
<p>745275633: 编排</p>
<hr />
<div>[[Category:FTP servers (简体中文)]]<br />
[[cs:Very Secure FTP Daemon]]<br />
[[en:Very Secure FTP Daemon]]<br />
[[es:Very Secure FTP Daemon]]<br />
[[it:Very Secure FTP Daemon]]<br />
[[ja:Very Secure FTP Daemon]]<br />
[[ru:Very Secure FTP Daemon]]<br />
{{TranslationStatus (简体中文)|Very Secure FTP Daemon|2018-02-27|512150}}<br />
[https://security.appspot.com/vsftpd.html vsftpd] (Very Secure FTP Daemon) 是一个为 UNIX 类系统开发的轻量,稳定和安全的 FTP 服务器端。<br />
== 安装 ==<br />
[[安装]] {{pkg|vsftpd}} 然后 [[Systemd (简体中文)#使用单元|启动/启用]] {{ic|vsftpd.service}} 守护程序。<br />
<br />
使用 [[Wikipedia:xinetd|xinetd]] 监视和控制 vsftpd 连接,请参见 [[#使用 xinetd]]。<br />
<br />
== 配置 ==<br />
vsftpd 的大多数配置都可以通过编辑 {{ic|/etc/vsftpd.conf}} 文件实现。 该文件本身自带大量注释说明,所以这一章节只就一些重要的配置予以说明。有关所有可用选项和文档,请参阅 vsftpd.conf(5) 或 [https://security.appspot.com/vsftpd/vsftpd_conf.html 在线查看] 手册页。默认情况下,由 {{ic|/srv/ftp}} 提供文件。<br />
<br />
允许的连接 {{ic|/etc/hosts.allow}}:<br />
# 允许所有连接<br />
vsftpd: ALL<br />
# IP 地址范围<br />
vsftpd: 10.0.0.0/255.255.255.0<br />
<br />
=== 允许上传 ===<br />
需要将 {{ic|/etc/vsftpd.conf}} 中的 {{ic|write_enable}} 值设为 YES,以便允许修改文件系统(如上传):<br />
write_enable=YES<br />
<br />
=== 本地用户登录 ===<br />
需要修改 {{ic|/etc/vsftpd.conf}} 中的如下值,以便允许 {{ic|/etc/passwd}} 中的用户登录:<br />
local_enable=YES<br />
<br />
=== 匿名用户登录 ===<br />
以下行控制匿名用户是否可以登录。默认情况下,匿名登录只能从 {{ic|/srv/ftp}} 下载:<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
...<br />
# 允许匿名 FTP? (当心 - 默认情况下允许除非您将其注释)。<br />
anonymous_enable=YES<br />
...<br />
# 取消注释以允许匿名 FTP 用户上传文件。<br />
# 只有上述全局写入被激活,才会有效果。<br />
# 另外,你显然需要创建 FTP 用户有写权限的目录。<br />
# anon_upload_enable=YES<br />
#<br />
# 如果您希望匿名 FTP 用户能够创建新目录,请取消注释。<br />
# anon_mkdir_write_enable=YES<br />
...<br />
}}<br />
<br />
您也可以添加以下选项(详见 {{man|5|vsftpd.conf}}):<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
# 匿名登录不需要密码<br />
no_anon_password=YES<br />
<br />
# 匿名客户端的最大传输速率(以 Bytes/秒 为单位)<br />
anon_max_rate=30000<br />
<br />
# 用于匿名登录的目录<br />
anon_root=/example/directory/<br />
}}<br />
<br />
=== Chroot 限制 ===<br />
为了阻止用户离开家目录,可以设置 chroot 环境。要启用此功能,请在 {{ic|/etc/vsftpd.conf}} 中添加以下行:<br />
chroot_list_enable=YES<br />
chroot_list_file=/etc/vsftpd.chroot_list<br />
{{ic|chroot_list_file}} 定义了被 chroot 限制的用户列表。<br />
<br />
对于更严格的环境,请指定以下行:<br />
chroot_local_user=YES<br />
这将默认为所有用户启用 chroot 环境。 在这种情况下,{{ic|chroot_list_file}} 定义了'''不受''' chroot 限制的用户列表。<br />
<br />
=== 限制用户登录 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加以下两行来阻止特定用户登录FTP服务器:<br />
userlist_enable=YES<br />
userlist_file=/etc/vsftpd.user_list<br />
{{ic|userlist_file}} 文件列出'''不允许'''登录的用户。<br />
<br />
如果您只想允许特定的用户登录,请添加以下行:<br />
userlist_deny=NO<br />
此时 {{ic|userlist_file}} 文件指定'''允许'''登录的用户。<br />
<br />
=== 限制连接数 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加如下信息来限制本地用户的数据传输速率:<br />
local_max_rate=1000000 # 最大数据传输速率(单位: Bytes/秒)<br />
max_clients=50 # 可以同时连接的最大客户端数<br />
max_per_ip=2 # 每个 IP 允许的最大连接数<br />
<br />
=== 使用 xinetd ===<br />
Xinetd 提供增强的监控和控制连接功能。对于基本的可以工作的 vsftpd-server 是不必要的<br />
<br />
安装 vsftpd 将会添加必要的服务文件 {{ic|/etc/xinetd.d/vsftpd}},默认情况下,服务被禁用。<br />
<br />
启用ftp服务:<br />
<pre><br />
service ftp<br />
{<br />
socket_type = stream<br />
wait = no<br />
user = root<br />
server = /usr/sbin/vsftpd<br />
log_on_success += HOST DURATION<br />
log_on_failure += HOST<br />
disable = no<br />
}<br />
</pre><br />
<br />
如果您将 vsftpd 守护程序设置为以独立模式运行,而不是启动 vsftpd 守护程序和 [[Systemd (简体中文)#使用单元|启用]] {{ic|xinetd.service}},请在 {{ic|/etc/vsftpd.conf}} 中进行以下更改:<br />
listen=NO<br />
否则连接将失败:<br />
500 OOPS: could not bind listening IPv4 socket<br />
<br />
=== 使用 SSL/TLS 来保护 FTP ===<br />
首先,您需要一个 ''X.509 SSL/TLS'' 证书才能使用TLS。如果您没有,可以轻松生成如下的自签名证书:<br />
<br />
# cd /etc/ssl/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout vsftpd.pem -out vsftpd.pem<br />
# chmod 600 vsftpd.pem<br />
<br />
你会被问到关于你公司的问题,等等。由于你的证书不是一个可信任的,所填的内容并不重要,它只会被用于加密。要使用可信证书,您可以从 [[Let's Encrypt]] 这样的证书颁发机构获得证书。<br />
<br />
然后,编辑配置文件:<br />
{{hc|/etc/vsftpd.conf|2=ssl_enable=YES<br />
<br />
# 选择你想要的<br />
# 如果你接受匿名连接你可能要启用这个<br />
# allow_anon_ssl=NO<br />
<br />
# 默认情况下所有非匿名登录被迫使用 SSL 发送和接收密码和数据,设置为 NO,以允许不安全的连接<br />
force_local_logins_ssl=NO<br />
force_local_data_ssl=NO<br />
<br />
# 选择你想要的<br />
force_local_logins_ssl=YES<br />
<br />
# 如果启用SSL,则至少应启用 TLS v1<br />
ssl_tlsv1=YES<br />
# 这些选项将允许或阻止 SSL v2 和 v3 协议连接。TLS v1 连接是首选。<br />
ssl_sslv2=NO<br />
ssl_sslv3=YES<br />
# 给出您的 *.pem 文件的正确路径<br />
rsa_cert_file=/etc/ssl/certs/vsftpd.pem<br />
# .pem 文件也包含私钥<br />
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem<br />
}}<br />
<br />
=== 在被动模式下解析主机名 ===<br />
要覆盖 vsftpd 在被动模式下通过服务器的主机名发布的 IP 地址,并在启动时解析 DNS,在 {{ic|/etc/vsftpd.conf}} 中增加以下两行:<br />
pasv_addr_resolve=YES<br />
pasv_address=''yourdomain.org''<br />
<br />
{{注意|<br />
* 对于动态DNS,定期更新 ''pasv_address'' 并重新启动服务器是不必要的,因为它有时可以被读取。<br />
* 您可能无法通过 LAN 以被动模式连接,在这种情况下,请尝试使用主动模式而不是LAN客户端。<br />
}}<br />
<br />
=== 端口配置 ===<br />
可能需要调整默认FTP侦听端口和被动模式数据端口:<br />
<br />
* 对于暴露于 Web 的 FTP 服务器,为了减少服务器受到攻击的可能性,可以将侦听端口改为除标准端口 21 以外的端口。<br />
* 要限制被动模式将打开的端口,可以提供一个范围。<br />
这些端口配置更改可以使用以下几行完成:<br />
{{hc|/etc/vsftpd.conf|2=<br />
listen_port=2211<br />
pasv_min_port=5000<br />
pasv_max_port=5003<br />
}}<br />
<br />
=== 配置 iptables ===<br />
通常,运行FTP守护进程的服务器受 [[Iptables (简体中文)|iptables]] 防火墙的保护。要允许访问FTP服务器,需要打开相应的端口,如:<br />
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT<br />
本文不会提供有关如何设置iptables的任何说明,但这里是一个例子:[[Simple stateful firewall (简体中文)|Simple stateful firewall]]。<br />
<br />
有一些内核模块需要在这里引用的 iptables 正确的处理 FTP 连接。 其中特别是 ''nf_conntrack_ftp''。这是需要的,因为 FTP 使用给定的 ''listen_port''(默认为21) 仅用于命令,所有的数据传输都是通过不同的端口完成的。这些端口由 FTP 守护程序为每个会话随机选择(也取决于是使用主动还是被动模式)。要告诉 iptables 应该接受端口上的数据包,需要 ''nf_conntrack_ftp''。要在启动时自动加载,请在 {{ic|/etc/modules-load.d}} 中创建新文件,例如:<br />
# echo nf_conntrack_ftp > /etc/modules-load.d/nf_conntrack_ftp.conf<br />
<br />
如果内核 >= 4.7,您需要通过 ''sysctl'' 设置 ''net.netfilter.nf_conntrack_helper = 1'',如:<br />
# echo net.netfilter.nf_conntrack_helper=1 > /etc/sysctl.d/70-conntrack.conf<br />
或使用<br />
# iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp<br />
<br />
== 小技巧 ==<br />
=== 虚拟用户的 PAM 认证 ===<br />
由于 [[PAM (简体中文)]] 不再提供 {{ic|pam_userdb.so}} 另一个简单的方法是使用 {{AUR|libpam_pwdfile}}。对于具有许多用户的环境,另一个选项可能是 {{AUR|pam_mysql}} {{Broken package link|{{aur-mirror|pam_mysql}}}}。但是,本节仅限于解释如何通过 {{ic|pam_pwdfile.so}} 配置 chroot 环境和身份验证。<br />
<br />
在此示例中,我们创建目录 {{ic|vsftpd}}:<br />
# mkdir /etc/vsftpd<br />
<br />
创建和存储用户名和密码的一个选择是使用 Apache 的生成器 htpasswd:<br />
# htpasswd -c /etc/vsftpd/.passwd<br />
上述命令的一个问题是 vsftpd 可能无法读取生成的 MD5 散列密码。如果使用 -d 开关运行相同的命令,则使用 crypt() 加密,vsftpd 的密码变得可读,但其缺点是安全性较低,密码限制为8个字符。 Openssl 可用于使用算法1生成基于 MD5 的 BSD 密码:<br />
# openssl passwd -1<br />
<br />
无论那个解决方案 {{ic|/etc/vsftpd/.passwd}} 应该如下所示:<br />
username1:hashed_password1<br />
username2:hashed_password2<br />
...<br />
<br />
接下来,您需要使用 {{ic|pam_pwdfile.so}} 和生成的 {{ic|/etc/vsftpd/.passwd}} 文件创建 PAM 服务。在本例中,我们为 ''vsftpd'' 创建了一个 PAM 策略,其中包含以下内容:<br />
{{hc|/etc/pam.d/vsftpd|auth required pam_pwdfile.so pwdfile /etc/vsftpd/.passwd<br />
account required pam_permit.so}}<br />
<br />
现在是为虚拟用户创建一个 home 的时候了。在示例中,决定用 {{ic|/srv/ftp}} 为虚拟用户托管数据,这也反映了 Arch 的默认目录结构。首先创建 virtual 用户并使 {{ic|/srv/ftp}} 成为它的 home:<br />
# useradd -d /srv/ftp virtual<br />
让 virtual 成为所有者<br />
# chown virtual:virtual /srv/ftp<br />
<br />
一个基本的没有私人文件夹配置的 /etc/vsftpd,默认的虚拟用户的 home 文件夹:<br />
# 指向正确的 PAM 服务文件<br />
pam_service_name=vsftpd<br />
write_enable=YES<br />
hide_ids=YES<br />
listen=YES<br />
connect_from_port_20=YES<br />
anonymous_enable=NO<br />
local_enable=YES<br />
dirmessage_enable=YES<br />
xferlog_enable=YES<br />
chroot_local_user=YES<br />
guest_enable=YES<br />
guest_username=virtual<br />
virtual_use_local_privs=YES<br />
<br />
您自己的设置可能不需要一些参数。如果您希望 chroot 环境可写,您将需要将以下内容添加到配置文件中:<br />
allow_writeable_chroot = YES<br />
否则 vsftpd 的默认安全设置会抱怨,如果它检测到 chroot 是可写的。<br />
<br />
[[Start]] {{ic|vsftpd.service}}。<br />
<br />
您现在应该可以使用存储在 {{ic|/etc/vsftpd/.passwd}} 中的任何用户和密码从FTP客户端登录。<br />
<br />
==== 为虚拟用户创建私有目录 ====<br />
首先创建用户文件夹<br />
# mkdir /srv/ftp/user1<br />
# mkdir /srv/ftp/user2<br />
# chown virtual:virtual /srv/ftp/user?/<br />
<br />
随后, 在 {{ic|/etc/vsftpd.conf}} 增加如下行:<br />
local_root=/srv/ftp/$USER<br />
user_sub_token=$USER<br />
<br />
== 问题解决 ==<br />
<br />
=== vsftpd: no connection (Error 500) with recent kernels (3.5 and newer) and .service ===<br />
将其添加到您的 {{ic|/etc/vsftpd.conf}}:<br />
seccomp_sandbox=NO<br />
<br />
=== vsftpd: refusing to run with writable root inside chroot() ===<br />
从 vsftpd 2.3.5 开始,用户被锁定的 chroot 目录不可写。这是为了防止安全漏洞。<br />
<br />
允许上传的安全方法是保持 chroot 启用,并配置您的 FTP 目录。<br />
<br />
local_root=/srv/ftp/user<br />
<br />
# mkdir -p /srv/ftp/user/upload<br />
#<br />
# chmod 550 /srv/ftp/user<br />
# chmod 750 /srv/ftp/user/upload<br />
<br />
如果你必须这么做:<br />
<br />
您可以将其放入您的 {{ic|/etc/vsftpd.conf}} 以解决此安全性增强(自vsftpd 3.0.0;来自 [http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/ Fixing 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()]):<br />
allow_writeable_chroot=YES<br />
或者:<br />
<br />
安装 {{AUR|vsftpd-ext}} {{Broken package link|{{aur-mirror|vsftpd-ext}}}} 并在 conf 文件中设置<br />
allow_writable_chroot=YES<br />
<br />
=== FileZilla Client: GnuTLS error -8 -15 -110 when connecting via SSL ===<br />
vsftpd 尝试在 SSL 会话中显示纯文本错误消息。为了进行调试,暂时禁用加密,您将看到正确的错误消息。[http://ramblings.linkerror.com/?p=45] [https://serverfault.com/questions/772494/vsftpd-list-causes-gnutls-error-15]<br />
<br />
=== vsftpd.service fails to run on boot ===<br />
如果您启用了 {{ic|vsftpd.service}},并且无法在启动时运行,请确保它已在服务文件中设置为在 {{ic|network.target}} 之后加载:<br />
<br />
{{hc|/usr/lib/systemd/system/vsftpd.service|2=<br />
[Unit]<br />
Description=vsftpd daemon<br />
After=network.target}}<br />
<br />
=== ipv6 only fails with: 500 OOPS: run two copies of vsftpd for IPv4 and IPv6 ===<br />
你很有可能已经注释了这一行<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
#listen=YES<br />
#<br />
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6<br />
# sockets, you must run two copies of vsftpd with two configuration files.<br />
# Make sure, that one of the listen options is commented !!<br />
listen_ipv6=YES<br />
<br />
而不是设置<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
listen=NO<br />
<br />
== 更多资源 ==<br />
* [http://vsftpd.beasts.org/ vsftpd official homepage]<br />
* [http://vsftpd.beasts.org/vsftpd_conf.html vsftpd.conf man page]</div>
745275633
https://wiki.archlinux.org/index.php?title=Very_Secure_FTP_Daemon_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=512162
Very Secure FTP Daemon (简体中文)
2018-02-27T07:35:26Z
<p>745275633: 512150</p>
<hr />
<div>[[Category:FTP servers (简体中文)]]<br />
[[cs:Very Secure FTP Daemon]]<br />
[[en:Very Secure FTP Daemon]]<br />
[[es:Very Secure FTP Daemon]]<br />
[[it:Very Secure FTP Daemon]]<br />
[[ja:Very Secure FTP Daemon]]<br />
[[ru:Very Secure FTP Daemon]]<br />
{{TranslationStatus (简体中文)|Very Secure FTP Daemon|2018-02-27|512150}}<br />
[https://security.appspot.com/vsftpd.html vsftpd] (Very Secure FTP Daemon) 是一个为UNIX类系统开发的轻量,稳定和安全的FTP服务器端.<br />
== 安装 ==<br />
[[安装]] {{pkg|vsftpd}} 然后 [[Systemd (简体中文)#使用单元|启动/启用]] {{ic|vsftpd.service}} 守护程序。<br />
<br />
使用 [[Wikipedia:xinetd|xinetd]] 监视和控制 vsftpd 连接,请参见 [[#使用 xinetd]]。<br />
<br />
== 配置 ==<br />
vsftpd 的大多数配置都可以通过编辑 {{ic|/etc/vsftpd.conf}} 文件实现。 该文件本身自带大量注释说明,所以这一章节只就一些重要的配置予以说明。 有关所有可用选项和文档,请参阅 vsftpd.conf(5) 或 [https://security.appspot.com/vsftpd/vsftpd_conf.html 在线查看] 手册页。默认情况下,由 {{ic|/srv/ftp}} 提供文件。<br />
<br />
允许的连接 {{ic|/etc/hosts.allow}}:<br />
# 允许所有连接<br />
vsftpd: ALL<br />
# IP地址范围<br />
vsftpd: 10.0.0.0/255.255.255.0<br />
<br />
=== 允许上传 ===<br />
需要将 {{ic|/etc/vsftpd.conf}} 中的 {{ic|write_enable}} 值设为YES,以便允许修改文件系统(如上传):<br />
write_enable=YES<br />
<br />
=== 本地用户登录 ===<br />
需要修改 {{ic|/etc/vsftpd.conf}} 中的如下值,以便允许 {{ic|/etc/passwd}} 中的用户登录:<br />
local_enable=YES<br />
<br />
=== 匿名用户登录 ===<br />
以下行控制匿名用户是否可以登录。默认情况下,匿名登录只能从 {{ic|/srv/ftp}} 下载:<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
...<br />
# 允许匿名FTP? (当心 - 默认情况下允许除非您将其注释)。<br />
anonymous_enable=YES<br />
...<br />
# 取消注释以允许匿名FTP用户上传文件。<br />
# 只有上述全局写入被激活,才会有效果。<br />
# 另外,你显然需要创建FTP用户有写权限的目录。<br />
# anon_upload_enable=YES<br />
#<br />
# 如果您希望匿名FTP用户能够创建新目录,请取消注释。<br />
# anon_mkdir_write_enable=YES<br />
...<br />
}}<br />
<br />
您也可以添加以下选项(详见 {{man|5|vsftpd.conf}}):<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
# 匿名登录不需要密码<br />
no_anon_password=YES<br />
<br />
# 匿名客户端的最大传输速率(以 Bytes/秒 为单位)<br />
anon_max_rate=30000<br />
<br />
# 用于匿名登录的目录<br />
anon_root=/example/directory/<br />
}}<br />
<br />
=== Chroot 限制 ===<br />
为了阻止用户离开家目录,可以设置 chroot 环境。要启用此功能,请在 {{ic|/etc/vsftpd.conf}} 中添加以下行:<br />
chroot_list_enable=YES<br />
chroot_list_file=/etc/vsftpd.chroot_list<br />
{{ic|chroot_list_file}} 定义了被 chroot 限制的用户列表。<br />
<br />
对于更严格的环境,请指定以下行:<br />
chroot_local_user=YES<br />
这将默认为所有用户启用 chroot 环境。 在这种情况下,{{ic|chroot_list_file}} 定义了'''不受''' chroot 限制的用户列表。<br />
<br />
=== 限制用户登录 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加以下两行来阻止特定用户登录FTP服务器:<br />
userlist_enable=YES<br />
userlist_file=/etc/vsftpd.user_list<br />
{{ic|userlist_file}} 文件列出'''不允许'''登录的用户。<br />
<br />
如果您只想允许特定的用户登录,请添加以下行:<br />
userlist_deny=NO<br />
此时 {{ic|userlist_file}} 文件指定'''允许'''登录的用户。<br />
<br />
=== 限制连接数 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加如下信息来限制本地用户的数据传输速率:<br />
local_max_rate=1000000 # 最大数据传输速率(单位: Bytes/秒)<br />
max_clients=50 # 可以同时连接的最大客户端数<br />
max_per_ip=2 # 每个 IP 允许的最大连接数<br />
<br />
=== 使用 xinetd ===<br />
Xinetd提供增强的监控和控制连接功能。对于基本的可以工作的 vsftpd-server 是不必要的<br />
<br />
安装 vsftpd 将会添加必要的服务文件 {{ic|/etc/xinetd.d/vsftpd}}, 默认情况下,服务被禁用。<br />
<br />
启用ftp服务:<br />
<pre><br />
service ftp<br />
{<br />
socket_type = stream<br />
wait = no<br />
user = root<br />
server = /usr/sbin/vsftpd<br />
log_on_success += HOST DURATION<br />
log_on_failure += HOST<br />
disable = no<br />
}<br />
</pre><br />
<br />
如果您将vsftpd守护程序设置为以独立模式运行,而不是启动 vsftpd 守护程序和 [[enable]] {{ic | xinetd.service}},请在 {{ic|/etc/vsftpd.conf}} 中进行以下更改:<br />
listen=NO<br />
否则连接将失败:<br />
500 OOPS: could not bind listening IPv4 socket<br />
<br />
=== 使用 SSL/TLS 来保护 FTP ===<br />
首先,您需要一个 ''X.509 SSL/TLS'' 证书才能使用TLS。如果您没有,可以轻松生成如下的自签名证书:<br />
<br />
# cd /etc/ssl/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout vsftpd.pem -out vsftpd.pem<br />
# chmod 600 vsftpd.pem<br />
<br />
你会被问到关于你公司的问题,等等。由于你的证书不是一个可信任的,所填的内容并不重要,它只会被用于加密。要使用可信证书,您可以从 [[Let's Encrypt]] 这样的证书颁发机构获得证书。<br />
<br />
然后,编辑配置文件:<br />
{{hc|/etc/vsftpd.conf|2=ssl_enable=YES<br />
<br />
# 选择你想要的<br />
# 如果你接受匿名连接你可能要启用这个<br />
# allow_anon_ssl=NO<br />
<br />
# 默认情况下所有非匿名登录被迫使用 SSL 发送和接收密码和数据,设置为 NO,以允许不安全的连接<br />
force_local_logins_ssl=NO<br />
force_local_data_ssl=NO<br />
<br />
# 选择你想要的<br />
force_local_logins_ssl=YES<br />
<br />
# 如果启用SSL,则至少应启用 TLS v1<br />
ssl_tlsv1=YES<br />
# 这些选项将允许或阻止 SSL v2 和 v3 协议连接。 TLS v1连接是首选。<br />
ssl_sslv2=NO<br />
ssl_sslv3=YES<br />
# 给出您的 *.pem 文件的正确路径<br />
rsa_cert_file=/etc/ssl/certs/vsftpd.pem<br />
# .pem 文件也包含私钥<br />
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem<br />
}}<br />
<br />
=== 在被动模式下解析主机名 ===<br />
要覆盖 vsftpd 在被动模式下通过服务器的主机名发布的IP地址,并在启动时解析DNS,在 {{ic|/etc/vsftpd.conf}} 中增加以下两行:<br />
pasv_addr_resolve=YES<br />
pasv_address=''yourdomain.org''<br />
<br />
{{注意|<br />
* 对于动态DNS,定期更新 ''pasv_address'' 并重新启动服务器是不必要的,因为它有时可以被读取。<br />
* 您可能无法通过 LAN 以被动模式连接,在这种情况下,请尝试使用主动模式而不是LAN客户端。<br />
}}<br />
<br />
=== 端口配置 ===<br />
可能需要调整默认FTP侦听端口和被动模式数据端口:<br />
<br />
* 对于暴露于 Web 的 FTP 服务器,为了减少服务器受到攻击的可能性,可以将侦听端口改为除标准端口 21 以外的端口。<br />
* 要限制被动模式将打开的端口,可以提供一个范围。<br />
这些端口配置更改可以使用以下几行完成:<br />
{{hc|/etc/vsftpd.conf|2=<br />
listen_port=2211<br />
pasv_min_port=5000<br />
pasv_max_port=5003<br />
}}<br />
<br />
=== 配置 iptables ===<br />
通常,运行FTP守护进程的服务器受 [[Iptables (简体中文)]] 防火墙的保护。要允许访问FTP服务器,需要打开相应的端口,如:<br />
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT<br />
本文不会提供有关如何设置iptables的任何说明,但这里是一个例子:[[Simple stateful firewall (简体中文)]]。<br />
<br />
有一些内核模块需要在这里引用的 iptables 正确的处理 FTP 连接。 其中特别是 ''nf_conntrack_ftp''。这是需要的,因为FTP使用给定的 ''listen_port''(默认为21) 仅用于命令; 所有的数据传输都是通过不同的端口完成的。 这些端口由FTP守护程序为每个会话随机选择(也取决于是使用主动还是被动模式)。要告诉 iptables 应该接受端口上的数据包,需要 ''nf_conntrack_ftp''。要在启动时自动加载,请在 {{ic|/etc/modules-load.d}} 中创建新文件,例如:<br />
# echo nf_conntrack_ftp > /etc/modules-load.d/nf_conntrack_ftp.conf<br />
<br />
如果内核 >= 4.7,您需要通过 ''sysctl'' 设置 ''net.netfilter.nf_conntrack_helper = 1'',如:<br />
# echo net.netfilter.nf_conntrack_helper=1 > /etc/sysctl.d/70-conntrack.conf<br />
或使用<br />
# iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp<br />
<br />
== 小技巧 ==<br />
=== 虚拟用户的PAM认证 ===<br />
由于 [[PAM (简体中文)]] 不再提供 {{ic|pam_userdb.so}} 另一个简单的方法是使用 {{AUR|libpam_pwdfile}}。对于具有许多用户的环境,另一个选项可能是 {{AUR|pam_mysql}} {{Broken package link|{{aur-mirror|pam_mysql}}}}。但是,本节仅限于解释如何通过 {{ic|pam_pwdfile.so}} 配置chroot环境和身份验证。<br />
<br />
在此示例中,我们创建目录 {{ic|vsftpd}}:<br />
# mkdir /etc/vsftpd<br />
<br />
创建和存储用户名和密码的一个选择是使用 Apache 的生成器 htpasswd:<br />
# htpasswd -c /etc/vsftpd/.passwd<br />
上述命令的一个问题是 vsftpd 可能无法读取生成的 MD5 散列密码。如果使用 -d 开关运行相同的命令,则使用 crypt() 加密,vsftpd 的密码变得可读,但其缺点是安全性较低,密码限制为8个字符。 Openssl 可用于使用算法1生成基于 MD5 的 BSD 密码:<br />
# openssl passwd -1<br />
<br />
无论那个解决方案 {{ic|/etc/vsftpd/.passwd}} 应该如下所示:<br />
username1:hashed_password1<br />
username2:hashed_password2<br />
...<br />
<br />
接下来,您需要使用 {{ic|pam_pwdfile.so}} 和生成的 {{ic|/etc/vsftpd/.passwd}} 文件创建PAM服务。在本例中,我们为 ''vsftpd'' 创建了一个PAM策略,其中包含以下内容:<br />
{{hc|/etc/pam.d/vsftpd|auth required pam_pwdfile.so pwdfile /etc/vsftpd/.passwd<br />
account required pam_permit.so}}<br />
<br />
现在是为虚拟用户创建一个 home 的时候了。在示例中,决定用 {{ic|/srv/ftp}} 为虚拟用户托管数据,这也反映了Arch的默认目录结构。首先创建 virtual 用户并使 {{ic|/srv/ftp}} 成为它的 home:<br />
# useradd -d /srv/ftp virtual<br />
让 virtual 成为所有者<br />
# chown virtual:virtual /srv/ftp<br />
<br />
一个基本的没有私人文件夹配置的 /etc/vsftpd,默认的虚拟用户的 home 文件夹:<br />
# 指向正确的PAM服务文件<br />
pam_service_name=vsftpd<br />
write_enable=YES<br />
hide_ids=YES<br />
listen=YES<br />
connect_from_port_20=YES<br />
anonymous_enable=NO<br />
local_enable=YES<br />
dirmessage_enable=YES<br />
xferlog_enable=YES<br />
chroot_local_user=YES<br />
guest_enable=YES<br />
guest_username=virtual<br />
virtual_use_local_privs=YES<br />
<br />
您自己的设置可能不需要一些参数。如果您希望chroot环境可写,您将需要将以下内容添加到配置文件中:<br />
allow_writeable_chroot = YES<br />
否则 vsftpd 的默认安全设置会抱怨,如果它检测到chroot是可写的。<br />
<br />
[[Start]] {{ic|vsftpd.service}}。<br />
<br />
您现在应该可以使用存储在 {{ic|/etc/vsftpd/.passwd}} 中的任何用户和密码从FTP客户端登录。<br />
<br />
==== 为虚拟用户创建私有目录 ====<br />
首先创建用户文件夹<br />
# mkdir /srv/ftp/user1<br />
# mkdir /srv/ftp/user2<br />
# chown virtual:virtual /srv/ftp/user?/<br />
<br />
随后, 在{{ic|/etc/vsftpd.conf}}增加如下行:<br />
local_root=/srv/ftp/$USER<br />
user_sub_token=$USER<br />
<br />
== 问题解决 ==<br />
<br />
=== vsftpd: no connection (Error 500) with recent kernels (3.5 and newer) and .service ===<br />
将其添加到您的 {{ic|/etc/vsftpd.conf}}:<br />
seccomp_sandbox=NO<br />
<br />
=== vsftpd: refusing to run with writable root inside chroot() ===<br />
从 vsftpd 2.3.5 开始,用户被锁定的 chroot 目录不可写。这是为了防止安全漏洞。<br />
<br />
允许上传的安全方法是保持 chroot 启用,并配置您的 FTP 目录。<br />
<br />
local_root=/srv/ftp/user<br />
<br />
# mkdir -p /srv/ftp/user/upload<br />
#<br />
# chmod 550 /srv/ftp/user<br />
# chmod 750 /srv/ftp/user/upload<br />
<br />
如果你必须这么做:<br />
<br />
您可以将其放入您的 {{ic|/etc/vsftpd.conf}} 以解决此安全性增强(自vsftpd 3.0.0;从[http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/ Fixing 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()]):<br />
allow_writeable_chroot=YES<br />
或者:<br />
<br />
安装 {{AUR|vsftpd-ext}} {{Broken package link|{{aur-mirror|vsftpd-ext}}}} 并在 conf 文件中设置<br />
allow_writable_chroot=YES<br />
<br />
=== FileZilla Client: GnuTLS error -8 -15 -110 when connecting via SSL ===<br />
vsftpd 尝试在 SSL 会话中显示纯文本错误消息。 为了进行调试,暂时禁用加密,您将看到正确的错误消息。[http://ramblings.linkerror.com/?p=45] [https://serverfault.com/questions/772494/vsftpd-list-causes-gnutls-error-15]<br />
<br />
=== vsftpd.service fails to run on boot ===<br />
如果您启用了 {{ic|vsftpd.service}},并且无法在启动时运行,请确保它已在服务文件中设置为在 {{ic|network.target}} 之后加载:<br />
<br />
{{hc|/usr/lib/systemd/system/vsftpd.service|2=<br />
[Unit]<br />
Description=vsftpd daemon<br />
After=network.target}}<br />
<br />
=== ipv6 only fails with: 500 OOPS: run two copies of vsftpd for IPv4 and IPv6 ===<br />
你很有可能已经注释了这一行<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
#listen=YES<br />
#<br />
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6<br />
# sockets, you must run two copies of vsftpd with two configuration files.<br />
# Make sure, that one of the listen options is commented !!<br />
listen_ipv6=YES<br />
<br />
而不是设置<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
listen=NO<br />
<br />
== 更多资源 ==<br />
* [http://vsftpd.beasts.org/ vsftpd official homepage]<br />
* [http://vsftpd.beasts.org/vsftpd_conf.html vsftpd.conf man page]</div>
745275633
https://wiki.archlinux.org/index.php?title=Archiso_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=509564
Archiso (简体中文)
2018-02-04T02:17:43Z
<p>745275633: 509507</p>
<hr />
<div>[[Category:简体中文]]<br />
[[Category:Live Arch systems (简体中文)]]<br />
[[Category:Getting and installing Arch (简体中文)]]<br />
[[ar:Archiso]]<br />
[[el:Archiso]]<br />
[[en:Archiso]]<br />
[[es:Archiso]]<br />
[[fr:Archiso]]<br />
[[it:Archiso]]<br />
[[ja:Archiso]]<br />
[[nl:Archiso]]<br />
[[ru:Archiso]]<br />
[[sk:Archiso]]<br />
{{TranslationStatus (简体中文)|Archiso|2018-02-04|509507}}<br />
{{Related articles start (简体中文)}}<br />
{{Related|Remastering the Install ISO}}<br />
{{Related2|PXE (简体中文)|PXE}}<br />
{{Related2|Archboot (简体中文)|Archboot}}<br />
{{Related articles end}}<br />
'''Archiso''' 是一组 bash 脚本,它能够建立功能全面的 Arch Linux 的 Live CD/DVD/USB 映像。它同样是用来生成官方映像的工具,但由于它是一个非常通用的工具,所以它可以被用来生成从救援系统、安装盘,到特殊爱好的 Live CD/DVD/USB 系统——无人知晓还有其他什么。简单地说,如果要将 Arch 放在一条闪光的船上,它可以帮你做到这一点。Archiso 的核心以及灵魂是 ''mkarchiso''。它的所有选项都写在它的用法输出上,所以它的直接使用方法将不在这里讨论。相反,这篇 wiki 文章将导引你迅速建立你的 Live 介质。<br />
<br />
== 安装和配置 ==<br />
<br />
{{注意|<br />
* 您必须在 x86_64 上运行 Archiso。 [https://projects.archlinux.org/archiso.git/tree/docs/README.build#n67]<br />
* 以下操作请在ROOT权限下使用,在错误的权限下操作会造成一下问题。}}<br />
当你开始之前, [[install|安装]] {{Pkg|archiso}} 或 {{AUR|archiso-git}}。<br />
<br />
创建一个用于工作的目录, 实时镜像将会在这里被处理。 {{ic|~/archlive}} 是一个好选择。<br />
$ mkdir ~/archlive<br />
<br />
现在要将早先安装到主机的 archiso 脚本复制到你新建的工作目录内。<br />
<br />
Archiso 附带2个预定义配置( profiles ): ''releng'' 和''baseline''。<br />
<br />
* 如果您想要创建完全定制的 Live Arch Linux ,并预装所有您喜爱的程序和配置,使用 ''releng''。<br />
<br />
* 如果您只是想构建一个简易 Live 镜像,无预装软件并仅有基础配置,那么使用 ''baseline''。<br />
<br />
现在,将您选择的配置文件复制到目录(在下面的示例中为 ''archlive''),您可以在其中进行调整和构建。 执行以下操作,用 {{ic|releng}} 或 {{ic|baseline}} 替换 {{ic|'''profile'''}}。<br />
<br />
# cp -r /usr/share/archiso/configs/'''profile'''/* ''archlive''<br />
<br />
* 如果你使用 {{ic|releng}} 配置文件来创建一个完全自定义的镜像,那么你可以继续到:[[#配置 Live 介质]]。<br />
<br />
* 如果您使用 {{ic|baseline}} 配置文件创建一个简易映像,那么你不需要做任何定制,并可以直接继续到 [[#构建ISO]].<br />
<br />
== 配置 Live 介质 ==<br />
<br />
本节详细介绍该如何配置您将创建的映像,允许您定义哪些包以及配置将被您的 Live 映像所包含。<br />
在 [[#安装和配置]] 中创建的{{ic|''archlive''}}目录中有许多文件和目录; 我们只关注其中一部分,主要是<br />
* {{ic|packages.*}} - 在这里一行行列出你想要安装的包,和 <br />
* {{ic|airootfs}} 目录——这是一个覆盖目录,你将在这里完成所有的定制工作。<br />
一般来说,您在全新安装之后所执行的每个管理任务(不包括软件包安装)可以被写入这个脚本: {{ic|''archlive''/airootfs/root/customize_airootfs.sh}}。您必须从新环境的角度来写该脚本,所以脚本中的 / 代表方才被创建的 Live ISO 的根。<br />
<br />
=== 安装包 ===<br />
<br />
[[Edit|编辑]] {{ic|packages.i686}},{{ic|packages.x86_64}} 或 {{ic|packages.both}} 中的程序包列表,以指示要在 live 媒体上安装那些程序包。这里的后缀表示包可用的架构。<br />
<br />
{{Note|如果要在 Live CD 中使用 [[窗口管理器]],则必须添加必要且正确的 [[video drivers]],否则 WM 可能在加载时冻结。}}<br />
<br />
==== 自定义本地库 ====<br />
<br />
{{Merge|Pacman/Tips_and_tricks_(简体中文)#自建本地仓库|移动一般信息 (如:仓库目录树) 到主文章.|Talk:Archiso}}<br />
<br />
为了准备自定义包或是从 [[Arch User Repository (简体中文)|AUR]]/[[Arch Build System (简体中文)|ABS]] 安装包,你也可以 [[Custom local repository|创建自定义本地资源库]]。如果您希望支持多种体系结构,则应采取预防措施来防止发生错误。每个架构应该有自己的目录树:<br />
<br />
{{hc|$ tree ~/customrepo/ {{!}} sed "s/$(uname -m)/<arch>/g"|<br />
/home/archie/customrepo/<br />
└── <arch><br />
├── customrepo.db -> customrepo.db.tar.xz<br />
├── customrepo.db.tar.xz<br />
├── customrepo.files -> customrepo.files.tar.xz<br />
├── customrepo.files.tar.xz<br />
└── personal-website-git-b99cce0-1-<arch>.pkg.tar.xz<br />
<br />
1 directory, 5 files<br />
}}<br />
<br />
如此后,您可以添加您的仓库——把下面的句子加入 {{ic|~/archlive/pacman.conf}},并置于其他仓库条目上面(优先级最高):<br />
<br />
{{hc|~/archlive/pacman.conf|...<br />
# custom repository<br />
[customrepo]<br />
SigLevel <nowiki>=</nowiki> Optional TrustAll<br />
Server <nowiki>=</nowiki> file:///home/'''user'''/customrepo/$arch<br />
...}}<br />
<br />
''repo-add'' 可执行文件检查软件包是否合适。如果不,那么你将得到与此类似的错误消息:<br />
<br />
==> ERROR: '/home/archie/customrepo/<arch>/foo-<arch>.pkg.tar.xz' does not have a valid database archive extension.<br />
<br />
==== 避免安装属于base组的包 ====<br />
<br />
默认情况下,{{ic|/usr/bin/mkarchiso}}——一个被 {{ic|~/archlive/build.sh}} 使用的脚本——会调用 {{Pkg|arch-install-scripts}} 中一个名为 {{ic|pacstrap}} 的程序,且在调用时不使用 {{ic|-i}} 标志——这将使 [[Pacman]] 在安装过程中不等待用户输入。<br />
<br />
当 base 组软件包被加入黑名单——把它们写到 {{ic|~/archlive/pacman.conf}} 中的 {{ic|IgnorePkg}} 行——时,[[Pacman]] 会询问是否仍然安装它们——意味着如果用户输入被跳过,它们就会被安装。为了避免安装这些包,这里有一些选择:<br />
<br />
* '''丑陋'''方案(Dirty):在 {{ic|/usr/bin/mkarchiso}} 中每次调用 {{ic|pacstrap}} 的行上加入 {{ic|i}} 标志。<br />
<br />
* '''整洁'''方案(Clean):创建 {{ic|/usr/bin/mkarchiso}} 的一份复制。在该复制中增加此标志,并修改 {{ic|~/archlive/build.sh}} 以使其调用修改过的 mkarchiso 脚本。<br />
<br />
* '''高级'''方案(Advanced): 在 {{ic|~/archlive/build.sh}} 中创建一个函数,该函数将在基础安装结束后显式移除那些包。若这样做,可以免去在安装过程中多次按回车键的麻烦。<br />
<br />
==== Installing packages from multilib ====<br />
<br />
要从 [[Multilib (简体中文)|Multilib]] 资源库安装软件包,您必须创建两个 pacman 配置文件:一个用于 x86_64,一个用于 i686。 将 {{ic|pacman.conf}} 复制到 {{ic|pacmanx86_64.conf}} 和 {{ic|pacmani686.conf}}。 取消注释以下行以{{ic|pacmanx86_64.conf}} 中启用 ''multilib''):<br />
<br />
{{hc|pacmanx86_64.conf|2=<br />
[multilib]<br />
SigLevel = PackageRequired<br />
Include = /etc/pacman.d/mirrorlist<br />
}}<br />
<br />
然后用编辑器编辑 {{ic|build.sh}}。 把:<br />
<br />
{{hc|build.sh|<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in i686 x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
done<br />
<br />
run_once make_packages_efi<br />
<br />
for arch in i686 x86_64; do<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
改为:<br />
<br />
{{hc|build.sh|<br />
cp -v releng/pacmanx86_64.conf releng/pacman.conf<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
<br />
echo make_pacman_conf i686<br />
cp -v releng/pacmani686.conf releng/pacman.conf<br />
cp -v releng/pacmani686.conf ${work_dir}/pacman.conf<br />
<br />
<br />
for arch in i686; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
这样,x86_64 和 i686 的软件包将安装有自己的pacman配置文件。<br />
<br />
=== 向映像里添加文件===<br />
<br />
{{注意|你必须使用 root 权限来完成这件事,不要改变任何你复制过来的文件的所有权,airootfs 中的'''所有'''文件必须为 root 用户所有。适当的所有制将在不久被解决。}}<br />
<br />
airootfs 目录作为要覆盖的文件,把它看作是在当前系统上的根目录'/',所以你在这个目录中放置的任何文件都将在开机时被复制。<br />
<br />
所以,如果你在当前系统上有一组 iptables 脚本且想要在 Live 映像上使用,请这样复制:<br />
# cp -r /etc/iptables ~/archlive/airootfs/etc<br />
<br />
在用户 home 文件夹里放置文件的方法有些许不同。不要把它们放在 {{ic|airootfs/home}},而是在 airootfs/ 里创建 skel 目录并将其放置在那里。然后我们会将相关命令添加到 {{ic|customize_airootfs.sh}}——我们要使用它在引导时复制文件以及梳理权限。<br />
<br />
首先,创建 skel 目录<br />
# mkdir ~/archlive/airootfs/etc/skel<br />
<br />
现在,复制 'home' 的文件到 skel 目录。例如,对于 {{ic|.bashrc}}:<br />
# cp ~/.bashrc ~/archlive/airootfs/etc/skel/<br />
<br />
当 {{ic|~/archlive/airootfs/root/customize_airootfs.sh}} 被执行,并且一个新用户已被创建, skel 目录中的文件将自动被复制到新的 home 文件夹中,并被设置正确的权限。<br />
<br />
类似地,需要注意位于层次结构下方的特殊配置文件。作为示例,配置文件 {{ic|/etc/X11/xinit/xinitrc}} 位于可能被安装包覆盖的路径上。要将 {{ic|xinitrc}} 的配置文件放在 {{ic|~/archlive/airootfs/etc/skel/}} ,然后修改 {{ic|customize_airootfs.sh}} 以适当地移动。<br />
<br />
=== 引导器 ===<br />
<br />
默认的文件应该可以正常工作,所以你应该不需要去碰它。<br />
<br />
由于 isolinux 的模块化性质,你能够使用很多插件,因为所有 *.c32 都被复制且可以可供您使用。看看[http://syslinux.zytor.com/wiki/index.php/SYSLINUX syslinux 官方网站] 和 [https://projects.archlinux.org/archiso.git/tree/configs/syslinux-iso/boot-files Archiso Git Repo]。使用所述插件,便有可能做出更具视觉吸引力及复杂的菜单。参见 [http://syslinux.zytor.com/wiki/index.php/Comboot/menu.c32 此处]。<br />
<br />
=== 登录管理器 ===<br />
<br />
通过启用您登录管理器的 [[Systemd (简体中文)|systemd]] 服务来做到在引导时启动 X 。如果您知道哪一个 .service 文件需要软链接,那就太好了。如果不知道,你也可以轻松找出——如果你在创建 iso 所用的系统上使用相同的程序的话。只需使用:<br />
<br />
$ ls -l /etc/systemd/system/display-manager.service<br />
<br />
现在在 {{ic|~/archlive/airootfs/etc/systemd/system}} 中创建相同的软链接。如 LXDM:<br />
<br />
# ln -s /usr/lib/systemd/system/lxdm.service ~/archlive/airootfs/etc/systemd/system/display-manager.service<br />
<br />
这将使您在 live 系统启用在系统上启动 LXDM。(This will enable LXDM at system start on your live system.)<br />
<br />
或者,您也可以启用 {{ic|airootfs/root/customize_airootfs.sh}} 中的服务以及其中启用的其他服务。<br />
<br />
如果您希望图形环境在启动过程中自动启动,请确保编辑 {{ic|airootfs/root/customize_airootfs.sh}} 并替换<br />
systemctl set-default multi-user.target<br />
为<br />
systemctl set-default graphical.target<br />
<br />
=== 改变自动登录状态 ===<br />
<br />
Getty 的自动登录配置位于 {{ic|airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf}}。 <br />
<br />
您可以修改这个文件来更改自动登录用户:<br />
<br />
[Service]<br />
ExecStart=<br />
ExecStart=-/sbin/agetty --autologin '''isouser''' --noclear %I 38400 linux<br />
<br />
或者干脆删除它来禁用自动登录。<br />
<br />
== 构建ISO ==<br />
<br />
现在,你已经准备好把你的文件转换成 .iso,以便可以刻录到 CD 或 USB:<br />
<br />
首先创建 {{ic|out/}} 目录,<br />
<br />
# mkdir ~/archlive/out/<br />
<br />
然后在 {{ic|~/archlive}} 里面执行:<br />
<br />
# ./build.sh -v<br />
<br />
该脚本将现在下载并安装你指定的软件包到 {{ic|work/*/airootfs}},创建内核和 init 映像(initramfs),应用您的修改,并最终把 ISO 建立到 {{ic|out/}}。<br />
<br />
=== 重建ISO ===<br />
<br />
在修改之后重建 ISO 不被官方支持。但是,通过应用两个步骤很容易。首先,您必须删除工作目录中的锁定文件:<br />
<br />
# rm -v work/build.make_*<br />
<br />
此外,需要编辑脚本 {{ic|airootfs/root/customize_airootfs.sh}},并在 {{ic|useradd}} 行的开头添加 {{ic|id}} 命令,如下所示。否则,重建将在此处停止,因为要添加的用户已经存在 [https://bugs.archlinux.org/task/41865]。<br />
{{Style|typo?}}<br />
<br />
! id arch && useradd -m -p "" -g users -G "adm,audio,floppy,log,network,rfkill,scanner,storage,optical,power,wheel" -s /usr/bin/zsh arch<br />
<br />
同时删除创建的用户或符号链接,如 {{ic|/etc/sudoers}} 等持久性数据。<br />
<br />
{{Expansion|报告需要删除或重置的更多数据。}}<br />
<br />
通过编辑 pacstrap 脚本(位于 /bin/pacstrap)并在第 361 行更改以下内容,可以稍微加快重建速度:<br />
<br />
修改前:<br />
<br />
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then<br />
<br />
修改后:<br />
<br />
if ! pacman -r "$newroot" -Sy --needed "${pacman_args[@]}"; then<br />
<br />
这增加了初始引导的速度,因为它不必下载和安装任何已经安装的基础包。<br />
<br />
== 使用ISO ==<br />
<br />
有关各种选项,请参见 [[:Category:Getting_and_installing_Arch_(简体中文)#安装方式]] 部分。<br />
<br />
== 提示和技巧 ==<br />
<br />
=== 在沒有互联网连接的情况下安装 Archiso ===<br />
{{Move|Installation without Internet access|似乎这可以独立成一篇|Talk:Archiso}}<br />
<br />
若你想在没有互联网连接或者你不想重复下载你想要的包的情况下安装 archiso(例如[https://www.archlinux.org/download/ 官方的每月发布版]):<br />
<br />
首先,按照[[Installation guide (简体中文)|安装指南]],并跳过一些步骤(如[[Installation guide (简体中文)#连接到因特网|连接到因特网]]),直到[[Installation guide (简体中文)#安装基本系统|安装基本系统]]之前。<br />
<br />
==== 安装 archiso 到新的 root ====<br />
<br />
复制 Live 环境的''所有文件''到新的根目录,而不是使用 {{ic|pacstrap}}(这将尝试从远程存储库下载):<br />
# time cp -ax / /mnt<br />
{{注意|The option ({{ic|-x}})排除了一些特殊目录,因为它们不应该被复制到新的根目录。}}<br />
<br />
然后,创建一些目录并复制内核映像到新的根,以保证新系统的完整性:<br />
<br />
# cp -vaT /run/archiso/bootmnt/arch/boot/$(uname -m)/vmlinuz /mnt/boot/vmlinuz-linux<br />
<br />
完成之后,请按[[Installation guide (简体中文)#Fstab]]所述生成 fstab。<br />
<br />
==== Chroot 并配置基本系统 ====<br />
<br />
下一步,chroot 到您新安装的系统:<br />
<br />
# arch-chroot /mnt /bin/bash<br />
<br />
请注意,在您配置 locale、键盘映射等之前,你仍然需要为了避免延续 Live 环境的轨迹——或者说对 archiso 所做的一些不适用于非 Live 环境的修改——而做一些事情。<br />
<br />
===== 恢复 journald 的配置 =====<br />
[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/root/customize_airootfs.sh#n19 archiso 的这个修改]会导致日志存储在 RAM 上——它意味着在重启后日志便会丢失。为了解决这个问题,执行:<br />
<br />
# sed -i 's/Storage=volatile/#Storage=auto/' /etc/systemd/journald.conf<br />
<br />
===== 删除特殊的 udev 规则 =====<br />
如果有任何有线网络接口,[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/etc/udev/rules.d/81-dhcpcd.rules udev 的这个规则]会自动启动dhcpcd。<br />
<br />
# rm /etc/udev/rules.d/81-dhcpcd.rules<br />
<br />
===== 禁用和移除 archiso 创建的服务 =====<br />
有一些服务文件是为 Live 环境创建的,请禁用这些服务并移除文件——因为它们对于新系统来说没必要存在:<br />
<br />
# systemctl disable pacman-init.service choose-mirror.service<br />
# rm -r /etc/systemd/system/{choose-mirror.service,pacman-init.service,etc-pacman.d-gnupg.mount,getty@tty1.service.d}<br />
# rm /etc/systemd/scripts/choose-mirror<br />
# rm /etc/systemd/system/archiso-start.service<br />
# rm /etc/systemd/system/multi-user.target.wants/archiso-start.service<br />
<br />
===== 移除 Live 环境的特殊脚本 =====<br />
在 live 系统中通过 archiso 脚本安装了一些脚本,这对于新系统是不必要的:<br />
<br />
# rm /etc/systemd/system/getty@tty1.service.d/autologin.conf<br />
# rm /root/{.automated_script.sh,.zlogin}<br />
# rm /etc/mkinitcpio-archiso.conf<br />
# rm -r /etc/initcpio<br />
<br />
===== 导入archlinux密钥 =====<br />
<br />
为了使用官方存储库,我们需要导入 archlinux 主密钥([[Pacman/Package signing (简体中文)#初始化密钥环]])。这一步通常是通过 pacstrap 完成的,但是可以通过<br />
<br />
# pacman-key --init<br />
# pacman-key --populate archlinux<br />
<br />
{{注意|Keyboard or mouse activity is needed to generate entropy and speed-up the first step.}}<br />
<br />
===== 配置系统 =====<br />
<br />
现在,您可以按照 [[Installation guide (简体中文)#配置系统]] 中跳过的步骤(设置语言环境,时区,主机名等),并通过创建初始 ramdisk 来完成安装,如 [[Installation guide (简体中文)#Initramfs]]。<br />
<br />
===== 启用图形登录(可选) =====<br />
<br />
如果使用像GDM这样的显示管理器,则可能需要将 systemd 默认目标从 multi-user.target 更改为允许图形登录的目标。<br />
# systemctl disable multi-user.target<br />
# systemctl enable graphical.target<br />
<br />
== 参阅 ==<br />
=== 文档和教程 ===<br />
* [https://projects.archlinux.org/archiso.git Archiso 项目页面]<br />
* [https://projects.archlinux.org/archiso.git/tree/docs 官方文档]<br />
<br />
=== 示例自定义模板 ===<br />
* [http://easy.open.and.free.fr/didjix/ A live DJ distribution powered by ArchLinux and built with Archiso]</div>
745275633
https://wiki.archlinux.org/index.php?title=Archiso_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=508457
Archiso (简体中文)
2018-01-25T11:30:27Z
<p>745275633: 508244(Added archiso-start.service to remove)</p>
<hr />
<div>[[Category:简体中文]]<br />
[[Category:Live Arch systems (简体中文)]]<br />
[[Category:Getting and installing Arch (简体中文)]]<br />
[[ar:Archiso]]<br />
[[el:Archiso]]<br />
[[en:Archiso]]<br />
[[es:Archiso]]<br />
[[fr:Archiso]]<br />
[[it:Archiso]]<br />
[[ja:Archiso]]<br />
[[nl:Archiso]]<br />
[[ru:Archiso]]<br />
[[sk:Archiso]]<br />
{{TranslationStatus (简体中文)|Archiso|2017-12-18|508244}}<br />
{{Related articles start (简体中文)}}<br />
{{Related|Remastering the Install ISO}}<br />
{{Related2|PXE (简体中文)|PXE}}<br />
{{Related2|Archboot (简体中文)|Archboot}}<br />
{{Related articles end}}<br />
'''Archiso''' 是一组 bash 脚本,它能够建立功能全面的 Arch Linux 的 Live CD/DVD/USB 映像。它同样是用来生成官方映像的工具,但由于它是一个非常通用的工具,所以它可以被用来生成从救援系统、安装盘,到特殊爱好的 Live CD/DVD/USB 系统——无人知晓还有其他什么。简单地说,如果要将 Arch 放在一条闪光的船上,它可以帮你做到这一点。Archiso 的核心以及灵魂是 ''mkarchiso''。它的所有选项都写在它的用法输出上,所以它的直接使用方法将不在这里讨论。相反,这篇 wiki 文章将导引你迅速建立你的 Live 介质。<br />
<br />
== 安装和配置 ==<br />
<br />
{{注意|<br />
* 您必须在 x86_64 上运行 Archiso。 [https://projects.archlinux.org/archiso.git/tree/docs/README.build#n67]<br />
* 以下操作请在ROOT权限下使用,在错误的权限下操作会造成一下问题。}}<br />
当你开始之前, [[install|安装]] {{Pkg|archiso}} 或 {{AUR|archiso-git}}。<br />
<br />
创建一个用于工作的目录, 实时镜像将会在这里被处理。 {{ic|~/archlive}} 是一个好选择。<br />
$ mkdir ~/archlive<br />
<br />
现在要将早先安装到主机的 archiso 脚本复制到你新建的工作目录内。<br />
<br />
Archiso 附带2个预定义配置( profiles ): ''releng'' 和''baseline''。<br />
<br />
* 如果您想要创建完全定制的 Live Arch Linux ,并预装所有您喜爱的程序和配置,使用 ''releng''。<br />
<br />
* 如果您只是想构建一个简易 Live 镜像,无预装软件并仅有基础配置,那么使用 ''baseline''。<br />
<br />
现在,将您选择的配置文件复制到目录(在下面的示例中为 ''archlive''),您可以在其中进行调整和构建。 执行以下操作,用 {{ic|releng}} 或 {{ic|baseline}} 替换 {{ic|'''profile'''}}。<br />
<br />
# cp -r /usr/share/archiso/configs/'''profile'''/* ''archlive''<br />
<br />
* 如果你使用 {{ic|releng}} 配置文件来创建一个完全自定义的镜像,那么你可以继续到:[[#配置 Live 介质]]。<br />
<br />
* 如果您使用 {{ic|baseline}} 配置文件创建一个简易映像,那么你不需要做任何定制,并可以直接继续到 [[#构建ISO]].<br />
<br />
== 配置 Live 介质 ==<br />
<br />
本节详细介绍该如何配置您将创建的映像,允许您定义哪些包以及配置将被您的 Live 映像所包含。<br />
在 [[#安装和配置]] 中创建的{{ic|''archlive''}}目录中有许多文件和目录; 我们只关注其中一部分,主要是<br />
* {{ic|packages.*}} - 在这里一行行列出你想要安装的包,和 <br />
* {{ic|airootfs}} 目录——这是一个覆盖目录,你将在这里完成所有的定制工作。<br />
一般来说,您在全新安装之后所执行的每个管理任务(不包括软件包安装)可以被写入这个脚本: {{ic|''archlive''/airootfs/root/customize_airootfs.sh}}。您必须从新环境的角度来写该脚本,所以脚本中的 / 代表方才被创建的 Live ISO 的根。<br />
<br />
=== 安装包 ===<br />
<br />
[[Edit|编辑]] {{ic|packages.i686}},{{ic|packages.x86_64}} 或 {{ic|packages.both}} 中的程序包列表,以指示要在 live 媒体上安装那些程序包。这里的后缀表示包可用的架构。<br />
<br />
{{Note|如果要在 Live CD 中使用 [[窗口管理器]],则必须添加必要且正确的 [[video drivers]],否则 WM 可能在加载时冻结。}}<br />
<br />
==== 自定义本地库 ====<br />
<br />
{{Merge|Pacman/Tips_and_tricks_(简体中文)#自建本地仓库|移动一般信息 (如:仓库目录树) 到主文章.|Talk:Archiso}}<br />
<br />
为了准备自定义包或是从 [[Arch User Repository (简体中文)|AUR]]/[[Arch Build System (简体中文)|ABS]] 安装包,你也可以 [[Custom local repository|创建自定义本地资源库]]。如果您希望支持多种体系结构,则应采取预防措施来防止发生错误。每个架构应该有自己的目录树:<br />
<br />
{{hc|$ tree ~/customrepo/ {{!}} sed "s/$(uname -m)/<arch>/g"|<br />
/home/archie/customrepo/<br />
└── <arch><br />
├── customrepo.db -> customrepo.db.tar.xz<br />
├── customrepo.db.tar.xz<br />
├── customrepo.files -> customrepo.files.tar.xz<br />
├── customrepo.files.tar.xz<br />
└── personal-website-git-b99cce0-1-<arch>.pkg.tar.xz<br />
<br />
1 directory, 5 files<br />
}}<br />
<br />
如此后,您可以添加您的仓库——把下面的句子加入 {{ic|~/archlive/pacman.conf}},并置于其他仓库条目上面(优先级最高):<br />
<br />
{{hc|~/archlive/pacman.conf|...<br />
# custom repository<br />
[customrepo]<br />
SigLevel <nowiki>=</nowiki> Optional TrustAlly<br />
Server <nowiki>=</nowiki> file:///home/'''user'''/customrepo/$arch<br />
...}}<br />
<br />
''repo-add'' 可执行文件检查软件包是否合适。如果不,那么你将得到与此类似的错误消息:<br />
<br />
==> ERROR: '/home/archie/customrepo/<arch>/foo-<arch>.pkg.tar.xz' does not have a valid database archive extension.<br />
<br />
==== 避免安装属于base组的包 ====<br />
<br />
默认情况下,{{ic|/usr/bin/mkarchiso}}——一个被 {{ic|~/archlive/build.sh}} 使用的脚本——会调用 {{Pkg|arch-install-scripts}} 中一个名为 {{ic|pacstrap}} 的程序,且在调用时不使用 {{ic|-i}} 标志——这将使 [[Pacman]] 在安装过程中不等待用户输入。<br />
<br />
当 base 组软件包被加入黑名单——把它们写到 {{ic|~/archlive/pacman.conf}} 中的 {{ic|IgnorePkg}} 行——时,[[Pacman]] 会询问是否仍然安装它们——意味着如果用户输入被跳过,它们就会被安装。为了避免安装这些包,这里有一些选择:<br />
<br />
* '''丑陋'''方案(Dirty):在 {{ic|/usr/bin/mkarchiso}} 中每次调用 {{ic|pacstrap}} 的行上加入 {{ic|i}} 标志。<br />
<br />
* '''整洁'''方案(Clean):创建 {{ic|/usr/bin/mkarchiso}} 的一份复制。在该复制中增加此标志,并修改 {{ic|~/archlive/build.sh}} 以使其调用修改过的 mkarchiso 脚本。<br />
<br />
* '''高级'''方案(Advanced): 在 {{ic|~/archlive/build.sh}} 中创建一个函数,该函数将在基础安装结束后显式移除那些包。若这样做,可以免去在安装过程中多次按回车键的麻烦。<br />
<br />
==== Installing packages from multilib ====<br />
<br />
要从 [[Multilib (简体中文)|Multilib]] 资源库安装软件包,您必须创建两个 pacman 配置文件:一个用于 x86_64,一个用于 i686。 将 {{ic|pacman.conf}} 复制到 {{ic|pacmanx86_64.conf}} 和 {{ic|pacmani686.conf}}。 取消注释以下行以{{ic|pacmanx86_64.conf}} 中启用 ''multilib''):<br />
<br />
{{hc|pacmanx86_64.conf|2=<br />
[multilib]<br />
SigLevel = PackageRequired<br />
Include = /etc/pacman.d/mirrorlist<br />
}}<br />
<br />
然后用编辑器编辑 {{ic|build.sh}}。 把:<br />
<br />
{{hc|build.sh|<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in i686 x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
done<br />
<br />
run_once make_packages_efi<br />
<br />
for arch in i686 x86_64; do<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
改为:<br />
<br />
{{hc|build.sh|<br />
cp -v releng/pacmanx86_64.conf releng/pacman.conf<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
<br />
echo make_pacman_conf i686<br />
cp -v releng/pacmani686.conf releng/pacman.conf<br />
cp -v releng/pacmani686.conf ${work_dir}/pacman.conf<br />
<br />
<br />
for arch in i686; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
这样,x86_64 和 i686 的软件包将安装有自己的pacman配置文件。<br />
<br />
=== 向映像里添加文件===<br />
<br />
{{注意|你必须使用 root 权限来完成这件事,不要改变任何你复制过来的文件的所有权,airootfs 中的'''所有'''文件必须为 root 用户所有。适当的所有制将在不久被解决。}}<br />
<br />
airootfs 目录作为要覆盖的文件,把它看作是在当前系统上的根目录'/',所以你在这个目录中放置的任何文件都将在开机时被复制。<br />
<br />
所以,如果你在当前系统上有一组 iptables 脚本且想要在 Live 映像上使用,请这样复制:<br />
# cp -r /etc/iptables ~/archlive/airootfs/etc<br />
<br />
在用户 home 文件夹里放置文件的方法有些许不同。不要把它们放在 {{ic|airootfs/home}},而是在 airootfs/ 里创建 skel 目录并将其放置在那里。然后我们会将相关命令添加到 {{ic|customize_airootfs.sh}}——我们要使用它在引导时复制文件以及梳理权限。<br />
<br />
首先,创建 skel 目录<br />
# mkdir ~/archlive/airootfs/etc/skel<br />
<br />
现在,复制 'home' 的文件到 skel 目录。例如,对于 {{ic|.bashrc}}:<br />
# cp ~/.bashrc ~/archlive/airootfs/etc/skel/<br />
<br />
当 {{ic|~/archlive/airootfs/root/customize_airootfs.sh}} 被执行,并且一个新用户已被创建, skel 目录中的文件将自动被复制到新的 home 文件夹中,并被设置正确的权限。<br />
<br />
类似地,需要注意位于层次结构下方的特殊配置文件。作为示例,配置文件 {{ic|/etc/X11/xinit/xinitrc}} 位于可能被安装包覆盖的路径上。要将 {{ic|xinitrc}} 的配置文件放在 {{ic|~/archlive/airootfs/etc/skel/}} ,然后修改 {{ic|customize_airootfs.sh}} 以适当地移动。<br />
<br />
=== 引导器 ===<br />
<br />
默认的文件应该可以正常工作,所以你应该不需要去碰它。<br />
<br />
由于 isolinux 的模块化性质,你能够使用很多插件,因为所有 *.c32 都被复制且可以可供您使用。看看[http://syslinux.zytor.com/wiki/index.php/SYSLINUX syslinux 官方网站] 和 [https://projects.archlinux.org/archiso.git/tree/configs/syslinux-iso/boot-files Archiso Git Repo]。使用所述插件,便有可能做出更具视觉吸引力及复杂的菜单。参见 [http://syslinux.zytor.com/wiki/index.php/Comboot/menu.c32 此处]。<br />
<br />
=== 登录管理器 ===<br />
<br />
通过启用您登录管理器的 [[Systemd (简体中文)|systemd]] 服务来做到在引导时启动 X 。如果您知道哪一个 .service 文件需要软链接,那就太好了。如果不知道,你也可以轻松找出——如果你在创建 iso 所用的系统上使用相同的程序的话。只需使用:<br />
<br />
$ ls -l /etc/systemd/system/display-manager.service<br />
<br />
现在在 {{ic|~/archlive/airootfs/etc/systemd/system}} 中创建相同的软链接。如 LXDM:<br />
<br />
# ln -s /usr/lib/systemd/system/lxdm.service ~/archlive/airootfs/etc/systemd/system/display-manager.service<br />
<br />
这将使您在 live 系统启用在系统上启动 LXDM。(This will enable LXDM at system start on your live system.)<br />
<br />
或者,您也可以启用 {{ic|airootfs/root/customize_airootfs.sh}} 中的服务以及其中启用的其他服务。<br />
<br />
如果您希望图形环境在启动过程中自动启动,请确保编辑 {{ic|airootfs/root/customize_airootfs.sh}} 并替换<br />
systemctl set-default multi-user.target<br />
为<br />
systemctl set-default graphical.target<br />
<br />
=== 改变自动登录状态 ===<br />
<br />
Getty 的自动登录配置位于 {{ic|airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf}}。 <br />
<br />
您可以修改这个文件来更改自动登录用户:<br />
<br />
[Service]<br />
ExecStart=<br />
ExecStart=-/sbin/agetty --autologin '''isouser''' --noclear %I 38400 linux<br />
<br />
或者干脆删除它来禁用自动登录。<br />
<br />
== 构建ISO ==<br />
<br />
现在,你已经准备好把你的文件转换成 .iso,以便可以刻录到 CD 或 USB:<br />
<br />
首先创建 {{ic|out/}} 目录,<br />
<br />
# mkdir ~/archlive/out/<br />
<br />
然后在 {{ic|~/archlive}} 里面执行:<br />
<br />
# ./build.sh -v<br />
<br />
该脚本将现在下载并安装你指定的软件包到 {{ic|work/*/airootfs}},创建内核和 init 映像(initramfs),应用您的修改,并最终把 ISO 建立到 {{ic|out/}}。<br />
<br />
=== 重建ISO ===<br />
<br />
在修改之后重建 ISO 不被官方支持。但是,通过应用两个步骤很容易。首先,您必须删除工作目录中的锁定文件:<br />
<br />
# rm -v work/build.make_*<br />
<br />
此外,需要编辑脚本 {{ic|airootfs/root/customize_airootfs.sh}},并在 {{ic|useradd}} 行的开头添加 {{ic|id}} 命令,如下所示。否则,重建将在此处停止,因为要添加的用户已经存在 [https://bugs.archlinux.org/task/41865]。<br />
{{Style|typo?}}<br />
<br />
! id arch && useradd -m -p "" -g users -G "adm,audio,floppy,log,network,rfkill,scanner,storage,optical,power,wheel" -s /usr/bin/zsh arch<br />
<br />
同时删除创建的用户或符号链接,如 {{ic|/etc/sudoers}} 等持久性数据。<br />
<br />
{{Expansion|报告需要删除或重置的更多数据。}}<br />
<br />
通过编辑 pacstrap 脚本(位于 /bin/pacstrap)并在第 361 行更改以下内容,可以稍微加快重建速度:<br />
<br />
修改前:<br />
<br />
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then<br />
<br />
修改后:<br />
<br />
if ! pacman -r "$newroot" -Sy --needed "${pacman_args[@]}"; then<br />
<br />
这增加了初始引导的速度,因为它不必下载和安装任何已经安装的基础包。<br />
<br />
== 使用ISO ==<br />
<br />
有关各种选项,请参见 [[:Category:Getting_and_installing_Arch_(简体中文)#安装方式]] 部分。<br />
<br />
== 提示和技巧 ==<br />
<br />
=== 在沒有互联网连接的情况下安装 Archiso ===<br />
{{Move|Installation without Internet access|似乎这可以独立成一篇|Talk:Archiso}}<br />
<br />
若你想在没有互联网连接或者你不想重复下载你想要的包的情况下安装 archiso(例如[https://www.archlinux.org/download/ 官方的每月发布版]):<br />
<br />
首先,按照[[Installation guide (简体中文)|安装指南]],并跳过一些步骤(如[[Installation guide (简体中文)#连接到因特网|连接到因特网]]),直到[[Installation guide (简体中文)#安装基本系统|安装基本系统]]之前。<br />
<br />
==== 安装 archiso 到新的 root ====<br />
<br />
复制 Live 环境的''所有文件''到新的根目录,而不是使用 {{ic|pacstrap}}(这将尝试从远程存储库下载):<br />
# time cp -ax / /mnt<br />
{{注意|The option ({{ic|-x}})排除了一些特殊目录,因为它们不应该被复制到新的根目录。}}<br />
<br />
然后,创建一些目录并复制内核映像到新的根,以保证新系统的完整性:<br />
<br />
# cp -vaT /run/archiso/bootmnt/arch/boot/$(uname -m)/vmlinuz /mnt/boot/vmlinuz-linux<br />
<br />
完成之后,请按[[Installation guide (简体中文)#Fstab]]所述生成 fstab。<br />
<br />
==== Chroot 并配置基本系统 ====<br />
<br />
下一步,chroot 到您新安装的系统:<br />
<br />
# arch-chroot /mnt /bin/bash<br />
<br />
请注意,在您配置 locale、键盘映射等之前,你仍然需要为了避免延续 Live 环境的轨迹——或者说对 archiso 所做的一些不适用于非 Live 环境的修改——而做一些事情。<br />
<br />
===== 恢复 journald 的配置 =====<br />
[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/root/customize_airootfs.sh#n19 archiso 的这个修改]会导致日志存储在 RAM 上——它意味着在重启后日志便会丢失。为了解决这个问题,执行:<br />
<br />
# sed -i 's/Storage=volatile/#Storage=auto/' /etc/systemd/journald.conf<br />
<br />
===== 删除特殊的 udev 规则 =====<br />
如果有任何有线网络接口,[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/etc/udev/rules.d/81-dhcpcd.rules udev 的这个规则]会自动启动dhcpcd。<br />
<br />
# rm /etc/udev/rules.d/81-dhcpcd.rules<br />
<br />
===== 禁用和移除 archiso 创建的服务 =====<br />
有一些服务文件是为 Live 环境创建的,请禁用这些服务并移除文件——因为它们对于新系统来说没必要存在:<br />
<br />
# systemctl disable pacman-init.service choose-mirror.service<br />
# rm -r /etc/systemd/system/{choose-mirror.service,pacman-init.service,etc-pacman.d-gnupg.mount,getty@tty1.service.d}<br />
# rm /etc/systemd/scripts/choose-mirror<br />
# rm /etc/systemd/system/archiso-start.service<br />
# rm /etc/systemd/system/multi-user.target.wants/archiso-start.service<br />
<br />
===== 移除 Live 环境的特殊脚本 =====<br />
在 live 系统中通过 archiso 脚本安装了一些脚本,这对于新系统是不必要的:<br />
<br />
# rm /etc/systemd/system/getty@tty1.service.d/autologin.conf<br />
# rm /root/{.automated_script.sh,.zlogin}<br />
# rm /etc/mkinitcpio-archiso.conf<br />
# rm -r /etc/initcpio<br />
<br />
===== 导入archlinux密钥 =====<br />
<br />
为了使用官方存储库,我们需要导入 archlinux 主密钥([[Pacman/Package signing (简体中文)#初始化密钥环]])。这一步通常是通过 pacstrap 完成的,但是可以通过<br />
<br />
# pacman-key --init<br />
# pacman-key --populate archlinux<br />
<br />
{{注意|Keyboard or mouse activity is needed to generate entropy and speed-up the first step.}}<br />
<br />
===== 配置系统 =====<br />
<br />
现在,您可以按照 [[Installation guide (简体中文)#配置系统]] 中跳过的步骤(设置语言环境,时区,主机名等),并通过创建初始 ramdisk 来完成安装,如 [[Installation guide (简体中文)#Initramfs]]。<br />
<br />
===== 启用图形登录(可选) =====<br />
<br />
如果使用像GDM这样的显示管理器,则可能需要将 systemd 默认目标从 multi-user.target 更改为允许图形登录的目标。<br />
# systemctl disable multi-user.target<br />
# systemctl enable graphical.target<br />
<br />
== 参阅 ==<br />
=== 文档和教程 ===<br />
* [https://projects.archlinux.org/archiso.git Archiso 项目页面]<br />
* [https://projects.archlinux.org/archiso.git/tree/docs 官方文档]<br />
<br />
=== 示例自定义模板 ===<br />
* [http://easy.open.and.free.fr/didjix/ A live DJ distribution powered by ArchLinux and built with Archiso]</div>
745275633
https://wiki.archlinux.org/index.php?title=Ruby_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=506458
Ruby (简体中文)
2018-01-07T07:29:46Z
<p>745275633: fix Broken package link</p>
<hr />
<div>[[Category:Programming languages (简体中文)]]<br />
[[en:Ruby]]<br />
[[ja:Ruby]]<br />
{{TranslationStatus (简体中文)|Ruby|2018-01-05|499910}}<br />
<br />
Ruby 是一门专注于简洁和生产力的动态解释型开源编程语言。<br />
<br />
== 安装 Ruby ==<br />
<br />
对于最新版本的ruby,[[Help:Reading (简体中文)#安装软件包|安装]] {{pkg|ruby}} 包。它包括 [[#RubyGems|rubygems]]。<br />
<br />
=== 多版本 ===<br />
<br />
如果你要在同一个系统安装多个版本 (比如 2.0.0-p0 和 1.9.3-p392),最简单的办法时安装 [[RVM]],{{AUR|chruby}} 或者 [[rbenv]]。<br />
<br />
=== 文档 ===<br />
<br />
为了通过 {{ic|ri}} 命令行工具使文档可用,安装 {{Pkg|ruby-docs}}。<br />
你可以查询文档通过:{{ic|ri Array}},{{ic|ri Array.pop}} 等等。(就像 man 页面)<br />
<br />
== RubyGems ==<br />
<br />
RubyGems 是 Ruby 模块(叫做 ''gems'') 的包管理器,在某种程度上与 [[pacman]] 相对于 Arch Linux 的角色相当。它包含在 {{pkg|ruby}} 中。<br />
<br />
=== 建立 ===<br />
<br />
[[Help:Reading (简体中文)#添加、创建、编辑文件|添加]] {{ic|$(ruby -e 'print Gem.user_dir')/bin}} 到 {{ic|PATH}} [[Environment variables (简体中文)|环境变量]] 来允许 RubyGems 被执行:<br />
<br />
{{hc|1=~/.profile|2=<br />
PATH="$(ruby -e 'print Gem.user_dir')/bin:$PATH"<br />
}}<br />
<br />
这样而不是输入完整的路径对可执行的 gems 是必需的,尽管库工作并不需要修改你的路径。<br />
<br />
为了允许当前 [[Users and groups (简体中文)|用户]] 安装 RubyGems,例如 ''你的用户帐号不允许安装到系统 RubyGems。'',你可以设置 {{ic|GEM_HOME}} 为本地路径:<br />
<br />
$ export GEM_HOME=$HOME/.gem<br />
<br />
你可能想把这个变量追加到 {{ic|.profile}} 中:<br />
{{hc|1=~/.profile|2=<br />
PATH="$(ruby -e 'print Gem.user_dir')/bin:$PATH"<br />
export GEM_HOME=$HOME/.gem<br />
}}<br />
<br />
使用 {{ic|gem env}} 来查看当前的 RubyGems 环境:<br />
<br />
$ gem env<br />
<br />
=== 用法 ===<br />
<br />
查看已安装有那些 gem:<br />
$ gem list<br />
<br />
获取某个 gem 的详细信息:<br />
$ gem spec "gem_name"<br />
<br />
默认情况下,{{ic|gem list}} 和 {{ic|gem spec}} 开启了 {{ic|--local}} 选项,导致 ''gem'' 只会在本地系统里进行搜索。这可以用 {{ic|--remote}} 参数来覆盖。这样来搜索一个 mysql gem:<br />
$ gem list --remote mysql<br />
<br />
安装一个 gem:<br />
$ gem install mysql<br />
<br />
安装过程可以加快一点,如果你不需要本地的文档的话:<br />
$ gem install mysql --no-document<br />
<br />
{{注意|这可以通过配置以下 {{ic|~/.gemrc}} 文件成为默认选项:<br />
{{hc|~/.gemrc|<nowiki><br />
gem: --no-document<br />
</nowiki>}}<br />
}}<br />
<br />
更新所有已安装的 gem:<br />
$ gem update<br />
<br />
=== 安装每个用户或全系统的 gems ===<br />
<br />
<br />
在 Arch Linux 下运行 {{ic|gem}} 时,gems 默认是为用户安装的(安装到 {{ic|~/.gem/ruby/}}),而不是系统范围内(安装到 {{ic|/usr/lib/ruby/gems/}})。这被认为是 Arch 上管理 gems 的最好方式,因为否则它们可能会干扰 pacman 安装的宝石。<br />
<br />
可以通过以 root 身份运行 {{ic|gem}} 命令并附加 {{ic|--no-user-install}} 标志以在系统范围内安装 gems。这可以被设置为默认通过在 {{ic|/etc/gemrc}}(系统范围)或在 {{ic|~/.gemrc}}(用户,覆盖系统范围) 中用 {{ic|--no-user-install}} 替换 {{ic|--user-install}}。<br />
<br />
[[#Bundler|Bundler]] 通过将宝石打包到您的应用程序中来解决这些问题。请参阅下面关于使用 bundler 的部分。<br />
<br />
=== Bundler ===<br />
<br />
[http://bundler.io Bundler] 帮助你指定你的项目需要使用哪些 gem,还有可选地指定哪个版本被需要。当声明恰当时,Bundler 会安装所有依赖的 gem (包括整个依赖树),后期检查之后还会打印出 log。Bundler 默认是安装 gem 到一个共享的路径,不过也可以指定直接安装到你的应用。当你项目运行的时候,Bundler 就提供每个 gem 正确的版本,即便安装的 gem 其实有多个版本。这需要有一点工作:应用需要以 {{ic|bundle exec}} 命令运行,还有几行的 boilerplate 代码要被写在你的应用的可执行文件里。<br />
<br />
安装 Bundler:<br />
$ gem install bundler<br />
<br />
Bundler 默认把 gem 安装在系统全局,这跟 Arch 上处理 ''gem'' 的方案正好相反。要解决这个问题,添加下面的配置到你的 {{ic|~/.bashrc}}:<br />
export GEM_HOME=$(ruby -e 'print Gem.user_dir')<br />
<br />
新建一个 bundle:<br />
$ bundle init<br />
<br />
然后编辑当前目录 (gem init 执行的目录)下的 {{ic|Gemfile}} 添加你需要的 gem:<br />
<br />
{{hc|Gemfile|<br />
gem "rails", "3.2.9"<br />
gem "mysql"<br />
}}<br />
<br />
运行下面的命令安装需要的 gem 到 {{ic|GEM_HOME}}:<br />
$ bundle install<br />
<br />
或者作为可选方案, 运行下面的命令把 gem 安装到工作路径的 {{ic|.bundle}}:<br />
$ bundle install --path .bundle<br />
<br />
别忘了要编辑你主要的执行文件:<br />
{{bc|#!/usr/bin/env ruby<br />
<br />
# "This will automatically discover your Gemfile, and make all of the gems in<br />
# your Gemfile available to Ruby." http://bundler.io/rationale.html<br />
require 'bundler/setup'<br />
<br />
...<br />
}}<br />
<br />
最后运行你的程序:<br />
bundle exec ''main_executable_name.rb''<br />
<br />
=== Managing RubyGems using pacman ===<br />
<br />
Instead of managing gems with {{ic|gem}}, you can use [[pacman]], or an [[AUR]] helper. Ruby packages follow the naming convention ruby-''gemname''.<br />
<br />
This option provides the following advantages:<br />
* Gems are updated along with the rest of your system.<br />
* Installed gems are available system-wide, instead of being available only to the user who installed them.<br />
<br />
{{Note|There are also tools integrating ''gem'' with ''pacman'' by automatically generating PKGBUILDs for specified gems: see [[Creating packages#PKGBUILD generators]].}}<br />
<br />
==== Quarry ====<br />
<br />
Quarry is an opensource tool (GPL3 license) that allows to maintain [http://rubygems.org rubygems] binary repository for Arch Linux, as an easier alternative to building packages manually from the AUR. The source is hosted at [https://github.com/anatol/quarry github].<br />
<br />
The repository is maintained by Arch developer anatolik at http://pkgbuild.com/~anatolik/quarry/, and is currently for the x86_64 architecture only. It contains many popular gems and new gems can be added upon request.<br />
<br />
See [[Unofficial user repositories#quarry]] to enable it.<br />
<br />
Then install required gem {{ic|# pacman -S ruby-$gemname}}.<br />
<br />
If you have general questions - send it at the project announcement https://bbs.archlinux.org/viewtopic.php?id=182729<br><br />
If you have bugreports or code improvements - file at github https://github.com/anatol/quarry<br />
<br />
== See also ==<br />
<br />
* [[Ruby on Rails]]<br />
* Ruby - http://ruby-lang.org/<br />
* Bundler - http://bundler.io/<br />
* [[wikipedia:Why's_(poignant)_Guide_to_Ruby|why's (poignant) Guide to Ruby]]<br />
* [http://ruby.learncodethehardway.org/ Learn Ruby The Hard Way]<br />
* [http://blog.hyfather.com/blog/2011/10/18/bundler/ Comparison of Bundler and RVM workflows]</div>
745275633
https://wiki.archlinux.org/index.php?title=Ruby_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=506157
Ruby (简体中文)
2018-01-05T11:27:49Z
<p>745275633: a part of 499910</p>
<hr />
<div>[[Category:Programming languages (简体中文)]]<br />
[[en:Ruby]]<br />
[[ja:Ruby]]<br />
{{TranslationStatus (简体中文)|Ruby|2018-01-05|499910}}<br />
<br />
Ruby 是一门专注于简洁和生产力的动态解释型开源编程语言。<br />
<br />
== 安装 Ruby ==<br />
<br />
对于最新版本的ruby,[[Help:Reading (简体中文)#安装软件包|安装]] {{pkg|ruby}} 包。它包括 [[#RubyGems|rubygems]]。<br />
<br />
=== 多版本 ===<br />
<br />
如果你要在同一个系统安装多个版本 (比如 2.0.0-p0 和 1.9.3-p392),最简单的办法时安装 [[RVM]],{{AUR|chruby}} 或者 [[rbenv]]。<br />
<br />
=== 文档 ===<br />
<br />
为了通过 {{ic|ri}} 命令行工具使文档可用,安装 {{Pkg|ruby-docs}}。<br />
你可以查询文档通过:{{ic|ri Array}},{{ic|ri Array.pop}} 等等。(就像 man 页面)<br />
<br />
== RubyGems ==<br />
<br />
RubyGems 是 Ruby 模块(叫做 ''gems'') 的包管理器,在某种程度上与 [[pacman]] 相对于 Arch Linux 的角色相当。它包含在 {{pkg|ruby}} 中。<br />
<br />
=== 建立 ===<br />
<br />
[[Help:Reading (简体中文)#添加、创建、编辑文件|添加]] {{ic|$(ruby -e 'print Gem.user_dir')/bin}} 到 {{ic|PATH}} [[Environment variables (简体中文)|环境变量]] 来允许 RubyGems 被执行:<br />
<br />
{{hc|1=~/.profile|2=<br />
PATH="$(ruby -e 'print Gem.user_dir')/bin:$PATH"<br />
}}<br />
<br />
这样而不是输入完整的路径对可执行的 gems 是必需的,尽管库工作并不需要修改你的路径。<br />
<br />
为了允许当前 [[Users and groups (简体中文)|用户]] 安装 RubyGems,例如 ''你的用户帐号不允许安装到系统 RubyGems。'',你可以设置 {{ic|GEM_HOME}} 为本地路径:<br />
<br />
$ export GEM_HOME=$HOME/.gem<br />
<br />
你可能想把这个变量追加到 {{ic|.profile}} 中:<br />
{{hc|1=~/.profile|2=<br />
PATH="$(ruby -e 'print Gem.user_dir')/bin:$PATH"<br />
export GEM_HOME=$HOME/.gem<br />
}}<br />
<br />
使用 {{ic|gem env}} 来查看当前的 RubyGems 环境:<br />
<br />
$ gem env<br />
<br />
=== 用法 ===<br />
<br />
查看已安装有那些 gem:<br />
$ gem list<br />
<br />
获取某个 gem 的详细信息:<br />
$ gem spec "gem_name"<br />
<br />
默认情况下,{{ic|gem list}} 和 {{ic|gem spec}} 开启了 {{ic|--local}} 选项,导致 ''gem'' 只会在本地系统里进行搜索。这可以用 {{ic|--remote}} 参数来覆盖。这样来搜索一个 mysql gem:<br />
$ gem list --remote mysql<br />
<br />
安装一个 gem:<br />
$ gem install mysql<br />
<br />
安装过程可以加快一点,如果你不需要本地的文档的话:<br />
$ gem install mysql --no-document<br />
<br />
{{注意|这可以通过配置以下 {{ic|~/.gemrc}} 文件成为默认选项:<br />
{{hc|~/.gemrc|<nowiki><br />
gem: --no-document<br />
</nowiki>}}<br />
}}<br />
<br />
更新所有已安装的 gem:<br />
$ gem update<br />
<br />
=== 安装每个用户或全系统的 gems ===<br />
<br />
<br />
在 Arch Linux 下运行 {{ic|gem}} 时,gems 默认是为用户安装的(安装到 {{ic|~/.gem/ruby/}}),而不是系统范围内(安装到 {{ic|/usr/lib/ruby/gems/}})。这被认为是 Arch 上管理 gems 的最好方式,因为否则它们可能会干扰 pacman 安装的宝石。<br />
<br />
可以通过以 root 身份运行 {{ic|gem}} 命令并附加 {{ic|--no-user-install}} 标志以在系统范围内安装 gems。这可以被设置为默认通过在 {{ic|/etc/gemrc}}(系统范围)或在 {{ic|~/.gemrc}}(用户,覆盖系统范围) 中用 {{ic|--no-user-install}} 替换 {{ic|--user-install}}。<br />
<br />
[[#Bundler|Bundler]] 通过将宝石打包到您的应用程序中来解决这些问题。请参阅下面关于使用 bundler 的部分。<br />
<br />
=== Bundler ===<br />
<br />
[http://bundler.io Bundler] 帮助你指定你的项目需要使用哪些 gem,还有可选地指定哪个版本被需要。当声明恰当时,Bundler 会安装所有依赖的 gem (包括整个依赖树),后期检查之后还会打印出 log。Bundler 默认是安装 gem 到一个共享的路径,不过也可以指定直接安装到你的应用。当你项目运行的时候,Bundler 就提供每个 gem 正确的版本,即便安装的 gem 其实有多个版本。这需要有一点工作:应用需要以 {{ic|bundle exec}} 命令运行,还有几行的 boilerplate 代码要被写在你的应用的可执行文件里。<br />
<br />
安装 Bundler:<br />
$ gem install bundler<br />
<br />
Bundler 默认把 gem 安装在系统全局,这跟 Arch 上处理 ''gem'' 的方案正好相反。要解决这个问题,添加下面的配置到你的 {{ic|~/.bashrc}}:<br />
export GEM_HOME=$(ruby -e 'print Gem.user_dir')<br />
<br />
新建一个 bundle:<br />
$ bundle init<br />
<br />
然后编辑当前目录 (gem init 执行的目录)下的 {{ic|Gemfile}} 添加你需要的 gem:<br />
<br />
{{hc|Gemfile|<br />
gem "rails", "3.2.9"<br />
gem "mysql"<br />
}}<br />
<br />
运行下面的命令安装需要的 gem 到 {{ic|GEM_HOME}}:<br />
$ bundle install<br />
<br />
或者作为可选方案, 运行下面的命令把 gem 安装到工作路径的 {{ic|.bundle}}:<br />
$ bundle install --path .bundle<br />
<br />
别忘了要编辑你主要的执行文件:<br />
{{bc|#!/usr/bin/env ruby<br />
<br />
# "This will automatically discover your Gemfile, and make all of the gems in<br />
# your Gemfile available to Ruby." http://bundler.io/rationale.html<br />
require 'bundler/setup'<br />
<br />
...<br />
}}<br />
<br />
最后运行你的程序:<br />
bundle exec ''main_executable_name.rb''<br />
<br />
=== Managing RubyGems using pacman ===<br />
<br />
Instead of managing gems with {{ic|gem}}, you can use [[pacman]], or an [[AUR]] helper. Ruby packages follow the naming convention ruby-''gemname''.<br />
<br />
This option provides the following advantages:<br />
* Gems are updated along with the rest of your system.<br />
* Installed gems are available system-wide, instead of being available only to the user who installed them.<br />
<br />
{{Note|There are also tools integrating ''gem'' with ''pacman'' by automatically generating PKGBUILDs for specified gems: see [[Creating packages#PKGBUILD generators]].}}<br />
<br />
==== Quarry ====<br />
<br />
Quarry is an opensource tool (GPL3 license) that allows to maintain [http://rubygems.org rubygems] binary repository for Arch Linux, as an easier alternative to building packages manually from the AUR. The source is hosted at [https://github.com/anatol/quarry github].<br />
<br />
The repository is maintained by Arch developer anatolik at http://pkgbuild.com/~anatolik/quarry/, and is currently for the x86_64 architecture only. It contains many popular gems and new gems can be added upon request.<br />
<br />
See [[Unofficial user repositories#quarry]] to enable it.<br />
<br />
Then install required gem {{ic|# pacman -S ruby-$gemname}}.<br />
<br />
If you have general questions - send it at the project announcement https://bbs.archlinux.org/viewtopic.php?id=182729<br><br />
If you have bugreports or code improvements - file at github https://github.com/anatol/quarry<br />
<br />
== See also ==<br />
<br />
* [[Ruby on Rails]]<br />
* Ruby - http://ruby-lang.org/<br />
* Bundler - http://bundler.io/<br />
* [[wikipedia:Why's_(poignant)_Guide_to_Ruby|why's (poignant) Guide to Ruby]]<br />
* [http://ruby.learncodethehardway.org/ Learn Ruby The Hard Way]<br />
* [http://blog.hyfather.com/blog/2011/10/18/bundler/ Comparison of Bundler and RVM workflows]</div>
745275633
https://wiki.archlinux.org/index.php?title=Category:FTP_servers&diff=505323
Category:FTP servers
2017-12-31T05:28:51Z
<p>745275633: add hans</p>
<hr />
<div>[[Category:File Transfer Protocol]]<br />
[[zh-hans:Category:FTP servers]]<br />
See [[List of applications/Internet#File transfer servers]].</div>
745275633
https://wiki.archlinux.org/index.php?title=Very_Secure_FTP_Daemon_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=505322
Very Secure FTP Daemon (简体中文)
2017-12-31T05:25:46Z
<p>745275633: test Category</p>
<hr />
<div>[[Category:FTP servers (简体中文)]]<br />
[[cs:Very Secure FTP Daemon]]<br />
[[en:Very Secure FTP Daemon]]<br />
[[es:Very Secure FTP Daemon]]<br />
[[it:Very Secure FTP Daemon]]<br />
[[ja:Very Secure FTP Daemon]]<br />
[[ru:Very Secure FTP Daemon]]<br />
{{TranslationStatus (简体中文)|Very Secure FTP Daemon|2017-12-21|505315}}<br />
[https://security.appspot.com/vsftpd.html vsftpd] (Very Secure FTP Daemon) 是一个为UNIX类系统开发的轻量,稳定和安全的FTP服务器端.<br />
== 安装 ==<br />
[[安装]] {{pkg|vsftpd}} 然后 [[Systemd (简体中文)#使用单元|启动/启用]] {{ic|vsftpd.service}} 守护程序。<br />
<br />
使用 [[Wikipedia:xinetd|xinetd]] 监视和控制 vsftpd 连接,请参见 [[#使用 xinetd]]。<br />
<br />
== 配置 ==<br />
vsftpd 的大多数配置都可以通过编辑 {{ic|/etc/vsftpd.conf}} 文件实现。 该文件本身自带大量注释说明,所以这一章节只就一些重要的配置予以说明。 有关所有可用选项和文档,请参阅 vsftpd.conf(5) 或 [https://security.appspot.com/vsftpd/vsftpd_conf.html 在线查看] 手册页。默认情况下,由 {{ic|/srv/ftp}} 提供文件。<br />
<br />
允许的连接 {{ic|/etc/hosts.allow}}:<br />
# 允许所有连接<br />
vsftpd: ALL<br />
# IP地址范围<br />
vsftpd: 10.0.0.0/255.255.255.0<br />
<br />
=== 允许上传 ===<br />
需要将 {{ic|/etc/vsftpd.conf}} 中的 {{ic|write_enable}} 值设为YES,以便允许修改文件系统(如上传):<br />
write_enable=YES<br />
<br />
=== 本地用户登录 ===<br />
需要修改 {{ic|/etc/vsftpd.conf}} 中的如下值,以便允许 {{ic|/etc/passwd}} 中的用户登录:<br />
local_enable=YES<br />
<br />
=== 匿名用户登录 ===<br />
以下行控制匿名用户是否可以登录。默认情况下,匿名登录只能从 {{ic|/srv/ftp}} 下载:<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
...<br />
# 允许匿名FTP? (当心 - 默认情况下允许除非您将其注释)。<br />
anonymous_enable=YES<br />
...<br />
# 取消注释以允许匿名FTP用户上传文件。<br />
# 只有上述全局写入被激活,才会有效果。<br />
# 另外,你显然需要创建FTP用户有写权限的目录。<br />
# anon_upload_enable=YES<br />
#<br />
# 如果您希望匿名FTP用户能够创建新目录,请取消注释。<br />
# anon_mkdir_write_enable=YES<br />
...<br />
}}<br />
<br />
您也可以添加以下选项(详见 {{man|5|vsftpd.conf}}):<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
# 匿名登录不需要密码<br />
no_anon_password=YES<br />
<br />
# 匿名客户端的最大传输速率(以 Bytes/秒 为单位)<br />
anon_max_rate=30000<br />
<br />
# 用于匿名登录的目录<br />
anon_root=/example/directory/<br />
}}<br />
<br />
=== Chroot 限制 ===<br />
为了阻止用户离开家目录,可以设置 chroot 环境。要启用此功能,请在 {{ic|/etc/vsftpd.conf}} 中添加以下行:<br />
chroot_list_enable=YES<br />
chroot_list_file=/etc/vsftpd.chroot_list<br />
{{ic|chroot_list_file}} 定义了被 chroot 限制的用户列表。<br />
<br />
对于更严格的环境,请指定以下行:<br />
chroot_local_user=YES<br />
这将默认为所有用户启用 chroot 环境。 在这种情况下,{{ic|chroot_list_file}} 定义了'''不受''' chroot 限制的用户列表。<br />
<br />
=== 限制用户登录 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加以下两行来阻止特定用户登录FTP服务器:<br />
userlist_enable=YES<br />
userlist_file=/etc/vsftpd.user_list<br />
{{ic|userlist_file}} 文件列出'''不允许'''登录的用户。<br />
<br />
如果您只想允许特定的用户登录,请添加以下行:<br />
userlist_deny=NO<br />
此时 {{ic|userlist_file}} 文件指定'''允许'''登录的用户。<br />
<br />
=== 限制连接数 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加如下信息来限制本地用户的数据传输速率:<br />
local_max_rate=1000000 # 最大数据传输速率(单位: Bytes/秒)<br />
max_clients=50 # 可以同时连接的最大客户端数<br />
max_per_ip=2 # 每个 IP 允许的最大连接数<br />
<br />
=== 使用 xinetd ===<br />
Xinetd提供增强的监控和控制连接功能。对于基本的可以工作的 vsftpd-server 是不必要的<br />
<br />
安装 vsftpd 将会添加必要的服务文件 {{ic|/etc/xinetd.d/vsftpd}}, 默认情况下,服务被禁用。<br />
<br />
启用ftp服务:<br />
<pre><br />
service ftp<br />
{<br />
socket_type = stream<br />
wait = no<br />
user = root<br />
server = /usr/sbin/vsftpd<br />
log_on_success += HOST DURATION<br />
log_on_failure += HOST<br />
disable = no<br />
}<br />
</pre><br />
<br />
如果您将vsftpd守护程序设置为以独立模式运行,而不是启动 vsftpd 守护程序和 [[enable]] {{ic | xinetd.service}},请在 {{ic|/etc/vsftpd.conf}} 中进行以下更改:<br />
listen=NO<br />
否则连接将失败:<br />
500 OOPS: could not bind listening IPv4 socket<br />
<br />
=== 使用 SSL/TLS 来保护 FTP ===<br />
首先,您需要一个 ''X.509 SSL/TLS'' 证书才能使用TLS。如果您没有,可以轻松生成如下的自签名证书:<br />
<br />
# cd /etc/ssl/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout vsftpd.pem -out vsftpd.pem<br />
# chmod 600 vsftpd.pem<br />
<br />
你会被问到关于你公司的问题,等等。由于你的证书不是一个可信任的,所填的内容并不重要,它只会被用于加密。要使用可信证书,您可以从 [[Let's Encrypt]] 这样的证书颁发机构获得证书。<br />
<br />
然后,编辑配置文件:<br />
{{hc|/etc/vsftpd.conf|2=ssl_enable=YES<br />
<br />
# 选择你想要的<br />
# 如果你接受匿名连接你可能要启用这个<br />
# allow_anon_ssl=NO<br />
<br />
# 默认情况下所有非匿名登录被迫使用 SSL 发送和接收密码和数据,设置为 NO,以允许不安全的连接<br />
force_local_logins_ssl=NO<br />
force_local_data_ssl=NO<br />
<br />
# 选择你想要的<br />
force_local_logins_ssl=YES<br />
<br />
# 如果启用SSL,则至少应启用 TLS v1<br />
ssl_tlsv1=YES<br />
# 这些选项将允许或阻止 SSL v2 和 v3 协议连接。 TLS v1连接是首选。<br />
ssl_sslv2=NO<br />
ssl_sslv3=YES<br />
# 给出您的 *.pem 文件的正确路径<br />
rsa_cert_file=/etc/ssl/certs/vsftpd.pem<br />
# .pem 文件也包含私钥<br />
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem<br />
}}<br />
<br />
=== 在被动模式下解析主机名 ===<br />
要覆盖 vsftpd 在被动模式下通过服务器的主机名发布的IP地址,并在启动时解析DNS,在 {{ic|/etc/vsftpd.conf}} 中增加以下两行:<br />
pasv_addr_resolve=YES<br />
pasv_address=''yourdomain.org''<br />
<br />
{{注意|<br />
* 对于动态DNS,定期更新 ''pasv_address'' 并重新启动服务器是不必要的,因为它有时可以被读取。<br />
* 您可能无法通过 LAN 以被动模式连接,在这种情况下,请尝试使用主动模式而不是LAN客户端。<br />
}}<br />
<br />
=== 端口配置 ===<br />
可能需要调整默认FTP侦听端口和被动模式数据端口:<br />
<br />
* 对于暴露于 Web 的 FTP 服务器,为了减少服务器受到攻击的可能性,可以将侦听端口改为除标准端口 21 以外的端口。<br />
* 要限制被动模式将打开的端口,可以提供一个范围。<br />
这些端口配置更改可以使用以下几行完成:<br />
{{hc|/etc/vsftpd.conf|2=<br />
listen_port=2211<br />
pasv_min_port=5000<br />
pasv_max_port=5003<br />
}}<br />
<br />
=== 配置 iptables ===<br />
通常,运行FTP守护进程的服务器受 [[Iptables (简体中文)]] 防火墙的保护。要允许访问FTP服务器,需要打开相应的端口,如:<br />
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT<br />
本文不会提供有关如何设置iptables的任何说明,但这里是一个例子:[[Simple stateful firewall (简体中文)]]。<br />
<br />
有一些内核模块需要在这里引用的 iptables 正确的处理 FTP 连接。 其中特别是 ''nf_conntrack_ftp''。这是需要的,因为FTP使用给定的 ''listen_port''(默认为21) 仅用于命令; 所有的数据传输都是通过不同的端口完成的。 这些端口由FTP守护程序为每个会话随机选择(也取决于是使用主动还是被动模式)。要告诉 iptables 应该接受端口上的数据包,需要 ''nf_conntrack_ftp''。要在启动时自动加载,请在 {{ic|/etc/modules-load.d}} 中创建新文件,例如:<br />
# echo nf_conntrack_ftp > /etc/modules-load.d/nf_conntrack_ftp.conf<br />
<br />
如果内核 >= 4.7,您需要通过 ''sysctl'' 设置 ''net.netfilter.nf_conntrack_helper = 1'',如:<br />
# echo net.netfilter.nf_conntrack_helper=1 > /etc/sysctl.d/70-conntrack.conf<br />
或使用<br />
# iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp<br />
<br />
== 小技巧 ==<br />
=== 虚拟用户的PAM认证 ===<br />
由于 [[PAM (简体中文)]] 不再提供 {{ic|pam_userdb.so}} 另一个简单的方法是使用 {{AUR|libpam_pwdfile}}。对于具有许多用户的环境,另一个选项可能是 {{AUR|pam_mysql}} {{Broken package link|{{aur-mirror|pam_mysql}}}}。但是,本节仅限于解释如何通过 {{ic|pam_pwdfile.so}} 配置chroot环境和身份验证。<br />
<br />
在此示例中,我们创建目录 {{ic|vsftpd}}:<br />
# mkdir /etc/vsftpd<br />
<br />
创建和存储用户名和密码的一个选择是使用 Apache 的生成器 htpasswd:<br />
# htpasswd -c /etc/vsftpd/.passwd<br />
上述命令的一个问题是 vsftpd 可能无法读取生成的 MD5 散列密码。如果使用 -d 开关运行相同的命令,则使用 crypt() 加密,vsftpd 的密码变得可读,但其缺点是安全性较低,密码限制为8个字符。 Openssl 可用于使用算法1生成基于 MD5 的 BSD 密码:<br />
# openssl passwd -1<br />
<br />
无论那个解决方案 {{ic|/etc/vsftpd/.passwd}} 应该如下所示:<br />
username1:hashed_password1<br />
username2:hashed_password2<br />
...<br />
<br />
接下来,您需要使用 {{ic|pam_pwdfile.so}} 和生成的 {{ic|/etc/vsftpd/.passwd}} 文件创建PAM服务。在本例中,我们为 ''vsftpd'' 创建了一个PAM策略,其中包含以下内容:<br />
{{hc|/etc/pam.d/vsftpd|auth required pam_pwdfile.so pwdfile /etc/vsftpd/.passwd<br />
account required pam_permit.so}}<br />
<br />
现在是为虚拟用户创建一个 home 的时候了。在示例中,决定用 {{ic|/srv/ftp}} 为虚拟用户托管数据,这也反映了Arch的默认目录结构。首先创建 virtual 用户并使 {{ic|/srv/ftp}} 成为它的 home:<br />
# useradd -d /srv/ftp virtual<br />
让 virtual 成为所有者<br />
# chown virtual:virtual /srv/ftp<br />
<br />
一个基本的没有私人文件夹配置的 /etc/vsftpd,默认的虚拟用户的 home 文件夹:<br />
# 指向正确的PAM服务文件<br />
pam_service_name=vsftpd<br />
write_enable=YES<br />
hide_ids=YES<br />
listen=YES<br />
connect_from_port_20=YES<br />
anonymous_enable=NO<br />
local_enable=YES<br />
dirmessage_enable=YES<br />
xferlog_enable=YES<br />
chroot_local_user=YES<br />
guest_enable=YES<br />
guest_username=virtual<br />
virtual_use_local_privs=YES<br />
<br />
您自己的设置可能不需要一些参数。如果您希望chroot环境可写,您将需要将以下内容添加到配置文件中:<br />
allow_writeable_chroot = YES<br />
否则 vsftpd 的默认安全设置会抱怨,如果它检测到chroot是可写的。<br />
<br />
[[Start]] {{ic|vsftpd.service}}。<br />
<br />
您现在应该可以使用存储在 {{ic|/etc/vsftpd/.passwd}} 中的任何用户和密码从FTP客户端登录。<br />
<br />
==== 为虚拟用户创建私有目录 ====<br />
首先创建用户文件夹<br />
# mkdir /srv/ftp/user1<br />
# mkdir /srv/ftp/user2<br />
# chown virtual:virtual /srv/ftp/user?/<br />
<br />
随后, 在{{ic|/etc/vsftpd.conf}}增加如下行:<br />
local_root=/srv/ftp/$USER<br />
user_sub_token=$USER<br />
<br />
== 问题解决 ==<br />
<br />
=== vsftpd: no connection (Error 500) with recent kernels (3.5 and newer) and .service ===<br />
将其添加到您的 {{ic|/etc/vsftpd.conf}}:<br />
seccomp_sandbox=NO<br />
<br />
=== vsftpd: refusing to run with writable root inside chroot() ===<br />
从 vsftpd 2.3.5 开始,用户被锁定的 chroot 目录不可写。这是为了防止安全漏洞。<br />
<br />
允许上传的安全方法是保持 chroot 启用,并配置您的 FTP 目录。<br />
<br />
local_root=/srv/ftp/user<br />
<br />
# mkdir -p /srv/ftp/user/upload<br />
#<br />
# chmod 550 /srv/ftp/user<br />
# chmod 750 /srv/ftp/user/upload<br />
<br />
如果你必须这么做:<br />
<br />
您可以将其放入您的 {{ic|/etc/vsftpd.conf}} 以解决此安全性增强(自vsftpd 3.0.0;从[http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/ Fixing 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()]):<br />
allow_writeable_chroot=YES<br />
或者:<br />
<br />
安装 {{AUR|vsftpd-ext}} {{Broken package link|{{aur-mirror|vsftpd-ext}}}} 并在 conf 文件中设置<br />
allow_writable_chroot=YES<br />
<br />
=== FileZilla Client: GnuTLS error -8 -15 -110 when connecting via SSL ===<br />
vsftpd 尝试在 SSL 会话中显示纯文本错误消息。 为了进行调试,暂时禁用加密,您将看到正确的错误消息。[http://ramblings.linkerror.com/?p=45] [https://serverfault.com/questions/772494/vsftpd-list-causes-gnutls-error-15]<br />
<br />
=== vsftpd.service fails to run on boot ===<br />
如果您启用了 {{ic|vsftpd.service}},并且无法在启动时运行,请确保它已在服务文件中设置为在 {{ic|network.target}} 之后加载:<br />
<br />
{{hc|/usr/lib/systemd/system/vsftpd.service|2=<br />
[Unit]<br />
Description=vsftpd daemon<br />
After=network.target}}<br />
<br />
=== ipv6 only fails with: 500 OOPS: run two copies of vsftpd for IPv4 and IPv6 ===<br />
你很有可能已经注释了这一行<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
#listen=YES<br />
#<br />
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6<br />
# sockets, you must run two copies of vsftpd with two configuration files.<br />
# Make sure, that one of the listen options is commented !!<br />
listen_ipv6=YES<br />
<br />
而不是设置<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
listen=NO<br />
<br />
== 更多资源 ==<br />
* [http://vsftpd.beasts.org/ vsftpd official homepage]<br />
* [http://vsftpd.beasts.org/vsftpd_conf.html vsftpd.conf man page]</div>
745275633
https://wiki.archlinux.org/index.php?title=Very_Secure_FTP_Daemon_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=505321
Very Secure FTP Daemon (简体中文)
2017-12-31T05:25:04Z
<p>745275633: 505315</p>
<hr />
<div>[[Category:FTP servers]]<br />
[[cs:Very Secure FTP Daemon]]<br />
[[en:Very Secure FTP Daemon]]<br />
[[es:Very Secure FTP Daemon]]<br />
[[it:Very Secure FTP Daemon]]<br />
[[ja:Very Secure FTP Daemon]]<br />
[[ru:Very Secure FTP Daemon]]<br />
{{TranslationStatus (简体中文)|Very Secure FTP Daemon|2017-12-21|505315}}<br />
[https://security.appspot.com/vsftpd.html vsftpd] (Very Secure FTP Daemon) 是一个为UNIX类系统开发的轻量,稳定和安全的FTP服务器端.<br />
== 安装 ==<br />
[[安装]] {{pkg|vsftpd}} 然后 [[Systemd (简体中文)#使用单元|启动/启用]] {{ic|vsftpd.service}} 守护程序。<br />
<br />
使用 [[Wikipedia:xinetd|xinetd]] 监视和控制 vsftpd 连接,请参见 [[#使用 xinetd]]。<br />
<br />
== 配置 ==<br />
vsftpd 的大多数配置都可以通过编辑 {{ic|/etc/vsftpd.conf}} 文件实现。 该文件本身自带大量注释说明,所以这一章节只就一些重要的配置予以说明。 有关所有可用选项和文档,请参阅 vsftpd.conf(5) 或 [https://security.appspot.com/vsftpd/vsftpd_conf.html 在线查看] 手册页。默认情况下,由 {{ic|/srv/ftp}} 提供文件。<br />
<br />
允许的连接 {{ic|/etc/hosts.allow}}:<br />
# 允许所有连接<br />
vsftpd: ALL<br />
# IP地址范围<br />
vsftpd: 10.0.0.0/255.255.255.0<br />
<br />
=== 允许上传 ===<br />
需要将 {{ic|/etc/vsftpd.conf}} 中的 {{ic|write_enable}} 值设为YES,以便允许修改文件系统(如上传):<br />
write_enable=YES<br />
<br />
=== 本地用户登录 ===<br />
需要修改 {{ic|/etc/vsftpd.conf}} 中的如下值,以便允许 {{ic|/etc/passwd}} 中的用户登录:<br />
local_enable=YES<br />
<br />
=== 匿名用户登录 ===<br />
以下行控制匿名用户是否可以登录。默认情况下,匿名登录只能从 {{ic|/srv/ftp}} 下载:<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
...<br />
# 允许匿名FTP? (当心 - 默认情况下允许除非您将其注释)。<br />
anonymous_enable=YES<br />
...<br />
# 取消注释以允许匿名FTP用户上传文件。<br />
# 只有上述全局写入被激活,才会有效果。<br />
# 另外,你显然需要创建FTP用户有写权限的目录。<br />
# anon_upload_enable=YES<br />
#<br />
# 如果您希望匿名FTP用户能够创建新目录,请取消注释。<br />
# anon_mkdir_write_enable=YES<br />
...<br />
}}<br />
<br />
您也可以添加以下选项(详见 {{man|5|vsftpd.conf}}):<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
# 匿名登录不需要密码<br />
no_anon_password=YES<br />
<br />
# 匿名客户端的最大传输速率(以 Bytes/秒 为单位)<br />
anon_max_rate=30000<br />
<br />
# 用于匿名登录的目录<br />
anon_root=/example/directory/<br />
}}<br />
<br />
=== Chroot 限制 ===<br />
为了阻止用户离开家目录,可以设置 chroot 环境。要启用此功能,请在 {{ic|/etc/vsftpd.conf}} 中添加以下行:<br />
chroot_list_enable=YES<br />
chroot_list_file=/etc/vsftpd.chroot_list<br />
{{ic|chroot_list_file}} 定义了被 chroot 限制的用户列表。<br />
<br />
对于更严格的环境,请指定以下行:<br />
chroot_local_user=YES<br />
这将默认为所有用户启用 chroot 环境。 在这种情况下,{{ic|chroot_list_file}} 定义了'''不受''' chroot 限制的用户列表。<br />
<br />
=== 限制用户登录 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加以下两行来阻止特定用户登录FTP服务器:<br />
userlist_enable=YES<br />
userlist_file=/etc/vsftpd.user_list<br />
{{ic|userlist_file}} 文件列出'''不允许'''登录的用户。<br />
<br />
如果您只想允许特定的用户登录,请添加以下行:<br />
userlist_deny=NO<br />
此时 {{ic|userlist_file}} 文件指定'''允许'''登录的用户。<br />
<br />
=== 限制连接数 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加如下信息来限制本地用户的数据传输速率:<br />
local_max_rate=1000000 # 最大数据传输速率(单位: Bytes/秒)<br />
max_clients=50 # 可以同时连接的最大客户端数<br />
max_per_ip=2 # 每个 IP 允许的最大连接数<br />
<br />
=== 使用 xinetd ===<br />
Xinetd提供增强的监控和控制连接功能。对于基本的可以工作的 vsftpd-server 是不必要的<br />
<br />
安装 vsftpd 将会添加必要的服务文件 {{ic|/etc/xinetd.d/vsftpd}}, 默认情况下,服务被禁用。<br />
<br />
启用ftp服务:<br />
<pre><br />
service ftp<br />
{<br />
socket_type = stream<br />
wait = no<br />
user = root<br />
server = /usr/sbin/vsftpd<br />
log_on_success += HOST DURATION<br />
log_on_failure += HOST<br />
disable = no<br />
}<br />
</pre><br />
<br />
如果您将vsftpd守护程序设置为以独立模式运行,而不是启动 vsftpd 守护程序和 [[enable]] {{ic | xinetd.service}},请在 {{ic|/etc/vsftpd.conf}} 中进行以下更改:<br />
listen=NO<br />
否则连接将失败:<br />
500 OOPS: could not bind listening IPv4 socket<br />
<br />
=== 使用 SSL/TLS 来保护 FTP ===<br />
首先,您需要一个 ''X.509 SSL/TLS'' 证书才能使用TLS。如果您没有,可以轻松生成如下的自签名证书:<br />
<br />
# cd /etc/ssl/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout vsftpd.pem -out vsftpd.pem<br />
# chmod 600 vsftpd.pem<br />
<br />
你会被问到关于你公司的问题,等等。由于你的证书不是一个可信任的,所填的内容并不重要,它只会被用于加密。要使用可信证书,您可以从 [[Let's Encrypt]] 这样的证书颁发机构获得证书。<br />
<br />
然后,编辑配置文件:<br />
{{hc|/etc/vsftpd.conf|2=ssl_enable=YES<br />
<br />
# 选择你想要的<br />
# 如果你接受匿名连接你可能要启用这个<br />
# allow_anon_ssl=NO<br />
<br />
# 默认情况下所有非匿名登录被迫使用 SSL 发送和接收密码和数据,设置为 NO,以允许不安全的连接<br />
force_local_logins_ssl=NO<br />
force_local_data_ssl=NO<br />
<br />
# 选择你想要的<br />
force_local_logins_ssl=YES<br />
<br />
# 如果启用SSL,则至少应启用 TLS v1<br />
ssl_tlsv1=YES<br />
# 这些选项将允许或阻止 SSL v2 和 v3 协议连接。 TLS v1连接是首选。<br />
ssl_sslv2=NO<br />
ssl_sslv3=YES<br />
# 给出您的 *.pem 文件的正确路径<br />
rsa_cert_file=/etc/ssl/certs/vsftpd.pem<br />
# .pem 文件也包含私钥<br />
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem<br />
}}<br />
<br />
=== 在被动模式下解析主机名 ===<br />
要覆盖 vsftpd 在被动模式下通过服务器的主机名发布的IP地址,并在启动时解析DNS,在 {{ic|/etc/vsftpd.conf}} 中增加以下两行:<br />
pasv_addr_resolve=YES<br />
pasv_address=''yourdomain.org''<br />
<br />
{{注意|<br />
* 对于动态DNS,定期更新 ''pasv_address'' 并重新启动服务器是不必要的,因为它有时可以被读取。<br />
* 您可能无法通过 LAN 以被动模式连接,在这种情况下,请尝试使用主动模式而不是LAN客户端。<br />
}}<br />
<br />
=== 端口配置 ===<br />
可能需要调整默认FTP侦听端口和被动模式数据端口:<br />
<br />
* 对于暴露于 Web 的 FTP 服务器,为了减少服务器受到攻击的可能性,可以将侦听端口改为除标准端口 21 以外的端口。<br />
* 要限制被动模式将打开的端口,可以提供一个范围。<br />
这些端口配置更改可以使用以下几行完成:<br />
{{hc|/etc/vsftpd.conf|2=<br />
listen_port=2211<br />
pasv_min_port=5000<br />
pasv_max_port=5003<br />
}}<br />
<br />
=== 配置 iptables ===<br />
通常,运行FTP守护进程的服务器受 [[Iptables (简体中文)]] 防火墙的保护。要允许访问FTP服务器,需要打开相应的端口,如:<br />
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT<br />
本文不会提供有关如何设置iptables的任何说明,但这里是一个例子:[[Simple stateful firewall (简体中文)]]。<br />
<br />
有一些内核模块需要在这里引用的 iptables 正确的处理 FTP 连接。 其中特别是 ''nf_conntrack_ftp''。这是需要的,因为FTP使用给定的 ''listen_port''(默认为21) 仅用于命令; 所有的数据传输都是通过不同的端口完成的。 这些端口由FTP守护程序为每个会话随机选择(也取决于是使用主动还是被动模式)。要告诉 iptables 应该接受端口上的数据包,需要 ''nf_conntrack_ftp''。要在启动时自动加载,请在 {{ic|/etc/modules-load.d}} 中创建新文件,例如:<br />
# echo nf_conntrack_ftp > /etc/modules-load.d/nf_conntrack_ftp.conf<br />
<br />
如果内核 >= 4.7,您需要通过 ''sysctl'' 设置 ''net.netfilter.nf_conntrack_helper = 1'',如:<br />
# echo net.netfilter.nf_conntrack_helper=1 > /etc/sysctl.d/70-conntrack.conf<br />
或使用<br />
# iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp<br />
<br />
== 小技巧 ==<br />
=== 虚拟用户的PAM认证 ===<br />
由于 [[PAM (简体中文)]] 不再提供 {{ic|pam_userdb.so}} 另一个简单的方法是使用 {{AUR|libpam_pwdfile}}。对于具有许多用户的环境,另一个选项可能是 {{AUR|pam_mysql}} {{Broken package link|{{aur-mirror|pam_mysql}}}}。但是,本节仅限于解释如何通过 {{ic|pam_pwdfile.so}} 配置chroot环境和身份验证。<br />
<br />
在此示例中,我们创建目录 {{ic|vsftpd}}:<br />
# mkdir /etc/vsftpd<br />
<br />
创建和存储用户名和密码的一个选择是使用 Apache 的生成器 htpasswd:<br />
# htpasswd -c /etc/vsftpd/.passwd<br />
上述命令的一个问题是 vsftpd 可能无法读取生成的 MD5 散列密码。如果使用 -d 开关运行相同的命令,则使用 crypt() 加密,vsftpd 的密码变得可读,但其缺点是安全性较低,密码限制为8个字符。 Openssl 可用于使用算法1生成基于 MD5 的 BSD 密码:<br />
# openssl passwd -1<br />
<br />
无论那个解决方案 {{ic|/etc/vsftpd/.passwd}} 应该如下所示:<br />
username1:hashed_password1<br />
username2:hashed_password2<br />
...<br />
<br />
接下来,您需要使用 {{ic|pam_pwdfile.so}} 和生成的 {{ic|/etc/vsftpd/.passwd}} 文件创建PAM服务。在本例中,我们为 ''vsftpd'' 创建了一个PAM策略,其中包含以下内容:<br />
{{hc|/etc/pam.d/vsftpd|auth required pam_pwdfile.so pwdfile /etc/vsftpd/.passwd<br />
account required pam_permit.so}}<br />
<br />
现在是为虚拟用户创建一个 home 的时候了。在示例中,决定用 {{ic|/srv/ftp}} 为虚拟用户托管数据,这也反映了Arch的默认目录结构。首先创建 virtual 用户并使 {{ic|/srv/ftp}} 成为它的 home:<br />
# useradd -d /srv/ftp virtual<br />
让 virtual 成为所有者<br />
# chown virtual:virtual /srv/ftp<br />
<br />
一个基本的没有私人文件夹配置的 /etc/vsftpd,默认的虚拟用户的 home 文件夹:<br />
# 指向正确的PAM服务文件<br />
pam_service_name=vsftpd<br />
write_enable=YES<br />
hide_ids=YES<br />
listen=YES<br />
connect_from_port_20=YES<br />
anonymous_enable=NO<br />
local_enable=YES<br />
dirmessage_enable=YES<br />
xferlog_enable=YES<br />
chroot_local_user=YES<br />
guest_enable=YES<br />
guest_username=virtual<br />
virtual_use_local_privs=YES<br />
<br />
您自己的设置可能不需要一些参数。如果您希望chroot环境可写,您将需要将以下内容添加到配置文件中:<br />
allow_writeable_chroot = YES<br />
否则 vsftpd 的默认安全设置会抱怨,如果它检测到chroot是可写的。<br />
<br />
[[Start]] {{ic|vsftpd.service}}。<br />
<br />
您现在应该可以使用存储在 {{ic|/etc/vsftpd/.passwd}} 中的任何用户和密码从FTP客户端登录。<br />
<br />
==== 为虚拟用户创建私有目录 ====<br />
首先创建用户文件夹<br />
# mkdir /srv/ftp/user1<br />
# mkdir /srv/ftp/user2<br />
# chown virtual:virtual /srv/ftp/user?/<br />
<br />
随后, 在{{ic|/etc/vsftpd.conf}}增加如下行:<br />
local_root=/srv/ftp/$USER<br />
user_sub_token=$USER<br />
<br />
== 问题解决 ==<br />
<br />
=== vsftpd: no connection (Error 500) with recent kernels (3.5 and newer) and .service ===<br />
将其添加到您的 {{ic|/etc/vsftpd.conf}}:<br />
seccomp_sandbox=NO<br />
<br />
=== vsftpd: refusing to run with writable root inside chroot() ===<br />
从 vsftpd 2.3.5 开始,用户被锁定的 chroot 目录不可写。这是为了防止安全漏洞。<br />
<br />
允许上传的安全方法是保持 chroot 启用,并配置您的 FTP 目录。<br />
<br />
local_root=/srv/ftp/user<br />
<br />
# mkdir -p /srv/ftp/user/upload<br />
#<br />
# chmod 550 /srv/ftp/user<br />
# chmod 750 /srv/ftp/user/upload<br />
<br />
如果你必须这么做:<br />
<br />
您可以将其放入您的 {{ic|/etc/vsftpd.conf}} 以解决此安全性增强(自vsftpd 3.0.0;从[http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/ Fixing 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()]):<br />
allow_writeable_chroot=YES<br />
或者:<br />
<br />
安装 {{AUR|vsftpd-ext}} {{Broken package link|{{aur-mirror|vsftpd-ext}}}} 并在 conf 文件中设置<br />
allow_writable_chroot=YES<br />
<br />
=== FileZilla Client: GnuTLS error -8 -15 -110 when connecting via SSL ===<br />
vsftpd 尝试在 SSL 会话中显示纯文本错误消息。 为了进行调试,暂时禁用加密,您将看到正确的错误消息。[http://ramblings.linkerror.com/?p=45] [https://serverfault.com/questions/772494/vsftpd-list-causes-gnutls-error-15]<br />
<br />
=== vsftpd.service fails to run on boot ===<br />
如果您启用了 {{ic|vsftpd.service}},并且无法在启动时运行,请确保它已在服务文件中设置为在 {{ic|network.target}} 之后加载:<br />
<br />
{{hc|/usr/lib/systemd/system/vsftpd.service|2=<br />
[Unit]<br />
Description=vsftpd daemon<br />
After=network.target}}<br />
<br />
=== ipv6 only fails with: 500 OOPS: run two copies of vsftpd for IPv4 and IPv6 ===<br />
你很有可能已经注释了这一行<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
#listen=YES<br />
#<br />
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6<br />
# sockets, you must run two copies of vsftpd with two configuration files.<br />
# Make sure, that one of the listen options is commented !!<br />
listen_ipv6=YES<br />
<br />
而不是设置<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
listen=NO<br />
<br />
== 更多资源 ==<br />
* [http://vsftpd.beasts.org/ vsftpd official homepage]<br />
* [http://vsftpd.beasts.org/vsftpd_conf.html vsftpd.conf man page]</div>
745275633
https://wiki.archlinux.org/index.php?title=Very_Secure_FTP_Daemon_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=503521
Very Secure FTP Daemon (简体中文)
2017-12-21T12:21:05Z
<p>745275633: update translate date</p>
<hr />
<div>[[Category:File Transfer Protocol (简体中文)]]<br />
[[cs:Very Secure FTP Daemon]]<br />
[[en:Very Secure FTP Daemon]]<br />
[[es:Very Secure FTP Daemon]]<br />
[[it:Very Secure FTP Daemon]]<br />
[[ja:Very Secure FTP Daemon]]<br />
[[ru:Very Secure FTP Daemon]]<br />
{{TranslationStatus (简体中文)|Very Secure FTP Daemon|2017-12-21|503426}}<br />
[https://security.appspot.com/vsftpd.html vsftpd] (Very Secure FTP Daemon) 是一个为UNIX类系统开发的轻量,稳定和安全的FTP服务器端.<br />
== 安装 ==<br />
[[安装]] {{pkg|vsftpd}} 然后 [[Systemd (简体中文)#使用单元|启动/启用]] {{ic|vsftpd.service}} 守护程序。<br />
<br />
使用 [[Wikipedia:xinetd|xinetd]] 监视和控制 vsftpd 连接,请参见 [[#使用 xinetd]]。<br />
<br />
== 配置 ==<br />
vsftpd 的大多数配置都可以通过编辑 {{ic|/etc/vsftpd.conf}} 文件实现。 该文件本身自带大量注释说明,所以这一章节只就一些重要的配置予以说明。 有关所有可用选项和文档,请参阅 vsftpd.conf(5) 或 [https://security.appspot.com/vsftpd/vsftpd_conf.html 在线查看] 手册页。默认情况下,由 {{ic|/srv/ftp}} 提供文件。<br />
<br />
允许的连接 {{ic|/etc/hosts.allow}}:<br />
# 允许所有连接<br />
vsftpd: ALL<br />
# IP地址范围<br />
vsftpd: 10.0.0.0/255.255.255.0<br />
<br />
=== 允许上传 ===<br />
需要将 {{ic|/etc/vsftpd.conf}} 中的 {{ic|write_enable}} 值设为YES,以便允许修改文件系统(如上传):<br />
write_enable=YES<br />
<br />
=== 本地用户登录 ===<br />
需要修改 {{ic|/etc/vsftpd.conf}} 中的如下值,以便允许 {{ic|/etc/passwd}} 中的用户登录:<br />
local_enable=YES<br />
<br />
=== 匿名用户登录 ===<br />
以下行控制匿名用户是否可以登录。默认情况下,匿名登录只能从 {{ic|/srv/ftp}} 下载:<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
...<br />
# 允许匿名FTP? (当心 - 默认情况下允许除非您将其注释)。<br />
anonymous_enable=YES<br />
...<br />
# 取消注释以允许匿名FTP用户上传文件。<br />
# 只有上述全局写入被激活,才会有效果。<br />
# 另外,你显然需要创建FTP用户有写权限的目录。<br />
# anon_upload_enable=YES<br />
#<br />
# 如果您希望匿名FTP用户能够创建新目录,请取消注释。<br />
# anon_mkdir_write_enable=YES<br />
...<br />
}}<br />
<br />
您也可以添加以下选项(详见 {{man|5|vsftpd.conf}}):<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
# 匿名登录不需要密码<br />
no_anon_password=YES<br />
<br />
# 匿名客户端的最大传输速率(以 Bytes/秒 为单位)<br />
anon_max_rate=30000<br />
<br />
# 用于匿名登录的目录<br />
anon_root=/example/directory/<br />
}}<br />
<br />
=== Chroot 限制 ===<br />
为了阻止用户离开家目录,可以设置 chroot 环境。要启用此功能,请在 {{ic|/etc/vsftpd.conf}} 中添加以下行:<br />
chroot_list_enable=YES<br />
chroot_list_file=/etc/vsftpd.chroot_list<br />
{{ic|chroot_list_file}} 定义了被 chroot 限制的用户列表。<br />
<br />
对于更严格的环境,请指定以下行:<br />
chroot_local_user=YES<br />
这将默认为所有用户启用 chroot 环境。 在这种情况下,{{ic|chroot_list_file}} 定义了'''不受''' chroot 限制的用户列表。<br />
<br />
=== 限制用户登录 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加以下两行来阻止特定用户登录FTP服务器:<br />
userlist_enable=YES<br />
userlist_file=/etc/vsftpd.user_list<br />
{{ic|userlist_file}} 文件列出'''不允许'''登录的用户。<br />
<br />
如果您只想允许特定的用户登录,请添加以下行:<br />
userlist_deny=NO<br />
此时 {{ic|userlist_file}} 文件指定'''允许'''登录的用户。<br />
<br />
=== 限制连接数 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加如下信息来限制本地用户的数据传输速率:<br />
local_max_rate=1000000 # 最大数据传输速率(单位: Bytes/秒)<br />
max_clients=50 # 可以同时连接的最大客户端数<br />
max_per_ip=2 # 每个 IP 允许的最大连接数<br />
<br />
=== 使用 xinetd ===<br />
Xinetd提供增强的监控和控制连接功能。对于基本的可以工作的 vsftpd-server 是不必要的<br />
<br />
安装 vsftpd 将会添加必要的服务文件 {{ic|/etc/xinetd.d/vsftpd}}, 默认情况下,服务被禁用。<br />
<br />
启用ftp服务:<br />
<pre><br />
service ftp<br />
{<br />
socket_type = stream<br />
wait = no<br />
user = root<br />
server = /usr/sbin/vsftpd<br />
log_on_success += HOST DURATION<br />
log_on_failure += HOST<br />
disable = no<br />
}<br />
</pre><br />
<br />
如果您将vsftpd守护程序设置为以独立模式运行,而不是启动 vsftpd 守护程序和 [[enable]] {{ic | xinetd.service}},请在 {{ic|/etc/vsftpd.conf}} 中进行以下更改:<br />
listen=NO<br />
否则连接将失败:<br />
500 OOPS: could not bind listening IPv4 socket<br />
<br />
=== 使用 SSL/TLS 来保护 FTP ===<br />
首先,您需要一个 ''X.509 SSL/TLS'' 证书才能使用TLS。如果您没有,可以轻松生成如下的自签名证书:<br />
<br />
# cd /etc/ssl/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout vsftpd.pem -out vsftpd.pem<br />
# chmod 600 vsftpd.pem<br />
<br />
你会被问到关于你公司的问题,等等。由于你的证书不是一个可信任的,所填的内容并不重要,它只会被用于加密。要使用可信证书,您可以从 [[Let's Encrypt]] 这样的证书颁发机构获得证书。<br />
<br />
然后,编辑配置文件:<br />
{{hc|/etc/vsftpd.conf|2=ssl_enable=YES<br />
<br />
# 选择你想要的<br />
# 如果你接受匿名连接你可能要启用这个<br />
# allow_anon_ssl=NO<br />
<br />
# 默认情况下所有非匿名登录被迫使用 SSL 发送和接收密码和数据,设置为 NO,以允许不安全的连接<br />
force_local_logins_ssl=NO<br />
force_local_data_ssl=NO<br />
<br />
# 选择你想要的<br />
force_local_logins_ssl=YES<br />
<br />
# 如果启用SSL,则至少应启用 TLS v1<br />
ssl_tlsv1=YES<br />
# 这些选项将允许或阻止 SSL v2 和 v3 协议连接。 TLS v1连接是首选。<br />
ssl_sslv2=NO<br />
ssl_sslv3=YES<br />
# 给出您的 *.pem 文件的正确路径<br />
rsa_cert_file=/etc/ssl/certs/vsftpd.pem<br />
# .pem 文件也包含私钥<br />
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem<br />
}}<br />
<br />
=== 在被动模式下解析主机名 ===<br />
要覆盖 vsftpd 在被动模式下通过服务器的主机名发布的IP地址,并在启动时解析DNS,在 {{ic|/etc/vsftpd.conf}} 中增加以下两行:<br />
pasv_addr_resolve=YES<br />
pasv_address=''yourdomain.org''<br />
<br />
{{注意|<br />
* 对于动态DNS,定期更新 ''pasv_address'' 并重新启动服务器是不必要的,因为它有时可以被读取。<br />
* 您可能无法通过 LAN 以被动模式连接,在这种情况下,请尝试使用主动模式而不是LAN客户端。<br />
}}<br />
<br />
=== 端口配置 ===<br />
可能需要调整默认FTP侦听端口和被动模式数据端口:<br />
<br />
* 对于暴露于 Web 的 FTP 服务器,为了减少服务器受到攻击的可能性,可以将侦听端口改为除标准端口 21 以外的端口。<br />
* 要限制被动模式将打开的端口,可以提供一个范围。<br />
这些端口配置更改可以使用以下几行完成:<br />
{{hc|/etc/vsftpd.conf|2=<br />
listen_port=2211<br />
pasv_min_port=5000<br />
pasv_max_port=5003<br />
}}<br />
<br />
=== 配置 iptables ===<br />
通常,运行FTP守护进程的服务器受 [[Iptables (简体中文)]] 防火墙的保护。要允许访问FTP服务器,需要打开相应的端口,如:<br />
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT<br />
本文不会提供有关如何设置iptables的任何说明,但这里是一个例子:[[Simple stateful firewall (简体中文)]]。<br />
<br />
有一些内核模块需要在这里引用的 iptables 正确的处理 FTP 连接。 其中特别是 ''nf_conntrack_ftp''。这是需要的,因为FTP使用给定的 ''listen_port''(默认为21) 仅用于命令; 所有的数据传输都是通过不同的端口完成的。 这些端口由FTP守护程序为每个会话随机选择(也取决于是使用主动还是被动模式)。要告诉 iptables 应该接受端口上的数据包,需要 ''nf_conntrack_ftp''。要在启动时自动加载,请在 {{ic|/etc/modules-load.d}} 中创建新文件,例如:<br />
# echo nf_conntrack_ftp > /etc/modules-load.d/nf_conntrack_ftp.conf<br />
<br />
如果内核 >= 4.7,您需要通过 ''sysctl'' 设置 ''net.netfilter.nf_conntrack_helper = 1'',如:<br />
# echo net.netfilter.nf_conntrack_helper=1 > /etc/sysctl.d/70-conntrack.conf<br />
或使用<br />
# iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp<br />
<br />
== 小技巧 ==<br />
=== 虚拟用户的PAM认证 ===<br />
由于 [[PAM (简体中文)]] 不再提供 {{ic|pam_userdb.so}} 另一个简单的方法是使用 {{AUR|libpam_pwdfile}}。对于具有许多用户的环境,另一个选项可能是 {{AUR|pam_mysql}} {{Broken package link|{{aur-mirror|pam_mysql}}}}。但是,本节仅限于解释如何通过 {{ic|pam_pwdfile.so}} 配置chroot环境和身份验证。<br />
<br />
在此示例中,我们创建目录 {{ic|vsftpd}}:<br />
# mkdir /etc/vsftpd<br />
<br />
创建和存储用户名和密码的一个选择是使用 Apache 的生成器 htpasswd:<br />
# htpasswd -c /etc/vsftpd/.passwd<br />
上述命令的一个问题是 vsftpd 可能无法读取生成的 MD5 散列密码。如果使用 -d 开关运行相同的命令,则使用 crypt() 加密,vsftpd 的密码变得可读,但其缺点是安全性较低,密码限制为8个字符。 Openssl 可用于使用算法1生成基于 MD5 的 BSD 密码:<br />
# openssl passwd -1<br />
<br />
无论那个解决方案 {{ic|/etc/vsftpd/.passwd}} 应该如下所示:<br />
username1:hashed_password1<br />
username2:hashed_password2<br />
...<br />
<br />
接下来,您需要使用 {{ic|pam_pwdfile.so}} 和生成的 {{ic|/etc/vsftpd/.passwd}} 文件创建PAM服务。在本例中,我们为 ''vsftpd'' 创建了一个PAM策略,其中包含以下内容:<br />
{{hc|/etc/pam.d/vsftpd|auth required pam_pwdfile.so pwdfile /etc/vsftpd/.passwd<br />
account required pam_permit.so}}<br />
<br />
现在是为虚拟用户创建一个 home 的时候了。在示例中,决定用 {{ic|/srv/ftp}} 为虚拟用户托管数据,这也反映了Arch的默认目录结构。首先创建 virtual 用户并使 {{ic|/srv/ftp}} 成为它的 home:<br />
# useradd -d /srv/ftp virtual<br />
让 virtual 成为所有者<br />
# chown virtual:virtual /srv/ftp<br />
<br />
一个基本的没有私人文件夹配置的 /etc/vsftpd,默认的虚拟用户的 home 文件夹:<br />
# 指向正确的PAM服务文件<br />
pam_service_name=vsftpd<br />
write_enable=YES<br />
hide_ids=YES<br />
listen=YES<br />
connect_from_port_20=YES<br />
anonymous_enable=NO<br />
local_enable=YES<br />
dirmessage_enable=YES<br />
xferlog_enable=YES<br />
chroot_local_user=YES<br />
guest_enable=YES<br />
guest_username=virtual<br />
virtual_use_local_privs=YES<br />
<br />
您自己的设置可能不需要一些参数。如果您希望chroot环境可写,您将需要将以下内容添加到配置文件中:<br />
allow_writeable_chroot = YES<br />
否则 vsftpd 的默认安全设置会抱怨,如果它检测到chroot是可写的。<br />
<br />
[[Start]] {{ic|vsftpd.service}}。<br />
<br />
您现在应该可以使用存储在 {{ic|/etc/vsftpd/.passwd}} 中的任何用户和密码从FTP客户端登录。<br />
<br />
==== 为虚拟用户创建私有目录 ====<br />
首先创建用户文件夹<br />
# mkdir /srv/ftp/user1<br />
# mkdir /srv/ftp/user2<br />
# chown virtual:virtual /srv/ftp/user?/<br />
<br />
随后, 在{{ic|/etc/vsftpd.conf}}增加如下行:<br />
local_root=/srv/ftp/$USER<br />
user_sub_token=$USER<br />
<br />
== 问题解决 ==<br />
<br />
=== vsftpd: no connection (Error 500) with recent kernels (3.5 and newer) and .service ===<br />
将其添加到您的 {{ic|/etc/vsftpd.conf}}:<br />
seccomp_sandbox=NO<br />
<br />
=== vsftpd: refusing to run with writable root inside chroot() ===<br />
从 vsftpd 2.3.5 开始,用户被锁定的 chroot 目录不可写。这是为了防止安全漏洞。<br />
<br />
允许上传的安全方法是保持 chroot 启用,并配置您的 FTP 目录。<br />
<br />
local_root=/srv/ftp/user<br />
<br />
# mkdir -p /srv/ftp/user/upload<br />
#<br />
# chmod 550 /srv/ftp/user<br />
# chmod 750 /srv/ftp/user/upload<br />
<br />
如果你必须这么做:<br />
<br />
您可以将其放入您的 {{ic|/etc/vsftpd.conf}} 以解决此安全性增强(自vsftpd 3.0.0;从[http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/ Fixing 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()]):<br />
allow_writeable_chroot=YES<br />
或者:<br />
<br />
安装 {{AUR|vsftpd-ext}} {{Broken package link|{{aur-mirror|vsftpd-ext}}}} 并在 conf 文件中设置<br />
allow_writable_chroot=YES<br />
<br />
=== FileZilla Client: GnuTLS error -8 -15 -110 when connecting via SSL ===<br />
vsftpd 尝试在 SSL 会话中显示纯文本错误消息。 为了进行调试,暂时禁用加密,您将看到正确的错误消息。[http://ramblings.linkerror.com/?p=45] [https://serverfault.com/questions/772494/vsftpd-list-causes-gnutls-error-15]<br />
<br />
=== vsftpd.service fails to run on boot ===<br />
如果您启用了 {{ic|vsftpd.service}},并且无法在启动时运行,请确保它已在服务文件中设置为在 {{ic|network.target}} 之后加载:<br />
<br />
{{hc|/usr/lib/systemd/system/vsftpd.service|2=<br />
[Unit]<br />
Description=vsftpd daemon<br />
After=network.target}}<br />
<br />
=== ipv6 only fails with: 500 OOPS: run two copies of vsftpd for IPv4 and IPv6 ===<br />
你很有可能已经注释了这一行<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
#listen=YES<br />
#<br />
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6<br />
# sockets, you must run two copies of vsftpd with two configuration files.<br />
# Make sure, that one of the listen options is commented !!<br />
listen_ipv6=YES<br />
<br />
而不是设置<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
listen=NO<br />
<br />
== 更多资源 ==<br />
* [http://vsftpd.beasts.org/ vsftpd official homepage]<br />
* [http://vsftpd.beasts.org/vsftpd_conf.html vsftpd.conf man page]</div>
745275633
https://wiki.archlinux.org/index.php?title=Very_Secure_FTP_Daemon_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=503519
Very Secure FTP Daemon (简体中文)
2017-12-21T12:18:33Z
<p>745275633: 503426</p>
<hr />
<div>[[Category:File Transfer Protocol (简体中文)]]<br />
[[cs:Very Secure FTP Daemon]]<br />
[[en:Very Secure FTP Daemon]]<br />
[[es:Very Secure FTP Daemon]]<br />
[[it:Very Secure FTP Daemon]]<br />
[[ja:Very Secure FTP Daemon]]<br />
[[ru:Very Secure FTP Daemon]]<br />
{{TranslationStatus (简体中文)|Very Secure FTP Daemon|2017-12-16|503426}}<br />
[https://security.appspot.com/vsftpd.html vsftpd] (Very Secure FTP Daemon) 是一个为UNIX类系统开发的轻量,稳定和安全的FTP服务器端.<br />
== 安装 ==<br />
[[安装]] {{pkg|vsftpd}} 然后 [[Systemd (简体中文)#使用单元|启动/启用]] {{ic|vsftpd.service}} 守护程序。<br />
<br />
使用 [[Wikipedia:xinetd|xinetd]] 监视和控制 vsftpd 连接,请参见 [[#使用 xinetd]]。<br />
<br />
== 配置 ==<br />
vsftpd 的大多数配置都可以通过编辑 {{ic|/etc/vsftpd.conf}} 文件实现。 该文件本身自带大量注释说明,所以这一章节只就一些重要的配置予以说明。 有关所有可用选项和文档,请参阅 vsftpd.conf(5) 或 [https://security.appspot.com/vsftpd/vsftpd_conf.html 在线查看] 手册页。默认情况下,由 {{ic|/srv/ftp}} 提供文件。<br />
<br />
允许的连接 {{ic|/etc/hosts.allow}}:<br />
# 允许所有连接<br />
vsftpd: ALL<br />
# IP地址范围<br />
vsftpd: 10.0.0.0/255.255.255.0<br />
<br />
=== 允许上传 ===<br />
需要将 {{ic|/etc/vsftpd.conf}} 中的 {{ic|write_enable}} 值设为YES,以便允许修改文件系统(如上传):<br />
write_enable=YES<br />
<br />
=== 本地用户登录 ===<br />
需要修改 {{ic|/etc/vsftpd.conf}} 中的如下值,以便允许 {{ic|/etc/passwd}} 中的用户登录:<br />
local_enable=YES<br />
<br />
=== 匿名用户登录 ===<br />
以下行控制匿名用户是否可以登录。默认情况下,匿名登录只能从 {{ic|/srv/ftp}} 下载:<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
...<br />
# 允许匿名FTP? (当心 - 默认情况下允许除非您将其注释)。<br />
anonymous_enable=YES<br />
...<br />
# 取消注释以允许匿名FTP用户上传文件。<br />
# 只有上述全局写入被激活,才会有效果。<br />
# 另外,你显然需要创建FTP用户有写权限的目录。<br />
# anon_upload_enable=YES<br />
#<br />
# 如果您希望匿名FTP用户能够创建新目录,请取消注释。<br />
# anon_mkdir_write_enable=YES<br />
...<br />
}}<br />
<br />
您也可以添加以下选项(详见 {{man|5|vsftpd.conf}}):<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
# 匿名登录不需要密码<br />
no_anon_password=YES<br />
<br />
# 匿名客户端的最大传输速率(以 Bytes/秒 为单位)<br />
anon_max_rate=30000<br />
<br />
# 用于匿名登录的目录<br />
anon_root=/example/directory/<br />
}}<br />
<br />
=== Chroot 限制 ===<br />
为了阻止用户离开家目录,可以设置 chroot 环境。要启用此功能,请在 {{ic|/etc/vsftpd.conf}} 中添加以下行:<br />
chroot_list_enable=YES<br />
chroot_list_file=/etc/vsftpd.chroot_list<br />
{{ic|chroot_list_file}} 定义了被 chroot 限制的用户列表。<br />
<br />
对于更严格的环境,请指定以下行:<br />
chroot_local_user=YES<br />
这将默认为所有用户启用 chroot 环境。 在这种情况下,{{ic|chroot_list_file}} 定义了'''不受''' chroot 限制的用户列表。<br />
<br />
=== 限制用户登录 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加以下两行来阻止特定用户登录FTP服务器:<br />
userlist_enable=YES<br />
userlist_file=/etc/vsftpd.user_list<br />
{{ic|userlist_file}} 文件列出'''不允许'''登录的用户。<br />
<br />
如果您只想允许特定的用户登录,请添加以下行:<br />
userlist_deny=NO<br />
此时 {{ic|userlist_file}} 文件指定'''允许'''登录的用户。<br />
<br />
=== 限制连接数 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加如下信息来限制本地用户的数据传输速率:<br />
local_max_rate=1000000 # 最大数据传输速率(单位: Bytes/秒)<br />
max_clients=50 # 可以同时连接的最大客户端数<br />
max_per_ip=2 # 每个 IP 允许的最大连接数<br />
<br />
=== 使用 xinetd ===<br />
Xinetd提供增强的监控和控制连接功能。对于基本的可以工作的 vsftpd-server 是不必要的<br />
<br />
安装 vsftpd 将会添加必要的服务文件 {{ic|/etc/xinetd.d/vsftpd}}, 默认情况下,服务被禁用。<br />
<br />
启用ftp服务:<br />
<pre><br />
service ftp<br />
{<br />
socket_type = stream<br />
wait = no<br />
user = root<br />
server = /usr/sbin/vsftpd<br />
log_on_success += HOST DURATION<br />
log_on_failure += HOST<br />
disable = no<br />
}<br />
</pre><br />
<br />
如果您将vsftpd守护程序设置为以独立模式运行,而不是启动 vsftpd 守护程序和 [[enable]] {{ic | xinetd.service}},请在 {{ic|/etc/vsftpd.conf}} 中进行以下更改:<br />
listen=NO<br />
否则连接将失败:<br />
500 OOPS: could not bind listening IPv4 socket<br />
<br />
=== 使用 SSL/TLS 来保护 FTP ===<br />
首先,您需要一个 ''X.509 SSL/TLS'' 证书才能使用TLS。如果您没有,可以轻松生成如下的自签名证书:<br />
<br />
# cd /etc/ssl/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout vsftpd.pem -out vsftpd.pem<br />
# chmod 600 vsftpd.pem<br />
<br />
你会被问到关于你公司的问题,等等。由于你的证书不是一个可信任的,所填的内容并不重要,它只会被用于加密。要使用可信证书,您可以从 [[Let's Encrypt]] 这样的证书颁发机构获得证书。<br />
<br />
然后,编辑配置文件:<br />
{{hc|/etc/vsftpd.conf|2=ssl_enable=YES<br />
<br />
# 选择你想要的<br />
# 如果你接受匿名连接你可能要启用这个<br />
# allow_anon_ssl=NO<br />
<br />
# 默认情况下所有非匿名登录被迫使用 SSL 发送和接收密码和数据,设置为 NO,以允许不安全的连接<br />
force_local_logins_ssl=NO<br />
force_local_data_ssl=NO<br />
<br />
# 选择你想要的<br />
force_local_logins_ssl=YES<br />
<br />
# 如果启用SSL,则至少应启用 TLS v1<br />
ssl_tlsv1=YES<br />
# 这些选项将允许或阻止 SSL v2 和 v3 协议连接。 TLS v1连接是首选。<br />
ssl_sslv2=NO<br />
ssl_sslv3=YES<br />
# 给出您的 *.pem 文件的正确路径<br />
rsa_cert_file=/etc/ssl/certs/vsftpd.pem<br />
# .pem 文件也包含私钥<br />
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem<br />
}}<br />
<br />
=== 在被动模式下解析主机名 ===<br />
要覆盖 vsftpd 在被动模式下通过服务器的主机名发布的IP地址,并在启动时解析DNS,在 {{ic|/etc/vsftpd.conf}} 中增加以下两行:<br />
pasv_addr_resolve=YES<br />
pasv_address=''yourdomain.org''<br />
<br />
{{注意|<br />
* 对于动态DNS,定期更新 ''pasv_address'' 并重新启动服务器是不必要的,因为它有时可以被读取。<br />
* 您可能无法通过 LAN 以被动模式连接,在这种情况下,请尝试使用主动模式而不是LAN客户端。<br />
}}<br />
<br />
=== 端口配置 ===<br />
可能需要调整默认FTP侦听端口和被动模式数据端口:<br />
<br />
* 对于暴露于 Web 的 FTP 服务器,为了减少服务器受到攻击的可能性,可以将侦听端口改为除标准端口 21 以外的端口。<br />
* 要限制被动模式将打开的端口,可以提供一个范围。<br />
这些端口配置更改可以使用以下几行完成:<br />
{{hc|/etc/vsftpd.conf|2=<br />
listen_port=2211<br />
pasv_min_port=5000<br />
pasv_max_port=5003<br />
}}<br />
<br />
=== 配置 iptables ===<br />
通常,运行FTP守护进程的服务器受 [[Iptables (简体中文)]] 防火墙的保护。要允许访问FTP服务器,需要打开相应的端口,如:<br />
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT<br />
本文不会提供有关如何设置iptables的任何说明,但这里是一个例子:[[Simple stateful firewall (简体中文)]]。<br />
<br />
有一些内核模块需要在这里引用的 iptables 正确的处理 FTP 连接。 其中特别是 ''nf_conntrack_ftp''。这是需要的,因为FTP使用给定的 ''listen_port''(默认为21) 仅用于命令; 所有的数据传输都是通过不同的端口完成的。 这些端口由FTP守护程序为每个会话随机选择(也取决于是使用主动还是被动模式)。要告诉 iptables 应该接受端口上的数据包,需要 ''nf_conntrack_ftp''。要在启动时自动加载,请在 {{ic|/etc/modules-load.d}} 中创建新文件,例如:<br />
# echo nf_conntrack_ftp > /etc/modules-load.d/nf_conntrack_ftp.conf<br />
<br />
如果内核 >= 4.7,您需要通过 ''sysctl'' 设置 ''net.netfilter.nf_conntrack_helper = 1'',如:<br />
# echo net.netfilter.nf_conntrack_helper=1 > /etc/sysctl.d/70-conntrack.conf<br />
或使用<br />
# iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp<br />
<br />
== 小技巧 ==<br />
=== 虚拟用户的PAM认证 ===<br />
由于 [[PAM (简体中文)]] 不再提供 {{ic|pam_userdb.so}} 另一个简单的方法是使用 {{AUR|libpam_pwdfile}}。对于具有许多用户的环境,另一个选项可能是 {{AUR|pam_mysql}} {{Broken package link|{{aur-mirror|pam_mysql}}}}。但是,本节仅限于解释如何通过 {{ic|pam_pwdfile.so}} 配置chroot环境和身份验证。<br />
<br />
在此示例中,我们创建目录 {{ic|vsftpd}}:<br />
# mkdir /etc/vsftpd<br />
<br />
创建和存储用户名和密码的一个选择是使用 Apache 的生成器 htpasswd:<br />
# htpasswd -c /etc/vsftpd/.passwd<br />
上述命令的一个问题是 vsftpd 可能无法读取生成的 MD5 散列密码。如果使用 -d 开关运行相同的命令,则使用 crypt() 加密,vsftpd 的密码变得可读,但其缺点是安全性较低,密码限制为8个字符。 Openssl 可用于使用算法1生成基于 MD5 的 BSD 密码:<br />
# openssl passwd -1<br />
<br />
无论那个解决方案 {{ic|/etc/vsftpd/.passwd}} 应该如下所示:<br />
username1:hashed_password1<br />
username2:hashed_password2<br />
...<br />
<br />
接下来,您需要使用 {{ic|pam_pwdfile.so}} 和生成的 {{ic|/etc/vsftpd/.passwd}} 文件创建PAM服务。在本例中,我们为 ''vsftpd'' 创建了一个PAM策略,其中包含以下内容:<br />
{{hc|/etc/pam.d/vsftpd|auth required pam_pwdfile.so pwdfile /etc/vsftpd/.passwd<br />
account required pam_permit.so}}<br />
<br />
现在是为虚拟用户创建一个 home 的时候了。在示例中,决定用 {{ic|/srv/ftp}} 为虚拟用户托管数据,这也反映了Arch的默认目录结构。首先创建 virtual 用户并使 {{ic|/srv/ftp}} 成为它的 home:<br />
# useradd -d /srv/ftp virtual<br />
让 virtual 成为所有者<br />
# chown virtual:virtual /srv/ftp<br />
<br />
一个基本的没有私人文件夹配置的 /etc/vsftpd,默认的虚拟用户的 home 文件夹:<br />
# 指向正确的PAM服务文件<br />
pam_service_name=vsftpd<br />
write_enable=YES<br />
hide_ids=YES<br />
listen=YES<br />
connect_from_port_20=YES<br />
anonymous_enable=NO<br />
local_enable=YES<br />
dirmessage_enable=YES<br />
xferlog_enable=YES<br />
chroot_local_user=YES<br />
guest_enable=YES<br />
guest_username=virtual<br />
virtual_use_local_privs=YES<br />
<br />
您自己的设置可能不需要一些参数。如果您希望chroot环境可写,您将需要将以下内容添加到配置文件中:<br />
allow_writeable_chroot = YES<br />
否则 vsftpd 的默认安全设置会抱怨,如果它检测到chroot是可写的。<br />
<br />
[[Start]] {{ic|vsftpd.service}}。<br />
<br />
您现在应该可以使用存储在 {{ic|/etc/vsftpd/.passwd}} 中的任何用户和密码从FTP客户端登录。<br />
<br />
==== 为虚拟用户创建私有目录 ====<br />
首先创建用户文件夹<br />
# mkdir /srv/ftp/user1<br />
# mkdir /srv/ftp/user2<br />
# chown virtual:virtual /srv/ftp/user?/<br />
<br />
随后, 在{{ic|/etc/vsftpd.conf}}增加如下行:<br />
local_root=/srv/ftp/$USER<br />
user_sub_token=$USER<br />
<br />
== 问题解决 ==<br />
<br />
=== vsftpd: no connection (Error 500) with recent kernels (3.5 and newer) and .service ===<br />
将其添加到您的 {{ic|/etc/vsftpd.conf}}:<br />
seccomp_sandbox=NO<br />
<br />
=== vsftpd: refusing to run with writable root inside chroot() ===<br />
从 vsftpd 2.3.5 开始,用户被锁定的 chroot 目录不可写。这是为了防止安全漏洞。<br />
<br />
允许上传的安全方法是保持 chroot 启用,并配置您的 FTP 目录。<br />
<br />
local_root=/srv/ftp/user<br />
<br />
# mkdir -p /srv/ftp/user/upload<br />
#<br />
# chmod 550 /srv/ftp/user<br />
# chmod 750 /srv/ftp/user/upload<br />
<br />
如果你必须这么做:<br />
<br />
您可以将其放入您的 {{ic|/etc/vsftpd.conf}} 以解决此安全性增强(自vsftpd 3.0.0;从[http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/ Fixing 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()]):<br />
allow_writeable_chroot=YES<br />
或者:<br />
<br />
安装 {{AUR|vsftpd-ext}} {{Broken package link|{{aur-mirror|vsftpd-ext}}}} 并在 conf 文件中设置<br />
allow_writable_chroot=YES<br />
<br />
=== FileZilla Client: GnuTLS error -8 -15 -110 when connecting via SSL ===<br />
vsftpd 尝试在 SSL 会话中显示纯文本错误消息。 为了进行调试,暂时禁用加密,您将看到正确的错误消息。[http://ramblings.linkerror.com/?p=45] [https://serverfault.com/questions/772494/vsftpd-list-causes-gnutls-error-15]<br />
<br />
=== vsftpd.service fails to run on boot ===<br />
如果您启用了 {{ic|vsftpd.service}},并且无法在启动时运行,请确保它已在服务文件中设置为在 {{ic|network.target}} 之后加载:<br />
<br />
{{hc|/usr/lib/systemd/system/vsftpd.service|2=<br />
[Unit]<br />
Description=vsftpd daemon<br />
After=network.target}}<br />
<br />
=== ipv6 only fails with: 500 OOPS: run two copies of vsftpd for IPv4 and IPv6 ===<br />
你很有可能已经注释了这一行<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
#listen=YES<br />
#<br />
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6<br />
# sockets, you must run two copies of vsftpd with two configuration files.<br />
# Make sure, that one of the listen options is commented !!<br />
listen_ipv6=YES<br />
<br />
而不是设置<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
listen=NO<br />
<br />
== 更多资源 ==<br />
* [http://vsftpd.beasts.org/ vsftpd official homepage]<br />
* [http://vsftpd.beasts.org/vsftpd_conf.html vsftpd.conf man page]</div>
745275633
https://wiki.archlinux.org/index.php?title=Archiso_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=503076
Archiso (简体中文)
2017-12-18T11:23:23Z
<p>745275633: /* 自定义本地库 */ space</p>
<hr />
<div>[[Category:简体中文]]<br />
[[Category:Live Arch systems (简体中文)]]<br />
[[Category:Getting and installing Arch (简体中文)]]<br />
[[ar:Archiso]]<br />
[[el:Archiso]]<br />
[[en:Archiso]]<br />
[[es:Archiso]]<br />
[[fr:Archiso]]<br />
[[it:Archiso]]<br />
[[ja:Archiso]]<br />
[[nl:Archiso]]<br />
[[ru:Archiso]]<br />
[[sk:Archiso]]<br />
{{TranslationStatus (简体中文)|Archiso|2017-12-18|503025}}<br />
{{Related articles start (简体中文)}}<br />
{{Related|Remastering the Install ISO}}<br />
{{Related2|PXE (简体中文)|PXE}}<br />
{{Related2|Archboot (简体中文)|Archboot}}<br />
{{Related articles end}}<br />
'''Archiso''' 是一组 bash 脚本,它能够建立功能全面的 Arch Linux 的 Live CD/DVD/USB 映像。它同样是用来生成官方映像的工具,但由于它是一个非常通用的工具,所以它可以被用来生成从救援系统、安装盘,到特殊爱好的 Live CD/DVD/USB 系统——无人知晓还有其他什么。简单地说,如果要将 Arch 放在一条闪光的船上,它可以帮你做到这一点。Archiso 的核心以及灵魂是 ''mkarchiso''。它的所有选项都写在它的用法输出上,所以它的直接使用方法将不在这里讨论。相反,这篇 wiki 文章将导引你迅速建立你的 Live 介质。<br />
<br />
== 安装和配置 ==<br />
<br />
{{注意|<br />
* 您必须在 x86_64 上运行 Archiso。 [https://projects.archlinux.org/archiso.git/tree/docs/README.build#n67]<br />
* 以下操作请在ROOT权限下使用,在错误的权限下操作会造成一下问题。}}<br />
当你开始之前, [[install|安装]] {{Pkg|archiso}} 或 {{AUR|archiso-git}}。<br />
<br />
创建一个用于工作的目录, 实时镜像将会在这里被处理。 {{ic|~/archlive}} 是一个好选择。<br />
$ mkdir ~/archlive<br />
<br />
现在要将早先安装到主机的 archiso 脚本复制到你新建的工作目录内。<br />
<br />
Archiso 附带2个预定义配置( profiles ): ''releng'' 和''baseline''。<br />
<br />
* 如果您想要创建完全定制的 Live Arch Linux ,并预装所有您喜爱的程序和配置,使用 ''releng''。<br />
<br />
* 如果您只是想构建一个简易 Live 镜像,无预装软件并仅有基础配置,那么使用 ''baseline''。<br />
<br />
现在,将您选择的配置文件复制到目录(在下面的示例中为 ''archlive''),您可以在其中进行调整和构建。 执行以下操作,用 {{ic|releng}} 或 {{ic|baseline}} 替换 {{ic|'''profile'''}}。<br />
<br />
# cp -r /usr/share/archiso/configs/'''profile'''/* ''archlive''<br />
<br />
* 如果你使用 {{ic|releng}} 配置文件来创建一个完全自定义的镜像,那么你可以继续到:[[#配置 Live 介质]]。<br />
<br />
* 如果您使用 {{ic|baseline}} 配置文件创建一个简易映像,那么你不需要做任何定制,并可以直接继续到 [[#构建ISO]].<br />
<br />
== 配置 Live 介质 ==<br />
<br />
本节详细介绍该如何配置您将创建的映像,允许您定义哪些包以及配置将被您的 Live 映像所包含。<br />
在 [[#安装和配置]] 中创建的{{ic|''archlive''}}目录中有许多文件和目录; 我们只关注其中一部分,主要是<br />
* {{ic|packages.*}} - 在这里一行行列出你想要安装的包,和 <br />
* {{ic|airootfs}} 目录——这是一个覆盖目录,你将在这里完成所有的定制工作。<br />
一般来说,您在全新安装之后所执行的每个管理任务(不包括软件包安装)可以被写入这个脚本: {{ic|''archlive''/airootfs/root/customize_airootfs.sh}}。您必须从新环境的角度来写该脚本,所以脚本中的 / 代表方才被创建的 Live ISO 的根。<br />
<br />
=== 安装包 ===<br />
<br />
[[Edit|编辑]] {{ic|packages.i686}},{{ic|packages.x86_64}} 或 {{ic|packages.both}} 中的程序包列表,以指示要在 live 媒体上安装那些程序包。这里的后缀表示包可用的架构。<br />
<br />
{{Note|如果要在 Live CD 中使用 [[窗口管理器]],则必须添加必要且正确的 [[video drivers]],否则 WM 可能在加载时冻结。}}<br />
<br />
==== 自定义本地库 ====<br />
<br />
{{Merge|Pacman/Tips_and_tricks_(简体中文)#自建本地仓库|移动一般信息 (如:仓库目录树) 到主文章.|Talk:Archiso}}<br />
<br />
为了准备自定义包或是从 [[Arch User Repository (简体中文)|AUR]]/[[Arch Build System (简体中文)|ABS]] 安装包,你也可以 [[Custom local repository|创建自定义本地资源库]]。如果您希望支持多种体系结构,则应采取预防措施来防止发生错误。每个架构应该有自己的目录树:<br />
<br />
{{hc|$ tree ~/customrepo/ {{!}} sed "s/$(uname -m)/<arch>/g"|<br />
/home/archie/customrepo/<br />
└── <arch><br />
├── customrepo.db -> customrepo.db.tar.xz<br />
├── customrepo.db.tar.xz<br />
├── customrepo.files -> customrepo.files.tar.xz<br />
├── customrepo.files.tar.xz<br />
└── personal-website-git-b99cce0-1-<arch>.pkg.tar.xz<br />
<br />
1 directory, 5 files<br />
}}<br />
<br />
如此后,您可以添加您的仓库——把下面的句子加入 {{ic|~/archlive/pacman.conf}},并置于其他仓库条目上面(优先级最高):<br />
<br />
{{hc|~/archlive/pacman.conf|...<br />
# custom repository<br />
[customrepo]<br />
SigLevel <nowiki>=</nowiki> Optional TrustAlly<br />
Server <nowiki>=</nowiki> file:///home/'''user'''/customrepo/$arch<br />
...}}<br />
<br />
''repo-add'' 可执行文件检查软件包是否合适。如果不,那么你将得到与此类似的错误消息:<br />
<br />
==> ERROR: '/home/archie/customrepo/<arch>/foo-<arch>.pkg.tar.xz' does not have a valid database archive extension.<br />
<br />
==== 避免安装属于base组的包 ====<br />
<br />
默认情况下,{{ic|/usr/bin/mkarchiso}}——一个被 {{ic|~/archlive/build.sh}} 使用的脚本——会调用 {{Pkg|arch-install-scripts}} 中一个名为 {{ic|pacstrap}} 的程序,且在调用时不使用 {{ic|-i}} 标志——这将使 [[Pacman]] 在安装过程中不等待用户输入。<br />
<br />
当 base 组软件包被加入黑名单——把它们写到 {{ic|~/archlive/pacman.conf}} 中的 {{ic|IgnorePkg}} 行——时,[[Pacman]] 会询问是否仍然安装它们——意味着如果用户输入被跳过,它们就会被安装。为了避免安装这些包,这里有一些选择:<br />
<br />
* '''丑陋'''方案(Dirty):在 {{ic|/usr/bin/mkarchiso}} 中每次调用 {{ic|pacstrap}} 的行上加入 {{ic|i}} 标志。<br />
<br />
* '''整洁'''方案(Clean):创建 {{ic|/usr/bin/mkarchiso}} 的一份复制。在该复制中增加此标志,并修改 {{ic|~/archlive/build.sh}} 以使其调用修改过的 mkarchiso 脚本。<br />
<br />
* '''高级'''方案(Advanced): 在 {{ic|~/archlive/build.sh}} 中创建一个函数,该函数将在基础安装结束后显式移除那些包。若这样做,可以免去在安装过程中多次按回车键的麻烦。<br />
<br />
==== Installing packages from multilib ====<br />
<br />
要从 [[Multilib (简体中文)|Multilib]] 资源库安装软件包,您必须创建两个 pacman 配置文件:一个用于 x86_64,一个用于 i686。 将 {{ic|pacman.conf}} 复制到 {{ic|pacmanx86_64.conf}} 和 {{ic|pacmani686.conf}}。 取消注释以下行以{{ic|pacmanx86_64.conf}} 中启用 ''multilib''):<br />
<br />
{{hc|pacmanx86_64.conf|2=<br />
[multilib]<br />
SigLevel = PackageRequired<br />
Include = /etc/pacman.d/mirrorlist<br />
}}<br />
<br />
然后用编辑器编辑 {{ic|build.sh}}。 把:<br />
<br />
{{hc|build.sh|<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in i686 x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
done<br />
<br />
run_once make_packages_efi<br />
<br />
for arch in i686 x86_64; do<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
改为:<br />
<br />
{{hc|build.sh|<br />
cp -v releng/pacmanx86_64.conf releng/pacman.conf<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
<br />
echo make_pacman_conf i686<br />
cp -v releng/pacmani686.conf releng/pacman.conf<br />
cp -v releng/pacmani686.conf ${work_dir}/pacman.conf<br />
<br />
<br />
for arch in i686; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
这样,x86_64 和 i686 的软件包将安装有自己的pacman配置文件。<br />
<br />
=== 向映像里添加文件===<br />
<br />
{{注意|你必须使用 root 权限来完成这件事,不要改变任何你复制过来的文件的所有权,airootfs 中的'''所有'''文件必须为 root 用户所有。适当的所有制将在不久被解决。}}<br />
<br />
airootfs 目录作为要覆盖的文件,把它看作是在当前系统上的根目录'/',所以你在这个目录中放置的任何文件都将在开机时被复制。<br />
<br />
所以,如果你在当前系统上有一组 iptables 脚本且想要在 Live 映像上使用,请这样复制:<br />
# cp -r /etc/iptables ~/archlive/airootfs/etc<br />
<br />
在用户 home 文件夹里放置文件的方法有些许不同。不要把它们放在 {{ic|airootfs/home}},而是在 airootfs/ 里创建 skel 目录并将其放置在那里。然后我们会将相关命令添加到 {{ic|customize_airootfs.sh}}——我们要使用它在引导时复制文件以及梳理权限。<br />
<br />
首先,创建 skel 目录<br />
# mkdir ~/archlive/airootfs/etc/skel<br />
<br />
现在,复制 'home' 的文件到 skel 目录。例如,对于 {{ic|.bashrc}}:<br />
# cp ~/.bashrc ~/archlive/airootfs/etc/skel/<br />
<br />
当 {{ic|~/archlive/airootfs/root/customize_airootfs.sh}} 被执行,并且一个新用户已被创建, skel 目录中的文件将自动被复制到新的 home 文件夹中,并被设置正确的权限。<br />
<br />
类似地,需要注意位于层次结构下方的特殊配置文件。作为示例,配置文件 {{ic|/etc/X11/xinit/xinitrc}} 位于可能被安装包覆盖的路径上。要将 {{ic|xinitrc}} 的配置文件放在 {{ic|~/archlive/airootfs/etc/skel/}} ,然后修改 {{ic|customize_airootfs.sh}} 以适当地移动。<br />
<br />
=== 引导器 ===<br />
<br />
默认的文件应该可以正常工作,所以你应该不需要去碰它。<br />
<br />
由于 isolinux 的模块化性质,你能够使用很多插件,因为所有 *.c32 都被复制且可以可供您使用。看看[http://syslinux.zytor.com/wiki/index.php/SYSLINUX syslinux 官方网站] 和 [https://projects.archlinux.org/archiso.git/tree/configs/syslinux-iso/boot-files Archiso Git Repo]。使用所述插件,便有可能做出更具视觉吸引力及复杂的菜单。参见 [http://syslinux.zytor.com/wiki/index.php/Comboot/menu.c32 此处]。<br />
<br />
=== 登录管理器 ===<br />
<br />
通过启用您登录管理器的 [[Systemd (简体中文)|systemd]] 服务来做到在引导时启动 X 。如果您知道哪一个 .service 文件需要软链接,那就太好了。如果不知道,你也可以轻松找出——如果你在创建 iso 所用的系统上使用相同的程序的话。只需使用:<br />
<br />
$ ls -l /etc/systemd/system/display-manager.service<br />
<br />
现在在 {{ic|~/archlive/airootfs/etc/systemd/system}} 中创建相同的软链接。如 LXDM:<br />
<br />
# ln -s /usr/lib/systemd/system/lxdm.service ~/archlive/airootfs/etc/systemd/system/display-manager.service<br />
<br />
这将使您在 live 系统启用在系统上启动 LXDM。(This will enable LXDM at system start on your live system.)<br />
<br />
或者,您也可以启用 {{ic|airootfs/root/customize_airootfs.sh}} 中的服务以及其中启用的其他服务。<br />
<br />
如果您希望图形环境在启动过程中自动启动,请确保编辑 {{ic|airootfs/root/customize_airootfs.sh}} 并替换<br />
systemctl set-default multi-user.target<br />
为<br />
systemctl set-default graphical.target<br />
<br />
=== 改变自动登录状态 ===<br />
<br />
Getty 的自动登录配置位于 {{ic|airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf}}。 <br />
<br />
您可以修改这个文件来更改自动登录用户:<br />
<br />
[Service]<br />
ExecStart=<br />
ExecStart=-/sbin/agetty --autologin '''isouser''' --noclear %I 38400 linux<br />
<br />
或者干脆删除它来禁用自动登录。<br />
<br />
== 构建ISO ==<br />
<br />
现在,你已经准备好把你的文件转换成 .iso,以便可以刻录到 CD 或 USB:<br />
<br />
首先创建 {{ic|out/}} 目录,<br />
<br />
# mkdir ~/archlive/out/<br />
<br />
然后在 {{ic|~/archlive}} 里面执行:<br />
<br />
# ./build.sh -v<br />
<br />
该脚本将现在下载并安装你指定的软件包到 {{ic|work/*/airootfs}},创建内核和 init 映像(initramfs),应用您的修改,并最终把 ISO 建立到 {{ic|out/}}。<br />
<br />
=== 重建ISO ===<br />
<br />
在修改之后重建 ISO 不被官方支持。但是,通过应用两个步骤很容易。首先,您必须删除工作目录中的锁定文件:<br />
<br />
# rm -v work/build.make_*<br />
<br />
此外,需要编辑脚本 {{ic|airootfs/root/customize_airootfs.sh}},并在 {{ic|useradd}} 行的开头添加 {{ic|id}} 命令,如下所示。否则,重建将在此处停止,因为要添加的用户已经存在 [https://bugs.archlinux.org/task/41865]。<br />
{{Style|typo?}}<br />
<br />
! id arch && useradd -m -p "" -g users -G "adm,audio,floppy,log,network,rfkill,scanner,storage,optical,power,wheel" -s /usr/bin/zsh arch<br />
<br />
同时删除创建的用户或符号链接,如 {{ic|/etc/sudoers}} 等持久性数据。<br />
<br />
{{Expansion|报告需要删除或重置的更多数据。}}<br />
<br />
通过编辑 pacstrap 脚本(位于 /bin/pacstrap)并在第 361 行更改以下内容,可以稍微加快重建速度:<br />
<br />
修改前:<br />
<br />
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then<br />
<br />
修改后:<br />
<br />
if ! pacman -r "$newroot" -Sy --needed "${pacman_args[@]}"; then<br />
<br />
这增加了初始引导的速度,因为它不必下载和安装任何已经安装的基础包。<br />
<br />
== 使用ISO ==<br />
<br />
有关各种选项,请参见 [[:Category:Getting_and_installing_Arch_(简体中文)#安装方式]] 部分。<br />
<br />
== 提示和技巧 ==<br />
<br />
=== 在沒有互联网连接的情况下安装 Archiso ===<br />
{{Move|Installation without Internet access|似乎这可以独立成一篇|Talk:Archiso}}<br />
<br />
若你想在没有互联网连接或者你不想重复下载你想要的包的情况下安装 archiso(例如[https://www.archlinux.org/download/ 官方的每月发布版]):<br />
<br />
首先,按照[[Installation guide (简体中文)|安装指南]],并跳过一些步骤(如[[Installation guide (简体中文)#连接到因特网|连接到因特网]]),直到[[Installation guide (简体中文)#安装基本系统|安装基本系统]]之前。<br />
<br />
==== 安装 archiso 到新的 root ====<br />
<br />
复制 Live 环境的''所有文件''到新的根目录,而不是使用 {{ic|pacstrap}}(这将尝试从远程存储库下载):<br />
# time cp -ax / /mnt<br />
{{注意|The option ({{ic|-x}})排除了一些特殊目录,因为它们不应该被复制到新的根目录。}}<br />
<br />
然后,创建一些目录并复制内核映像到新的根,以保证新系统的完整性:<br />
<br />
# cp -vaT /run/archiso/bootmnt/arch/boot/$(uname -m)/vmlinuz /mnt/boot/vmlinuz-linux<br />
<br />
完成之后,请按[[Installation guide (简体中文)#Fstab]]所述生成 fstab。<br />
<br />
==== Chroot 并配置基本系统 ====<br />
<br />
下一步,chroot 到您新安装的系统:<br />
<br />
# arch-chroot /mnt /bin/bash<br />
<br />
请注意,在您配置 locale、键盘映射等之前,你仍然需要为了避免延续 Live 环境的轨迹——或者说对 archiso 所做的一些不适用于非 Live 环境的修改——而做一些事情。<br />
<br />
===== 恢复 journald 的配置 =====<br />
[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/root/customize_airootfs.sh#n19 archiso 的这个修改]会导致日志存储在 RAM 上——它意味着在重启后日志便会丢失。为了解决这个问题,执行:<br />
<br />
# sed -i 's/Storage=volatile/#Storage=auto/' /etc/systemd/journald.conf<br />
<br />
===== 删除特殊的 udev 规则 =====<br />
如果有任何有线网络接口,[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/etc/udev/rules.d/81-dhcpcd.rules udev 的这个规则]会自动启动dhcpcd。<br />
<br />
# rm /etc/udev/rules.d/81-dhcpcd.rules<br />
<br />
===== 禁用和移除 archiso 创建的服务 =====<br />
有一些服务文件是为 Live 环境创建的,请禁用这些服务并移除文件——因为它们对于新系统来说没必要存在:<br />
<br />
# systemctl disable pacman-init.service choose-mirror.service<br />
# rm -r /etc/systemd/system/{choose-mirror.service,pacman-init.service,etc-pacman.d-gnupg.mount,getty@tty1.service.d}<br />
# rm /etc/systemd/scripts/choose-mirror<br />
<br />
===== 移除 Live 环境的特殊脚本 =====<br />
在 live 系统中通过 archiso 脚本安装了一些脚本,这对于新系统是不必要的:<br />
<br />
# rm /etc/systemd/system/getty@tty1.service.d/autologin.conf<br />
# rm /root/{.automated_script.sh,.zlogin}<br />
# rm /etc/mkinitcpio-archiso.conf<br />
# rm -r /etc/initcpio<br />
<br />
===== 导入archlinux密钥 =====<br />
<br />
为了使用官方存储库,我们需要导入 archlinux 主密钥([[Pacman/Package signing (简体中文)#初始化密钥环]])。这一步通常是通过 pacstrap 完成的,但是可以通过<br />
<br />
# pacman-key --init<br />
# pacman-key --populate archlinux<br />
<br />
{{注意|Keyboard or mouse activity is needed to generate entropy and speed-up the first step.}}<br />
<br />
===== 配置系统 =====<br />
<br />
现在,您可以按照 [[Installation guide (简体中文)#配置系统]] 中跳过的步骤(设置语言环境,时区,主机名等),并通过创建初始 ramdisk 来完成安装,如 [[Installation guide (简体中文)#Initramfs]]。<br />
<br />
===== 启用图形登录(可选) =====<br />
<br />
如果使用像GDM这样的显示管理器,则可能需要将 systemd 默认目标从 multi-user.target 更改为允许图形登录的目标。<br />
# systemctl disable multi-user.target<br />
# systemctl enable graphical.target<br />
<br />
== 参阅 ==<br />
=== 文档和教程 ===<br />
* [https://projects.archlinux.org/archiso.git Archiso 项目页面]<br />
* [https://projects.archlinux.org/archiso.git/tree/docs 官方文档]<br />
<br />
=== 示例自定义模板 ===<br />
* [http://easy.open.and.free.fr/didjix/ A live DJ distribution powered by ArchLinux and built with Archiso]</div>
745275633
https://wiki.archlinux.org/index.php?title=Archiso_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=503075
Archiso (简体中文)
2017-12-18T11:23:02Z
<p>745275633: /* 自定义本地库 */ Merge 简体中文 link</p>
<hr />
<div>[[Category:简体中文]]<br />
[[Category:Live Arch systems (简体中文)]]<br />
[[Category:Getting and installing Arch (简体中文)]]<br />
[[ar:Archiso]]<br />
[[el:Archiso]]<br />
[[en:Archiso]]<br />
[[es:Archiso]]<br />
[[fr:Archiso]]<br />
[[it:Archiso]]<br />
[[ja:Archiso]]<br />
[[nl:Archiso]]<br />
[[ru:Archiso]]<br />
[[sk:Archiso]]<br />
{{TranslationStatus (简体中文)|Archiso|2017-12-18|503025}}<br />
{{Related articles start (简体中文)}}<br />
{{Related|Remastering the Install ISO}}<br />
{{Related2|PXE (简体中文)|PXE}}<br />
{{Related2|Archboot (简体中文)|Archboot}}<br />
{{Related articles end}}<br />
'''Archiso''' 是一组 bash 脚本,它能够建立功能全面的 Arch Linux 的 Live CD/DVD/USB 映像。它同样是用来生成官方映像的工具,但由于它是一个非常通用的工具,所以它可以被用来生成从救援系统、安装盘,到特殊爱好的 Live CD/DVD/USB 系统——无人知晓还有其他什么。简单地说,如果要将 Arch 放在一条闪光的船上,它可以帮你做到这一点。Archiso 的核心以及灵魂是 ''mkarchiso''。它的所有选项都写在它的用法输出上,所以它的直接使用方法将不在这里讨论。相反,这篇 wiki 文章将导引你迅速建立你的 Live 介质。<br />
<br />
== 安装和配置 ==<br />
<br />
{{注意|<br />
* 您必须在 x86_64 上运行 Archiso。 [https://projects.archlinux.org/archiso.git/tree/docs/README.build#n67]<br />
* 以下操作请在ROOT权限下使用,在错误的权限下操作会造成一下问题。}}<br />
当你开始之前, [[install|安装]] {{Pkg|archiso}} 或 {{AUR|archiso-git}}。<br />
<br />
创建一个用于工作的目录, 实时镜像将会在这里被处理。 {{ic|~/archlive}} 是一个好选择。<br />
$ mkdir ~/archlive<br />
<br />
现在要将早先安装到主机的 archiso 脚本复制到你新建的工作目录内。<br />
<br />
Archiso 附带2个预定义配置( profiles ): ''releng'' 和''baseline''。<br />
<br />
* 如果您想要创建完全定制的 Live Arch Linux ,并预装所有您喜爱的程序和配置,使用 ''releng''。<br />
<br />
* 如果您只是想构建一个简易 Live 镜像,无预装软件并仅有基础配置,那么使用 ''baseline''。<br />
<br />
现在,将您选择的配置文件复制到目录(在下面的示例中为 ''archlive''),您可以在其中进行调整和构建。 执行以下操作,用 {{ic|releng}} 或 {{ic|baseline}} 替换 {{ic|'''profile'''}}。<br />
<br />
# cp -r /usr/share/archiso/configs/'''profile'''/* ''archlive''<br />
<br />
* 如果你使用 {{ic|releng}} 配置文件来创建一个完全自定义的镜像,那么你可以继续到:[[#配置 Live 介质]]。<br />
<br />
* 如果您使用 {{ic|baseline}} 配置文件创建一个简易映像,那么你不需要做任何定制,并可以直接继续到 [[#构建ISO]].<br />
<br />
== 配置 Live 介质 ==<br />
<br />
本节详细介绍该如何配置您将创建的映像,允许您定义哪些包以及配置将被您的 Live 映像所包含。<br />
在 [[#安装和配置]] 中创建的{{ic|''archlive''}}目录中有许多文件和目录; 我们只关注其中一部分,主要是<br />
* {{ic|packages.*}} - 在这里一行行列出你想要安装的包,和 <br />
* {{ic|airootfs}} 目录——这是一个覆盖目录,你将在这里完成所有的定制工作。<br />
一般来说,您在全新安装之后所执行的每个管理任务(不包括软件包安装)可以被写入这个脚本: {{ic|''archlive''/airootfs/root/customize_airootfs.sh}}。您必须从新环境的角度来写该脚本,所以脚本中的 / 代表方才被创建的 Live ISO 的根。<br />
<br />
=== 安装包 ===<br />
<br />
[[Edit|编辑]] {{ic|packages.i686}},{{ic|packages.x86_64}} 或 {{ic|packages.both}} 中的程序包列表,以指示要在 live 媒体上安装那些程序包。这里的后缀表示包可用的架构。<br />
<br />
{{Note|如果要在 Live CD 中使用 [[窗口管理器]],则必须添加必要且正确的 [[video drivers]],否则 WM 可能在加载时冻结。}}<br />
<br />
==== 自定义本地库 ====<br />
<br />
{{Merge|Pacman/Tips_and_tricks_(简体中文)#自建本地仓库|移动一般信息 (如: 仓库目录树) 到主文章.|Talk:Archiso}}<br />
<br />
为了准备自定义包或是从 [[Arch User Repository (简体中文)|AUR]]/[[Arch Build System (简体中文)|ABS]] 安装包,你也可以 [[Custom local repository|创建自定义本地资源库]]。如果您希望支持多种体系结构,则应采取预防措施来防止发生错误。每个架构应该有自己的目录树:<br />
<br />
{{hc|$ tree ~/customrepo/ {{!}} sed "s/$(uname -m)/<arch>/g"|<br />
/home/archie/customrepo/<br />
└── <arch><br />
├── customrepo.db -> customrepo.db.tar.xz<br />
├── customrepo.db.tar.xz<br />
├── customrepo.files -> customrepo.files.tar.xz<br />
├── customrepo.files.tar.xz<br />
└── personal-website-git-b99cce0-1-<arch>.pkg.tar.xz<br />
<br />
1 directory, 5 files<br />
}}<br />
<br />
如此后,您可以添加您的仓库——把下面的句子加入 {{ic|~/archlive/pacman.conf}},并置于其他仓库条目上面(优先级最高):<br />
<br />
{{hc|~/archlive/pacman.conf|...<br />
# custom repository<br />
[customrepo]<br />
SigLevel <nowiki>=</nowiki> Optional TrustAlly<br />
Server <nowiki>=</nowiki> file:///home/'''user'''/customrepo/$arch<br />
...}}<br />
<br />
''repo-add'' 可执行文件检查软件包是否合适。如果不,那么你将得到与此类似的错误消息:<br />
<br />
==> ERROR: '/home/archie/customrepo/<arch>/foo-<arch>.pkg.tar.xz' does not have a valid database archive extension.<br />
<br />
==== 避免安装属于base组的包 ====<br />
<br />
默认情况下,{{ic|/usr/bin/mkarchiso}}——一个被 {{ic|~/archlive/build.sh}} 使用的脚本——会调用 {{Pkg|arch-install-scripts}} 中一个名为 {{ic|pacstrap}} 的程序,且在调用时不使用 {{ic|-i}} 标志——这将使 [[Pacman]] 在安装过程中不等待用户输入。<br />
<br />
当 base 组软件包被加入黑名单——把它们写到 {{ic|~/archlive/pacman.conf}} 中的 {{ic|IgnorePkg}} 行——时,[[Pacman]] 会询问是否仍然安装它们——意味着如果用户输入被跳过,它们就会被安装。为了避免安装这些包,这里有一些选择:<br />
<br />
* '''丑陋'''方案(Dirty):在 {{ic|/usr/bin/mkarchiso}} 中每次调用 {{ic|pacstrap}} 的行上加入 {{ic|i}} 标志。<br />
<br />
* '''整洁'''方案(Clean):创建 {{ic|/usr/bin/mkarchiso}} 的一份复制。在该复制中增加此标志,并修改 {{ic|~/archlive/build.sh}} 以使其调用修改过的 mkarchiso 脚本。<br />
<br />
* '''高级'''方案(Advanced): 在 {{ic|~/archlive/build.sh}} 中创建一个函数,该函数将在基础安装结束后显式移除那些包。若这样做,可以免去在安装过程中多次按回车键的麻烦。<br />
<br />
==== Installing packages from multilib ====<br />
<br />
要从 [[Multilib (简体中文)|Multilib]] 资源库安装软件包,您必须创建两个 pacman 配置文件:一个用于 x86_64,一个用于 i686。 将 {{ic|pacman.conf}} 复制到 {{ic|pacmanx86_64.conf}} 和 {{ic|pacmani686.conf}}。 取消注释以下行以{{ic|pacmanx86_64.conf}} 中启用 ''multilib''):<br />
<br />
{{hc|pacmanx86_64.conf|2=<br />
[multilib]<br />
SigLevel = PackageRequired<br />
Include = /etc/pacman.d/mirrorlist<br />
}}<br />
<br />
然后用编辑器编辑 {{ic|build.sh}}。 把:<br />
<br />
{{hc|build.sh|<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in i686 x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
done<br />
<br />
run_once make_packages_efi<br />
<br />
for arch in i686 x86_64; do<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
改为:<br />
<br />
{{hc|build.sh|<br />
cp -v releng/pacmanx86_64.conf releng/pacman.conf<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
<br />
echo make_pacman_conf i686<br />
cp -v releng/pacmani686.conf releng/pacman.conf<br />
cp -v releng/pacmani686.conf ${work_dir}/pacman.conf<br />
<br />
<br />
for arch in i686; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
这样,x86_64 和 i686 的软件包将安装有自己的pacman配置文件。<br />
<br />
=== 向映像里添加文件===<br />
<br />
{{注意|你必须使用 root 权限来完成这件事,不要改变任何你复制过来的文件的所有权,airootfs 中的'''所有'''文件必须为 root 用户所有。适当的所有制将在不久被解决。}}<br />
<br />
airootfs 目录作为要覆盖的文件,把它看作是在当前系统上的根目录'/',所以你在这个目录中放置的任何文件都将在开机时被复制。<br />
<br />
所以,如果你在当前系统上有一组 iptables 脚本且想要在 Live 映像上使用,请这样复制:<br />
# cp -r /etc/iptables ~/archlive/airootfs/etc<br />
<br />
在用户 home 文件夹里放置文件的方法有些许不同。不要把它们放在 {{ic|airootfs/home}},而是在 airootfs/ 里创建 skel 目录并将其放置在那里。然后我们会将相关命令添加到 {{ic|customize_airootfs.sh}}——我们要使用它在引导时复制文件以及梳理权限。<br />
<br />
首先,创建 skel 目录<br />
# mkdir ~/archlive/airootfs/etc/skel<br />
<br />
现在,复制 'home' 的文件到 skel 目录。例如,对于 {{ic|.bashrc}}:<br />
# cp ~/.bashrc ~/archlive/airootfs/etc/skel/<br />
<br />
当 {{ic|~/archlive/airootfs/root/customize_airootfs.sh}} 被执行,并且一个新用户已被创建, skel 目录中的文件将自动被复制到新的 home 文件夹中,并被设置正确的权限。<br />
<br />
类似地,需要注意位于层次结构下方的特殊配置文件。作为示例,配置文件 {{ic|/etc/X11/xinit/xinitrc}} 位于可能被安装包覆盖的路径上。要将 {{ic|xinitrc}} 的配置文件放在 {{ic|~/archlive/airootfs/etc/skel/}} ,然后修改 {{ic|customize_airootfs.sh}} 以适当地移动。<br />
<br />
=== 引导器 ===<br />
<br />
默认的文件应该可以正常工作,所以你应该不需要去碰它。<br />
<br />
由于 isolinux 的模块化性质,你能够使用很多插件,因为所有 *.c32 都被复制且可以可供您使用。看看[http://syslinux.zytor.com/wiki/index.php/SYSLINUX syslinux 官方网站] 和 [https://projects.archlinux.org/archiso.git/tree/configs/syslinux-iso/boot-files Archiso Git Repo]。使用所述插件,便有可能做出更具视觉吸引力及复杂的菜单。参见 [http://syslinux.zytor.com/wiki/index.php/Comboot/menu.c32 此处]。<br />
<br />
=== 登录管理器 ===<br />
<br />
通过启用您登录管理器的 [[Systemd (简体中文)|systemd]] 服务来做到在引导时启动 X 。如果您知道哪一个 .service 文件需要软链接,那就太好了。如果不知道,你也可以轻松找出——如果你在创建 iso 所用的系统上使用相同的程序的话。只需使用:<br />
<br />
$ ls -l /etc/systemd/system/display-manager.service<br />
<br />
现在在 {{ic|~/archlive/airootfs/etc/systemd/system}} 中创建相同的软链接。如 LXDM:<br />
<br />
# ln -s /usr/lib/systemd/system/lxdm.service ~/archlive/airootfs/etc/systemd/system/display-manager.service<br />
<br />
这将使您在 live 系统启用在系统上启动 LXDM。(This will enable LXDM at system start on your live system.)<br />
<br />
或者,您也可以启用 {{ic|airootfs/root/customize_airootfs.sh}} 中的服务以及其中启用的其他服务。<br />
<br />
如果您希望图形环境在启动过程中自动启动,请确保编辑 {{ic|airootfs/root/customize_airootfs.sh}} 并替换<br />
systemctl set-default multi-user.target<br />
为<br />
systemctl set-default graphical.target<br />
<br />
=== 改变自动登录状态 ===<br />
<br />
Getty 的自动登录配置位于 {{ic|airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf}}。 <br />
<br />
您可以修改这个文件来更改自动登录用户:<br />
<br />
[Service]<br />
ExecStart=<br />
ExecStart=-/sbin/agetty --autologin '''isouser''' --noclear %I 38400 linux<br />
<br />
或者干脆删除它来禁用自动登录。<br />
<br />
== 构建ISO ==<br />
<br />
现在,你已经准备好把你的文件转换成 .iso,以便可以刻录到 CD 或 USB:<br />
<br />
首先创建 {{ic|out/}} 目录,<br />
<br />
# mkdir ~/archlive/out/<br />
<br />
然后在 {{ic|~/archlive}} 里面执行:<br />
<br />
# ./build.sh -v<br />
<br />
该脚本将现在下载并安装你指定的软件包到 {{ic|work/*/airootfs}},创建内核和 init 映像(initramfs),应用您的修改,并最终把 ISO 建立到 {{ic|out/}}。<br />
<br />
=== 重建ISO ===<br />
<br />
在修改之后重建 ISO 不被官方支持。但是,通过应用两个步骤很容易。首先,您必须删除工作目录中的锁定文件:<br />
<br />
# rm -v work/build.make_*<br />
<br />
此外,需要编辑脚本 {{ic|airootfs/root/customize_airootfs.sh}},并在 {{ic|useradd}} 行的开头添加 {{ic|id}} 命令,如下所示。否则,重建将在此处停止,因为要添加的用户已经存在 [https://bugs.archlinux.org/task/41865]。<br />
{{Style|typo?}}<br />
<br />
! id arch && useradd -m -p "" -g users -G "adm,audio,floppy,log,network,rfkill,scanner,storage,optical,power,wheel" -s /usr/bin/zsh arch<br />
<br />
同时删除创建的用户或符号链接,如 {{ic|/etc/sudoers}} 等持久性数据。<br />
<br />
{{Expansion|报告需要删除或重置的更多数据。}}<br />
<br />
通过编辑 pacstrap 脚本(位于 /bin/pacstrap)并在第 361 行更改以下内容,可以稍微加快重建速度:<br />
<br />
修改前:<br />
<br />
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then<br />
<br />
修改后:<br />
<br />
if ! pacman -r "$newroot" -Sy --needed "${pacman_args[@]}"; then<br />
<br />
这增加了初始引导的速度,因为它不必下载和安装任何已经安装的基础包。<br />
<br />
== 使用ISO ==<br />
<br />
有关各种选项,请参见 [[:Category:Getting_and_installing_Arch_(简体中文)#安装方式]] 部分。<br />
<br />
== 提示和技巧 ==<br />
<br />
=== 在沒有互联网连接的情况下安装 Archiso ===<br />
{{Move|Installation without Internet access|似乎这可以独立成一篇|Talk:Archiso}}<br />
<br />
若你想在没有互联网连接或者你不想重复下载你想要的包的情况下安装 archiso(例如[https://www.archlinux.org/download/ 官方的每月发布版]):<br />
<br />
首先,按照[[Installation guide (简体中文)|安装指南]],并跳过一些步骤(如[[Installation guide (简体中文)#连接到因特网|连接到因特网]]),直到[[Installation guide (简体中文)#安装基本系统|安装基本系统]]之前。<br />
<br />
==== 安装 archiso 到新的 root ====<br />
<br />
复制 Live 环境的''所有文件''到新的根目录,而不是使用 {{ic|pacstrap}}(这将尝试从远程存储库下载):<br />
# time cp -ax / /mnt<br />
{{注意|The option ({{ic|-x}})排除了一些特殊目录,因为它们不应该被复制到新的根目录。}}<br />
<br />
然后,创建一些目录并复制内核映像到新的根,以保证新系统的完整性:<br />
<br />
# cp -vaT /run/archiso/bootmnt/arch/boot/$(uname -m)/vmlinuz /mnt/boot/vmlinuz-linux<br />
<br />
完成之后,请按[[Installation guide (简体中文)#Fstab]]所述生成 fstab。<br />
<br />
==== Chroot 并配置基本系统 ====<br />
<br />
下一步,chroot 到您新安装的系统:<br />
<br />
# arch-chroot /mnt /bin/bash<br />
<br />
请注意,在您配置 locale、键盘映射等之前,你仍然需要为了避免延续 Live 环境的轨迹——或者说对 archiso 所做的一些不适用于非 Live 环境的修改——而做一些事情。<br />
<br />
===== 恢复 journald 的配置 =====<br />
[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/root/customize_airootfs.sh#n19 archiso 的这个修改]会导致日志存储在 RAM 上——它意味着在重启后日志便会丢失。为了解决这个问题,执行:<br />
<br />
# sed -i 's/Storage=volatile/#Storage=auto/' /etc/systemd/journald.conf<br />
<br />
===== 删除特殊的 udev 规则 =====<br />
如果有任何有线网络接口,[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/etc/udev/rules.d/81-dhcpcd.rules udev 的这个规则]会自动启动dhcpcd。<br />
<br />
# rm /etc/udev/rules.d/81-dhcpcd.rules<br />
<br />
===== 禁用和移除 archiso 创建的服务 =====<br />
有一些服务文件是为 Live 环境创建的,请禁用这些服务并移除文件——因为它们对于新系统来说没必要存在:<br />
<br />
# systemctl disable pacman-init.service choose-mirror.service<br />
# rm -r /etc/systemd/system/{choose-mirror.service,pacman-init.service,etc-pacman.d-gnupg.mount,getty@tty1.service.d}<br />
# rm /etc/systemd/scripts/choose-mirror<br />
<br />
===== 移除 Live 环境的特殊脚本 =====<br />
在 live 系统中通过 archiso 脚本安装了一些脚本,这对于新系统是不必要的:<br />
<br />
# rm /etc/systemd/system/getty@tty1.service.d/autologin.conf<br />
# rm /root/{.automated_script.sh,.zlogin}<br />
# rm /etc/mkinitcpio-archiso.conf<br />
# rm -r /etc/initcpio<br />
<br />
===== 导入archlinux密钥 =====<br />
<br />
为了使用官方存储库,我们需要导入 archlinux 主密钥([[Pacman/Package signing (简体中文)#初始化密钥环]])。这一步通常是通过 pacstrap 完成的,但是可以通过<br />
<br />
# pacman-key --init<br />
# pacman-key --populate archlinux<br />
<br />
{{注意|Keyboard or mouse activity is needed to generate entropy and speed-up the first step.}}<br />
<br />
===== 配置系统 =====<br />
<br />
现在,您可以按照 [[Installation guide (简体中文)#配置系统]] 中跳过的步骤(设置语言环境,时区,主机名等),并通过创建初始 ramdisk 来完成安装,如 [[Installation guide (简体中文)#Initramfs]]。<br />
<br />
===== 启用图形登录(可选) =====<br />
<br />
如果使用像GDM这样的显示管理器,则可能需要将 systemd 默认目标从 multi-user.target 更改为允许图形登录的目标。<br />
# systemctl disable multi-user.target<br />
# systemctl enable graphical.target<br />
<br />
== 参阅 ==<br />
=== 文档和教程 ===<br />
* [https://projects.archlinux.org/archiso.git Archiso 项目页面]<br />
* [https://projects.archlinux.org/archiso.git/tree/docs 官方文档]<br />
<br />
=== 示例自定义模板 ===<br />
* [http://easy.open.and.free.fr/didjix/ A live DJ distribution powered by ArchLinux and built with Archiso]</div>
745275633
https://wiki.archlinux.org/index.php?title=Archiso_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=503074
Archiso (简体中文)
2017-12-18T11:21:02Z
<p>745275633: 503025</p>
<hr />
<div>[[Category:简体中文]]<br />
[[Category:Live Arch systems (简体中文)]]<br />
[[Category:Getting and installing Arch (简体中文)]]<br />
[[ar:Archiso]]<br />
[[el:Archiso]]<br />
[[en:Archiso]]<br />
[[es:Archiso]]<br />
[[fr:Archiso]]<br />
[[it:Archiso]]<br />
[[ja:Archiso]]<br />
[[nl:Archiso]]<br />
[[ru:Archiso]]<br />
[[sk:Archiso]]<br />
{{TranslationStatus (简体中文)|Archiso|2017-12-18|503025}}<br />
{{Related articles start (简体中文)}}<br />
{{Related|Remastering the Install ISO}}<br />
{{Related2|PXE (简体中文)|PXE}}<br />
{{Related2|Archboot (简体中文)|Archboot}}<br />
{{Related articles end}}<br />
'''Archiso''' 是一组 bash 脚本,它能够建立功能全面的 Arch Linux 的 Live CD/DVD/USB 映像。它同样是用来生成官方映像的工具,但由于它是一个非常通用的工具,所以它可以被用来生成从救援系统、安装盘,到特殊爱好的 Live CD/DVD/USB 系统——无人知晓还有其他什么。简单地说,如果要将 Arch 放在一条闪光的船上,它可以帮你做到这一点。Archiso 的核心以及灵魂是 ''mkarchiso''。它的所有选项都写在它的用法输出上,所以它的直接使用方法将不在这里讨论。相反,这篇 wiki 文章将导引你迅速建立你的 Live 介质。<br />
<br />
== 安装和配置 ==<br />
<br />
{{注意|<br />
* 您必须在 x86_64 上运行 Archiso。 [https://projects.archlinux.org/archiso.git/tree/docs/README.build#n67]<br />
* 以下操作请在ROOT权限下使用,在错误的权限下操作会造成一下问题。}}<br />
当你开始之前, [[install|安装]] {{Pkg|archiso}} 或 {{AUR|archiso-git}}。<br />
<br />
创建一个用于工作的目录, 实时镜像将会在这里被处理。 {{ic|~/archlive}} 是一个好选择。<br />
$ mkdir ~/archlive<br />
<br />
现在要将早先安装到主机的 archiso 脚本复制到你新建的工作目录内。<br />
<br />
Archiso 附带2个预定义配置( profiles ): ''releng'' 和''baseline''。<br />
<br />
* 如果您想要创建完全定制的 Live Arch Linux ,并预装所有您喜爱的程序和配置,使用 ''releng''。<br />
<br />
* 如果您只是想构建一个简易 Live 镜像,无预装软件并仅有基础配置,那么使用 ''baseline''。<br />
<br />
现在,将您选择的配置文件复制到目录(在下面的示例中为 ''archlive''),您可以在其中进行调整和构建。 执行以下操作,用 {{ic|releng}} 或 {{ic|baseline}} 替换 {{ic|'''profile'''}}。<br />
<br />
# cp -r /usr/share/archiso/configs/'''profile'''/* ''archlive''<br />
<br />
* 如果你使用 {{ic|releng}} 配置文件来创建一个完全自定义的镜像,那么你可以继续到:[[#配置 Live 介质]]。<br />
<br />
* 如果您使用 {{ic|baseline}} 配置文件创建一个简易映像,那么你不需要做任何定制,并可以直接继续到 [[#构建ISO]].<br />
<br />
== 配置 Live 介质 ==<br />
<br />
本节详细介绍该如何配置您将创建的映像,允许您定义哪些包以及配置将被您的 Live 映像所包含。<br />
在 [[#安装和配置]] 中创建的{{ic|''archlive''}}目录中有许多文件和目录; 我们只关注其中一部分,主要是<br />
* {{ic|packages.*}} - 在这里一行行列出你想要安装的包,和 <br />
* {{ic|airootfs}} 目录——这是一个覆盖目录,你将在这里完成所有的定制工作。<br />
一般来说,您在全新安装之后所执行的每个管理任务(不包括软件包安装)可以被写入这个脚本: {{ic|''archlive''/airootfs/root/customize_airootfs.sh}}。您必须从新环境的角度来写该脚本,所以脚本中的 / 代表方才被创建的 Live ISO 的根。<br />
<br />
=== 安装包 ===<br />
<br />
[[Edit|编辑]] {{ic|packages.i686}},{{ic|packages.x86_64}} 或 {{ic|packages.both}} 中的程序包列表,以指示要在 live 媒体上安装那些程序包。这里的后缀表示包可用的架构。<br />
<br />
{{Note|如果要在 Live CD 中使用 [[窗口管理器]],则必须添加必要且正确的 [[video drivers]],否则 WM 可能在加载时冻结。}}<br />
<br />
==== 自定义本地库 ====<br />
<br />
{{Merge|Pacman tips#自定义本地库|移动一般信息 (e.g. repo tree) 到主文章.|Talk:Archiso}}<br />
<br />
为了准备自定义包或是从 [[Arch User Repository (简体中文)|AUR]]/[[Arch Build System (简体中文)|ABS]] 安装包,你也可以 [[Custom local repository|创建自定义本地资源库]]。如果您希望支持多种体系结构,则应采取预防措施来防止发生错误。每个架构应该有自己的目录树:<br />
<br />
{{hc|$ tree ~/customrepo/ {{!}} sed "s/$(uname -m)/<arch>/g"|<br />
/home/archie/customrepo/<br />
└── <arch><br />
├── customrepo.db -> customrepo.db.tar.xz<br />
├── customrepo.db.tar.xz<br />
├── customrepo.files -> customrepo.files.tar.xz<br />
├── customrepo.files.tar.xz<br />
└── personal-website-git-b99cce0-1-<arch>.pkg.tar.xz<br />
<br />
1 directory, 5 files<br />
}}<br />
<br />
如此后,您可以添加您的仓库——把下面的句子加入 {{ic|~/archlive/pacman.conf}},并置于其他仓库条目上面(优先级最高):<br />
<br />
{{hc|~/archlive/pacman.conf|...<br />
# custom repository<br />
[customrepo]<br />
SigLevel <nowiki>=</nowiki> Optional TrustAlly<br />
Server <nowiki>=</nowiki> file:///home/'''user'''/customrepo/$arch<br />
...}}<br />
<br />
''repo-add'' 可执行文件检查软件包是否合适。如果不,那么你将得到与此类似的错误消息:<br />
<br />
==> ERROR: '/home/archie/customrepo/<arch>/foo-<arch>.pkg.tar.xz' does not have a valid database archive extension.<br />
<br />
==== 避免安装属于base组的包 ====<br />
<br />
默认情况下,{{ic|/usr/bin/mkarchiso}}——一个被 {{ic|~/archlive/build.sh}} 使用的脚本——会调用 {{Pkg|arch-install-scripts}} 中一个名为 {{ic|pacstrap}} 的程序,且在调用时不使用 {{ic|-i}} 标志——这将使 [[Pacman]] 在安装过程中不等待用户输入。<br />
<br />
当 base 组软件包被加入黑名单——把它们写到 {{ic|~/archlive/pacman.conf}} 中的 {{ic|IgnorePkg}} 行——时,[[Pacman]] 会询问是否仍然安装它们——意味着如果用户输入被跳过,它们就会被安装。为了避免安装这些包,这里有一些选择:<br />
<br />
* '''丑陋'''方案(Dirty):在 {{ic|/usr/bin/mkarchiso}} 中每次调用 {{ic|pacstrap}} 的行上加入 {{ic|i}} 标志。<br />
<br />
* '''整洁'''方案(Clean):创建 {{ic|/usr/bin/mkarchiso}} 的一份复制。在该复制中增加此标志,并修改 {{ic|~/archlive/build.sh}} 以使其调用修改过的 mkarchiso 脚本。<br />
<br />
* '''高级'''方案(Advanced): 在 {{ic|~/archlive/build.sh}} 中创建一个函数,该函数将在基础安装结束后显式移除那些包。若这样做,可以免去在安装过程中多次按回车键的麻烦。<br />
<br />
==== Installing packages from multilib ====<br />
<br />
要从 [[Multilib (简体中文)|Multilib]] 资源库安装软件包,您必须创建两个 pacman 配置文件:一个用于 x86_64,一个用于 i686。 将 {{ic|pacman.conf}} 复制到 {{ic|pacmanx86_64.conf}} 和 {{ic|pacmani686.conf}}。 取消注释以下行以{{ic|pacmanx86_64.conf}} 中启用 ''multilib''):<br />
<br />
{{hc|pacmanx86_64.conf|2=<br />
[multilib]<br />
SigLevel = PackageRequired<br />
Include = /etc/pacman.d/mirrorlist<br />
}}<br />
<br />
然后用编辑器编辑 {{ic|build.sh}}。 把:<br />
<br />
{{hc|build.sh|<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in i686 x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
done<br />
<br />
run_once make_packages_efi<br />
<br />
for arch in i686 x86_64; do<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
改为:<br />
<br />
{{hc|build.sh|<br />
cp -v releng/pacmanx86_64.conf releng/pacman.conf<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
<br />
echo make_pacman_conf i686<br />
cp -v releng/pacmani686.conf releng/pacman.conf<br />
cp -v releng/pacmani686.conf ${work_dir}/pacman.conf<br />
<br />
<br />
for arch in i686; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
这样,x86_64 和 i686 的软件包将安装有自己的pacman配置文件。<br />
<br />
=== 向映像里添加文件===<br />
<br />
{{注意|你必须使用 root 权限来完成这件事,不要改变任何你复制过来的文件的所有权,airootfs 中的'''所有'''文件必须为 root 用户所有。适当的所有制将在不久被解决。}}<br />
<br />
airootfs 目录作为要覆盖的文件,把它看作是在当前系统上的根目录'/',所以你在这个目录中放置的任何文件都将在开机时被复制。<br />
<br />
所以,如果你在当前系统上有一组 iptables 脚本且想要在 Live 映像上使用,请这样复制:<br />
# cp -r /etc/iptables ~/archlive/airootfs/etc<br />
<br />
在用户 home 文件夹里放置文件的方法有些许不同。不要把它们放在 {{ic|airootfs/home}},而是在 airootfs/ 里创建 skel 目录并将其放置在那里。然后我们会将相关命令添加到 {{ic|customize_airootfs.sh}}——我们要使用它在引导时复制文件以及梳理权限。<br />
<br />
首先,创建 skel 目录<br />
# mkdir ~/archlive/airootfs/etc/skel<br />
<br />
现在,复制 'home' 的文件到 skel 目录。例如,对于 {{ic|.bashrc}}:<br />
# cp ~/.bashrc ~/archlive/airootfs/etc/skel/<br />
<br />
当 {{ic|~/archlive/airootfs/root/customize_airootfs.sh}} 被执行,并且一个新用户已被创建, skel 目录中的文件将自动被复制到新的 home 文件夹中,并被设置正确的权限。<br />
<br />
类似地,需要注意位于层次结构下方的特殊配置文件。作为示例,配置文件 {{ic|/etc/X11/xinit/xinitrc}} 位于可能被安装包覆盖的路径上。要将 {{ic|xinitrc}} 的配置文件放在 {{ic|~/archlive/airootfs/etc/skel/}} ,然后修改 {{ic|customize_airootfs.sh}} 以适当地移动。<br />
<br />
=== 引导器 ===<br />
<br />
默认的文件应该可以正常工作,所以你应该不需要去碰它。<br />
<br />
由于 isolinux 的模块化性质,你能够使用很多插件,因为所有 *.c32 都被复制且可以可供您使用。看看[http://syslinux.zytor.com/wiki/index.php/SYSLINUX syslinux 官方网站] 和 [https://projects.archlinux.org/archiso.git/tree/configs/syslinux-iso/boot-files Archiso Git Repo]。使用所述插件,便有可能做出更具视觉吸引力及复杂的菜单。参见 [http://syslinux.zytor.com/wiki/index.php/Comboot/menu.c32 此处]。<br />
<br />
=== 登录管理器 ===<br />
<br />
通过启用您登录管理器的 [[Systemd (简体中文)|systemd]] 服务来做到在引导时启动 X 。如果您知道哪一个 .service 文件需要软链接,那就太好了。如果不知道,你也可以轻松找出——如果你在创建 iso 所用的系统上使用相同的程序的话。只需使用:<br />
<br />
$ ls -l /etc/systemd/system/display-manager.service<br />
<br />
现在在 {{ic|~/archlive/airootfs/etc/systemd/system}} 中创建相同的软链接。如 LXDM:<br />
<br />
# ln -s /usr/lib/systemd/system/lxdm.service ~/archlive/airootfs/etc/systemd/system/display-manager.service<br />
<br />
这将使您在 live 系统启用在系统上启动 LXDM。(This will enable LXDM at system start on your live system.)<br />
<br />
或者,您也可以启用 {{ic|airootfs/root/customize_airootfs.sh}} 中的服务以及其中启用的其他服务。<br />
<br />
如果您希望图形环境在启动过程中自动启动,请确保编辑 {{ic|airootfs/root/customize_airootfs.sh}} 并替换<br />
systemctl set-default multi-user.target<br />
为<br />
systemctl set-default graphical.target<br />
<br />
=== 改变自动登录状态 ===<br />
<br />
Getty 的自动登录配置位于 {{ic|airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf}}。 <br />
<br />
您可以修改这个文件来更改自动登录用户:<br />
<br />
[Service]<br />
ExecStart=<br />
ExecStart=-/sbin/agetty --autologin '''isouser''' --noclear %I 38400 linux<br />
<br />
或者干脆删除它来禁用自动登录。<br />
<br />
== 构建ISO ==<br />
<br />
现在,你已经准备好把你的文件转换成 .iso,以便可以刻录到 CD 或 USB:<br />
<br />
首先创建 {{ic|out/}} 目录,<br />
<br />
# mkdir ~/archlive/out/<br />
<br />
然后在 {{ic|~/archlive}} 里面执行:<br />
<br />
# ./build.sh -v<br />
<br />
该脚本将现在下载并安装你指定的软件包到 {{ic|work/*/airootfs}},创建内核和 init 映像(initramfs),应用您的修改,并最终把 ISO 建立到 {{ic|out/}}。<br />
<br />
=== 重建ISO ===<br />
<br />
在修改之后重建 ISO 不被官方支持。但是,通过应用两个步骤很容易。首先,您必须删除工作目录中的锁定文件:<br />
<br />
# rm -v work/build.make_*<br />
<br />
此外,需要编辑脚本 {{ic|airootfs/root/customize_airootfs.sh}},并在 {{ic|useradd}} 行的开头添加 {{ic|id}} 命令,如下所示。否则,重建将在此处停止,因为要添加的用户已经存在 [https://bugs.archlinux.org/task/41865]。<br />
{{Style|typo?}}<br />
<br />
! id arch && useradd -m -p "" -g users -G "adm,audio,floppy,log,network,rfkill,scanner,storage,optical,power,wheel" -s /usr/bin/zsh arch<br />
<br />
同时删除创建的用户或符号链接,如 {{ic|/etc/sudoers}} 等持久性数据。<br />
<br />
{{Expansion|报告需要删除或重置的更多数据。}}<br />
<br />
通过编辑 pacstrap 脚本(位于 /bin/pacstrap)并在第 361 行更改以下内容,可以稍微加快重建速度:<br />
<br />
修改前:<br />
<br />
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then<br />
<br />
修改后:<br />
<br />
if ! pacman -r "$newroot" -Sy --needed "${pacman_args[@]}"; then<br />
<br />
这增加了初始引导的速度,因为它不必下载和安装任何已经安装的基础包。<br />
<br />
== 使用ISO ==<br />
<br />
有关各种选项,请参见 [[:Category:Getting_and_installing_Arch_(简体中文)#安装方式]] 部分。<br />
<br />
== 提示和技巧 ==<br />
<br />
=== 在沒有互联网连接的情况下安装 Archiso ===<br />
{{Move|Installation without Internet access|似乎这可以独立成一篇|Talk:Archiso}}<br />
<br />
若你想在没有互联网连接或者你不想重复下载你想要的包的情况下安装 archiso(例如[https://www.archlinux.org/download/ 官方的每月发布版]):<br />
<br />
首先,按照[[Installation guide (简体中文)|安装指南]],并跳过一些步骤(如[[Installation guide (简体中文)#连接到因特网|连接到因特网]]),直到[[Installation guide (简体中文)#安装基本系统|安装基本系统]]之前。<br />
<br />
==== 安装 archiso 到新的 root ====<br />
<br />
复制 Live 环境的''所有文件''到新的根目录,而不是使用 {{ic|pacstrap}}(这将尝试从远程存储库下载):<br />
# time cp -ax / /mnt<br />
{{注意|The option ({{ic|-x}})排除了一些特殊目录,因为它们不应该被复制到新的根目录。}}<br />
<br />
然后,创建一些目录并复制内核映像到新的根,以保证新系统的完整性:<br />
<br />
# cp -vaT /run/archiso/bootmnt/arch/boot/$(uname -m)/vmlinuz /mnt/boot/vmlinuz-linux<br />
<br />
完成之后,请按[[Installation guide (简体中文)#Fstab]]所述生成 fstab。<br />
<br />
==== Chroot 并配置基本系统 ====<br />
<br />
下一步,chroot 到您新安装的系统:<br />
<br />
# arch-chroot /mnt /bin/bash<br />
<br />
请注意,在您配置 locale、键盘映射等之前,你仍然需要为了避免延续 Live 环境的轨迹——或者说对 archiso 所做的一些不适用于非 Live 环境的修改——而做一些事情。<br />
<br />
===== 恢复 journald 的配置 =====<br />
[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/root/customize_airootfs.sh#n19 archiso 的这个修改]会导致日志存储在 RAM 上——它意味着在重启后日志便会丢失。为了解决这个问题,执行:<br />
<br />
# sed -i 's/Storage=volatile/#Storage=auto/' /etc/systemd/journald.conf<br />
<br />
===== 删除特殊的 udev 规则 =====<br />
如果有任何有线网络接口,[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/etc/udev/rules.d/81-dhcpcd.rules udev 的这个规则]会自动启动dhcpcd。<br />
<br />
# rm /etc/udev/rules.d/81-dhcpcd.rules<br />
<br />
===== 禁用和移除 archiso 创建的服务 =====<br />
有一些服务文件是为 Live 环境创建的,请禁用这些服务并移除文件——因为它们对于新系统来说没必要存在:<br />
<br />
# systemctl disable pacman-init.service choose-mirror.service<br />
# rm -r /etc/systemd/system/{choose-mirror.service,pacman-init.service,etc-pacman.d-gnupg.mount,getty@tty1.service.d}<br />
# rm /etc/systemd/scripts/choose-mirror<br />
<br />
===== 移除 Live 环境的特殊脚本 =====<br />
在 live 系统中通过 archiso 脚本安装了一些脚本,这对于新系统是不必要的:<br />
<br />
# rm /etc/systemd/system/getty@tty1.service.d/autologin.conf<br />
# rm /root/{.automated_script.sh,.zlogin}<br />
# rm /etc/mkinitcpio-archiso.conf<br />
# rm -r /etc/initcpio<br />
<br />
===== 导入archlinux密钥 =====<br />
<br />
为了使用官方存储库,我们需要导入 archlinux 主密钥([[Pacman/Package signing (简体中文)#初始化密钥环]])。这一步通常是通过 pacstrap 完成的,但是可以通过<br />
<br />
# pacman-key --init<br />
# pacman-key --populate archlinux<br />
<br />
{{注意|Keyboard or mouse activity is needed to generate entropy and speed-up the first step.}}<br />
<br />
===== 配置系统 =====<br />
<br />
现在,您可以按照 [[Installation guide (简体中文)#配置系统]] 中跳过的步骤(设置语言环境,时区,主机名等),并通过创建初始 ramdisk 来完成安装,如 [[Installation guide (简体中文)#Initramfs]]。<br />
<br />
===== 启用图形登录(可选) =====<br />
<br />
如果使用像GDM这样的显示管理器,则可能需要将 systemd 默认目标从 multi-user.target 更改为允许图形登录的目标。<br />
# systemctl disable multi-user.target<br />
# systemctl enable graphical.target<br />
<br />
== 参阅 ==<br />
=== 文档和教程 ===<br />
* [https://projects.archlinux.org/archiso.git Archiso 项目页面]<br />
* [https://projects.archlinux.org/archiso.git/tree/docs 官方文档]<br />
<br />
=== 示例自定义模板 ===<br />
* [http://easy.open.and.free.fr/didjix/ A live DJ distribution powered by ArchLinux and built with Archiso]</div>
745275633
https://wiki.archlinux.org/index.php?title=Very_Secure_FTP_Daemon_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=502798
Very Secure FTP Daemon (简体中文)
2017-12-16T13:02:13Z
<p>745275633: 502797</p>
<hr />
<div>[[Category:File Transfer Protocol (简体中文)]]<br />
[[cs:Very Secure FTP Daemon]]<br />
[[en:Very Secure FTP Daemon]]<br />
[[es:Very Secure FTP Daemon]]<br />
[[it:Very Secure FTP Daemon]]<br />
[[ja:Very Secure FTP Daemon]]<br />
[[ru:Very Secure FTP Daemon]]<br />
{{TranslationStatus (简体中文)|Very Secure FTP Daemon|2017-12-16|502797}}<br />
[https://security.appspot.com/vsftpd.html vsftpd] (Very Secure FTP Daemon) 是一个为UNIX类系统开发的轻量,稳定和安全的FTP服务器端.<br />
== 安装 ==<br />
[[安装]] {{pkg|vsftpd}} 然后 [[Systemd (简体中文)#使用单元|启动/启用]] {{ic|vsftpd.service}} 守护程序。<br />
<br />
使用 [[Wikipedia:xinetd|xinetd]] 监视和控制 vsftpd 连接,请参见 [[#使用 xinetd]]。<br />
<br />
== 配置 ==<br />
vsftpd 的大多数配置都可以通过编辑 {{ic|/etc/vsftpd.conf}} 文件实现。 该文件本身自带大量注释说明,所以这一章节只就一些重要的配置予以说明。 有关所有可用选项和文档,请参阅 vsftpd.conf(5) 或 [https://security.appspot.com/vsftpd/vsftpd_conf.html 在线查看] 手册页。默认情况下,由 {{ic|/srv/ftp}} 提供文件。<br />
<br />
允许的连接 {{ic|/etc/hosts.allow}}:<br />
# 允许所有连接<br />
vsftpd: ALL<br />
# IP地址范围<br />
vsftpd: 10.0.0.0/255.255.255.0<br />
<br />
=== 允许上传 ===<br />
需要将 {{ic|/etc/vsftpd.conf}} 中的 {{ic|write_enable}} 值设为YES,以便允许修改文件系统(如上传):<br />
write_enable=YES<br />
<br />
=== 本地用户登录 ===<br />
需要修改 {{ic|/etc/vsftpd.conf}} 中的如下值,以便允许 {{ic|/etc/passwd}} 中的用户登录:<br />
local_enable=YES<br />
<br />
=== 匿名用户登录 ===<br />
以下行控制匿名用户是否可以登录。默认情况下,匿名登录只能从 {{ic|/srv/ftp}} 下载:<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
...<br />
# 允许匿名FTP? (当心 - 默认情况下允许除非您将其注释)。<br />
anonymous_enable=YES<br />
...<br />
# 取消注释以允许匿名FTP用户上传文件。<br />
# 只有上述全局写入被激活,才会有效果。<br />
# 另外,你显然需要创建FTP用户有写权限的目录。<br />
# anon_upload_enable=YES<br />
#<br />
# 如果您希望匿名FTP用户能够创建新目录,请取消注释。<br />
# anon_mkdir_write_enable=YES<br />
...<br />
}}<br />
<br />
您也可以添加以下选项(详见 {{man|5|vsftpd.conf}}):<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
# 匿名登录不需要密码<br />
no_anon_password=YES<br />
<br />
# 匿名客户端的最大传输速率(以 Bytes/秒 为单位)<br />
anon_max_rate=30000<br />
<br />
# 用于匿名登录的目录<br />
anon_root=/example/directory/<br />
}}<br />
<br />
=== Chroot 限制 ===<br />
为了阻止用户离开家目录,可以设置 chroot 环境。要启用此功能,请在 {{ic|/etc/vsftpd.conf}} 中添加以下行:<br />
chroot_list_enable=YES<br />
chroot_list_file=/etc/vsftpd.chroot_list<br />
{{ic|chroot_list_file}} 定义了被 chroot 限制的用户列表。<br />
<br />
对于更严格的环境,请指定以下行:<br />
chroot_local_user=YES<br />
这将默认为所有用户启用 chroot 环境。 在这种情况下,{{ic|chroot_list_file}} 定义了'''不受''' chroot 限制的用户列表。<br />
<br />
=== 限制用户登录 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加以下两行来阻止特定用户登录FTP服务器:<br />
userlist_enable=YES<br />
userlist_file=/etc/vsftpd.user_list<br />
{{ic|userlist_file}} 文件列出'''不允许'''登录的用户。<br />
<br />
如果您只想允许特定的用户登录,请添加以下行:<br />
userlist_deny=NO<br />
此时 {{ic|userlist_file}} 文件指定'''允许'''登录的用户。<br />
<br />
=== 限制连接数 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加如下信息来限制本地用户的数据传输速率:<br />
local_max_rate=1000000 # 最大数据传输速率(单位: Bytes/秒)<br />
max_clients=50 # 可以同时连接的最大客户端数<br />
max_per_ip=2 # 每个 IP 允许的最大连接数<br />
<br />
=== 使用 xinetd ===<br />
Xinetd提供增强的监控和控制连接功能。对于基本的可以工作的 vsftpd-server 是不必要的<br />
<br />
安装 vsftpd 将会添加必要的服务文件 {{ic|/etc/xinetd.d/vsftpd}}, 默认情况下,服务被禁用。<br />
<br />
启用ftp服务:<br />
<pre><br />
service ftp<br />
{<br />
socket_type = stream<br />
wait = no<br />
user = root<br />
server = /usr/sbin/vsftpd<br />
log_on_success += HOST DURATION<br />
log_on_failure += HOST<br />
disable = no<br />
}<br />
</pre><br />
<br />
如果您将vsftpd守护程序设置为以独立模式运行,而不是启动 vsftpd 守护程序和 [[enable]] {{ic | xinetd.service}},请在 {{ic|/etc/vsftpd.conf}} 中进行以下更改:<br />
listen=NO<br />
否则连接将失败:<br />
500 OOPS: could not bind listening IPv4 socket<br />
<br />
=== 使用 SSL/TLS 来保护 FTP ===<br />
首先,您需要一个 ''X.509 SSL/TLS'' 证书才能使用TLS。如果您没有,可以轻松生成如下的自签名证书:<br />
<br />
# cd /etc/ssl/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout vsftpd.pem -out vsftpd.pem<br />
# chmod 600 vsftpd.pem<br />
<br />
你会被问到关于你公司的问题,等等。由于你的证书不是一个可信任的,所填的内容并不重要,它将被用于加密。要使用可信证书,您可以从 [[Let's Encrypt]] 这样的证书颁发机构获得证书。<br />
<br />
然后,编辑配置文件:<br />
{{hc|/etc/vsftpd.conf|2=ssl_enable=YES<br />
<br />
# 选择你想要的<br />
# 如果你接受匿名连接你可能要启用这个<br />
# allow_anon_ssl=NO<br />
<br />
# 默认情况下所有非匿名登录被迫使用 SSL 发送和接收密码和数据,设置为 NO,以允许不安全的连接<br />
force_local_logins_ssl=NO<br />
force_local_data_ssl=NO<br />
<br />
# 选择你想要的<br />
force_local_logins_ssl=YES<br />
<br />
# 如果启用SSL,则至少应启用 TLS v1<br />
ssl_tlsv1=YES<br />
# 这些选项将允许或阻止 SSL v2 和 v3 协议连接。 TLS v1连接是首选。<br />
ssl_sslv2=NO<br />
ssl_sslv3=YES<br />
# 给出您的 *.pem 文件的正确路径<br />
rsa_cert_file=/etc/ssl/certs/vsftpd.pem<br />
# .pem 文件也包含私钥<br />
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem<br />
}}<br />
<br />
=== 在被动模式下解析主机名 ===<br />
要覆盖 vsftpd 在被动模式下通过服务器的主机名发布的IP地址,并在启动时解析DNS,在 {{ic|/etc/vsftpd.conf}} 中增加以下两行:<br />
pasv_addr_resolve=YES<br />
pasv_address=''yourdomain.org''<br />
<br />
{{注意|<br />
* 对于动态DNS,定期更新 ''pasv_address'' 并重新启动服务器是不必要的,因为它有时可以被读取。<br />
* 您可能无法通过 LAN 以被动模式连接,在这种情况下,请尝试使用主动模式而不是LAN客户端。<br />
}}<br />
<br />
=== 端口配置 ===<br />
对于暴露于 Web 的 FTP 服务器,为了减少服务器受到攻击的可能性,可以将侦听端口改为除标准端口 21 以外的端口。要将被动模式端口限制为打开端口,可以提供一个范围。这些端口配置更改可以使用以下几行完成:<br />
{{hc|/etc/vsftpd.conf|2=<br />
listen_port=2211<br />
pasv_min_port=5000<br />
pasv_max_port=5003<br />
}}<br />
<br />
=== 配置 iptables ===<br />
通常,运行FTP守护进程的服务器受 [[Iptables (简体中文)]] 防火墙的保护。要允许访问FTP服务器,需要打开相应的端口,如:<br />
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT<br />
本文不会提供有关如何设置iptables的任何说明,但这里是一个例子:[[Simple stateful firewall (简体中文)]]。<br />
<br />
有一些内核模块需要在这里引用的 iptables 正确的处理 FTP 连接。 其中特别是 ''nf_conntrack_ftp''。这是需要的,因为FTP使用给定的 ''listen_port''(默认为21) 仅用于命令; 所有的数据传输都是通过不同的端口完成的。 这些端口由FTP守护程序为每个会话随机选择(也取决于是使用主动还是被动模式)。要告诉 iptables 应该接受端口上的数据包,需要 ''nf_conntrack_ftp''。要在启动时自动加载,请在 {{ic|/etc/modules-load.d}} 中创建新文件,例如:<br />
# echo nf_conntrack_ftp > /etc/modules-load.d/nf_conntrack_ftp.conf<br />
<br />
如果内核 >= 4.7,您需要通过 ''sysctl'' 设置 ''net.netfilter.nf_conntrack_helper = 1'',如:<br />
# echo net.netfilter.nf_conntrack_helper=1 > /etc/sysctl.d/70-conntrack.conf<br />
或使用<br />
# iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp<br />
<br />
== 小技巧 ==<br />
=== 虚拟用户的PAM认证 ===<br />
由于 [[PAM (简体中文)]] 不再提供 {{ic|pam_userdb.so}} 另一个简单的方法是使用 {{AUR|libpam_pwdfile}}。对于具有许多用户的环境,另一个选项可能是 {{AUR|pam_mysql}} {{Broken package link|{{aur-mirror|pam_mysql}}}}。但是,本节仅限于解释如何通过 {{ic|pam_pwdfile.so}} 配置chroot环境和身份验证。<br />
<br />
在此示例中,我们创建目录 {{ic|vsftpd}}:<br />
# mkdir /etc/vsftpd<br />
<br />
创建和存储用户名和密码的一个选择是使用 Apache 的生成器 htpasswd:<br />
# htpasswd -c /etc/vsftpd/.passwd<br />
上述命令的一个问题是 vsftpd 可能无法读取生成的 MD5 散列密码。如果使用 -d 开关运行相同的命令,则使用 crypt() 加密,vsftpd 的密码变得可读,但其缺点是安全性较低,密码限制为8个字符。 Openssl 可用于使用算法1生成基于 MD5 的 BSD 密码:<br />
# openssl passwd -1<br />
<br />
无论那个解决方案 {{ic|/etc/vsftpd/.passwd}} 应该如下所示:<br />
username1:hashed_password1<br />
username2:hashed_password2<br />
...<br />
<br />
接下来,您需要使用 {{ic|pam_pwdfile.so}} 和生成的 {{ic|/etc/vsftpd/.passwd}} 文件创建PAM服务。在本例中,我们为 ''vsftpd'' 创建了一个PAM策略,其中包含以下内容:<br />
{{hc|/etc/pam.d/vsftpd|auth required pam_pwdfile.so pwdfile /etc/vsftpd/.passwd<br />
account required pam_permit.so}}<br />
<br />
现在是为虚拟用户创建一个 home 的时候了。在示例中,决定用 {{ic|/srv/ftp}} 为虚拟用户托管数据,这也反映了Arch的默认目录结构。首先创建 virtual 用户并使 {{ic|/srv/ftp}} 成为它的 home:<br />
# useradd -d /srv/ftp virtual<br />
让 virtual 成为所有者<br />
# chown virtual:virtual /srv/ftp<br />
<br />
一个基本的没有私人文件夹配置的 /etc/vsftpd,默认的虚拟用户的 home 文件夹:<br />
# 指向正确的PAM服务文件<br />
pam_service_name=vsftpd<br />
write_enable=YES<br />
hide_ids=YES<br />
listen=YES<br />
connect_from_port_20=YES<br />
anonymous_enable=NO<br />
local_enable=YES<br />
dirmessage_enable=YES<br />
xferlog_enable=YES<br />
chroot_local_user=YES<br />
guest_enable=YES<br />
guest_username=virtual<br />
virtual_use_local_privs=YES<br />
<br />
您自己的设置可能不需要一些参数。如果您希望chroot环境可写,您将需要将以下内容添加到配置文件中:<br />
allow_writeable_chroot = YES<br />
否则 vsftpd 的默认安全设置会抱怨,如果它检测到chroot是可写的。<br />
<br />
[[Start]] {{ic|vsftpd.service}}。<br />
<br />
您现在应该可以使用存储在 {{ic|/etc/vsftpd/.passwd}} 中的任何用户和密码从FTP客户端登录。<br />
<br />
==== 为虚拟用户创建私有目录 ====<br />
首先创建用户文件夹<br />
# mkdir /srv/ftp/user1<br />
# mkdir /srv/ftp/user2<br />
# chown virtual:virtual /srv/ftp/user?/<br />
<br />
随后, 在{{ic|/etc/vsftpd.conf}}增加如下行:<br />
local_root=/srv/ftp/$USER<br />
user_sub_token=$USER<br />
<br />
== 问题解决 ==<br />
<br />
=== vsftpd: no connection (Error 500) with recent kernels (3.5 and newer) and .service ===<br />
将其添加到您的 {{ic|/etc/vsftpd.conf}}:<br />
seccomp_sandbox=NO<br />
<br />
=== vsftpd: refusing to run with writable root inside chroot() ===<br />
从 vsftpd 2.3.5 开始,用户被锁定的 chroot 目录不可写。这是为了防止安全漏洞。<br />
<br />
允许上传的安全方法是保持 chroot 启用,并配置您的 FTP 目录。<br />
<br />
local_root=/srv/ftp/user<br />
<br />
# mkdir -p /srv/ftp/user/upload<br />
#<br />
# chmod 550 /srv/ftp/user<br />
# chmod 750 /srv/ftp/user/upload<br />
<br />
如果你必须这么做:<br />
<br />
您可以将其放入您的 {{ic|/etc/vsftpd.conf}} 以解决此安全性增强(自vsftpd 3.0.0;从[http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/ Fixing 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()]):<br />
allow_writeable_chroot=YES<br />
或者:<br />
<br />
安装 {{AUR|vsftpd-ext}} {{Broken package link|{{aur-mirror|vsftpd-ext}}}} 并在 conf 文件中设置<br />
allow_writable_chroot=YES<br />
<br />
=== FileZilla Client: GnuTLS error -8 -15 -110 when connecting via SSL ===<br />
vsftpd 尝试在 SSL 会话中显示纯文本错误消息。 为了进行调试,暂时禁用加密,您将看到正确的错误消息。[http://ramblings.linkerror.com/?p=45] [https://serverfault.com/questions/772494/vsftpd-list-causes-gnutls-error-15]<br />
<br />
=== vsftpd.service fails to run on boot ===<br />
如果您启用了vsftpd服务,并且无法在启动时运行,请确保它已在服务文件中设置为在 network.target 之后加载:<br />
<br />
{{hc|/usr/lib/systemd/system/vsftpd.service|2=<br />
[Unit]<br />
Description=vsftpd daemon<br />
After=network.target<br />
}}<br />
<br />
=== ipv6 only fails with: 500 OOPS: run two copies of vsftpd for IPv4 and IPv6 ===<br />
你很有可能已经注释了这一行<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
#listen=YES<br />
#<br />
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6<br />
# sockets, you must run two copies of vsftpd with two configuration files.<br />
# Make sure, that one of the listen options is commented !!<br />
listen_ipv6=YES<br />
<br />
而不是设置<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
listen=NO<br />
<br />
== 更多资源 ==<br />
* [http://vsftpd.beasts.org/ vsftpd official homepage]<br />
* [http://vsftpd.beasts.org/vsftpd_conf.html vsftpd.conf man page]</div>
745275633
https://wiki.archlinux.org/index.php?title=Very_Secure_FTP_Daemon_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=502794
Very Secure FTP Daemon (简体中文)
2017-12-16T12:24:11Z
<p>745275633: 502785</p>
<hr />
<div>[[Category:File Transfer Protocol (简体中文)]]<br />
[[cs:Very Secure FTP Daemon]]<br />
[[en:Very Secure FTP Daemon]]<br />
[[es:Very Secure FTP Daemon]]<br />
[[it:Very Secure FTP Daemon]]<br />
[[ja:Very Secure FTP Daemon]]<br />
[[ru:Very Secure FTP Daemon]]<br />
{{TranslationStatus (简体中文)|Very Secure FTP Daemon|2017-12-16|502785}}<br />
[https://security.appspot.com/vsftpd.html vsftpd] (Very Secure FTP Daemon) 是一个为UNIX类系统开发的轻量,稳定和安全的FTP服务器端.<br />
== 安装 ==<br />
[[安装]] {{pkg|vsftpd}} 然后 [[Systemd (简体中文)#使用单元|启动/启用]] {{ic|vsftpd.service}} 守护程序。<br />
<br />
使用 [[Wikipedia:xinetd|xinetd]] 监视和控制 vsftpd 连接,请参见 [[#使用 xinetd]]。<br />
<br />
== 配置 ==<br />
vsftpd 的大多数配置都可以通过编辑 {{ic|/etc/vsftpd.conf}} 文件实现。 该文件本身自带大量注释说明,所以这一章节只就一些重要的配置予以说明。 有关所有可用选项和文档,请参阅 vsftpd.conf(5) 或 [https://security.appspot.com/vsftpd/vsftpd_conf.html 在线查看] 手册页。默认情况下,由 {{ic|/srv/ftp}} 提供文件。<br />
<br />
允许的连接 {{ic|/etc/hosts.allow}}:<br />
# 允许所有连接<br />
vsftpd: ALL<br />
# IP地址范围<br />
vsftpd: 10.0.0.0/255.255.255.0<br />
<br />
=== 允许上传 ===<br />
需要将 {{ic|/etc/vsftpd.conf}} 中的 {{ic|write_enable}} 值设为YES,以便允许修改文件系统(如上传):<br />
write_enable=YES<br />
<br />
=== 本地用户登录 ===<br />
需要修改 {{ic|/etc/vsftpd.conf}} 中的如下值,以便允许 {{ic|/etc/passwd}} 中的用户登录:<br />
local_enable=YES<br />
<br />
=== 匿名用户登录 ===<br />
以下行控制匿名用户是否可以登录。默认情况下,匿名登录只能从 {{ic|/srv/ftp}} 下载:<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
...<br />
# 允许匿名FTP? (当心 - 默认情况下允许除非您将其注释)。<br />
anonymous_enable=YES<br />
...<br />
# 取消注释以允许匿名FTP用户上传文件。<br />
# 只有上述全局写入被激活,才会有效果。<br />
# 另外,你显然需要创建FTP用户有写权限的目录。<br />
# anon_upload_enable=YES<br />
#<br />
# 如果您希望匿名FTP用户能够创建新目录,请取消注释。<br />
# anon_mkdir_write_enable=YES<br />
...<br />
}}<br />
<br />
您也可以添加以下选项(详见 {{man|5|vsftpd.conf}}):<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
# 匿名登录不需要密码<br />
no_anon_password=YES<br />
<br />
# 匿名客户端的最大传输速率(以 Bytes/秒 为单位)<br />
anon_max_rate=30000<br />
<br />
# 用于匿名登录的目录<br />
anon_root=/example/directory/<br />
}}<br />
<br />
=== Chroot 限制 ===<br />
为了阻止用户离开家目录,可以设置 chroot 环境。要启用此功能,请在 {{ic|/etc/vsftpd.conf}} 中添加以下行:<br />
chroot_list_enable=YES<br />
chroot_list_file=/etc/vsftpd.chroot_list<br />
{{ic|chroot_list_file}} 定义了被 chroot 限制的用户列表。<br />
<br />
对于更严格的环境,请指定以下行:<br />
chroot_local_user=YES<br />
这将默认为所有用户启用 chroot 环境。 在这种情况下,{{ic|chroot_list_file}} 定义了'''不受''' chroot 限制的用户列表。<br />
<br />
=== 限制用户登录 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加以下两行来阻止特定用户登录FTP服务器:<br />
userlist_enable=YES<br />
userlist_file=/etc/vsftpd.user_list<br />
{{ic|userlist_file}} 文件列出'''不允许'''登录的用户。<br />
<br />
如果您只想允许特定的用户登录,请添加以下行:<br />
userlist_deny=NO<br />
此时 {{ic|userlist_file}} 文件指定'''允许'''登录的用户。<br />
<br />
=== 限制连接数 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加如下信息来限制本地用户的数据传输速率:<br />
local_max_rate=1000000 # 最大数据传输速率(单位: Bytes/秒)<br />
max_clients=50 # 可以同时连接的最大客户端数<br />
max_per_ip=2 # 每个 IP 允许的最大连接数<br />
<br />
=== 使用 xinetd ===<br />
Xinetd提供增强的监控和控制连接功能。对于基本的可以工作的 vsftpd-server 是不必要的<br />
<br />
安装 vsftpd 将会添加必要的服务文件 {{ic|/etc/xinetd.d/vsftpd}}, 默认情况下,服务被禁用。<br />
<br />
启用ftp服务:<br />
<pre><br />
service ftp<br />
{<br />
socket_type = stream<br />
wait = no<br />
user = root<br />
server = /usr/sbin/vsftpd<br />
log_on_success += HOST DURATION<br />
log_on_failure += HOST<br />
disable = no<br />
}<br />
</pre><br />
<br />
如果您将vsftpd守护程序设置为以独立模式运行,而不是启动 vsftpd 守护程序和 [[enable]] {{ic | xinetd.service}},请在 {{ic|/etc/vsftpd.conf}} 中进行以下更改:<br />
listen=NO<br />
否则连接将失败:<br />
500 OOPS: could not bind listening IPv4 socket<br />
<br />
=== 使用 SSL 使 FTP 安全 ===<br />
<br />
生成一个SSL证书,如这样:<br />
# cd /etc/ssl/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/certs/vsftpd.pem -out /etc/ssl/certs/vsftpd.pem<br />
# chmod 600 /etc/ssl/certs/vsftpd.pem<br />
<br />
您将被询问有关您公司等的许多问题,如果您的证书是不需要信任的,那么您填写的内容并不重要。但是您将使用这些内容加密!如果您计划在使用此功能方面取得信任,则可以从 CA 如 thawte,verisign 获得一个。<br />
<br />
编辑您的配置 {{ic|/etc/vsftpd.conf}}<br />
<pre><br />
ssl_enable=YES<br />
<br />
# 选择你想要的<br />
# 如果你接受匿名连接你可能要启用这个<br />
# allow_anon_ssl=NO<br />
<br />
# 默认情况下所有非匿名登录被迫使用 SSL 发送和接收密码和数据,设置为 NO,以允许不安全的连接<br />
force_local_logins_ssl=NO<br />
force_local_data_ssl=NO<br />
<br />
# 选择你想要的<br />
force_local_logins_ssl=YES<br />
<br />
# 如果启用SSL,则至少应启用 TLS v1<br />
ssl_tlsv1=YES<br />
# 这些选项将允许或阻止 SSL v2 和 v3 协议连接。 TLS v1连接是首选。<br />
ssl_sslv2=NO<br />
ssl_sslv3=YES<br />
# 给出您的 *.pem 文件的正确路径<br />
rsa_cert_file=/etc/ssl/certs/vsftpd.pem<br />
# .pem 文件也包含私钥<br />
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem<br />
</pre><br />
<br />
=== 在被动模式下解析主机名 ===<br />
要覆盖 vsftpd 在被动模式下通过服务器的主机名发布的IP地址,并在启动时解析DNS,在 {{ic|/etc/vsftpd.conf}} 中增加以下两行:<br />
pasv_addr_resolve=YES<br />
pasv_address=''yourdomain.org''<br />
<br />
{{注意|<br />
* 对于动态DNS,定期更新 ''pasv_address'' 并重新启动服务器是不必要的,因为它有时可以被读取。<br />
* 您可能无法通过 LAN 以被动模式连接,在这种情况下,请尝试使用主动模式而不是LAN客户端。<br />
}}<br />
<br />
=== 端口配置 ===<br />
特别是对于暴露于 Web 的私有 FTP 服务器,建议将监听端口更改为标准端口 21 以外的其他服务器。可以使用 {{ic|/etc/vsftpd.conf}} 中的以下行来完成此操作:<br />
listen_port=2211<br />
此外,定制的端口范围可以由以下行给出:<br />
pasv_min_port=49152<br />
pasv_max_port=65534<br />
<br />
=== 配置 iptables ===<br />
通常,运行FTP守护进程的服务器受 [[Iptables (简体中文)]] 防火墙的保护。要允许访问FTP服务器,需要打开相应的端口,如:<br />
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT<br />
本文不会提供有关如何设置iptables的任何说明,但这里是一个例子:[[Simple stateful firewall (简体中文)]]。<br />
<br />
有一些内核模块需要在这里引用的 iptables 正确的处理 FTP 连接。 其中特别是 ''nf_conntrack_ftp''。这是需要的,因为FTP使用给定的 ''listen_port''(默认为21) 仅用于命令; 所有的数据传输都是通过不同的端口完成的。 这些端口由FTP守护程序为每个会话随机选择(也取决于是使用主动还是被动模式)。要告诉 iptables 应该接受端口上的数据包,需要 ''nf_conntrack_ftp''。要在启动时自动加载,请在 {{ic|/etc/modules-load.d}} 中创建新文件,例如:<br />
# echo nf_conntrack_ftp > /etc/modules-load.d/nf_conntrack_ftp.conf<br />
<br />
如果内核 >= 4.7,您需要通过 ''sysctl'' 设置 ''net.netfilter.nf_conntrack_helper = 1'',如:<br />
# echo net.netfilter.nf_conntrack_helper=1 > /etc/sysctl.d/70-conntrack.conf<br />
或使用<br />
# iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp<br />
<br />
== 小技巧 ==<br />
=== 虚拟用户的PAM认证 ===<br />
由于 [[PAM (简体中文)]] 不再提供 {{ic|pam_userdb.so}} 另一个简单的方法是使用 {{AUR|libpam_pwdfile}}。对于具有许多用户的环境,另一个选项可能是 {{AUR|pam_mysql}} {{Broken package link|{{aur-mirror|pam_mysql}}}}。但是,本节仅限于解释如何通过 {{ic|pam_pwdfile.so}} 配置chroot环境和身份验证。<br />
<br />
在此示例中,我们创建目录 {{ic|vsftpd}}:<br />
# mkdir /etc/vsftpd<br />
<br />
创建和存储用户名和密码的一个选择是使用 Apache 的生成器 htpasswd:<br />
# htpasswd -c /etc/vsftpd/.passwd<br />
上述命令的一个问题是 vsftpd 可能无法读取生成的 MD5 散列密码。如果使用 -d 开关运行相同的命令,则使用 crypt() 加密,vsftpd 的密码变得可读,但其缺点是安全性较低,密码限制为8个字符。 Openssl 可用于使用算法1生成基于 MD5 的 BSD 密码:<br />
# openssl passwd -1<br />
<br />
无论那个解决方案 {{ic|/etc/vsftpd/.passwd}} 应该如下所示:<br />
username1:hashed_password1<br />
username2:hashed_password2<br />
...<br />
<br />
接下来,您需要使用 {{ic|pam_pwdfile.so}} 和生成的 {{ic|/etc/vsftpd/.passwd}} 文件创建PAM服务。在本例中,我们为 ''vsftpd'' 创建了一个PAM策略,其中包含以下内容:<br />
{{hc|/etc/pam.d/vsftpd|auth required pam_pwdfile.so pwdfile /etc/vsftpd/.passwd<br />
account required pam_permit.so}}<br />
<br />
现在是为虚拟用户创建一个 home 的时候了。在示例中,决定用 {{ic|/srv/ftp}} 为虚拟用户托管数据,这也反映了Arch的默认目录结构。首先创建 virtual 用户并使 {{ic|/srv/ftp}} 成为它的 home:<br />
# useradd -d /srv/ftp virtual<br />
让 virtual 成为所有者<br />
# chown virtual:virtual /srv/ftp<br />
<br />
一个基本的没有私人文件夹配置的 /etc/vsftpd,默认的虚拟用户的 home 文件夹:<br />
# 指向正确的PAM服务文件<br />
pam_service_name=vsftpd<br />
write_enable=YES<br />
hide_ids=YES<br />
listen=YES<br />
connect_from_port_20=YES<br />
anonymous_enable=NO<br />
local_enable=YES<br />
dirmessage_enable=YES<br />
xferlog_enable=YES<br />
chroot_local_user=YES<br />
guest_enable=YES<br />
guest_username=virtual<br />
virtual_use_local_privs=YES<br />
<br />
您自己的设置可能不需要一些参数。如果您希望chroot环境可写,您将需要将以下内容添加到配置文件中:<br />
allow_writeable_chroot = YES<br />
否则 vsftpd 的默认安全设置会抱怨,如果它检测到chroot是可写的。<br />
<br />
[[Start]] {{ic|vsftpd.service}}。<br />
<br />
您现在应该可以使用存储在 {{ic|/etc/vsftpd/.passwd}} 中的任何用户和密码从FTP客户端登录。<br />
<br />
==== 为虚拟用户创建私有目录 ====<br />
首先创建用户文件夹<br />
# mkdir /srv/ftp/user1<br />
# mkdir /srv/ftp/user2<br />
# chown virtual:virtual /srv/ftp/user?/<br />
<br />
随后, 在{{ic|/etc/vsftpd.conf}}增加如下行:<br />
local_root=/srv/ftp/$USER<br />
user_sub_token=$USER<br />
<br />
== 问题解决 ==<br />
<br />
=== vsftpd: no connection (Error 500) with recent kernels (3.5 and newer) and .service ===<br />
将其添加到您的 {{ic|/etc/vsftpd.conf}}:<br />
seccomp_sandbox=NO<br />
<br />
=== vsftpd: refusing to run with writable root inside chroot() ===<br />
从 vsftpd 2.3.5 开始,用户被锁定的 chroot 目录不可写。这是为了防止安全漏洞。<br />
<br />
允许上传的安全方法是保持 chroot 启用,并配置您的 FTP 目录。<br />
<br />
local_root=/srv/ftp/user<br />
<br />
# mkdir -p /srv/ftp/user/upload<br />
#<br />
# chmod 550 /srv/ftp/user<br />
# chmod 750 /srv/ftp/user/upload<br />
<br />
如果你必须这么做:<br />
<br />
您可以将其放入您的 {{ic|/etc/vsftpd.conf}} 以解决此安全性增强(自vsftpd 3.0.0;从[http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/ Fixing 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()]):<br />
allow_writeable_chroot=YES<br />
或者:<br />
<br />
安装 {{AUR|vsftpd-ext}} {{Broken package link|{{aur-mirror|vsftpd-ext}}}} 并在 conf 文件中设置<br />
allow_writable_chroot=YES<br />
<br />
=== FileZilla Client: GnuTLS error -8 -15 -110 when connecting via SSL ===<br />
vsftpd 尝试在 SSL 会话中显示纯文本错误消息。 为了进行调试,暂时禁用加密,您将看到正确的错误消息。[http://ramblings.linkerror.com/?p=45] [https://serverfault.com/questions/772494/vsftpd-list-causes-gnutls-error-15]<br />
<br />
=== vsftpd.service fails to run on boot ===<br />
如果您启用了vsftpd服务,并且无法在启动时运行,请确保它已在服务文件中设置为在 network.target 之后加载:<br />
<br />
{{hc|/usr/lib/systemd/system/vsftpd.service|2=<br />
[Unit]<br />
Description=vsftpd daemon<br />
After=network.target<br />
}}<br />
<br />
=== ipv6 only fails with: 500 OOPS: run two copies of vsftpd for IPv4 and IPv6 ===<br />
你很有可能已经注释了这一行<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
#listen=YES<br />
#<br />
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6<br />
# sockets, you must run two copies of vsftpd with two configuration files.<br />
# Make sure, that one of the listen options is commented !!<br />
listen_ipv6=YES<br />
<br />
而不是设置<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
listen=NO<br />
<br />
== 更多资源 ==<br />
* [http://vsftpd.beasts.org/ vsftpd official homepage]<br />
* [http://vsftpd.beasts.org/vsftpd_conf.html vsftpd.conf man page]</div>
745275633
https://wiki.archlinux.org/index.php?title=Very_Secure_FTP_Daemon_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=502744
Very Secure FTP Daemon (简体中文)
2017-12-15T10:54:19Z
<p>745275633: 502741</p>
<hr />
<div>[[Category:File Transfer Protocol (简体中文)]]<br />
[[cs:Very Secure FTP Daemon]]<br />
[[en:Very Secure FTP Daemon]]<br />
[[es:Very Secure FTP Daemon]]<br />
[[it:Very Secure FTP Daemon]]<br />
[[ja:Very Secure FTP Daemon]]<br />
[[ru:Very Secure FTP Daemon]]<br />
{{TranslationStatus (简体中文)|Very Secure FTP Daemon|2017-12-15|502741}}<br />
[https://security.appspot.com/vsftpd.html vsftpd] (Very Secure FTP Daemon) 是一个为UNIX类系统开发的轻量,稳定和安全的FTP服务器端.<br />
== 安装 ==<br />
[[安装]] {{pkg|vsftpd}} 然后 [[Systemd (简体中文)#使用单元|启动/启用]] {{ic|vsftpd.service}} 守护程序。<br />
<br />
使用 [[Wikipedia:xinetd|xinetd]] 监视和控制 vsftpd 连接,请参见 [[#使用 xinetd]]。<br />
<br />
== 配置 ==<br />
vsftpd 的大多数配置都可以通过编辑 {{ic|/etc/vsftpd.conf}} 文件实现。 该文件本身自带大量注释说明,所以这一章节只就一些重要的配置予以说明。 有关所有可用选项和文档,请参阅 vsftpd.conf(5) 或 [https://security.appspot.com/vsftpd/vsftpd_conf.html 在线查看] 手册页。默认情况下,由 {{ic|/srv/ftp}} 提供文件。<br />
<br />
允许的连接 {{ic|/etc/hosts.allow}}:<br />
# 允许所有连接<br />
vsftpd: ALL<br />
# IP地址范围<br />
vsftpd: 10.0.0.0/255.255.255.0<br />
<br />
=== 允许上传 ===<br />
需要将 {{ic|/etc/vsftpd.conf}} 中的 {{ic|write_enable}} 值设为YES,以便允许修改文件系统(如上传):<br />
write_enable=YES<br />
<br />
=== 本地用户登录 ===<br />
需要修改 {{ic|/etc/vsftpd.conf}} 中的如下值,以便允许 {{ic|/etc/passwd}} 中的用户登录:<br />
local_enable=YES<br />
<br />
=== 匿名用户登录 ===<br />
以下行控制匿名用户是否可以登录。默认情况下,匿名登录只能从 {{ic|/srv/ftp}} 下载:<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
...<br />
# 允许匿名FTP? (当心 - 默认情况下允许除非您将其注释)。<br />
anonymous_enable=YES<br />
...<br />
# 取消注释以允许匿名FTP用户上传文件。<br />
# 只有上述全局写入被激活,才会有效果。<br />
# 另外,你显然需要创建FTP用户有写权限的目录。<br />
# anon_upload_enable=YES<br />
#<br />
# 如果您希望匿名FTP用户能够创建新目录,请取消注释。<br />
# anon_mkdir_write_enable=YES<br />
...<br />
}}<br />
<br />
您也可以添加以下选项(详见 {{man|5|vsftpd.conf}}):<br />
{{hc|1=/etc/vsftpd.conf|2=<br />
# 匿名登录不需要密码<br />
no_anon_password=YES<br />
<br />
# 匿名客户端的最大传输速率(以 Bytes/秒 为单位)<br />
anon_max_rate=30000<br />
<br />
# 用于匿名登录的目录<br />
anon_root=/example/directory/<br />
}}<br />
<br />
=== Chroot 限制 ===<br />
为了阻止用户离开家目录,可以设置 chroot 环境。要启用此功能,请在 {{ic|/etc/vsftpd.conf}} 中添加以下行:<br />
chroot_list_enable=YES<br />
chroot_list_file=/etc/vsftpd.chroot_list<br />
{{ic|chroot_list_file}} 定义了被 chroot 限制的用户列表。<br />
<br />
对于更严格的环境,请指定以下行:<br />
chroot_local_user=YES<br />
这将默认为所有用户启用 chroot 环境。 在这种情况下,{{ic|chroot_list_file}} 定义了'''不受''' chroot 限制的用户列表。<br />
<br />
=== 限制用户登录 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加以下两行来阻止特定用户登录FTP服务器:<br />
userlist_enable=YES<br />
userlist_file=/etc/vsftpd.user_list<br />
{{ic|userlist_file}} 文件列出'''不允许'''登录的用户。<br />
<br />
如果您只想允许特定的用户登录,请添加以下行:<br />
userlist_deny=NO<br />
此时 {{ic|userlist_file}} 文件指定'''允许'''登录的用户。<br />
<br />
=== 限制连接数 ===<br />
可以通过在 {{ic|/etc/vsftpd.conf}} 中添加如下信息来限制本地用户的数据传输速率:<br />
local_max_rate=1000000 # 最大数据传输速率(单位: Bytes/秒)<br />
max_clients=50 # 可以同时连接的最大客户端数<br />
max_per_ip=2 # 每个 IP 允许的最大连接数<br />
<br />
=== 使用 xinetd ===<br />
Xinetd提供增强的监控和控制连接功能。对于基本的可以工作的 vsftpd-server 是不必要的<br />
<br />
安装 vsftpd 将会添加必要的服务文件 {{ic|/etc/xinetd.d/vsftpd}}, 默认情况下,服务被禁用。<br />
<br />
启用ftp服务:<br />
<pre><br />
service ftp<br />
{<br />
socket_type = stream<br />
wait = no<br />
user = root<br />
server = /usr/sbin/vsftpd<br />
log_on_success += HOST DURATION<br />
log_on_failure += HOST<br />
disable = no<br />
}<br />
</pre><br />
<br />
如果您将vsftpd守护程序设置为以独立模式运行,而不是启动 vsftpd 守护程序和 [[enable]] {{ic | xinetd.service}},请在 {{ic|/etc/vsftpd.conf}} 中进行以下更改:<br />
listen=NO<br />
否则连接将失败:<br />
500 OOPS: could not bind listening IPv4 socket<br />
<br />
=== 使用 SSL 使 FTP 安全 ===<br />
<br />
生成一个SSL证书,如这样:<br />
# cd /etc/ssl/certs<br />
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/certs/vsftpd.pem -out /etc/ssl/certs/vsftpd.pem<br />
# chmod 600 /etc/ssl/certs/vsftpd.pem<br />
<br />
您将被询问有关您公司等的许多问题,如果您的证书是不需要信任的,那么您填写的内容并不重要。但是您将使用这些内容加密!如果您计划在使用此功能方面取得信任,则可以从 CA 如 thawte,verisign 获得一个。<br />
<br />
编辑您的配置 {{ic|/etc/vsftpd.conf}}<br />
<pre><br />
#这个很重要<br />
ssl_enable=YES<br />
<br />
#选择你想要的<br />
# 如果你接受 anon-connections 你可能要启用这个<br />
# allow_anon_ssl=NO<br />
<br />
#选择你想要的<br />
# 我猜这是一个性能上的问题<br />
# force_local_data_ssl=NO<br />
<br />
#选择你想要的<br />
force_local_logins_ssl=YES<br />
<br />
#你至少应该启用这个如果你启用 ssl...<br />
ssl_tlsv1=YES<br />
#选择你想要的<br />
ssl_sslv2=YES<br />
#选择你想要的<br />
ssl_sslv3=YES<br />
#给出您当前生成的 *.pem 文件的正确路径<br />
rsa_cert_file=/etc/ssl/certs/vsftpd.pem<br />
# *.pem 文件包含密钥和证书<br />
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem<br />
</pre><br />
<br />
=== 动态 DNS ===<br />
确保在 {{ic|/etc/vsftpd.conf}} 中放入以下两行:<br />
pasv_addr_resolve=YES<br />
pasv_address=yourdomain.noip.info<br />
定期更新 pasv_address 并重新启动服务器的脚本是'''不必要'''的,因为它可以在别处被找到!<br />
{{注意|您将无法通过 LAN 连接到被动模式。尝试在局域网 PC 的 FTP 客户端上的活动模式。}}<br />
<br />
=== 端口配置 ===<br />
特别是对于暴露于 Web 的私有 FTP 服务器,建议将监听端口更改为标准端口 21 以外的其他服务器。可以使用 {{ic|/etc/vsftpd.conf}} 中的以下行来完成此操作:<br />
listen_port=2211<br />
此外,定制的端口范围可以由以下行给出:<br />
pasv_min_port=49152<br />
pasv_max_port=65534<br />
<br />
=== 配置 iptables ===<br />
通常,运行FTP守护进程的服务器受 [[Iptables (简体中文)]] 防火墙的保护。要允许访问FTP服务器,需要打开相应的端口,如:<br />
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT<br />
本文不会提供有关如何设置iptables的任何说明,但这里是一个例子:[[Simple stateful firewall (简体中文)]]。<br />
<br />
有一些内核模块需要在这里引用的 iptables 正确的处理 FTP 连接。 其中特别是 ''nf_conntrack_ftp''。这是需要的,因为FTP使用给定的 ''listen_port''(默认为21) 仅用于命令; 所有的数据传输都是通过不同的端口完成的。 这些端口由FTP守护程序为每个会话随机选择(也取决于是使用主动还是被动模式)。要告诉 iptables 应该接受端口上的数据包,需要 ''nf_conntrack_ftp''。要在启动时自动加载,请在 {{ic|/etc/modules-load.d}} 中创建新文件,例如:<br />
# echo nf_conntrack_ftp > /etc/modules-load.d/nf_conntrack_ftp.conf<br />
<br />
如果内核 >= 4.7,您需要通过 ''sysctl'' 设置 ''net.netfilter.nf_conntrack_helper = 1'',如:<br />
# echo net.netfilter.nf_conntrack_helper=1 > /etc/sysctl.d/70-conntrack.conf<br />
或使用<br />
# iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp<br />
<br />
== 小技巧 ==<br />
=== 虚拟用户的PAM认证 ===<br />
由于 [[PAM (简体中文)]] 不再提供 {{ic|pam_userdb.so}} 另一个简单的方法是使用 {{AUR|libpam_pwdfile}}。对于具有许多用户的环境,另一个选项可能是 {{AUR|pam_mysql}} {{Broken package link|{{aur-mirror|pam_mysql}}}}。但是,本节仅限于解释如何通过 {{ic|pam_pwdfile.so}} 配置chroot环境和身份验证。<br />
<br />
在此示例中,我们创建目录 {{ic|vsftpd}}:<br />
# mkdir /etc/vsftpd<br />
<br />
创建和存储用户名和密码的一个选择是使用 Apache 的生成器 htpasswd:<br />
# htpasswd -c /etc/vsftpd/.passwd<br />
上述命令的一个问题是 vsftpd 可能无法读取生成的 MD5 散列密码。如果使用 -d 开关运行相同的命令,则使用 crypt() 加密,vsftpd 的密码变得可读,但其缺点是安全性较低,密码限制为8个字符。 Openssl 可用于使用算法1生成基于 MD5 的 BSD 密码:<br />
# openssl passwd -1<br />
<br />
无论那个解决方案 {{ic|/etc/vsftpd/.passwd}} 应该如下所示:<br />
username1:hashed_password1<br />
username2:hashed_password2<br />
...<br />
<br />
接下来,您需要使用 {{ic|pam_pwdfile.so}} 和生成的 {{ic|/etc/vsftpd/.passwd}} 文件创建PAM服务。在本例中,我们为 ''vsftpd'' 创建了一个PAM策略,其中包含以下内容:<br />
{{hc|/etc/pam.d/vsftpd|auth required pam_pwdfile.so pwdfile /etc/vsftpd/.passwd<br />
account required pam_permit.so}}<br />
<br />
现在是为虚拟用户创建一个 home 的时候了。在示例中,决定用 {{ic|/srv/ftp}} 为虚拟用户托管数据,这也反映了Arch的默认目录结构。首先创建 virtual 用户并使 {{ic|/srv/ftp}} 成为它的 home:<br />
# useradd -d /srv/ftp virtual<br />
让 virtual 成为所有者<br />
# chown virtual:virtual /srv/ftp<br />
<br />
一个基本的没有私人文件夹配置的 /etc/vsftpd,默认的虚拟用户的 home 文件夹:<br />
# 指向正确的PAM服务文件<br />
pam_service_name=vsftpd<br />
write_enable=YES<br />
hide_ids=YES<br />
listen=YES<br />
connect_from_port_20=YES<br />
anonymous_enable=NO<br />
local_enable=YES<br />
dirmessage_enable=YES<br />
xferlog_enable=YES<br />
chroot_local_user=YES<br />
guest_enable=YES<br />
guest_username=virtual<br />
virtual_use_local_privs=YES<br />
<br />
您自己的设置可能不需要一些参数。如果您希望chroot环境可写,您将需要将以下内容添加到配置文件中:<br />
allow_writeable_chroot = YES<br />
否则 vsftpd 的默认安全设置会抱怨,如果它检测到chroot是可写的。<br />
<br />
[[Start]] {{ic|vsftpd.service}}。<br />
<br />
您现在应该可以使用存储在 {{ic|/etc/vsftpd/.passwd}} 中的任何用户和密码从FTP客户端登录。<br />
<br />
==== 为虚拟用户创建私有目录 ====<br />
首先创建用户文件夹<br />
# mkdir /srv/ftp/user1<br />
# mkdir /srv/ftp/user2<br />
# chown virtual:virtual /srv/ftp/user?/<br />
<br />
随后, 在{{ic|/etc/vsftpd.conf}}增加如下行:<br />
local_root=/srv/ftp/$USER<br />
user_sub_token=$USER<br />
<br />
== 问题解决 ==<br />
<br />
=== vsftpd: no connection (Error 500) with recent kernels (3.5 and newer) and .service ===<br />
将其添加到您的 {{ic|/etc/vsftpd.conf}}:<br />
seccomp_sandbox=NO<br />
<br />
=== vsftpd: refusing to run with writable root inside chroot() ===<br />
从 vsftpd 2.3.5 开始,用户被锁定的 chroot 目录不可写。这是为了防止安全漏洞。<br />
<br />
允许上传的安全方法是保持 chroot 启用,并配置您的 FTP 目录。<br />
<br />
local_root=/srv/ftp/user<br />
<br />
# mkdir -p /srv/ftp/user/upload<br />
#<br />
# chmod 550 /srv/ftp/user<br />
# chmod 750 /srv/ftp/user/upload<br />
<br />
如果你必须这么做:<br />
<br />
您可以将其放入您的 {{ic|/etc/vsftpd.conf}} 以解决此安全性增强(自vsftpd 3.0.0;从[http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/ Fixing 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()]):<br />
allow_writeable_chroot=YES<br />
或者:<br />
<br />
安装 {{AUR|vsftpd-ext}} {{Broken package link|{{aur-mirror|vsftpd-ext}}}} 并在 conf 文件中设置<br />
allow_writable_chroot=YES<br />
<br />
=== FileZilla Client: GnuTLS error -8 -15 -110 when connecting via SSL ===<br />
vsftpd 尝试在 SSL 会话中显示纯文本错误消息。 为了进行调试,暂时禁用加密,您将看到正确的错误消息。[http://ramblings.linkerror.com/?p=45] [https://serverfault.com/questions/772494/vsftpd-list-causes-gnutls-error-15]<br />
<br />
=== vsftpd.service fails to run on boot ===<br />
如果您启用了vsftpd服务,并且无法在启动时运行,请确保它已在服务文件中设置为在 network.target 之后加载:<br />
<br />
{{hc|/usr/lib/systemd/system/vsftpd.service|2=<br />
[Unit]<br />
Description=vsftpd daemon<br />
After=network.target<br />
}}<br />
<br />
=== ipv6 only fails with: 500 OOPS: run two copies of vsftpd for IPv4 and IPv6 ===<br />
你很有可能已经注释了这一行<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
#listen=YES<br />
#<br />
# This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6<br />
# sockets, you must run two copies of vsftpd with two configuration files.<br />
# Make sure, that one of the listen options is commented !!<br />
listen_ipv6=YES<br />
<br />
而不是设置<br />
<br />
# When "listen" directive is enabled, vsftpd runs in standalone mode and<br />
# listens on IPv4 sockets. This directive cannot be used in conjunction<br />
# with the listen_ipv6 directive.<br />
listen=NO<br />
<br />
== 更多资源 ==<br />
* [http://vsftpd.beasts.org/ vsftpd official homepage]<br />
* [http://vsftpd.beasts.org/vsftpd_conf.html vsftpd.conf man page]</div>
745275633
https://wiki.archlinux.org/index.php?title=Archiso_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=500185
Archiso (简体中文)
2017-11-30T11:33:31Z
<p>745275633: Undo revision 499915 by Svito (talk) 原文没有更新</p>
<hr />
<div>[[Category:简体中文]]<br />
[[Category:Live Arch systems (简体中文)]]<br />
[[Category:Getting and installing Arch (简体中文)]]<br />
[[ar:Archiso]]<br />
[[el:Archiso]]<br />
[[en:Archiso]]<br />
[[es:Archiso]]<br />
[[fr:Archiso]]<br />
[[it:Archiso]]<br />
[[ja:Archiso]]<br />
[[nl:Archiso]]<br />
[[ru:Archiso]]<br />
[[sk:Archiso]]<br />
{{TranslationStatus (简体中文)|Archiso|2017-11-25|498359}}<br />
{{Related articles start (简体中文)}}<br />
{{Related|Remastering the Install ISO}}<br />
{{Related2|PXE (简体中文)|PXE}}<br />
{{Related2|Archboot (简体中文)|Archboot}}<br />
{{Related articles end}}<br />
'''Archiso''' 是一组 bash 脚本,它能够建立功能全面的 Arch Linux 的 Live CD/DVD/USB 映像。它同样是用来生成官方映像的工具,但由于它是一个非常通用的工具,所以它可以被用来生成从救援系统、安装盘,到特殊爱好的 Live CD/DVD/USB 系统——无人知晓还有其他什么。简单地说,如果要将 Arch 放在一条闪光的船上,它可以帮你做到这一点。Archiso 的核心以及灵魂是 ''mkarchiso''。它的所有选项都写在它的用法输出上,所以它的直接使用方法将不在这里讨论。相反,这篇 wiki 文章将导引你迅速建立你的 Live 介质。<br />
<br />
== 安装和配置 ==<br />
<br />
{{注意|<br />
* 您必须在 x86_64 上运行 Archiso。 [https://projects.archlinux.org/archiso.git/tree/docs/README.build#n67]<br />
* 以下操作请在ROOT权限下使用,在错误的权限下操作会造成一下问题。}}<br />
当你开始之前, [[install|安装]] {{Pkg|archiso}} 或 {{AUR|archiso-git}}。<br />
<br />
创建一个用于工作的目录, 实时镜像将会在这里被处理。 {{ic|~/archlive}} 是一个好选择。<br />
$ mkdir ~/archlive<br />
<br />
现在要将早先安装到主机的 archiso 脚本复制到你新建的工作目录内。<br />
<br />
Archiso 附带2个预定义配置( profiles ): ''releng'' 和''baseline''。<br />
<br />
* 如果您想要创建完全定制的 Live Arch Linux ,并预装所有您喜爱的程序和配置,使用 ''releng''。<br />
<br />
* 如果您只是想构建一个简易 Live 镜像,无预装软件并仅有基础配置,那么使用 ''baseline''。<br />
<br />
现在,将您选择的配置文件复制到目录(在下面的示例中为 ''archlive''),您可以在其中进行调整和构建。 执行以下操作,用 {{ic|releng}} 或 {{ic|baseline}} 替换 {{ic|'''profile'''}}。<br />
<br />
# cp -r /usr/share/archiso/configs/'''profile'''/* ''archlive''<br />
<br />
* 如果你使用 {{ic|releng}} 配置文件来创建一个完全自定义的镜像,那么你可以继续到:[[#配置 Live 介质]]。<br />
<br />
* 如果您使用 {{ic|baseline}} 配置文件创建一个简易映像,那么你不需要做任何定制,并可以直接继续到 [[#构建ISO]].<br />
<br />
== 配置 Live 介质 ==<br />
<br />
本节详细介绍该如何配置您将创建的映像,允许您定义哪些包以及配置将被您的 Live 映像所包含。<br />
在 [[#安装和配置]] 中创建的{{ic|''archlive''}}目录中有许多文件和目录; 我们只关注其中一部分,主要是<br />
* {{ic|packages.*}} - 在这里一行行列出你想要安装的包,和 <br />
* {{ic|airootfs}} 目录——这是一个覆盖目录,你将在这里完成所有的定制工作。<br />
一般来说,您在全新安装之后所执行的每个管理任务(不包括软件包安装)可以被写入这个脚本: {{ic|''archlive''/airootfs/root/customize_airootfs.sh}}。您必须从新环境的角度来写该脚本,所以脚本中的 / 代表方才被创建的 Live ISO 的根。<br />
<br />
=== 安装包 ===<br />
<br />
[[Edit|编辑]] {{ic|packages.i686}},{{ic|packages.x86_64}} 或 {{ic|packages.both}} 中的程序包列表,以指示要在 live 媒体上安装那些程序包。这里的后缀表示包可用的架构。<br />
<br />
{{Note|如果要在 Live CD 中使用 [[窗口管理器]],则必须添加必要且正确的 [[video drivers]],否则 WM 可能在加载时冻结。}}<br />
<br />
==== 自定义本地库 ====<br />
<br />
{{Merge|Pacman tips#自定义本地库|移动一般信息 (e.g. repo tree) 到主文章.|Talk:Archiso}}<br />
{{过期|i686 需要删除。|Talk:Archiso}}<br />
<br />
若需准备自定义包或是自 [[Arch User Repository (简体中文)|AUR]]/[[Arch Build System (简体中文)|ABS]] 安装包,你也可以[[Custom local repository|创建自定义本地资源库]]。当这样处理两种架构的软件包时,您应该遵循一定的目录顺序,才不会出现问题。<br />
例如:<br />
<br />
*{{ic|~/customrepo}}<br />
**{{ic|~/customrepo/x86_64}}<br />
***{{ic|~/customrepo/x86_64/foo-x86_64.pkg.tar.xz}}<br />
***{{ic|~/customrepo/x86_64/customrepo.db.tar.gz}}<br />
***{{ic|~/customrepo/x86_64/customrepo.db}} (由 {{ic|repo-add}} 创建的符号链接)<br />
**{{ic|~/customrepo/i686}}<br />
***{{ic|~/customrepo/i686/foo-i686.pkg.tar.xz}}<br />
***{{ic|~/customrepo/i686/customrepo.db.tar.gz}}<br />
***{{ic|~/customrepo/i686/customrepo.db}} (由 {{ic|repo-add}} 创建的符号链接)<br />
<br />
如此后,您可以添加您的仓库——把下面的句子加入 {{ic|~/archlive/pacman.conf}},并置于其他仓库条目上面(优先级最高):<br />
<br />
# 自定义仓库<br />
[customrepo]<br />
SigLevel = Optional TrustAll<br />
Server = file:///home/'''user'''/customrepo/$arch<br />
<br />
这样,构建脚本将会寻找合适的包。<br />
<br />
如果不是这样,你将得到与此类似的错误消息:<br />
<br />
error: failed to prepare transaction (package architecture is not valid)<br />
:: package foo-i686 does not have a valid architecture<br />
<br />
==== 避免安装属于base组的包 ====<br />
<br />
默认情况下,{{ic|/usr/bin/mkarchiso}}——一个被 {{ic|~/archlive/build.sh}} 使用的脚本——会调用 {{Pkg|arch-install-scripts}} 中一个名为 {{ic|pacstrap}} 的程序,且在调用时不使用 {{ic|-i}} 标志——这将使 [[Pacman]] 在安装过程中不等待用户输入。<br />
<br />
当 base 组软件包被加入黑名单——把它们写到 {{ic|~/archlive/pacman.conf}} 中的 {{ic|IgnorePkg}} 行——时,[[Pacman]] 会询问是否仍然安装它们——意味着如果用户输入被跳过,它们就会被安装。为了避免安装这些包,这里有一些选择:<br />
<br />
* '''丑陋'''方案(Dirty):在 {{ic|/usr/bin/mkarchiso}} 中每次调用 {{ic|pacstrap}} 的行上加入 {{ic|i}} 标志。<br />
<br />
* '''整洁'''方案(Clean):创建 {{ic|/usr/bin/mkarchiso}} 的一份复制。在该复制中增加此标志,并修改 {{ic|~/archlive/build.sh}} 以使其调用修改过的 mkarchiso 脚本。<br />
<br />
* '''高级'''方案(Advanced): 在 {{ic|~/archlive/build.sh}} 中创建一个函数,该函数将在基础安装结束后显式移除那些包。若这样做,可以免去在安装过程中多次按回车键的麻烦。<br />
<br />
==== Installing packages from multilib ====<br />
<br />
要从 [[Multilib (简体中文)|Multilib]] 资源库安装软件包,您必须创建两个 pacman 配置文件:一个用于 x86_64,一个用于 i686。 将 {{ic|pacman.conf}} 复制到 {{ic|pacmanx86_64.conf}} 和 {{ic|pacmani686.conf}}。 取消注释以下行以{{ic|pacmanx86_64.conf}} 中启用 ''multilib''):<br />
<br />
{{hc|pacmanx86_64.conf|2=<br />
[multilib]<br />
SigLevel = PackageRequired<br />
Include = /etc/pacman.d/mirrorlist<br />
}}<br />
<br />
然后用编辑器编辑 {{ic|build.sh}}。 把:<br />
<br />
{{hc|build.sh|<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in i686 x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
done<br />
<br />
run_once make_packages_efi<br />
<br />
for arch in i686 x86_64; do<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
改为:<br />
<br />
{{hc|build.sh|<br />
cp -v releng/pacmanx86_64.conf releng/pacman.conf<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
<br />
echo make_pacman_conf i686<br />
cp -v releng/pacmani686.conf releng/pacman.conf<br />
cp -v releng/pacmani686.conf ${work_dir}/pacman.conf<br />
<br />
<br />
for arch in i686; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
这样,x86_64 和 i686 的软件包将安装有自己的pacman配置文件。<br />
<br />
=== 向映像里添加文件===<br />
<br />
{{注意|你必须使用 root 权限来完成这件事,不要改变任何你复制过来的文件的所有权,airootfs 中的'''所有'''文件必须为 root 用户所有。适当的所有制将在不久被解决。}}<br />
<br />
airootfs 目录作为要覆盖的文件,把它看作是在当前系统上的根目录'/',所以你在这个目录中放置的任何文件都将在开机时被复制。<br />
<br />
所以,如果你在当前系统上有一组 iptables 脚本且想要在 Live 映像上使用,请这样复制:<br />
# cp -r /etc/iptables ~/archlive/airootfs/etc<br />
<br />
在用户 home 文件夹里放置文件的方法有些许不同。不要把它们放在 {{ic|airootfs/home}},而是在 airootfs/ 里创建 skel 目录并将其放置在那里。然后我们会将相关命令添加到 {{ic|customize_airootfs.sh}}——我们要使用它在引导时复制文件以及梳理权限。<br />
<br />
首先,创建 skel 目录<br />
# mkdir ~/archlive/airootfs/etc/skel<br />
<br />
现在,复制 'home' 的文件到 skel 目录。例如,对于 {{ic|.bashrc}}:<br />
# cp ~/.bashrc ~/archlive/airootfs/etc/skel/<br />
<br />
当 {{ic|~/archlive/airootfs/root/customize_airootfs.sh}} 被执行,并且一个新用户已被创建, skel 目录中的文件将自动被复制到新的 home 文件夹中,并被设置正确的权限。<br />
<br />
类似地,需要注意位于层次结构下方的特殊配置文件。作为示例,配置文件 {{ic|/etc/X11/xinit/xinitrc}} 位于可能被安装包覆盖的路径上。要将 {{ic|xinitrc}} 的配置文件放在 {{ic|~/archlive/airootfs/etc/skel/}} ,然后修改 {{ic|customize_airootfs.sh}} 以适当地移动。<br />
<br />
=== 引导器 ===<br />
<br />
默认的文件应该可以正常工作,所以你应该不需要去碰它。<br />
<br />
由于 isolinux 的模块化性质,你能够使用很多插件,因为所有 *.c32 都被复制且可以可供您使用。看看[http://syslinux.zytor.com/wiki/index.php/SYSLINUX syslinux 官方网站] 和 [https://projects.archlinux.org/archiso.git/tree/configs/syslinux-iso/boot-files Archiso Git Repo]。使用所述插件,便有可能做出更具视觉吸引力及复杂的菜单。参见 [http://syslinux.zytor.com/wiki/index.php/Comboot/menu.c32 此处]。<br />
<br />
=== 登录管理器 ===<br />
<br />
通过启用您登录管理器的 [[Systemd (简体中文)|systemd]] 服务来做到在引导时启动 X 。如果您知道哪一个 .service 文件需要软链接,那就太好了。如果不知道,你也可以轻松找出——如果你在创建 iso 所用的系统上使用相同的程序的话。只需使用:<br />
<br />
$ ls -l /etc/systemd/system/display-manager.service<br />
<br />
现在在 {{ic|~/archlive/airootfs/etc/systemd/system}} 中创建相同的软链接。如 LXDM:<br />
<br />
# ln -s /usr/lib/systemd/system/lxdm.service ~/archlive/airootfs/etc/systemd/system/display-manager.service<br />
<br />
这将使您在 live 系统启用在系统上启动 LXDM。(This will enable LXDM at system start on your live system.)<br />
<br />
或者,您也可以启用 {{ic|airootfs/root/customize_airootfs.sh}} 中的服务以及其中启用的其他服务。<br />
<br />
如果您希望图形环境在启动过程中自动启动,请确保编辑 {{ic|airootfs/root/customize_airootfs.sh}} 并替换<br />
systemctl set-default multi-user.target<br />
为<br />
systemctl set-default graphical.target<br />
<br />
=== 改变自动登录状态 ===<br />
<br />
Getty 的自动登录配置位于 {{ic|airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf}}。 <br />
<br />
您可以修改这个文件来更改自动登录用户:<br />
<br />
[Service]<br />
ExecStart=<br />
ExecStart=-/sbin/agetty --autologin '''isouser''' --noclear %I 38400 linux<br />
<br />
或者干脆删除它来禁用自动登录。<br />
<br />
== 构建ISO ==<br />
<br />
现在,你已经准备好把你的文件转换成 .iso,以便可以刻录到 CD 或 USB:<br />
<br />
首先创建 {{ic|out/}} 目录,<br />
<br />
# mkdir ~/archlive/out/<br />
<br />
然后在 {{ic|~/archlive}} 里面执行:<br />
<br />
# ./build.sh -v<br />
<br />
该脚本将现在下载并安装你指定的软件包到 {{ic|work/*/airootfs}},创建内核和 init 映像(initramfs),应用您的修改,并最终把 ISO 建立到 {{ic|out/}}。<br />
<br />
=== 重建ISO ===<br />
<br />
在修改之后重建 ISO 不被官方支持。但是,通过应用两个步骤很容易。首先,您必须删除工作目录中的锁定文件:<br />
<br />
# rm -v work/build.make_*<br />
<br />
此外,需要编辑脚本 {{ic|airootfs/root/customize_airootfs.sh}},并在 {{ic|useradd}} 行的开头添加 {{ic|id}} 命令,如下所示。否则,重建将在此处停止,因为要添加的用户已经存在 [https://bugs.archlinux.org/task/41865]。<br />
{{Style|typo?}}<br />
<br />
! id arch && useradd -m -p "" -g users -G "adm,audio,floppy,log,network,rfkill,scanner,storage,optical,power,wheel" -s /usr/bin/zsh arch<br />
<br />
同时删除创建的用户或符号链接,如 {{ic|/etc/sudoers}} 等持久性数据。<br />
<br />
{{Expansion|报告需要删除或重置的更多数据。}}<br />
<br />
通过编辑 pacstrap 脚本(位于 /bin/pacstrap)并在第 361 行更改以下内容,可以稍微加快重建速度:<br />
<br />
修改前:<br />
<br />
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then<br />
<br />
修改后:<br />
<br />
if ! pacman -r "$newroot" -Sy --needed "${pacman_args[@]}"; then<br />
<br />
这增加了初始引导的速度,因为它不必下载和安装任何已经安装的基础包。<br />
<br />
== 使用ISO ==<br />
<br />
有关各种选项,请参见 [[:Category:Getting_and_installing_Arch_(简体中文)#安装方式]] 部分。<br />
<br />
== 提示和技巧 ==<br />
<br />
=== 在沒有互联网连接的情况下安装 Archiso ===<br />
{{Move|Installation without Internet access|似乎这可以独立成一篇|Talk:Archiso}}<br />
<br />
若你想在没有互联网连接或者你不想重复下载你想要的包的情况下安装 archiso(例如[https://www.archlinux.org/download/ 官方的每月发布版]):<br />
<br />
首先,按照[[Installation guide (简体中文)|安装指南]],并跳过一些步骤(如[[Installation guide (简体中文)#连接到因特网|连接到因特网]]),直到[[Installation guide (简体中文)#安装基本系统|安装基本系统]]之前。<br />
<br />
==== 安装 archiso 到新的 root ====<br />
<br />
复制 Live 环境的''所有文件''到新的根目录,而不是使用 {{ic|pacstrap}}(这将尝试从远程存储库下载):<br />
# time cp -ax / /mnt<br />
{{注意|The option ({{ic|-x}})排除了一些特殊目录,因为它们不应该被复制到新的根目录。}}<br />
<br />
然后,创建一些目录并复制内核映像到新的根,以保证新系统的完整性:<br />
<br />
# cp -vaT /run/archiso/bootmnt/arch/boot/$(uname -m)/vmlinuz /mnt/boot/vmlinuz-linux<br />
<br />
完成之后,请按[[Installation guide (简体中文)#Fstab]]所述生成 fstab。<br />
<br />
==== Chroot 并配置基本系统 ====<br />
<br />
下一步,chroot 到您新安装的系统:<br />
<br />
# arch-chroot /mnt /bin/bash<br />
<br />
请注意,在您配置 locale、键盘映射等之前,你仍然需要为了避免延续 Live 环境的轨迹——或者说对 archiso 所做的一些不适用于非 Live 环境的修改——而做一些事情。<br />
<br />
===== 恢复 journald 的配置 =====<br />
[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/root/customize_airootfs.sh#n19 archiso 的这个修改]会导致日志存储在 RAM 上——它意味着在重启后日志便会丢失。为了解决这个问题,执行:<br />
<br />
# sed -i 's/Storage=volatile/#Storage=auto/' /etc/systemd/journald.conf<br />
<br />
===== 删除特殊的 udev 规则 =====<br />
如果有任何有线网络接口,[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/etc/udev/rules.d/81-dhcpcd.rules udev 的这个规则]会自动启动dhcpcd。<br />
<br />
# rm /etc/udev/rules.d/81-dhcpcd.rules<br />
<br />
===== 禁用和移除 archiso 创建的服务 =====<br />
有一些服务文件是为 Live 环境创建的,请禁用这些服务并移除文件——因为它们对于新系统来说没必要存在:<br />
<br />
# systemctl disable pacman-init.service choose-mirror.service<br />
# rm -r /etc/systemd/system/{choose-mirror.service,pacman-init.service,etc-pacman.d-gnupg.mount,getty@tty1.service.d}<br />
# rm /etc/systemd/scripts/choose-mirror<br />
<br />
===== 移除 Live 环境的特殊脚本 =====<br />
在 live 系统中通过 archiso 脚本安装了一些脚本,这对于新系统是不必要的:<br />
<br />
# rm /etc/systemd/system/getty@tty1.service.d/autologin.conf<br />
# rm /root/{.automated_script.sh,.zlogin}<br />
# rm /etc/mkinitcpio-archiso.conf<br />
# rm -r /etc/initcpio<br />
<br />
===== 导入archlinux密钥 =====<br />
<br />
为了使用官方存储库,我们需要导入 archlinux 主密钥([[Pacman/Package_signing_(简体中文)#初始化密钥环]])。这一步通常是通过 pacstrap 完成的,但是可以通过<br />
<br />
# pacman-key --init<br />
# pacman-key --populate archlinux<br />
<br />
{{注意|Keyboard or mouse activity is needed to generate entropy and speed-up the first step.}}<br />
<br />
===== 配置系统 =====<br />
<br />
现在,您可以按照 [[Installation_guide_(简体中文)#配置系统]] 中跳过的步骤(设置语言环境,时区,主机名等),并通过创建初始 ramdisk 来完成安装,如 [[Installation_guide_(简体中文)#Initramfs]]。<br />
<br />
===== 启用图形登录(可选) =====<br />
<br />
如果使用像GDM这样的显示管理器,则可能需要将 systemd 默认目标从 multi-user.target 更改为允许图形登录的目标。<br />
# systemctl disable multi-user.target<br />
# systemctl enable graphical.target<br />
<br />
== See also ==<br />
=== Documentation and tutorials ===<br />
* [https://projects.archlinux.org/archiso.git Archiso project page]<br />
* [https://projects.archlinux.org/archiso.git/tree/docs Official documentation]<br />
<br />
=== Example customization template ===<br />
* [http://easy.open.and.free.fr/didjix/ A live DJ distribution powered by ArchLinux and built with Archiso]</div>
745275633
https://wiki.archlinux.org/index.php?title=User_talk:745275633&diff=500184
User talk:745275633
2017-11-30T11:31:31Z
<p>745275633: Created blank page</p>
<hr />
<div></div>
745275633
https://wiki.archlinux.org/index.php?title=Archiso_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&diff=498840
Archiso (简体中文)
2017-11-25T01:36:13Z
<p>745275633: translate time</p>
<hr />
<div>[[Category:简体中文]]<br />
[[Category:Live Arch systems (简体中文)]]<br />
[[Category:Getting and installing Arch (简体中文)]]<br />
[[ar:Archiso]]<br />
[[el:Archiso]]<br />
[[en:Archiso]]<br />
[[es:Archiso]]<br />
[[fr:Archiso]]<br />
[[it:Archiso]]<br />
[[ja:Archiso]]<br />
[[nl:Archiso]]<br />
[[ru:Archiso]]<br />
[[sk:Archiso]]<br />
{{TranslationStatus (简体中文)|Archiso|2017-11-25|498359}}<br />
{{Related articles start (简体中文)}}<br />
{{Related|Remastering the Install ISO}}<br />
{{Related2|PXE (简体中文)|PXE}}<br />
{{Related2|Archboot (简体中文)|Archboot}}<br />
{{Related articles end}}<br />
'''Archiso''' 是一组 bash 脚本,它能够建立功能全面的 Arch Linux 的 Live CD/DVD/USB 映像。它同样是用来生成官方映像的工具,但由于它是一个非常通用的工具,所以它可以被用来生成从救援系统、安装盘,到特殊爱好的 Live CD/DVD/USB 系统——无人知晓还有其他什么。简单地说,如果要将 Arch 放在一条闪光的船上,它可以帮你做到这一点。Archiso 的核心以及灵魂是 ''mkarchiso''。它的所有选项都写在它的用法输出上,所以它的直接使用方法将不在这里讨论。相反,这篇 wiki 文章将导引你迅速建立你的 Live 介质。<br />
<br />
== 安装和配置 ==<br />
<br />
{{注意|<br />
* 您必须在 x86_64 上运行 Archiso。 [https://projects.archlinux.org/archiso.git/tree/docs/README.build#n67]<br />
* 以下操作请在ROOT权限下使用,在错误的权限下操作会造成一下问题。}}<br />
当你开始之前, [[install|安装]] {{Pkg|archiso}} 或 {{AUR|archiso-git}}。<br />
<br />
创建一个用于工作的目录, 实时镜像将会在这里被处理。 {{ic|~/archlive}} 是一个好选择。<br />
$ mkdir ~/archlive<br />
<br />
现在要将早先安装到主机的 archiso 脚本复制到你新建的工作目录内。<br />
<br />
Archiso 附带2个预定义配置( profiles ): ''releng'' 和''baseline''。<br />
<br />
* 如果您想要创建完全定制的 Live Arch Linux ,并预装所有您喜爱的程序和配置,使用 ''releng''。<br />
<br />
* 如果您只是想构建一个简易 Live 镜像,无预装软件并仅有基础配置,那么使用 ''baseline''。<br />
<br />
现在,将您选择的配置文件复制到目录(在下面的示例中为 ''archlive''),您可以在其中进行调整和构建。 执行以下操作,用 {{ic|releng}} 或 {{ic|baseline}} 替换 {{ic|'''profile'''}}。<br />
<br />
# cp -r /usr/share/archiso/configs/'''profile'''/* ''archlive''<br />
<br />
* 如果你使用 {{ic|releng}} 配置文件来创建一个完全自定义的镜像,那么你可以继续到:[[#配置 Live 介质]]。<br />
<br />
* 如果您使用 {{ic|baseline}} 配置文件创建一个简易映像,那么你不需要做任何定制,并可以直接继续到 [[#构建ISO]].<br />
<br />
== 配置 Live 介质 ==<br />
<br />
本节详细介绍该如何配置您将创建的映像,允许您定义哪些包以及配置将被您的 Live 映像所包含。<br />
在 [[#安装和配置]] 中创建的{{ic|''archlive''}}目录中有许多文件和目录; 我们只关注其中一部分,主要是<br />
* {{ic|packages.*}} - 在这里一行行列出你想要安装的包,和 <br />
* {{ic|airootfs}} 目录——这是一个覆盖目录,你将在这里完成所有的定制工作。<br />
一般来说,您在全新安装之后所执行的每个管理任务(不包括软件包安装)可以被写入这个脚本: {{ic|''archlive''/airootfs/root/customize_airootfs.sh}}。您必须从新环境的角度来写该脚本,所以脚本中的 / 代表方才被创建的 Live ISO 的根。<br />
<br />
=== 安装包 ===<br />
<br />
[[Edit|编辑]] {{ic|packages.i686}},{{ic|packages.x86_64}} 或 {{ic|packages.both}} 中的程序包列表,以指示要在 live 媒体上安装那些程序包。这里的后缀表示包可用的架构。<br />
<br />
{{Note|如果要在 Live CD 中使用 [[窗口管理器]],则必须添加必要且正确的 [[video drivers]],否则 WM 可能在加载时冻结。}}<br />
<br />
==== 自定义本地库 ====<br />
<br />
{{Merge|Pacman tips#自定义本地库|移动一般信息 (e.g. repo tree) 到主文章.|Talk:Archiso}}<br />
{{过期|i686 需要删除。|Talk:Archiso}}<br />
<br />
若需准备自定义包或是自 [[Arch User Repository (简体中文)|AUR]]/[[Arch Build System (简体中文)|ABS]] 安装包,你也可以[[Custom local repository|创建自定义本地资源库]]。当这样处理两种架构的软件包时,您应该遵循一定的目录顺序,才不会出现问题。<br />
例如:<br />
<br />
*{{ic|~/customrepo}}<br />
**{{ic|~/customrepo/x86_64}}<br />
***{{ic|~/customrepo/x86_64/foo-x86_64.pkg.tar.xz}}<br />
***{{ic|~/customrepo/x86_64/customrepo.db.tar.gz}}<br />
***{{ic|~/customrepo/x86_64/customrepo.db}} (由 {{ic|repo-add}} 创建的符号链接)<br />
**{{ic|~/customrepo/i686}}<br />
***{{ic|~/customrepo/i686/foo-i686.pkg.tar.xz}}<br />
***{{ic|~/customrepo/i686/customrepo.db.tar.gz}}<br />
***{{ic|~/customrepo/i686/customrepo.db}} (由 {{ic|repo-add}} 创建的符号链接)<br />
<br />
如此后,您可以添加您的仓库——把下面的句子加入 {{ic|~/archlive/pacman.conf}},并置于其他仓库条目上面(优先级最高):<br />
<br />
# 自定义仓库<br />
[customrepo]<br />
SigLevel = Optional TrustAll<br />
Server = file:///home/'''user'''/customrepo/$arch<br />
<br />
这样,构建脚本将会寻找合适的包。<br />
<br />
如果不是这样,你将得到与此类似的错误消息:<br />
<br />
error: failed to prepare transaction (package architecture is not valid)<br />
:: package foo-i686 does not have a valid architecture<br />
<br />
==== 避免安装属于base组的包 ====<br />
<br />
默认情况下,{{ic|/usr/bin/mkarchiso}}——一个被 {{ic|~/archlive/build.sh}} 使用的脚本——会调用 {{Pkg|arch-install-scripts}} 中一个名为 {{ic|pacstrap}} 的程序,且在调用时不使用 {{ic|-i}} 标志——这将使 [[Pacman]] 在安装过程中不等待用户输入。<br />
<br />
当 base 组软件包被加入黑名单——把它们写到 {{ic|~/archlive/pacman.conf}} 中的 {{ic|IgnorePkg}} 行——时,[[Pacman]] 会询问是否仍然安装它们——意味着如果用户输入被跳过,它们就会被安装。为了避免安装这些包,这里有一些选择:<br />
<br />
* '''丑陋'''方案(Dirty):在 {{ic|/usr/bin/mkarchiso}} 中每次调用 {{ic|pacstrap}} 的行上加入 {{ic|i}} 标志。<br />
<br />
* '''整洁'''方案(Clean):创建 {{ic|/usr/bin/mkarchiso}} 的一份复制。在该复制中增加此标志,并修改 {{ic|~/archlive/build.sh}} 以使其调用修改过的 mkarchiso 脚本。<br />
<br />
* '''高级'''方案(Advanced): 在 {{ic|~/archlive/build.sh}} 中创建一个函数,该函数将在基础安装结束后显式移除那些包。若这样做,可以免去在安装过程中多次按回车键的麻烦。<br />
<br />
==== Installing packages from multilib ====<br />
<br />
要从 [[Multilib (简体中文)|Multilib]] 资源库安装软件包,您必须创建两个 pacman 配置文件:一个用于 x86_64,一个用于 i686。 将 {{ic|pacman.conf}} 复制到 {{ic|pacmanx86_64.conf}} 和 {{ic|pacmani686.conf}}。 取消注释以下行以{{ic|pacmanx86_64.conf}} 中启用 ''multilib''):<br />
<br />
{{hc|pacmanx86_64.conf|2=<br />
[multilib]<br />
SigLevel = PackageRequired<br />
Include = /etc/pacman.d/mirrorlist<br />
}}<br />
<br />
然后用编辑器编辑 {{ic|build.sh}}。 把:<br />
<br />
{{hc|build.sh|<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in i686 x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
done<br />
<br />
run_once make_packages_efi<br />
<br />
for arch in i686 x86_64; do<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
改为:<br />
<br />
{{hc|build.sh|<br />
cp -v releng/pacmanx86_64.conf releng/pacman.conf<br />
run_once make_pacman_conf<br />
<br />
# Do all stuff for each airootfs<br />
for arch in x86_64; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
<br />
echo make_pacman_conf i686<br />
cp -v releng/pacmani686.conf releng/pacman.conf<br />
cp -v releng/pacmani686.conf ${work_dir}/pacman.conf<br />
<br />
<br />
for arch in i686; do<br />
run_once make_basefs<br />
run_once make_packages<br />
run_once make_packages_efi<br />
run_once make_setup_mkinitcpio<br />
run_once make_customize_airootfs<br />
done<br />
}}<br />
<br />
这样,x86_64 和 i686 的软件包将安装有自己的pacman配置文件。<br />
<br />
=== 向映像里添加文件===<br />
<br />
{{注意|你必须使用 root 权限来完成这件事,不要改变任何你复制过来的文件的所有权,airootfs 中的'''所有'''文件必须为 root 用户所有。适当的所有制将在不久被解决。}}<br />
<br />
airootfs 目录作为要覆盖的文件,把它看作是在当前系统上的根目录'/',所以你在这个目录中放置的任何文件都将在开机时被复制。<br />
<br />
所以,如果你在当前系统上有一组 iptables 脚本且想要在 Live 映像上使用,请这样复制:<br />
# cp -r /etc/iptables ~/archlive/airootfs/etc<br />
<br />
在用户 home 文件夹里放置文件的方法有些许不同。不要把它们放在 {{ic|airootfs/home}},而是在 airootfs/ 里创建 skel 目录并将其放置在那里。然后我们会将相关命令添加到 {{ic|customize_airootfs.sh}}——我们要使用它在引导时复制文件以及梳理权限。<br />
<br />
首先,创建 skel 目录<br />
# mkdir ~/archlive/airootfs/etc/skel<br />
<br />
现在,复制 'home' 的文件到 skel 目录。例如,对于 {{ic|.bashrc}}:<br />
# cp ~/.bashrc ~/archlive/airootfs/etc/skel/<br />
<br />
当 {{ic|~/archlive/airootfs/root/customize_airootfs.sh}} 被执行,并且一个新用户已被创建, skel 目录中的文件将自动被复制到新的 home 文件夹中,并被设置正确的权限。<br />
<br />
类似地,需要注意位于层次结构下方的特殊配置文件。作为示例,配置文件 {{ic|/etc/X11/xinit/xinitrc}} 位于可能被安装包覆盖的路径上。要将 {{ic|xinitrc}} 的配置文件放在 {{ic|~/archlive/airootfs/etc/skel/}} ,然后修改 {{ic|customize_airootfs.sh}} 以适当地移动。<br />
<br />
=== 引导器 ===<br />
<br />
默认的文件应该可以正常工作,所以你应该不需要去碰它。<br />
<br />
由于 isolinux 的模块化性质,你能够使用很多插件,因为所有 *.c32 都被复制且可以可供您使用。看看[http://syslinux.zytor.com/wiki/index.php/SYSLINUX syslinux 官方网站] 和 [https://projects.archlinux.org/archiso.git/tree/configs/syslinux-iso/boot-files Archiso Git Repo]。使用所述插件,便有可能做出更具视觉吸引力及复杂的菜单。参见 [http://syslinux.zytor.com/wiki/index.php/Comboot/menu.c32 此处]。<br />
<br />
=== 登录管理器 ===<br />
<br />
通过启用您登录管理器的 [[Systemd (简体中文)|systemd]] 服务来做到在引导时启动 X 。如果您知道哪一个 .service 文件需要软链接,那就太好了。如果不知道,你也可以轻松找出——如果你在创建 iso 所用的系统上使用相同的程序的话。只需使用:<br />
<br />
$ ls -l /etc/systemd/system/display-manager.service<br />
<br />
现在在 {{ic|~/archlive/airootfs/etc/systemd/system}} 中创建相同的软链接。如 LXDM:<br />
<br />
# ln -s /usr/lib/systemd/system/lxdm.service ~/archlive/airootfs/etc/systemd/system/display-manager.service<br />
<br />
这将使您在 live 系统启用在系统上启动 LXDM。(This will enable LXDM at system start on your live system.)<br />
<br />
或者,您也可以启用 {{ic|airootfs/root/customize_airootfs.sh}} 中的服务以及其中启用的其他服务。<br />
<br />
如果您希望图形环境在启动过程中自动启动,请确保编辑 {{ic|airootfs/root/customize_airootfs.sh}} 并替换<br />
systemctl set-default multi-user.target<br />
为<br />
systemctl set-default graphical.target<br />
<br />
=== 改变自动登录状态 ===<br />
<br />
Getty 的自动登录配置位于 {{ic|airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf}}。 <br />
<br />
您可以修改这个文件来更改自动登录用户:<br />
<br />
[Service]<br />
ExecStart=<br />
ExecStart=-/sbin/agetty --autologin '''isouser''' --noclear %I 38400 linux<br />
<br />
或者干脆删除它来禁用自动登录。<br />
<br />
== 构建ISO ==<br />
<br />
现在,你已经准备好把你的文件转换成 .iso,以便可以刻录到 CD 或 USB:<br />
<br />
首先创建 {{ic|out/}} 目录,<br />
<br />
# mkdir ~/archlive/out/<br />
<br />
然后在 {{ic|~/archlive}} 里面执行:<br />
<br />
# ./build.sh -v<br />
<br />
该脚本将现在下载并安装你指定的软件包到 {{ic|work/*/airootfs}},创建内核和 init 映像(initramfs),应用您的修改,并最终把 ISO 建立到 {{ic|out/}}。<br />
<br />
=== 重建ISO ===<br />
<br />
在修改之后重建 ISO 不被官方支持。但是,通过应用两个步骤很容易。首先,您必须删除工作目录中的锁定文件:<br />
<br />
# rm -v work/build.make_*<br />
<br />
此外,需要编辑脚本 {{ic|airootfs/root/customize_airootfs.sh}},并在 {{ic|useradd}} 行的开头添加 {{ic|id}} 命令,如下所示。否则,重建将在此处停止,因为要添加的用户已经存在 [https://bugs.archlinux.org/task/41865]。<br />
{{Style|typo?}}<br />
<br />
! id arch && useradd -m -p "" -g users -G "adm,audio,floppy,log,network,rfkill,scanner,storage,optical,power,wheel" -s /usr/bin/zsh arch<br />
<br />
同时删除创建的用户或符号链接,如 {{ic|/etc/sudoers}} 等持久性数据。<br />
<br />
{{Expansion|报告需要删除或重置的更多数据。}}<br />
<br />
通过编辑 pacstrap 脚本(位于 /bin/pacstrap)并在第 361 行更改以下内容,可以稍微加快重建速度:<br />
<br />
修改前:<br />
<br />
if ! pacman -r "$newroot" -Sy "${pacman_args[@]}"; then<br />
<br />
修改后:<br />
<br />
if ! pacman -r "$newroot" -Sy --needed "${pacman_args[@]}"; then<br />
<br />
这增加了初始引导的速度,因为它不必下载和安装任何已经安装的基础包。<br />
<br />
== 使用ISO ==<br />
<br />
有关各种选项,请参见 [[:Category:Getting_and_installing_Arch_(简体中文)#安装方式]] 部分。<br />
<br />
== 提示和技巧 ==<br />
<br />
=== 在沒有互联网连接的情况下安装 Archiso ===<br />
{{Move|Installation without Internet access|似乎这可以独立成一篇|Talk:Archiso}}<br />
<br />
若你想在没有互联网连接或者你不想重复下载你想要的包的情况下安装 archiso(例如[https://www.archlinux.org/download/ 官方的每月发布版]):<br />
<br />
首先,按照[[Installation guide (简体中文)|安装指南]],并跳过一些步骤(如[[Installation guide (简体中文)#连接到因特网|连接到因特网]]),直到[[Installation guide (简体中文)#安装基本系统|安装基本系统]]之前。<br />
<br />
==== 安装 archiso 到新的 root ====<br />
<br />
复制 Live 环境的''所有文件''到新的根目录,而不是使用 {{ic|pacstrap}}(这将尝试从远程存储库下载):<br />
# time cp -ax / /mnt<br />
{{注意|The option ({{ic|-x}})排除了一些特殊目录,因为它们不应该被复制到新的根目录。}}<br />
<br />
然后,创建一些目录并复制内核映像到新的根,以保证新系统的完整性:<br />
<br />
# cp -vaT /run/archiso/bootmnt/arch/boot/$(uname -m)/vmlinuz /mnt/boot/vmlinuz-linux<br />
<br />
完成之后,请按[[Installation guide (简体中文)#Fstab]]所述生成 fstab。<br />
<br />
==== Chroot 并配置基本系统 ====<br />
<br />
下一步,chroot 到您新安装的系统:<br />
<br />
# arch-chroot /mnt /bin/bash<br />
<br />
请注意,在您配置 locale、键盘映射等之前,你仍然需要为了避免延续 Live 环境的轨迹——或者说对 archiso 所做的一些不适用于非 Live 环境的修改——而做一些事情。<br />
<br />
===== 恢复 journald 的配置 =====<br />
[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/root/customize_airootfs.sh#n19 archiso 的这个修改]会导致日志存储在 RAM 上——它意味着在重启后日志便会丢失。为了解决这个问题,执行:<br />
<br />
# sed -i 's/Storage=volatile/#Storage=auto/' /etc/systemd/journald.conf<br />
<br />
===== 删除特殊的 udev 规则 =====<br />
如果有任何有线网络接口,[https://projects.archlinux.org/archiso.git/tree/configs/releng/airootfs/etc/udev/rules.d/81-dhcpcd.rules udev 的这个规则]会自动启动dhcpcd。<br />
<br />
# rm /etc/udev/rules.d/81-dhcpcd.rules<br />
<br />
===== 禁用和移除 archiso 创建的服务 =====<br />
有一些服务文件是为 Live 环境创建的,请禁用这些服务并移除文件——因为它们对于新系统来说没必要存在:<br />
<br />
# systemctl disable pacman-init.service choose-mirror.service<br />
# rm -r /etc/systemd/system/{choose-mirror.service,pacman-init.service,etc-pacman.d-gnupg.mount,getty@tty1.service.d}<br />
# rm /etc/systemd/scripts/choose-mirror<br />
<br />
===== 移除 Live 环境的特殊脚本 =====<br />
在 live 系统中通过 archiso 脚本安装了一些脚本,这对于新系统是不必要的:<br />
<br />
# rm /etc/systemd/system/getty@tty1.service.d/autologin.conf<br />
# rm /root/{.automated_script.sh,.zlogin}<br />
# rm /etc/mkinitcpio-archiso.conf<br />
# rm -r /etc/initcpio<br />
<br />
===== 导入archlinux密钥 =====<br />
<br />
为了使用官方存储库,我们需要导入 archlinux 主密钥([[Pacman/Package_signing_(简体中文)#初始化密钥环]])。这一步通常是通过 pacstrap 完成的,但是可以通过<br />
<br />
# pacman-key --init<br />
# pacman-key --populate archlinux<br />
<br />
{{注意|Keyboard or mouse activity is needed to generate entropy and speed-up the first step.}}<br />
<br />
===== 配置系统 =====<br />
<br />
现在,您可以按照 [[Installation_guide_(简体中文)#配置系统]] 中跳过的步骤(设置语言环境,时区,主机名等),并通过创建初始 ramdisk 来完成安装,如 [[Installation_guide_(简体中文)#Initramfs]]。<br />
<br />
===== 启用图形登录(可选) =====<br />
<br />
如果使用像GDM这样的显示管理器,则可能需要将 systemd 默认目标从 multi-user.target 更改为允许图形登录的目标。<br />
# systemctl disable multi-user.target<br />
# systemctl enable graphical.target<br />
<br />
== See also ==<br />
=== Documentation and tutorials ===<br />
* [https://projects.archlinux.org/archiso.git Archiso project page]<br />
* [https://projects.archlinux.org/archiso.git/tree/docs Official documentation]<br />
<br />
=== Example customization template ===<br />
* [http://easy.open.and.free.fr/didjix/ A live DJ distribution powered by ArchLinux and built with Archiso]</div>
745275633