嵌入式FTP服务器移植

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wyy626562203/article/details/83588134

嵌入式FTP服务器移植

vsftpd轻量级ftp移植

ubuntu16.04.4

arm-linux-gnueabihf-gcc

xshell 5

vsftpdvery secure FTP daemon(非常安全的FTP进程),是一个基于GPL发布的类UNIX类操作系统上运行的服务器的名字(是一种守护进程),可以运行在诸如Linux、BSD、Solaris、HP-UX以及Irix等系统上面。vsftpd支持很多其他传统的FTP服务器不支持的良好特性。使用vsftpd可以在 Linux/Unix 系统上搭建一个安全、高性能、稳定性好的轻量级FTP服务器。

下载源码

创建工作目录

mkdir -p /home/wyy/Develop/vsftpd
cd /home/wyy/Develop/vsftpd

下载解压

wget https://security.appspot.com/downloads/vsftpd-3.0.3.tar.gz
tar xvf vsftpd-3.0.3.tar.gz

上面提供的下载地址被墙了,这里我把源码上传到csdn上:

https://download.csdn.net/download/wyy626562203/10752921

编译配置

修改顶层Makefile

cd /home/wyy/Develop/vsftpd/vsftpd-3.0.3
vi Makefile

修改如下

CC = arm-linux-gnueabihf-gcc 		#第2行

LIBS = `./vsf_findlibs.sh` -lcrypt	#第11行

编译

make

配置文件解析

# Example config file /etc/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.

#允许匿名FTP
#anonymous_enable=YES

#控制是否允许本地用户登录.(/etc/passwd中指定的用户登录)
local_enable=YES

#该选项用于设置是否允许使用会改变FTP文件系统的命令.这些命令有:STOP,DELE,RNFR,
#RNTO,MKD,RMD,APPE,SITE
write_enable=YES

#本地用户的默认权限掩码umask是077.如果用户希望(大多数其他ftpd使用022),您可能希望将其更改为022
local_umask=022

#取消注释以允许匿名FTP用户上载文件。 这仅在激活上述全局写入启用时才有效。 
#此外,您显然需要创建FTP用户可写的目录。
anon_upload_enable=NO

#该选项设置为YES时表示允许匿名用户创建新的目录,为了使该选项能够起作用必须
#使write_enable为YES且匿名的用户必须有在父目录写入的权限
anon_mkdir_write_enable=NO

#当为YES时表示当用户第一次进入一个新的目录时会显示目录的信息.默认情况下目录的
#信息在目录里面的.message文件里.但是你可以用message_file来指定别的。
dirmessage_enable=YES

#设置为YES时,会产生一个关于上传和下载的日志文件,默认的日志文件为/var/log/vsftp.log
#但是可以通过vsftpd_log_file指定别的日志文件名
xferlog_enable=YES

#确保PORT传输连接来自端口20(ftp-data)。
connect_from_port_20=YES

#如果需要,您可以安排上传的匿名文件由其他用户拥有。注意! 建议不要使用“root”上传文件!
#chown_uploads=YES
#chown_username=whoever

#如果愿意,您可以覆盖日志文件的位置。 默认设置如下所示
#注意:改文件默认不纯在,需手动touch,且由于这里更改了vsftpd服务的宿主用户
#为手动建立的vsftpd,则必须注意给予该用户对日志的读取权限否则服务启动失败。
#xferlog_file=/var/log/vsftpd.log

#设置是否产生标准格式(wu-ftpd风格的)日志文件.默认的文件名/var/log/xferlog
#但是可以通过xferlog_file指定别的日子文件名。
#xferlog_std_format=YES

#设置远程客户端使用两个FTP命令之间的最大时间,超时后则退出客户端连接,这里使用默认/秒。
#idle_session_timeout=600

#设定最大连接传输时间,这里使用默认,将具体数值留给每个用户具体制定,默认120/秒
#data_connection_timeout=120

#建议您在系统上定义一个唯一的用户,ftp服务器可以将其用作完全隔离且无特权的用户。
#nopriv_user=ftpsecure

#启用此功能,服务器将识别异步ABOR请求。不推荐用于安全性(代码非常重要)。 
#但是,不启用它可能会混淆较旧的FTP客户端。
#async_abor_enable=YES

#该选项设置是否允许上传时以ASCII模式传输数据
#ascii_upload_enable=YES
#该选项用于指定是否允许下载时以ASCII模式传输数据
#ascii_download_enable=YES

#您可以完全自定义登录标题字符串:
ftpd_banner=Welcome to FTP service.

#您可以指定不允许匿名电子邮件地址的文件。可以
#用于对抗某些DoS攻击。
#deny_email_enable=YES
# (默认)
#banned_email_file=/etc/vsftpd.banned_emails


#当设置为YES时,本地用户登录后就自动转到他们的用户主目录中去。
#注意!:该选项用安全问题,特别是当用户有上传文件或访问shell的权限时.仅在你知道自己要作什么时才设置#为YES
chroot_local_user=YES
#该选项用于指定一系列可以使用chroot()的用户名,指定的用户在登录FTP后就会转向
#自己的主目录所在的位置.默认情况下指定的用户放在/etc/vsftpd.chroot_list文件中
#但可以在chroot_list_file指定别的文件名设置包含允许转到用户主目录的用户名的文件名,仅在#chroot_local_user和chroot_list_enable为YES时可用
#chroot_list_enable=YES
# (默认)
#chroot_list_file=/etc/vsftpd.chroot_list

# 您可以激活内置ls的“-R”选项。 默认情况下禁用以避免远程用户在大型站点上导致过多的I/O操作。
# 但是,某些损坏的FTP客户端(如“ncftp”和“mirror”)会假定存在“-R”选项,因此有充分理由启用它。
#设置是否允许递归列出目录及其子目录中的内容
#ls_recurse_enable=YES

#启用“listen”指令时,vsftpd以独立模式运行并侦听IPv4套接字。
# 该指令不能与listen_ipv6指令一起使用。
listen=YES

# 该指令允许侦听IPv6套接字。要侦听IPv4和IPv6套接字,必须使用两个
# 配置文件运行两个vsftpd副本。确保,其中一个监听选项被注释!!
#listen_ipv6=YES

#该选项仅在ssl_enable为YES时才用,若设为YES表示允许匿名用户通过ssl连接
#allow_anon_ssl=NO

#该选项设置为YES时,匿名用户除了具有上传,创建目录的权限外还具有其他的权限
#如重命名等
#anon_other_write_enable=NO

#该选项为YES时,匿名用户只能下载具有全局可读属性的文件
#anon_world_readable_only=YES

#该选项设置当vsftpd以"listen"模式运行时,则在后台运行侦听程序
#background=NO

#该选项为YES时,允许本地用户使用CHMOD命令改变上传的文件的权限.匿名用户无法使用CHMOD命令
#chmod_enable=YES

#该选项为YES时,将会把OpenSSl连接的诊断信息存储在日志文件中。
#debug_ssl=NO

#当设置为YES时,在上传文件失败时删除该文件.
#delete_failed_uploads=YES

#是否允许用户列出目录的内容
#dirlist_enable=YES

#允许下载,若为NO时则不允许下载。
#download_enable=YES

#当设置为YES时将会同时产生两个日志文件,一个为/var/log/vsftpd.log(vsftpd自己
#风格的日志文件)和/var/log/xferlog(wu-ftpd风格的日志文件可以被标准的工具分析)
#dual_log_enable=NO

#若设置为YES时,在指定'ls -a'时会列出所有以.开始的隐藏文件,该选项则使.和..不列出
#force_dot_files=NO

#仅在ssl_enable为YES时可用,当该选项为YES时所有匿名用户登录时都要求使用SSL连接
#进行数据传输
#force_anno_data_ssl=NO

