《探错笔记》之Linux的FTP服务

Linux下FTP服务

  • FTP服务的安装和配置
    • FTP服务的安装和开启
    • 添加用户配置权限和指定目录
    • FTP的配置详解
  • 常见问题
    • 启动vsftpd服务,报错:Job for vsftpd.service failed because the control process exited with error code. See "systemctl status vsftpd.service" and "journalctl -xe" for details
    • chroot_local_user与chroot_list_enable详解
    • 报错:500 OOPS: vsftpd
    • 报错:530 Login incorrect
    • Vsftpd 连接超时解决方法(被动模式)

FTP服务的安装和配置

FTP服务的安装和开启

  1. 切换到root用户

  2. 查看是否安装vsftp,我这个是已经安装的

    rpm -qa |grep vsftpd
    
  3. 如果没有发现,则安装

    yum  install  vsftpd
    
  4. 启动vsftpd服务,以及重启命令(centos7.0以上版本)

    [root@localhost vsftpd]# /bin/systemctl start vsftpd.service
    [root@localhost vsftpd]# /bin/systemctl restart vsftpd.service
    

    低版本试一下这些命令:

    /etc/init.d/vsftpd restart
    启动ftp命令  
    #service vsftpd start
    停止ftp命令  
    #service vsftpd stop
    重启ftp命令  
    #service vsftpd restart
    

    设置自启:

    chkconfig vsftpd on
    
  5. 测试一下能否登录FTP了,先安装一个ftp客户端组件

    yum -y install ftp
    

    尝试登录一下

    ftp localhost
    

    输入用户名ftp,密码随便(因为默认是允许匿名的)
    登录成功,就代表ftp服务可用了。
    但是,外网是访问不了的,所以还要继续配置。

  6. 取消匿名登录

    vi /etc/vsftpd/vsftpd.conf
    

    把第一行的 anonymous_enable=YES ,改为NO,重启

添加用户配置权限和指定目录

  1. 添加FTP账号和目录
    1.1登录Linux主机后,运行命令:”useradd ftpadmin -s /sbin/nologin “。该账户路径默认指向/home/ftpadmin目录;如果需要将用户指向其他目录,请运行命令:useradd ftpadmin -s /sbin/nologin –d /www(其他目录)
    1.2 设置ftpadmin用户密码,运行命令:”passwd ftpadmin” ; 输入两次密码,匹配成功后,就设置好了ftpadmin用户的密码了。
    1.3测试连接,您可以在“我的电脑”地址栏中输入 ftp://IP 来连接FTP服务器,根据提示输入账户密码。

  2. centos FTP 用户指定目录禁用上级目录
    在默认配置下,本地用户登入FTP后可以使用cd命令切换到其他目录,这样会对系统带来安全隐患。可以通过以下三条配置文件来控制用户切换目录。
    chroot_list_enable=YES/NO(NO)
    设置是否启用chroot_list_file配置项指定的用户列表文件。默认值为NO。
    chroot_list_file=/etc/vsftpd.chroot_list
    用于指定用户列表文件,该文件用于控制哪些用户可以切换到用户家目录的上级目录。
    chroot_local_user=YES/NO(NO)
    用于指定用户列表文件中的用户是否允许切换到上级目录。默认值为NO。
    通过搭配能实现以下几种效果:
    ①当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd.chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。
    ②当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd.chroot_list文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录。
    ③当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录。
    ④当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录。

  3. 从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。
    要修复这个错误,可以用命令chmod a-w /home/user去除用户主目录的写权限,注意把目录替换成你自己的。或者你可以在vsftpd的配置文件中增加下列项:
    allow_writeable_chroot=YES
    好了,这样就只能访问自身所属目录。
    如果希望某个用户可以访问根目录,把用户名加入
    /etc/vsftpd/chroot_list
    不存在就创建这个文件,一行一个用户名。

  4. 如果还是登陆不了ftp,那很有可能是selinux的问题,这个东西把他关掉就行

    vi /etc/selinux/config
    SELINUX=enforcing           #设置成SELINUX=disabled后重启
    