#仅在ssl_enable为YES时可用,当该选项为YES时所有匿名用户登录时都要求使用SSl连接
#进行密码传输
#force_anon_logins_ssl=NO

#仅在ssl_enable为YES时可用,当为YES时,所有非匿名用户登录时都要求使用SSL链接进
#行数据传输
#force_local_data_ssl=YES

#仅在ssl_enable为YES时可用,当为YES时,所有非匿名用户登录时到要求使用SSL链接
#进行密码传输
#force_local_logins_ssl=YES

#设置是否允许非匿名用户作为"guest"登录,一个guest登录用户映射为guest_username
#指定的一个用户名
#guest_enable=NO

#当设置为YES时,所有目录列表中的组和用户的信息都被隐藏,用"ftp"代替。
#hide_ids=YES

#当为YES时,在所有ftp连接的第一件事就是SSL握手
#implicit_ssl=NO

#设置当用户上传文件时是否锁住上传的文件。
#lock_upload_files=YES

#允许使用MDTM设置修改的时间
#mdtm_write=YES

#当为YES时,所有FTP的请求和应答都被记录在日志文件中.可用于调试。
#log_ftp_protocol=YES

#当为YES时,将使vsftpd不会询问匿名用户的密码
#no_anon_password=NO
 
#no_log_lock=NO
#当为YES时在记录日志时不会锁住日志文件
 
#允许登录用户只能使用一个进程
#one_process_model=NO

#和chroot_local_user一起使用当为YES时.在用户转到自己主目录时不需要再输入密码。 
#passwd_chroot_enable=NO

#若你想使用主机名的话就设置为YES
#pasv_addr_resolve=NO 

#该选项用于设置是否使用PASV方式来获得数据连接。
#pasv_enable=YES

#在vsftpd中,可以通过定义用户配置文件来实现不同的用户使用不同的配置。
#user_config_dir=/etc/vsftpd/userconf

#如果你想禁用PORT安全检查(确保输出的数据仅连接到客户端)则设置为YES.仅在你在你
#知道你在作什么时.
#pasv_promiscuous=NO

#若设置为YES时,则所有的SSl客户端连接都需要提供证书,有效的证书在
#validate_cert中指定
#require_cert=NO

#当设置为YES时,所有的SSl数据连接都需要检阅SSL会话安全尽管该选项默认是安全的,但是他可
#能会破坏许多FTP客户端,所以你可能会禁用他
#require_ssl_reuse=NO

#若你希望使用引导vsftpd运行的用户去运行vsftpd.该选项在不能使用root用户访问FTP时很
#很有用。重要的警告!:不要使用该选项除非你真的知道你在作什么.
#run_as_launching_user=NO 

#若你想指定一系列的邮件密码让匿名用户登录。默认情况下邮件密码存放
#在/etc/vsftpd.email_passwords,
#但可以email_password_file指定文件.
#secure_email_list_enable=NO

#该选项控制着vsftpd是否试图控制着登录会话.若vsftpd控制着登录会话的话,
#则会更新utmp和wtmp日志文件.如果使用PAM认证的话他也会打开一个pam_session
#且只在退出登录后关闭.如果你不需要登录会话的话你可能会关闭此选项。
#session_support=NO

#若该选项为YES时vsftpd会试着显示系统中的进程的状态信息。换言之就是报告影响一个vsftpd
#会话的进程名。
#setproctitle_enable=NO

#是否支持SSl连接。
#ssl_enable=NO

#SSL连接时是否需要认证.
#ssl_request_cert=YES

#该选项仅在ssl_enable可用时才应用当为YES时,允许SSL v2协议连接。TLS v1优先
#ssl_sslv2=NO 

#该选项仅在ssl_enable为YES时可用.允许使用SSl v3协议连接.TLS v1优先
#ssl_sslv3=NO 

#该选项仅在ssl_enable为YES时可用,允许使用TLS v1协议。
#ssl_tlsv1=YES 

#该选项为YES时,在上传数据时需要通过SSL连接的终端,而不是端口上的一个EOF
#strict_ssl_read_eof=NO 

#当设置为YES时,在下载数据时需要通过SSL连接的端口,而不是端口上的一个EOF
#strict_ssl_write_shutdown=NO 

#该选项为YES时.任何原来记录到/var/log/vsftpd.log的信息都将记录到系统日志文件中
#syslog_enable=NO 
 
#当该选项为YES时,连接时将通过tcp_wrapper访问控制(wrap为隐藏的意思)
#tcp_wrappers=YES 
 
#该选项为YES时设置显示用户名和组名.默认情况下使用的是UID和GID
#text_userdb_names=NO


#控制vsftpd是否使用相对路径.(以~/something显示路径)
#tilde_user_enable=NO

#设置是否使用本地用户所在的时区显示时间.默认显示的时间为GMT时区的.
#use_localtime=YES 

#用于设置在你的系统中使用sendfile()系统调用来测试的内部设置。
#use_sendfile=YES

#设置禁止登录的用户列表,用户列表在userlist_file中指定的文件中指定
#userlist_deny=NO

#允许从文件中加载允许登录的用户名列表
#userlist_enable=NO 

#若设置为YES时,所有的SSL客户端需要合法的认证书
#validate_cert=YES

#该选项用于设置虚拟用户是否拥有和本地用户一样的特权.
#virtual_use_local_privs=NO

#该选项用于设置一个PASV风格的连接的超时,单位为s
#accept_timeout=60

#该选项用于设置匿名用户的最大数据传输速度,单位b/s.若设置为0时表示无限制
#anon_max_rate=1024

#该选项用于设置匿名用户创建文件时的权限掩码.
#anon_umask=077

#该选项用于设置匿名用户上传文件时使用chown强制改变文件的权限值
#chown_upload_mode=0600

#用于设置连接超时 
#connect_timeout=60

#用于设置没有进程使用时最大允许数据连接的超时
#data_connection_timeout=120

#设置登录失败时要延迟1s后才可以再次连接
#delay_failed_login=1

#设置登录成功后的延迟时间,单位是s
#delay_successful_login=0
 
#设置上传文件的权限,若你希望上传的文件可以被执行你需要设置为0777
#file_open_mode=0777

#设置PORT风格的连接的端口,默认为20 
#ftp_data_port=21

#当vsftpd在单独模式下运行时侦听的端口号
#listen_port=21

#设置本地用户最大的传输速度,b/s,若设置为0表示为限制。
#local_max_rate=2048 
 
#设置最大连接的IP数为10
#max_clients=10

#设置在5次连接失败后终止会话
#max_login_fails=5

#设置每个IP地址最多可以连接的数目为1次。若设置为0时表示无限次
#max_per_ip=1

#设置使用PASV风格连接时最大的端口号,0表示无限制
#pasv_max_port=0

#设置使用PASV风格连接时最小的端口号,0表示无限制
#pasv_min_port=0

#你可能不会改变这个选项设置,但是你可以为更低宽带限制将此选项设置为像8192一样
#trans_chunk_size=0

#设置匿名用户登录后转向的目录
#anon_root=/home/ftp/ftp

#设置存放匿名用户邮件密码列表的文件
#banned_email_file=/home/wyy/logs/vsftpd/vsftpd.banned_emails

#设置包含当用户登录FTP时显示的内容的文件,会覆盖由ftpd_banner设置的字符串
#banner_file=/home/wyy/logs/vsftpd/vsftpd.banner

#该选项设置加载认证证书的文件
#ca_certs_file

#设置当上传文件后文件的所属关系该为huangyandong所有,仅在chown_uploads为YES时可用
#chown_username=wyy

#指定一系列由,隔开的允许使用的FTP命令
#cmds_allowed=PASV,RETR,QUIT

#指定一系列由,隔开的不允许使用的FTP命令此处指定不允许删除文件和目录
#cmds_denied=DELE,RMD
 
#指定包含一系列不允许访问的文件名的文件
#deny_file

#指定加载DSA证书的文件名
#dsa_cert_file

#指定包含DSA私钥的文件
#dsa_private_key_file

#指定包含邮件密码的文件
#email_password_file=/etc/vsftpd.email_password

#指定操作匿名用户使用的根目录的用户名
#ftp_username=ftp
 
#指定游客映射的用户名
#guest_username=ftp

#指定要隐藏的文件名匹配
#hide_file

#指定当在单独模式下运行时侦听的IP地址
#listen_address=ipaddr

#指定当在单独模式下运行时侦听的IPV6地址
#listen_address6

#指定本地用户登录后转入的目录
#local_root=/home/ftp/ftp

#该选项指定包含当用户转入一个新的目录时显示的内容的文件,默认文件为.message
#仅在dirmessage_enable可用时才有用
#message_file=.message

#指定安全的目录名,该目录不能被ftp用户写入,在FTP文件系统不能访问是转入的目录
#secure_chroot_dir=/home/wyy/logs/vsftpd/empty

#该选项用于指定在userlist_enable为YES时,从指定文件中加载用户列表
#userlist_file=/etc/vsftpd.user_list

#启用虚拟用户功能
#guest_enable=YES

#指定虚拟的宿主用户
#guest_username=virtusers

#设定虚拟用户的权限符合他们的宿主用户
#virtual_use_local_privs=YES

#禁止反向域名解析,若是没有添加这个参数可能会出现用户登陆较慢,或则客户链接不上ftp的现象
#reverse_lookup_enable=NO

#设定pam服务下的vsftpd验证配置文件名。因此,PAM验证将参考/etc/pam.d/下的vsftpd文件配置。
#pam_service_name=vsftpd

配置文件功能分类

#======================1.默认配置======================
#1.1>允许匿名用户和本地用户登陆。
     anonymous_enable=YES
     local_enable=YES
#1.2>匿名用户使用的登陆名为ftp或anonymous,口令为空;匿名用户不能离开匿名  用户家目录/var/ftp,且只能下载不能上传。
#1.3>本地用户的登录名为本地用户名,口令为此本地用户的口令;本地用户可以在自己家目录中进行读写操作;本地用户可以离开自家目录切换至有权限访问的其他目录,并在权限允许的情况下进行上传/下载。
    write_enable=YES
#1.4>写在文件/etc/vsftpd.ftpusers中的本地用户禁止登陆。

#======================2.配置文件格式======================
#vsftpd.conf 的内容非常单纯,每一行即为一项设定。若是空白行或是开头为一行,将会被忽略。内容的格式只有一种,如下所示

#要注意的是,等号两边不能加空白。
option=value

#======================3.匿名用户(anonymous)设置======================
#控制是否允许匿名用户登入,YES 为允许匿名登入,NO 为不允许。默认值为YES。
anonymous_enable=YES/NO(YES)

#是否允许登陆用户有写权限。属于全局设置,默认值为YES。
write_enable=YES/NO(YES)

#若是启动这项功能,则使用匿名登入时,不会询问密码。默认值为NO。
no_anon_password=YES/NO(NO)

#定义匿名登入的使用者名称。默认值为ftp。
ftp_username=ftp

#使用匿名登入时,所登入的目录。默认值为/var/ftp。注意ftp目录不能是777的权限属性,即匿名用户的家目录不能有777的权限。
anon_root=/var/ftp

#如果设为YES,则允许匿名登入者有上传文件(非目录)的权限,只有在write_enable=YES时,此项才有效。当然,匿名用户必须要有对上层目录的写入权。默认值为NO。
anon_upload_enable=YES/NO(NO)

#如果设为YES,则允许匿名登入者下载可阅读的档案(可以下载到本机阅读,不能直接在FTP服务器中打开阅读)。默认值为YES。
anon_world_readable_only=YES/NO(YES)

#如果设为YES,则允许匿名登入者有新增目录的权限,只有在write_enable=YES时,此项才有效。当然,匿名用户必须要有对上层目录的写入权。默认值为NO。
anon_mkdir_write_enable=YES/NO(NO)

#如 果设为YES,则允许匿名登入者更多于上传或者建立目录之外的权限,譬如删除或者重命名。(如果anon_upload_enable=NO,则匿名用户 不能上传文件,但可以删除或者重命名已经存在的文件;如果anon_mkdir_write_enable=NO,则匿名用户不能上传或者新建文件夹,但 可以删除或者重命名已经存在的文件夹。)默认值为NO。
anon_other_write_enable=YES/NO(NO)

#设置是否改变匿名用户上传文件(非目录)的属主。默认值为NO。
chown_uploads=YES/NO(NO)

#设置匿名用户上传文件(非目录)的属主名。建议不要设置为root。
chown_username=username

#设置匿名登入者新增或上传档案时的umask 值。默认值为077,则新建档案的对应权限为700。
anon_umask=077

#若是启动这项功能,则必须提供一个档案/etc/vsftpd/banner_emails,内容为email address。若是使用匿名登入,则会要求输入email address,若输入的email address 在此档案内,则不允许进入。默认值为NO。
deny_email_enable=YES/NO(NO)

#此文件用来输入email address,只有在deny_email_enable=YES时,才会使用到此档案。若是使用匿名登入,则会要求输入email address,若输入的email address 在此档案内,则不允许进入。
banned_email_file=/etc/vsftpd/banner_emails

#======================4.本地用户设置======================
#控制是否允许本地用户登入,YES 为允许本地用户登入,NO为不允许。默认值为YES。
local_enable=YES/NO(YES)

#当本地用户登入时,将被更换到定义的目录下。默认值为各用户的家目录。
local_root=/home/username

#是否允许登陆用户有写权限。属于全局设置,默认值为YES。
write_enable=YES/NO(YES)

#本地用户新增档案时的umask 值。默认值为077。
local_umask=022

#本地用户上传档案后的档案权限,与chmod 所使用的数值相同。默认值为0666。
file_open_mode=0755

#======================5.欢迎语设置======================
#如果启动这个选项,那么使用者第一次进入一个目录时,会检查该目录下是否有.message这个档案,如果有,则会出现此档案的内容,通常这个档案会放置欢迎话语,或是对该目录的说明。默认值为开启。
dirmessage_enable=YES/NO(YES)

#设置目录消息文件,可将要显示的信息写入该文件。默认值为.message。
message_file=.message

#当使用者登入时,会显示此设定所在的档案内容,通常为欢迎话语或是说明。默认值为无。如果欢迎信息较多,则使用该配置项。
banner_file=/etc/vsftpd/banner

#用来定义欢迎话语的字符串,banner_file是档案的形式,而ftpd_banner则是字符串的形式。预设为无。
ftpd_banner=Welcome to BOB's FTP server

#======================6.控制用户是否允许切换到上级目录======================
#在默认配置下,本地用户登入FTP后可以使用cd命令切换到其他目录,这样会对系统带来安全隐患。可以通过以下三条配置文件来控制用户切换目录。

#设置是否启用chroot_list_file配置项指定的用户列表文件。默认值为NO。
chroot_list_enable=YES/NO(NO)

#用于指定用户列表文件,该文件用于控制哪些用户可以切换到用户家目录的上级目录。
chroot_list_file=/etc/vsftpd.chroot_list

#用于指定用户列表文件中的用户是否允许切换到上级目录。默认值为NO。
chroot_local_user=YES/NO(NO)

#通过搭配能实现以下几种效果:
#6.1当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd.chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。
#6.2当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd.chroot_list文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录。
#6.3当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录。
#6.4当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录。