FTP的配置详解


vsftpd.conf 是 vsftpd 守护进程的配置文件,默认位于 /etc/vsftpd.conf ,
但是其路径也可以通过 vsftpd 的命令行参数进行修改。
这个特性在希望由 xinetd 针对每个不同的主机使用不同的配置文件调用 vsftpd 的场合很有用。
 
---------------------
格式
---------------------
vsftpd.conf 的格式非常简单,每一行要么是一条指令,要么就被视作注释。
以井号(#)开头的行被视为注释而忽略。
而如下格式的行将被视为配置指令。注意:等号两边不能有任何空白!
 
option=value
 
每一个指令都有一个默认值,但是可以通过配置文件进行修改
 
---------------------
布尔型指令
---------------------
布尔型指令的值只能设为 YES 或 NO ,等号后是其默认值。
 
allow_anon_ssl=NO
    是否允许匿名用户使用SSL连接。仅在 ssl_enable=YES 时才有意义。
 
anon_mkdir_write_enable=NO
    是否允许匿名用户创建新目录。
    仅在 write_enable=YES 时才有意义,而且匿名用户必须对所在目录具有写权限。
 
anon_other_write_enable=NO
    是否允许匿名用户在上传文件和创建目录之外执行其他写操作,比如删除和重命名。
 
anon_upload_enable=NO
    是否允许匿名用户或虚拟用户上传文件。
    仅在 write_enable=YES 时才有意义,而且匿名用户必须对所在目录具有写权限。
 
anon_world_readable_only=YES
    是否仅允许匿名用户下载全局可读的文件。
    这主要是考虑到 ftp 用户可能会拥有文件,特别是允许上传文件的情况下。
 
anonymous_enable=YES
    是否允许匿名登录。ftp 和 anonymous 两个名称都被认为是匿名用户。
 
ascii_download_enable=NO
    是否允许以ASCII模式下载文件。
 
ascii_upload_enable=NO
    是否允许以ASCII模式上传文件。
 
async_abor_enable=NO
    是否允许使用"async ABOR"命令。
    只有不合格的FTP客户端才会使用此命令,而且此命令难以正确处理,所以默认禁止使用。
 
background=NO
    是否以"listen"模式运行。
    该模式下的 vsftpd 会将监听进程放到后台运行。
 
check_shell=YES
    是否检查本地登录用户的SHELL合法性(/etc/shells)。仅在 vsftpd 不支持PAM特性时有意义。
 
chmod_enable=YES
    是否允许使用 SITE CHMOD 命令。仅对本地登录用户有意义,匿名用户永远不允许使用此命令。
 
chown_uploads=NO
    是否将所有匿名上传的文件所有者更改为 chown_username 指定的用户。
 
chroot_list_enable=NO
    是否读取 chroot_list_file 文件中的"chroot例外"用户。
    当 chroot_local_user=YES 时,chroot_list_file 文件中用户将不会被限制在其家目录中。
    当 chroot_local_user=NO 时,chroot_list_file 文件中用户将会被限制在其家目录中。
 
chroot_local_user=NO
    是否将本地登录的用户通过 chroot() 限制在其家目录中。
    该功能有安全方面的隐患,特别是在用户有上传权限或者有可用SHELL的时候。
 
connect_from_port_20=NO
    是否强制 PORT 风格的数据连接使用 20 端口。
    出于安全考虑,一些 FTP 客户端隐含了这个假定。而设为 NO 则可以让 vsftpd 以非特权用户运行。
 
debug_ssl=NO
    是否将 OpenSSL 连接对话转储到日志文件中。
 
delete_failed_uploads=NO
    是否删除上传失败的文件
 
deny_email_enable=NO
    是否读取 banned_email_file 文件中的Email地址黑名单,其中的地址将被禁止用作匿名登录密码。
 
dirlist_enable=YES
    是否允许列出目录的内容。
 
dirmessage_enable=NO
    是否在进入新目录时显示 message_file 文件中的内容。
 
download_enable=YES
    是否允许下载
 
dual_log_enable=NO
    是否同时记录 xferlog_file 和 vsftpd_log_file 两份日志。
 
force_dot_files=NO
    是否强制显示隐藏文件(点文件),即使客户端没有使用"a"选项也显示。
 
force_anon_data_ssl=NO
    是否强制匿名用户必须使用SSL连接发送和接受数据。仅在 ssl_enable=YES 时才有意义。
 
force_anon_logins_ssl=NO
    是否强制匿名登录时必须使用SSL连接,以保证密码不被泄露。仅在 ssl_enable=YES 时才有意义。
 
force_local_data_ssl=YES
    是否强制非匿名用户必须使用SSL连接发送和接受数据。仅在 ssl_enable=YES 时才有意义。
 
force_local_logins_ssl=YES
    是否强制非匿名登录时必须使用SSL连接,以保证密码不被泄露。仅在 ssl_enable=YES 时才有意义。
 
guest_enable=NO
    是否将所有非匿名登录看做"guest"登录,并被映射到 guest_username 指定的用户。
 
hide_ids=NO
    是否隐藏文件和目录的宿主和属组信息,而统一显示为"ftp"。
 
implicit_ssl=NO
    是否强制客户端必须使用SSL连接(将 vsftpd 配置为一个FTPS服务器,也就是 implicit 模式)。
    FTPS 一般使用 990 端口作为控制端口,而使用 989 端口作为数据传输端口。
 
listen=YES
    是否以 standalone 模式运行。standalone 模式是指 vsftpd 不由 inetd 启动,而是独自监听和处理连接。
 
listen_ipv6=NO
    含义与 listen 指令相同,只是在 IPv6 套接字上进行监听。该指令与 listen 是互斥的,不能同时使用。
 
local_enable=NO
    是否允许本地用户登录。激活后,将允许 /etc/passwd 文件或PAM中的用户登录。
    必须激活此选项才能允许非匿名登录(包括虚拟用户登录)。
 
lock_upload_files=YES
    是否对上传中的文件加锁。激活后,所有下载进程将在该文件上共享一个读取锁。
    激活此指令后,恶意的读取进程会导致写进程饿死(比如追加的写进程)。
 
log_ftp_protocol=NO
    在 xferlog_std_format=NO 的前提下,是否在日志中记录所有FTP的请求和应答。主要用于调试。
 
ls_recurse_enable=NO
    是否允许客户端使用"ls -R"递归列出目录的内容。对于巨大的站点来说,可能会导致性能问题。
 
mdtm_write=YES
    是否允许客户端使用 MDTM 文件的修改时间(依然要受访问权限的限制)
 
no_anon_password=NO
    匿名用户是否需要输入口令后才能登陆。激活后匿名用户将不需要输入密码而直接登录。
 
no_log_lock=NO
    是否在记录日志文件时不对日志文件加锁。除非为了要解决某些操作系统缺陷,一般不应开启此指令。
 
one_process_model=NO
    简单的一句话:不要开启此指令。
 
passwd_chroot_enable=NO
    在 chroot_local_user=YES 的前提下,是否允许为每个不同的用户分别指定不同的 chroot() 位置。
    每个用户的虚根目录来自于 /etc/passwd 文件中对应的家目录。
    家目录中的 /./ 字符串表示虚根目录位于那个目录中的特定位置。
 
pasv_addr_resolve=NO
    是否允许将 pasv_address 指令的值设为主机名而不是IP地址,以便对其进行DNS解析。
 
pasv_enable=YES
    是否允许使用 PASV 命令获得数据连接的地址端口对。
 
pasv_promiscuous=NO
    是否禁止对 PASV 命令进行安全检查(确保数据连接和控制连接来自于同一个IP地址)。
    不要开启它,除非你明确知道自己在做什么。
 
port_enable=YES
    是否允许使用 PORT 命令获得数据连接的端口。
 
port_promiscuous=NO
    是否禁止对 PORT 命令进行安全检查(确保数据连接和控制连接来自于同一个IP地址)。
    不要开启它,除非你明确知道自己在做什么。
 
require_cert=NO
    是否强制SSL客户端必须提供证书。证书的有效性由 validate_cert 指令控制。
 
require_ssl_reuse=YES
    是否要求所有SSL数据连接都复用SSL会话,以确保它们都知道控制连接的主密码。
    虽然出于安全考虑,YES 是默认值,但是却与不少FTP客户端不兼容。
 
run_as_launching_user=NO
    是否以启动 vsftpd 的进程的用户身份运行。常在无法取得 root 权限的时候使用。
    警告:不要开启它,除非你明确知道自己在做什么,想当然的使用此指令会导致重大安全漏洞。
    开启此指令后,chroot 特性将会失效(即使由root启动),还有其他许多重大安全问题。
 
secure_email_list_enable=NO
    是否仅允许匿名用户使用 email_password_file 指令指定的文件中的Email地址作为登录密码。
    在某些安全性要求不高的场合,这样做可以避免使用虚拟用户。
 
session_support=NO
    是否要求 vsftpd 维护登录会话。
    在使用PAM认证的时候,设为 YES 表示打开一个PAM会话,并更新 utmp 和 wtmp 文件。
    如果不需要记录会话,则应该设为 NO ,以让 vsftpd 运行的更快并且需要更少的特权。
 
setproctitle_enable=NO
    是否在进程的标题中包含会话状态信息(idle, downloading ...)。出于安全考虑,建议设为 NO 。
 
ssl_enable=NO
    是否允许客户端使用SSL连接(将 vsftpd 配置为一个 FTPS 服务器,也就是 explicit 模式)。
    与 implicit_ssl 指令的不同之处在于它并不强制客户端一定要使用SSL连接。
 
ssl_request_cert=YES
    是否允许查看客户端证书(与 require_cert 不同,并非必须查看)。
 
ssl_sslv2=NO
    是否允许使用 SSL2 进行连接。推荐使用 TLS1 。仅在 ssl_enable=YES 时才有意义。
 
ssl_sslv3=NO
    是否允许使用 SSL3 进行连接。推荐使用 TLS1 。仅在 ssl_enable=YES 时才有意义。
 
ssl_tlsv1=YES
    是否允许使用 TLS1 进行连接。推荐使用 TLS1 。仅在 ssl_enable=YES 时才有意义。
 
strict_ssl_read_eof=NO
    是否强制SSL数据上传在SSL连接内终结,而不是以socket结束作为终结。
    设为 YES 可以确保攻击者无法通过伪造的 TCP FIN 包提前终止上传数据流。
    不幸的是,只有很少的客户端能正确处理,所以默认值为 NO
 
strict_ssl_write_shutdown=NO
    是否强制SSL数据下载在SSL连接内终结,而不是以socket结束作为终结。
    设为 YES 可以确保攻击者无法通过伪造的 TCP FIN 包提前终止下载数据流。
    不幸的是,只有很少的客户端能正确处理,所以默认值为 NO
    不过即使无此保证,客户端依然能够检查下载文件的完整性。
 
syslog_enable=NO
    是否通过系统日志机制记录日志而不是由 vsftpd 自己记录。日志将通过 FTPD facility 进行记录。
 
tcp_wrappers=NO
    是否通过 tcp_wrappers 对进入连接进行访问控制。仅在编译了 tcp_wrappers 支持的时候有效。
    tcp_wrappers 可以针对每个单独的IP进行设置。
    如果 tcp_wrappers 设置了 VSFTPD_LOAD_CONF 环境变量,那么 vsftpd 会话将会尝试加载其指定的配置文件。
 
text_userdb_names=NO
    是否在列出目录内容时不显示文件和目录的 UID 和 GID 值,而是显示其对应的名称。
    默认值 NO 主要是出于性能考虑。
 
tilde_user_enable=NO
    是否将类似 ~chris/pics 这样路径解析到对应的用户主目录下。
    注意: ~ 和 ~/something 将始终被解析( ~ 表示初始登录的目录)。
    注意: ~user 仅在当前的 chroot() 中存在 /etc/passwd 时才能被解析。
 
use_localtime=NO
    是否在列出目录内容时以本地时间(而非UTC时间)显示。MDTM FTP 返回的时间也有该指令控制。
 
use_sendfile=YES
    是否使用操作系统的 sendfile() 接口发送文件。
 
userlist_deny=YES
    是否允许 userlist_file 文件之外的用户登陆。该指令仅在 userlist_enable=YES 时有意义。
 
userlist_enable=NO
    是否禁止 userlist_file 文件中的用户登陆。设为 NO 则根本无视该文件。
 
validate_cert=NO
    是否强制要求SSL客户端证书必须有效。自签名的证书总是被认为是无效的。
 
virtual_use_local_privs=NO
    是否让虚拟用户拥有与本地用户一样的权限(虚拟用户默认权限与匿名用户相同)。
 
write_enable=NO
    是否允许执行FTP写入操作(STOR, DELE, RNFR, RNTO, MKD, RMD, APPE, SITE)。
 
xferlog_enable=NO
    是否在 vsftpd_log_file 文件中记录上传和下载信息。
 
xferlog_std_format=NO
    是否在 xferlog_file 文件中按照标准的 xferlog 格式(wu-ftpd 的格式)记录日志。
    这样做的好处是可以使用针对 wu-ftpd 设计的日志分析工具。但是默认格式更易于阅读。
 
---------------------
数值型指令
---------------------
数值型指令的值只能设为一个非负整数,等号后是其默认值。
为了支持 umask 相关的选项,八进制数也被支持,但是必须以"0"作为第一个数字。
 
accept_timeout=60
    允许客户端建立 PASV 风格的数据传输连接的秒数。
 
anon_max_rate=0
    匿名用户允许的最大数据传输率,单位是"字节/秒"。"0"表示不限。
 
anon_umask=077
    匿名用户创建新文件是的 umask 值。
 
chown_upload_mode=0600
    使用 chown() 更改匿名用户上传的文件的用户时,将此文件的权限设为什么值。
 
connect_timeout=60
    客户端相应 PORT 风格的数据连接的超时秒数。也就是必须在此时间内建立数据连接。
 
data_connection_timeout=300
    数据传输的超时秒数。如果超过此处规定的秒数,数据传输依然没有任何进展,那么该客户端将被踢出。
 
delay_failed_login=1
    在对一个失败的登录作出相应前暂停的秒数。
 
delay_successful_login=0
    在对一个成功的登录作出相应前暂停的秒数。
 
file_open_mode=0666
    上传的文件被创建时使用的权限。umask 值将会应用到这个值上面。
    如果你希望上传的文件具有可执行权限,那么可以设为 0777
 
ftp_data_port=20
    指定 PORT 风格的连接从哪个端口发起(仅在 connect_from_port_20=YES 时有意义)
 
idle_session_timeout=300
    客户端在两个FTP命令之间允许的最大间隔秒数。超时的客户端将被踢出。
 
listen_port=21
    仅对 standalone 模式有效。指定在哪个端口上监听。
 
local_max_rate=0
    本机用户允许的最大数据传输速率。"0"表示不限。
 
local_umask=077
    本机用户在创建上传文件时使用的 umask 值。
 
max_clients=0
    standalone 模式下,允许连接的最大客户端数量。"0"表示不限。
 
max_login_fails=3
    最大登录尝试次数。失败次数超过这个值之后,该次会话将被终止。
 
max_per_ip=0
    standalone 模式下,同一个IP地址允许发起的最大并发连接数。"0"表示不限。
 
pasv_max_port=0
    允许为 PASV 风格的数据连接使用的最大端口号。"0"表示不限。
 
pasv_min_port=0
    允许为 PASV 风格的数据连接使用的最小端口号。"0"表示不限。
 
trans_chunk_size=0
    一般不需要调整此设置,但是也可能需要将其设置成诸如 8192 之类的值以达到更平滑的带宽限制。
    "0"表示让 vsftpd 自己选择一个合理的值。
 
---------------------
字符串型指令
---------------------
等号后是其默认值。(none)表示没有默认值。
 
anon_root=(none)
    匿名用户登录后的 chroot 目录。若未指定则使用 ftp_username 指令的家目录。
    注意:ftp_username 指令指定的用户不能拥有该目录的写权限。
 
banned_email_file=/etc/vsftpd.banned_emails
    包含禁止匿名用户使用的登录密码(Email地址)的文件。仅在 deny_email_enable=YES 时才被读取。
 
banner_file=(none)
    指定一个文件,其内容将在客户端连接上服务器时显示。设置后将取代 ftpd_banner 指令的值。
 
ca_certs_file=(none)
    用于校验客户端证书的CA证书文件。
    注意:vsftpd 并不使用默认的 SSL CA 证书路径,因为 vsftpd 只能看到虚根(chroot)下的文件。
 
chown_username=root
    匿名用户上传的文件的宿主。仅在 chown_uploads=YES 时有意义。
 
chroot_list_file=/etc/vsftpd.chroot_list
    包含"chroot例外用户"的文件,仅在 chroot_list_enable=YES 时才有意义。
 
cmds_allowed=(none)
    允许客户端使用的FTP命令(逗号分隔的列表,"USER,PASS,QUIT"总被允许),列表外的命令都将被拒绝。
    不设置表示允许所有命令。
 
cmds_denied=(none)
    禁止客户端使用的FTP命令(逗号分隔的列表,"USER,PASS,QUIT"总被允许),其优先级比 cmds_allowed 更高。
 
deny_file=(none)
    设置一个匹配模式,禁止访问任何与此模式匹配的文件和目录(并不隐藏这些文件)。
    注意,不要依赖此指令做访问控制,而应该优先使用操作系统的文件和目录权限。该指令主要用于控制虚拟用户的权限。
    需要注意的是,可以通过多个途径(链接)访问的文件/目录,必须把所有途径都要考虑进去。
    匹配模式语法很简单,仅支持 *, ?, {} 三种符号,例如:deny_file={*.mp3,*.mov,.private}
    注意:仅在路径的结尾部分才支持匹配。也就是说 a/b/? 是可以进行匹配的,但是 a/?/c 是不可以被匹配的。
 
dsa_cert_file=(none)
    用于SSL连接的DSA证书。默认值(none)表示使用RSA证书。
 
dsa_private_key_file=(none)
    用于SSL连接的DSA私钥。未指定(none)表示私钥就存在于证书文件中。
 
email_password_file=/etc/vsftpd.email_passwords
    指定一个文件,其中每一行都是一个Email地址。仅在 secure_email_list_enable=YES 时有意义。
 
ftp_username=ftp
    用于处理匿名FTP操作的系统用户。该用户的家目录即是匿名用户登录后的根目录。
 
ftpd_banner=(none)
    指定一个字符串,用于覆盖默认的 vsftpd 欢迎词。默认值(none)表示使用 vsftpd 内置的默认值。
 
guest_username=ftp
    将 guest 用户映射到哪个实际用户。参见 guest_enable 指令对于 guest 登录的介绍。
 
hide_file=(none)
    设置一个匹配模式,隐藏任何与此模式匹配的文件和目录(但是并不阻止对其访问)。
    需要注意的是,可以通过多个途径(链接)访问的文件/目录,必须把所有途径都要考虑进去。
    匹配模式语法很简单,仅支持 *, ?, {} 三种符号,例如:deny_file={*.mp3,*.mov,.private}
    注意:仅在路径的结尾部分才支持匹配。也就是说 a/b/? 是可以进行匹配的,但是 a/?/c 是不可以被匹配的。
 
listen_address=(none)
    仅对 standalone 模式有效。指定在哪个IP地址上监听。默认值为空,表示监听所有IP地址。
 
listen_address6=(none)
    与 listen_address 指令含义相同,不过是针对 IPv6 地址(仅在 listen_ipv6=YES 时有意义)。
 
local_root=(none)
    指定一个本地登录(非匿名)后的默认 chroot 目录。即使失败也不会有任何提示。
 
message_file=.message
    指定进入一个目录时向用户显示哪个文件的内容。仅在 dirmessage_enable=YES 时有意义。
 
nopriv_user=nobody
    当 vsftpd 进入非特权模式时使用的用户名。最好设置为一个专门的用户,而不是默认的 nobody 用户。
 
pam_service_name=ftp
    vsftpd 将要使用的PAM服务名称
 
pasv_address=(none)
    指定用于应答 PASV 命令的IP地址。当 pasv_addr_resolve=YES 时,可以使用主机名。
    默认值(none)表示使用连接接入的IP地址。
 
rsa_cert_file=/usr/share/ssl/certs/vsftpd.pem
    用于SSL连接的RSA证书文件的位置
 
rsa_private_key_file=(none)
    用于SSL连接的RSA私钥文件的位置。(none)表示私钥就存放于证书文件中。
 
secure_chroot_dir=/usr/share/empty
    该指令的值必须是一个空目录,并且对于 ftp 用户没有写权限。
    该目录将在 vsftpd 不需要文件系统权限时,被用作安全的 chroot() 监狱。
 
ssl_ciphers=DES-CBC3-SHA
    指定允许使用的SSL连接加密算法。
    限制仅允许使用特定的算法可以将那些安全性较弱的算法排除在外。
 
user_config_dir=(none)
    这个很牛叉的指令可以用于针对每个不同的用户进行不同的设置。
    使用方法很简单,假定 user_config_dir=/etc/vsftpd_user_conf ,
    那么当"chris"登录后,vsftpd 将针对该用户使用 /etc/vsftpd_user_conf/chris 文件中的设置。
    该文件的语法与 vsftpd.conf 本身完全相同,但是并非所有指令都可以针对每个用户单独设定。
    例如 listen_address, banner_file, max_per_ip, max_clients, xferlog_file 等指令。
 
user_sub_token=(none)
    根据模板自动为每个虚拟用户生成一个家目录,与虚拟用户一起使用才有意义。
    例如,如果实际用户(guest_username)的家目录是 /home/virtual/$USER ,并且 user_sub_token=$USER ,
    那么虚拟用户 fred 的家目录就是 /home/virtual/fred (通常被 chroot 进该目录)。
    在 local_root 包含了 user_sub_token 的情况下,该指令依然有效。
 
userlist_file=/etc/vsftpd.user_list
    指定 userlist_enable=YES 时要加载的文件
 
vsftpd_log_file=/var/log/vsftpd.log
    指定 vsftpd 风格的日志文件的路径。
    仅在(xferlog_enable=YES 并且 xferlog_std_format=NO)或者(dual_log_enable=YES)时有意义。
    注意:如果 syslog_enable=YES ,那么日志将被发送到系统日志记录器,而不会记录到这里指定的文件中。
 
xferlog_file=/var/log/xferlog
    指定wu-ftpd风格的日志文件的路径。
    仅在(xferlog_enable=YES 并且 xferlog_std_format=YES)或者(dual_log_enable=YES)时有意义。

常见问题

启动vsftpd服务,报错:Job for vsftpd.service failed because the control process exited with error code. See “systemctl status vsftpd.service” and “journalctl -xe” for details

解决:

vim /etc/vsftpd/vsftpd.conf #修改配置文件
《探错笔记》之Linux的FTP服务_第1张图片

chroot_local_user与chroot_list_enable详解

  • chroot_local_user #是否将所有用户限制在主目录,YES为启用 NO禁用.(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到要目录之外的)
  • chroot_list_enable #是否启动限制用户的名单 YES为启用 NO禁用(包括注释掉也为禁用)
  • chroot_list_file=/etc/vsftpd/chroot_list #是否限制在主目录下的用户名单,至于是限制名单还是排除名单,这取决于chroot_local_user的值,我们可以这样记忆: chroot_local_user总是一个全局性的设定,其为YES时,全部用户被锁定于主目录,其为NO时,全部用户不被锁定于主目录。那么我们势必需要在全局设定下能做出一些“微调”,即,我们总是需要一种“例外机制",所以当chroot_list_enable=YES时,表示我们“需要例外”。而”例外“的含义总是有一个上下文的,即,当”全部用户被锁定于主目录“时(即chroot_local_user=YES),"例外"就是:不被锁定的用户是哪些;当"全部用户不被锁定于主目录"时(即chroot_local_user=NO),“例外”“就是:要被锁定的用户是哪些。这样解释和记忆两者之间的关系就很清晰了!
> chroot_local_user=YES chroot_local_user=NO
chroot_list_enable=YES 1.所有用户都被限制在其主目录下 2.使用chroot_list_file指定的用户列表,这些用户作为“例外”,不受限制 1.所有用户都不被限制其主目录下 2.使用chroot_list_file指定的用户列表,这些用户作为“例外”,受到限制
chroot_list_enable=NO 1.所有用户都被限制在其主目录下 2.不使用chroot_list_file指定的用户列表,没有任何“例外”用户 1.所有用户都不被限制其主目录下 2.不使用chroot_list_file指定的用户列表,没有任何“例外”用户

报错:500 OOPS: vsftpd

  1. 在服务器上修改Vsftpd的配置文件vsftpd.conf
    vim /etc/vsftpd/vsftpd.conf
    # 添加一行配置 allow_writeable_chroot=YES
    
  2. 保存退出,重启一下 vsftp 服务即可。
    《探错笔记》之Linux的FTP服务_第2张图片

报错:530 Login incorrect

  1. 检查/etc/vsftpd/vsftpd.conf 配置文件
    《探错笔记》之Linux的FTP服务_第3张图片
    查看是否有这一行 没有的话添加上去 pam_service_name=vsftpd

  2. 检查 /etc/pam.d/vsftpd 配置文件
    PAM 服务名称,这里的设置决定PAM将为vsftpd使用配置文件
    《探错笔记》之Linux的FTP服务_第4张图片
    注释掉这一行 然后再重启ftp即可登录

Vsftpd 连接超时解决方法(被动模式)

  1. 编辑 Vsftpd 配置文件
    vi /etc/vsftpd/vsftpd.conf
    
  2. 在最下面添加以下信息
    pasv_enable=YES         #开启被动模式
    pasv_min_port=4000      #随机最小端口
    pasv_max_port=5000      #随机最大端口
    
  3. 加载内核 ip_conntrack_ftp 和 ip_nat_ftp(终端执行)
    modprobe ip_conntrack_ftp
    modprobe ip_nat_ftp
    
  4. 配置 iptables 开放 4000 到 5000 端口(如果防火墙没启用可以跳过4、5步)
    vi /etc/sysconfig/iptables  在*filter下加入下
    
    -A OUTPUT -p tcp --sport 4000:5000 -j ACCEPT
    -A INPUT -p tcp --dport 4000:5000 -j ACCEPT
    
  5. 加载 iptables 配置
    iptables-restore < /etc/sysconfig/iptables
    
  6. 重启 Vsftpd
    service vsftpd restart
    

你可能感兴趣的:(Linux的时间背囊)