#======================7.数据传输模式设置======================
#FTP在传输数据时,可以使用二进制方式,也可以使用ASCII模式来上传或下载数据。

#设置是否启用ASCII 模式上传数据。默认值为NO。
ascii_upload_enable=YES/NO(NO)

#设置是否启用ASCII 模式下载数据。默认值为NO。
ascii_download_enable=YES/NO(NO)

#======================8.访问控制设置======================
#两种控制方式:一种控制主机访问,另一种控制用户访问。
#8.1控制主机访问:
tcp_wrappers=YES/NO(YES)
#设置vsftpd是否与tcp wrapper相结合来进行主机的访问控制。默认值为YES。如果启用,则vsftpd服务器会检查/etc/hosts.allow 和/etc/hosts.deny 中的设置,来决定请求连接的主机,是否允许访问该FTP服务器。这两个文件可以起到简易的防火墙功能。

#比如:若要仅允许192.168.0.1—192.168.0.254的用户可以连接FTP服务器,则在/etc/hosts.allow文件中添加以下内容:
vsftpd:192.168.0. :allow
all:all :deny
#8.2控制用户访问:
#对于用户的访问控制可以通过/etc目录下的vsftpd.user_list和ftpusers文件来实现。

#控制用户访问FTP的文件,里面写着用户名称。一个用户名称一行。
userlist_file=/etc/vsftpd.user_list

#是否启用vsftpd.user_list文件。
userlist_enable=YES/NO(NO)

#决定vsftpd.user_list文件中的用户是否能够访问FTP服务器。若设置为YES,则vsftpd.user_list文件中的用户不允许访问FTP,若设置为NO,则只有vsftpd.user_list文件中的用户才能访问FTP。
#/etc /vsftpd/ftpusers文件专门用于定义不允许访问FTP服务器的用户列表(注意:如果 userlist_enable=YES,userlist_deny=NO,此时如果在vsftpd.user_list和ftpusers中都有某个 用户时,那么这个用户是不能够访问FTP的,即ftpusers的优先级要高)。默认情况下vsftpd.user_list和ftpusers,这两个 文件已经预设置了一些不允许访问FTP服务器的系统内部账户。如果系统没有这两个文件,那么新建这两个文件,将用户添加进去即可。
userlist_deny=YES/NO(YES)

#======================9.访问速率设置======================
#设置匿名登入者使用的最大传输速度,单位为B/s,0 表示不限制速度。默认值为0。
anon_max_rate=0

#本地用户使用的最大传输速度,单位为B/s,0 表示不限制速度。预设值为0。
local_max_rate=0

#======================10.超时时间设置======================
#设置建立FTP连接的超时时间,单位为秒。默认值为60。
accept_timeout=60

#PORT 方式下建立数据连接的超时时间,单位为秒。默认值为60。
connect_timeout=60

#设置建立FTP数据连接的超时时间,单位为秒。默认值为120。
data_connection_timeout=120

#设置多长时间不对FTP服务器进行任何操作,则断开该FTP连接,单位为秒。默认值为300 。
idle_session_timeout=300

#======================11.日志文件设置======================
#是否启用上传/下载日志记录。如果启用,则上传与下载的信息将被完整纪录在xferlog_file 所定义的档案中。预设为开启。
xferlog_enable= YES/NO(YES)

#设置日志文件名和路径,默认值为/var/log/vsftpd.log。
xferlog_file=/var/log/vsftpd.log

#如果启用,则日志文件将会写成xferlog的标准格式,如同wu-ftpd 一般。默认值为关闭。
xferlog_std_format=YES/NO(NO)

#如果启用此选项,所有的FTP请求和响应都会被记录到日志中,默认日志文件在/var/log/vsftpd.log。启用此选项时,xferlog_std_format不能被激活。这个选项有助于调试。默认值为NO。
log_ftp_protocol=YES|NO(NO)

#======================12.定义用户配置文件======================
#在vsftpd中,可以通过定义用户配置文件来实现不同的用户使用不同的配置。

#设置用户配置文件所在的目录。当设置了该配置项后,用户登陆服务器后,系统就会到/etc/vsftpd/userconf目录下,读取与当前用户名相同的文件,并根据文件中的配置命令,对当前用户进行更进一步的配置。
user_config_dir=/etc/vsftpd/userconf


#例 如:定义user_config_dir=/etc/vsftpd/userconf,且主机上有使用者 test1,test2,那么我们就在user_config_dir 的目录新增文件名为test1和test2两个文件。若是test1 登入,则会读取user_config_dir 下的test1 这个档案内的设定。默认值为无。利用用户配置文件,可以实现对不同用户进行访问速度的控制,在各用户配置文件中定义local_max_rate=XX, 即可。


#======================13.FTP的工作方式与端口设置======================
#FTP有两种工作方式:PORT FTP(主动模式)和PASV FTP(被动模式)

#设置FTP服务器建立连接所监听的端口,默认值为21。
listen_port=21

#指定FTP使用20端口进行数据传输,默认值为YES。
connect_from_port_20=YES/NO

#设置在PORT方式下,FTP数据连接使用的端口,默认值为20。
ftp_data_port=20

#若设置为YES,则使用PASV工作模式;若设置为NO,则使用PORT模式。默认值为YES,即使用PASV工作模式。
pasv_enable=YES/NO(YES)

#在PASV工作模式下,数据连接可以使用的端口范围的最大端口,0 表示任意端口。默认值为0。
pasv_max_port=0

#在PASV工作模式下,数据连接可以使用的端口范围的最小端口,0 表示任意端口。默认值为0。
pasv_min_port=0

#======================14.与连接相关的设置======================

#设置vsftpd服务器是否以standalone模式运行。以standalone模式运行是一种较好的方式,此时listen必须设置为YES,此为默 认值。建议不要更改,有很多与服务器运行相关的配置命令,需要在此模式下才有效。若设置为NO,则vsftpd不是以独立的服务运行,要受到xinetd 服务的管控,功能上会受到限制。
listen=YES/NO(YES)

#设置vsftpd允许的最大连接数,默认值为0,表示不受限制。若设置为100时,则同时允许有100个连接,超出的将被拒绝。只有在standalone模式运行才有效。
max_clients=0

#设置每个IP允许与FTP服务器同时建立连接的数目。默认值为0,表示不受限制。只有在standalone模式运行才有效。
max_per_ip=0

#设置FTP服务器在指定的IP地址上侦听用户的FTP请求。若不设置,则对服务器绑定的所有IP地址进行侦听。只有在standalone模式运行才有效。
listen_address=IP地址

#设置每个与FTP服务器的连接,是否以不同的进程表现出来。默认值为NO,此时使用ps aux |grep ftp只会有一个vsftpd的进程。若设置为YES,则每个连接都会有一个vsftpd的进程。
setproctitle_enable=YES/NO(NO)

#======================15.虚拟用户设置======================
#虚拟用户使用PAM认证方式。

#设置PAM使用的名称,默认值为/etc/pam.d/vsftpd。
pam_service_name=vsftpd

#启用虚拟用户。默认值为NO。
guest_enable= YES/NO(NO)

#这里用来映射虚拟用户。默认值为ftp。
guest_username=ftp

#当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限。默认情况下此参数是关闭的(NO)。
virtual_use_local_privs=YES/NO(NO)

#======================16.其他设置======================
#设置在执行ls –la之类的命令时,是显示UID、GID还是显示出具体的用户名和组名。默认值为NO,即以UID和GID方式显示。若希望显示用户名和组名,则设置为YES。
text_userdb_names= YES/NO(NO)

#若是启用此功能,则允许登入者使用ls –R(可以查看当前目录下子目录中的文件)这个指令。默认值为NO。
ls_recurse_enable=YES/NO(NO)

#如果启用此功能,所有档案的拥有者与群组都为ftp,也就是使用者登入使用ls -al之类的指令,所看到的档案拥有者跟群组均为ftp。默认值为关闭。
hide_ids=YES/NO(NO)

#如果设置为NO,所有的文件都不能下载到本地,文件夹不受影响。默认值为YES。
download_enable=YES/NO(YES)

部署

将生成的 vsftpd 复制到目标板bin目录(其他目录也可以,只要能找到),vsftpd.conf复制到目标板/etc目录并修改vsftpd的配置文件

listen=YES
local_root=/
anon_root=/
#允许匿名访问
anonymous_enable=YES
#允许本地用户对FTP服务器文件有写权限
write_enable=YES
#系统自动维护上传和下载日志
xferlog_enable=YES
#设定FTP服务器将启用FTP数据端口的连接请求
connect_from_port_20=YES
#标准格式写日志文件
xferlog_std_format=YES
#设置本地用户默认掩码
local_umask=022
#不允许匿名用户上传文件
anon_upload_enable=NO
#不允许匿名用户写文件
anon_mkdir_write_enable=NO
#设置PAM外挂模块提供的认证服务所使用的配置文件名
#pam_service_name=vsftp
#是否允许ftpusers文件中得用户登录FTP服务器,默认为NO
userlist_enable=YES
#是否使用tcp_wrappers作为主机访问控制方式
tcp_wrappers=YES
idle_session_timeout=600
data_connection_timeout=120
max_clients=10
max_per_ip=5
local_max_rate=50000
listen=YES

建立vsftpd的用户

adduser ftpsecure  #对应配置文件里的用户名
passwd ftpsecure
chown root:root /etc/vsftpd.conf
chown root:root vsftpd
chown ftpsecure:ftpsecure /etc/vsftpd.conf
deluser ftpsecure

TODO

Stupid-FTPd移植

在嵌入式Linux系统中,有时候需要搭建一个ftp服务器,以便windows或linux系统去访问嵌入式linux系统的数据。ftp和vsftpd软件相对比较大,这里提供一款很小型的ftp服务器Stupid-FTPd。

https://sourceforge.net/projects/stupid-ftpd/files/stupid-ftpd/V1_5beta/

下载源码

创建工作目录

mkdir -p /home/wyy/Develop/Stupid-FTPd
cd /home/wyy/Develop/Stupid-FTPd

下载解压

wget https://excellmedia.dl.sourceforge.net/project/stupid-ftpd/stupid-ftpd/V1_5beta/stupid-ftpd-1.5beta.tar.gz
tar xvf stupid-ftpd-1.5beta.tar.gz

编译配置

修改顶层Makefile

cd /home/wyy/Develop/Stupid-FTPd/stupid-ftpd
vi Makefile

修改如下

CC = arm-linux-gnueabihf-gcc 		#第10行,指定交叉编译器
CFLAGS=-O2 -Wall -Wstrict-prototypes -static	#第15行,静态编译

编译

make -j4

部署

在开发板上创建运行目录,将stupid-ftpd.Linux6stupid-ftpd.conf拷贝到运行目录下

mkdir -p /home/wyy/stupid-ftp

修改配置文件vi stupid-ftpd.conf

#
# This is a config-file for stupid-ftpd
# ------------------------------------
#
# The standard path should be /etc/stupid-ftpd.conf
# You can define other paths by using the "-f" option
# when starting stupid-ftpd.
#
#
# ATTENTION: 1) Remember, that the server is running with YOUR permissions.
#            It will fail to access other users directory, unless it is
#            root, but it also allows to access ALL YOUR directories,
#            which are deeper in a user's root-dir and YOU HAVE access to.
#            2) To solve the problem, the best way is to define a group-ID
#	        for stupid-ftpd. 
#		Or if you aren't root: set the MAIN root (serverroot=) to
#		the highest directory depth which is possible.
#            3) REMEMBER: DO NOT PUT THIS FILE in an accessible directory!!!
#               There are passwords defined here. The safest place is
#               outside the serverroot.

# Server operation mode:
# daemon      - 以守护进程的形式运行在后台
# interactive - 标准模式
mode=interactive

# chroot to
#serverroot=/mnt #在user中指定了访问目录,这里要注释掉否则无法访问

# type of chroot
# real    - kernel chroot(), high security, but needs root privileges
# virtual - no real chroot(), software side (virtual) chroot
changeroottype=virtual

# Port number for the FTP-Protocol
port=21 #默认为ftp的端口号

# Maximum users allowed to log in
maxusers=10

# Message Of The Day (motd)
# It will be displayed after the login procedure.
#motd=/tmp/stupid-ftpd.motd

# Message on quit
# It will be displayed when quitting.

#byemsg=/tmp/stupid-ftpd.bye

# Log
#log=/tmp/stupid-ftpd.log

# User list:
# Format:  user=<login> <passwd> <subdir> <maxlogins> <flags>
# 		<login>     user name
#		<passwd>    password or * for anonymous access
# 		<subdir>    (internally appended to serverroot)
# 			    the user has access to the WHOLE SUBTREE,
#			    if the server has access to it
#               <maxlogins> maximal logins with this usertype
#		<flags>     D - download
#			    U - upload + making directories
#			    O - overwrite existing files
#			    M - allows multiple logins
#			    E - allows erase operations
#			    A - allows EVERYTHING(!)
#			    
# user ftp is mapped to user anonymous, don't forget this
# 
# Examples:
# user=user1 passx /tmp  2 D 
#      - login: user1, passwd: passx, max login twice (different IPs!)
#        only download rights from directory /tmp       
# user=user2 passy /home/user2 0 DU
#      - login: user2, passwd: passy, no login count limit (different IPs!)
#        download+upload rights to directory /home/user2 
# user=user3 passz /home/user3 5 DUOM
#      - login: user3, passwd: passz, max login count 5 (even from same IP)
#        download+upload+overwrite rights to directory /home/user3 
# user=user4 passq /tmp 10 -
#      - login: user4, passwd: passq, max login count 10 (even from same IP)
#        look-only rights at directory /tmp
#
# SEE: ATTENTION remark on the top of this file !!!
#user=anonymous	*	 /	  5   A   #匿名方法登录
user=root	root	 /	  5   A	  #指定用户,如果密码是*代表无需密码即可登录,
								  #可以同时开启匿名登录

# Banned hosts
# "*" and "?" are allowed here

#ban=192.168.*
#ban=localhost
#ban=*.banme.com

# Ban message (displayed to user who is banned)
# Please don't use more than 70 characters.
banmsg=Go away !

# Login/password timeout
login-timeout=120

# Timeout (while logged in)
timeout=240

测试

开启ftp服务器

./stupid-ftpd.Linux6 -f stupid-ftpd.conf

开启浏览器输入ftp://192.168.x.x即可访问,还可以通过一些ftp工具来连接。

Pure-FTPd移植

是一款专注于程序健壮和软件安全的免费FTP服务器软件(基于BSD License)。其可以在多种类Unix操作系统中编译运行,包括Linux、OpenBSD、NetBSD、FreeBSD、DragonFly BSD、Solaris、Tru64、Darwin、Irix and HP-UX。PureFTPd还有Android移植版本。pureftp集成mysql身份验证是将ftp用户信息保存到mysql数据库中,这样可以对大量的ftp服务器做集中管理,对用户帐号的维护只要通过mysql的操作就可以完成。

下载源码

创建工作目录

mkdir -p /home/wyy/Develop/pure-ftpd
cd /home/wyy/Develop/pure-ftpd

下载解压

git clone https://github.com/jedisct1/pure-ftpd.git

编译配置

修改顶层Makefile

CC=arm-linux-gnueabihf-gcc ./configure --prefix=/home/wyy/Develop/pure-ftpd/install --with-language=simplified-chinese --with-everything --host=arm-linux

编译安装

make -j4
make install

基础命令

pure-pw useradd 添加用户
pure-pw userdel 删除用户
pure-pw usermod 修改用户
pure-pw show 查看用户详细信息
pure-pw list 查看所有用户设置
pure-pw mkdb 生成数据文件

脚本解析

pure-ftpd.conf

############################################################
#                                                          #
#             Configuration file for pure-ftpd             #
#                                                          #
############################################################

# If you want to run Pure-FTPd with this configuration
# instead of command-line options, please run the
# following command :
#
# ${exec_prefix}/sbin/sbin/pure-ftpd /home/wyy/Develop/pure-ftpd/install/etc/pure-ftpd.conf
#
# Online documentation:
# https://www.pureftpd.org/project/pure-ftpd/doc


#限制所有用户在其主目录中
ChrootEveryone               yes

#信任组ID100,可以不锁定
# TrustedGID                   100

#兼容ie等比较非正规化的ftp客户端
BrokenClientsCompatibility   no

#服务器总共允许同时连接的最大用户数
MaxClientsNumber             50

#做为守护(doemon)进程运行(Fork in background)
Daemonize                    yes

#同一IP允许同时连接的用户数
MaxClientsPerIP              8

#如果你要记录所有的客户命令,设置这个指令为 "yes"
VerboseLog                   no

#即使客户端没有发送 '-a' 选项也列出隐藏文件
DisplayDotFiles              yes

#不允许认证用户 - 仅作为一个公共的匿名FTP。
AnonymousOnly                no

#不允许匿名连接,仅允许认证用户使用。
NoAnonymous                  no

#缺省的功能( facility )是 "ftp"。 "none" 将禁止日志。
SyslogFacility               ftp

#定制用户登陆后的显示信息
# FortunesFile                 /usr/share/fortune/zippy

#在日志文件中不解析主机名。
DontResolve                  yes

#客户端允许的最大的空闲时间(分钟,缺省15分钟)
MaxIdleTime                  15

#LDAP配置文件(参考 README.LDAP) 
# LDAPConfigFile               /etc/pureftpd-ldap.conf

#MySQL配置文件(参考 README.MySQL) 
# MySQLConfigFile              /etc/pureftpd-mysql.conf

#Postgres配置文件 (参考 README.PGSQL)
# PGSQLConfigFile              /etc/pureftpd-pgsql.conf

#PureDB用户数据库(see README.Virtual-Users)
# PureDB                       /etc/pureftpd.pdb

#pure-authd 的socket路径(参考 README.Authentication-Modules) 
# ExtAuth                      /var/run/ftpd.sock

#如果你要启用 PAM 认证方式, 去掉下面行的注释。 
# PAMAuthentication            yes

#不起用 简单的 Unix系统 认证方式(/etc/passwd)。
# UnixAuthentication           yes

#请注意,LDAPConfigFile, MySQLConfigFile, PAMAuthentication 和 
#UnixAuthentication 这些指令只能被使用一次,不过,他们能被混合在一起用。例如:如果你使用了 
#MySQLConfigFile 和 UnixAuthentication,那么 SQL 服务器将被访问。如果因为用户名未找 
#到而使 SQL 认证失败的话,就会在/etc/passwd 和 /etc/shadow 中尝试另外一种认证,如果因 
#为密码错误而使 SQL 认证失败的话,认证就会在此结束了。认证方式由它们被给出来的顺序而被链 
#接了起来。

#'ls' 命令的递归限制。第一个参数给出文件显示的最大数目。第二个参数给出最大的子目录深度。
LimitRecursion               10000 8

#允许匿名用户创建新目录?
AnonymousCanCreateDirs       no

#如果系统被 loaded 超过下面的值,匿名用户会被禁止下载。
MaxLoad                      4

#被动连接响应的端口范围。- for firewalling. 
# PassivePortRange             30000 50000

#强制一个IP地址使用被动响应( PASV/EPSV/SPSV replies)。 - for NAT. 
# Symbolic host names are also accepted for gateways with dynamic IP
# addresses.
# ForcePassiveIP               192.168.0.1

#匿名用户的上传/下载的比率。 
# AnonymousRatio               1 10

#所有用户上传下载速度比率
# UserRatio                    1 10

#不接受所有者为 "ftp" 的文件的下载。例如:那些匿名用户上传后未被本地管理员验证的文件
AntiWarez                    yes

#服务监听的IP 地址和端口。(default=all IP addresses, port 21).
# Bind                         127.0.0.1,21

#匿名用户的最大带宽(KB/s)
# AnonymousBandwidth           8

#所有用户的最大带宽(KB/s),包括匿名用户。
# Use AnonymousBandwidth *or* UserBandwidth, not both.
# UserBandwidth                8

#新建目录及文件的属性掩码值。<文件掩码>;:<目录掩码>;
# 177:077 if you feel paranoid.
Umask                        133:022

#认证用户允许登陆的最小组ID(UID)。
MinUID                       100

#仅允许认证用户进行 FXP 传输。
AllowUserFXP                 no

#对匿名用户和非匿名用户允许进行匿名 FXP 传输。
AllowAnonymousFXP            no

#用户不能删除和写点文件(文件名以 '.' 开头的文件)
ProhibitDotFilesWrite        no

#禁止读点文件(文件名以 '.' 开头的文件) (.history, .ssh...)
ProhibitDotFilesRead         no

#永不覆盖文件。当上传的文件,其文件名已经存在时,自动重命名,如: file.1, file.2, file.3, ...
AutoRename                   no

#不接受匿名用户上传新文件( no = 允许上传)
AnonymousCantUpload          no

#仅允许来自以下IP地址的非匿名用户连接。你可以使用这个指令来打开几个公网IP来提供匿名FTP, 
#而保留一个私有的防火墙保护的IP来进行远程管理。你还可以只允许一内网地址进行认证,而在另外 
#一个IP上提供纯匿名的FTP服务。
# TrustedIP                    10.1.1.1

#如果你要为日志每一行添加PID去掉下面行的注释。 
# LogPID                       yes

#使用类似于Apache的格式创建一个额外的日志文件,如: 
#fw.c9x.org - jedi [13/Dec/1975] "GET /ftp/linux.tar.bz2" 200 21809338 
#这个日志文件能被 www 流量分析器处理。 
# AltLog                       clf:/var/log/pureftpd.log

#使用优化过的格式为统计报告创建一个额外的日志文件。
# AltLog                       stats:/var/log/pureftpd.log

#使用标准的W3C格式创建一个额外的日志文件。(与大部分的商业日志分析器兼容) 
# AltLog                       w3c:/var/log/pureftpd.log

#不接受 CHMOD 命令。用户不能更改他们文件的属性。
# NoChmod                      yes

#允许用户断点续传
# KeepAllFiles                 yes

#用户主目录不存在的话,自动创建。
# CreateHomeDir                yes

#启用虚拟的磁盘限额。第一个数字是最大的文件数。 
#第二个数字是最大的总的文件大小(单位:Mb)。 
#所以,1000:10 就限制每一个用户只能使用 1000 个文件,共10Mb。
# Quota                        1000:10

#如果你的 pure-ftpd 编译时加入了独立服务器( standalone )支持,你能够改变 pid 文件 
#的位置。缺省位置是 /var/run/pure-ftpd.pid 。
# PIDFile                      /var/run/pure-ftpd.pid

#如果你的 pure-ftpd 编译时加入了 pure-uploadscript 支持,这个指令将会使 pure-ftpd 
#发送关于新上传的情况信息到 /var/run/pure-ftpd.upload.pipe,这样 pure-uploadscript 
#就能读然后调用一个脚本去处理新的上传。 
# CallUploadScript             yes

#这个选项对允许匿名上传的服务器是有用的。当 /var/ftp 在 /var 里时,需要保留一定磁盘空间 
#来保护日志文件。当所在磁盘分区使用超过百分之 X 时,将不在接受新的上传
MaxDiskUsage                   99

#如果你不想要你的用户重命名文件的话,就设置为'yes'。
# NoRename                     yes

#是'customer proof':工作区(workaround)反对普通的客户错误,类似于:'chmod 0 public_html' 的错误。 
#那是一个有效的命令,不过,将导致无知的客户所定他们自己的文件,将使你的技术支持忙于愚蠢的的问题中。 
#如果你确信你所有的用户都有基本的Unix知识的话,这个特性将没什么用了。不过,如果你是一个主机提供商 
#的话,启用它。
CustomerProof                yes

#每一个用户的并发限制。只有在添加了 --with-peruserlimits 编译选项进行编译后,这个指令才起 
#作用。(大部分的二进制的发布版本就是例子) 
#格式是 : <每一个用户最大允许的进程>;:<最大的匿名用户进程>; 
#例如:3:20意思是同一个认证用户最大可以有3个同时活动的进程。而且同时最多只能有20个匿名用户进程。 
# PerUserLimits                3:20

# When a file is uploaded and there was already a previous version of the file
# with the same name, the old file will neither get removed nor truncated.
# The file will be stored under a temporary name and once the upload is
# complete, it will be atomically renamed. For example, when a large PHP
# script is being uploaded, the web server will keep serving the old version and
# later switch to the new one as soon as the full file will have been
# transferred. This option is incompatible with virtual quotas.
# NoTruncate                   yes

# This option accepts three values:
# 0: disable SSL/TLS encryption layer (default).
# 1: accept both cleartext and encrypted sessions.
# 2: refuse connections that don't use the TLS security mechanism,
#    including anonymous sessions.
# Do _not_ uncomment this blindly. Double check that:
# 1) The server has been compiled with TLS support (--with-tls),
# 2) A valid certificate is in place,
# 3) Only compatible clients will log in.
# TLS                          1

# Cipher suite for TLS sessions.
# The default suite is secure and setting this property is usually
# only required to *lower* the security to cope with legacy clients.
# Prefix with -C: in order to require valid client certificates.
# If -C: is used, make sure that clients' public keys are present on
# the server.
# TLSCipherSuite               HIGH

# Certificate file, for TLS
# CertFile                     /etc/ssl/private/pure-ftpd.pem

# Listen only to IPv4 addresses in standalone mode (ie. disable IPv6)
# By default, both IPv4 and IPv6 are enabled.
# IPV4Only                     yes

# Listen only to IPv6 addresses in standalone mode (i.e. disable IPv4)
# By default, both IPv4 and IPv6 are enabled.
# IPV6Only                     yes

# UTF-8 support for file names (RFC 2640)
# Set the charset of the server filesystem and optionally the default charset
# for remote clients that don't use UTF-8.
# Works only if pure-ftpd has been compiled with --with-rfc2640

# FileSystemCharset                big5
# ClientCharset                    big5

pureftpd-ldap.conf

#############################################
#                                           #
# Sample Pure-FTPd LDAP configuration file. #
# See README.LDAP for explanations.         #
#                                           #
#############################################
# Optional: scheme to connect with to LDAP server. Default: ldap
# Other possible values: ldaps, ldapi, etc.
# Remember to set LDAPPort accordingly.
LDAPScheme ldap

# Optional: name of the LDAP server. Default: localhost
LDAPServer ldap.example.com

# Optional: server port. Default: 389
LDAPPort   389

# Mandatory: the base DN to search accounts from. No default.
LDAPBaseDN cn=Users,dc=c9x,dc=org

# Optional: who we should bind the server as.
# Default: binds anonymously or binds as 'ftp' user
LDAPBindDN cn=Manager,dc=c9x,dc=org

# Password if we don't bind anonymously
# This configuration file should be only readable by root
LDAPBindPW r00tPaSsw0rD

# Optional: default UID, when there's no entry in a user object
# LDAPDefaultUID 500

# Optional: default GID, when there's no entry in a user object
# LDAPDefaultGID 100

# Filter to use to find the object that contains user info
# \L is replaced by the login the user is trying to log in as
# The default filter is (&(objectClass=posixAccount)(uid=\L))
# LDAPFilter (&(objectClass=posixAccount)(uid=\L))

# Attribute to get the home directory
# Default is homeDirectory (the standard attribute from posixAccount)
# LDAPHomeDir homeDirectory

# LDAP protocol version to use
# Version 3 (default) is mandatory with recent releases of OpenLDAP.
# LDAPVersion 3

# Optional: use TLS to connect to the LDAP server
# Note: if ldaps scheme is used, this property has no effect
# LDAPUseTLS  True

# Can be PASSWORD or BIND.
# PASSWORD retrieves objects and checks against the userPassword attribute
# BIND tries to bind
LDAPAuthMethod PASSWORD

# Optional: default home directory if there's LDAPHomeDir entry
# LDAPDefaultHomeDirectory /var/shared

pureftpd-mysql.conf


##############################################
#                                            #
# Sample Pure-FTPd Mysql configuration file. #
# See README.MySQL for explanations.         #
#                                            #
##############################################


# Optional : MySQL server name or IP. Don't define this for unix sockets.

# MYSQLServer     127.0.0.1


# Optional : MySQL port. Don't define this if a local unix socket is used.

# MYSQLPort       3306


# Optional : define the location of mysql.sock if the server runs on this host.

MYSQLSocket     /var/run/mysqld/mysqld.sock


# Mandatory : user to bind the server as.

MYSQLUser       root


# Mandatory : user password. You must have a password.

MYSQLPassword   rootpw


# Mandatory : database to open.

MYSQLDatabase   pureftpd


# Mandatory : how passwords are stored
# Valid values are : "cleartext", "argon2", "scrypt", "crypt", "sha1", "md5", "password" and "any"
# ("password" = MySQL password() function, which is sha1(sha1(password)))

MYSQLCrypt      scrypt


# In the following directives, parts of the strings are replaced at
# run-time before performing queries :
#
# \L is replaced by the login of the user trying to authenticate.
# \I is replaced by the IP address the user connected to.
# \P is replaced by the port number the user connected to.
# \R is replaced by the IP address the user connected from.
# \D is replaced by the remote IP address, as a long decimal number.
#
# Very complex queries can be performed using these substitution strings,
# especially for virtual hosting.

# Query to execute in order to fetch the password
MYSQLGetPW      SELECT Password FROM users WHERE User='\L'

# Query to execute in order to fetch the system user name or uid
MYSQLGetUID     SELECT Uid FROM users WHERE User='\L'
# Optional : default UID - if set this overrides MYSQLGetUID
#MYSQLDefaultUID 1000

# Query to execute in order to fetch the system user group or gid
MYSQLGetGID     SELECT Gid FROM users WHERE User='\L'

# Optional : default GID - if set this overrides MYSQLGetGID
#MYSQLDefaultGID 1000

# Query to execute in order to fetch the home directory
MYSQLGetDir     SELECT Dir FROM users WHERE User='\L'

# Optional : query to get the maximal number of files 
# Pure-FTPd must have been compiled with virtual quotas support.

# MySQLGetQTAFS  SELECT QuotaFiles FROM users WHERE User='\L'

# Optional : query to get the maximal disk usage (virtual quotas)
# The number should be in Megabytes.
# Pure-FTPd must have been compiled with virtual quotas support.
# MySQLGetQTASZ  SELECT QuotaSize FROM users WHERE User='\L'
# Optional : ratios. The server has to be compiled with ratio support.
# MySQLGetRatioUL SELECT ULRatio FROM users WHERE User='\L'
# MySQLGetRatioDL SELECT DLRatio FROM users WHERE User='\L'

# Optional : bandwidth throttling.
# The server has to be compiled with throttling support.
# Values are in KB/s .
# MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE User='\L'
# MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE User='\L'

# Enable ~ expansion. NEVER ENABLE THIS BLINDLY UNLESS :
# 1) You know what you are doing.
# 2) Real and virtual users match.
# MySQLForceTildeExpansion 1

# If you're using a transactionnal storage engine, you can enable SQL
# transactions to avoid races. Leave this commented if you are using the
# traditional MyIsam engine.
# MySQLTransactions On

部署

将安装目录/home/wyy/Develop/pure-ftpd/install下的所有文件拷贝到开发板/home/wyy/pure-ftpd下。

不使用配置文件

如果直接运行pure-ftpd,通过root的用户可以访问。

使用配置文件(未完成。。。。。。。)

修改etc中的pure-ftpd.conf

ChrootEveryone              yes
BrokenClientsCompatibility  no
MaxClientsNumber            50
Daemonize                   yes
MaxClientsPerIP             8
VerboseLog                  no
DisplayDotFiles             yes
AnonymousOnly               no
NoAnonymous                 no
SyslogFacility              ftp
DontResolve                 yes
MaxIdleTime                 15
PureDB                     /home/wyy/pure-ftpd/etc/pureftpd.pdb
LimitRecursion              3136 8
AnonymousCanCreateDirs      no
MaxLoad                     4
AntiWarez                   yes
Umask                       133:022
MinUID                      100
AllowUserFXP                no
AllowAnonymousFXP           no
ProhibitDotFilesWrite       no
ProhibitDotFilesRead        no
AutoRename                  no
AnonymousCantUpload         no
PIDFile                   /home/wyy/pure-ftpd/pure-ftpd.pid
MaxDiskUsage               99
CustomerProof              yes
CreateHomeDir               yes  #当家目录不存在时,自动创建家目录
adduser www #1234
chown -R www:www /home/www/

pure-pw useradd ftp_user1 -uwww -d /home/www/   #1234
pure-pw mkdb       #最后一步创建用户信息数据库文件
pure-pw list          #列出当前账号

FTP代码含义

110 重新启动标记应答。
120 服务在多久时间内ready。
125 数据链路端口开启,准备传送。
150 文件状态正常,开启数据连接端口。
200 命令执行成功。
202 命令执行失败。
211 系统状态或是系统求助响应。
212 目录的状态。
213 文件的状态。
214 求助的讯息。
215 名称系统类型。
220 新的联机服务ready。
221 服务的控制连接端口关闭,可以注销。
225 数据连结开启,但无传输动作。
226 关闭数据连接端口,请求的文件操作成功。
227 进入passive mode。
230 使用者登入。
250 请求的文件操作完成。
257 显示目前的路径名称。
331 用户名称正确,需要密码。
332 登入时需要账号信息。
350 请求的操作需要进一部的命令。
421 无法提供服务,关闭控制连结。
425 无法开启数据链路。
426 关闭联机,终止传输。
450 请求的操作未执行。
451 命令终止:有本地的错误。
452 未执行命令:磁盘空间不足。
500 格式错误,无法识别命令。
501 参数语法错误。
502 命令执行失败。
503 命令顺序错误。
504 命令所接的参数不正确。
530 未登入。 
532 储存文件需要账户登入。
550 未执行请求的操作。
551 请求的命令终止,类型未知。
552 请求的文件终止,储存位溢出。 
553 未执行请求的的命令,名称不正确。

日志数据的分析和参数说明

记录数据 参数名称 参数说明
Thu Sep 6 09:07:48 2007 当前时间 当前服务器本地时间,格式为: DDD MMM dd hh:mm:ss YYY
7 传输时间 传送文件所用时间,单位为秒
192.168.57.1 远程主机名称/IP 远程主机名称/IP
4323279 文件大小 传送文件的大小,单位为byte
/home/student/phpMyadmin- 2.11.0-all-languages.tar.gz 文件名 传输文件名,包括路径
b 传输类型 传输方式的类型,包括两种: a以ASCII传输 b以二进制文件传输
特殊处理标志 特殊处理的标志位,可能的值包括: _ 不做任何特殊处理 C 文件是压缩格式 U 文件是非压缩格式 T 文件是tar格式
i 传输方向 文件传输方向,包括两种: o 从FTP服务器向客户端传输 i 从客户端向FTP服务器传输
r 访问模式 用户访问模式,包括: a 匿名用户 g 来宾用户 r 真实用户,即系统中的用户
student 用户名 用户名称
ftp 服务名 所使用的服务名称,一般为FTP
0 认证方式 认证方式,包括: 0 无 1 RFC931认证
* 认证用户id 认证用户的id,如果使用*,则表示无法获得该id
c 完成状态 传输的状态: c 表示传输已完成 i 表示传输示完成

常见FTP命令及其功能

FTP命令 功能 FTP命令 功能
ls 显示服务器上的目录 ls [remote-dir][local-file] 显示远程目录remote-dir,并存入本地文件local-file
get remote-file [local-file] 从服务器下载指定文件到客户端 mget remote-files 下载多个远程文件(mget命令允许用通配符下载多个文件)
put local-file [remote-file] 从客户端上传指定文件到服务器 mput local-file 将多个文件上传至远程主机(mput命令允许用通配符上传多个文件)
open 连接FTP服务器 mdelete [remote-file] 删除远程主机文件
close 中断与远程服务器的ftp会话(与open对应) mkdir dir-name 在远程主机中创建目录
open host[port] 建立指定的ftp服务器连接,可指定连接端口 newer file-name 如果远程主机中file-name的修改时间比本地硬盘同名文件的时间更近,则重传该文件
cd directory 改变服务器的工作目录 rename [from][to] 更改远程主机的文件名
lcd directory 在客户端上(本地)改变工作目录 pwd 显示远程主机的当前工作目录
bye 退出FTP命令状态 quit 同bye,退出ftp会话
ascii 设置文件传输方式为ASCII模式 reget remote-file [local-file] 类似于get,但若local-file存在,则从上次传输中断处续传
binary 设置文件传输方式为二进制模式 rhelp [cmd-name] 请求获得远程主机的帮助
![cmd [args]] 在本地主机中交互shell后退回到ftp环境,如:!ls *.zip rstatus [file-name] 若未指定文件名,则显示远程主机的状态,否则显示文件状态
accout [password] 提供登录远程系统成功后访问系统资源所需的密码 hash 每传输1024字节,显示一个hash符号(#)
append local-file [remote-file] 将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名 restart marker 从指定的标志marker处,重新开始get或put,如restart 130
bye 退出ftp会话过程 rmdir dir-name 删除远程主机目录
case 在使用mget命令时,将远程主机文件名中的大写转为小写字母 size file-name 显示远程主机文件大小,如: size idle 7200
cd remote-dir 进入远程主机目录 status 显示当前ftp状态
cdup 进入远程主机目录的父目录 system 显示远程主机的操作系统
delete remote-file 删除远程主机文件 user user-name [password][account] 向远程主机表明自己的身份,需要密码时,必须输入密码,如:user anonymous my@email
dir [remote-dir][local-file] 显示远程主机目录,并将结果存入本地文件 help [cmd] 显示ftp内部命令cmd的帮助信息,如help get

猜你喜欢

转载自blog.csdn.net/wyy626562203/article/details/83588134
今日推荐