原文链接
1.ftp三种模式详解:https://www.cnblogs.com/opsprobe/p/9185139.html
2.匿名登录以及上传下载:https://blog.youkuaiyun.com/cike110120/article/details/32695661
3.配置文件详解: https://www.cnblogs.com/sevck/p/5007057.html
4.ftp命令:
http://www.360doc.com/content/17/1031/20/42387867_699828812.shtml
VSFTP安装
yum -y install vsftpd
yum install libdb4-utils libdb4 (虚拟用户模式需要用到)
systemctl enable vsftpd
chkconfig vsftpd on 开机启动服务centos6
首先需要创建明文文件,明文文件奇数行为用户名,偶数行为密码。使用db_load工具将其转换为数据库文件,db_load工具需要通过安装db4-utils软件获得
配置文件解释
anonymous_enable=NO ##禁止匿名开放模式
local_enable=YES ##允许本地用户模式
write_enable=YES ##允许写操作
anon_upload_enable=YES ##允许匿名用户上传,默认禁止
anon_mkdir_write_enable=NO ##禁止匿名用户创建目录
anon_other_write_enable=NO ##禁止匿名用户进行其他写操作
dirmessage_enable=YES ##允许为目录配置显示信息,显示每个目录下面的message_file文件的内容
xferlog_enable=YES ##如果启用,一个log文件将详细纪录上传和下载的信息。默认情况下,这个文件是/var/log/vsftpd.log,但你也可以通过更改vsftpd_log_file来指定其默认位置
vsftpd_log_file=/var/log/vsftpd.log
xferlog_std_format=YES ##如果启用,log文件将以标准的xferlog格式写入(wu-ftpd使用的格式),以便于你用现有的统计分析工具进行分析。但默认的格式具有更好的可读性。默认情况下,log文件是在/var/log/xferlog。但是,你可以通过修改xferlog_file来指定新路径。
guest_enable=YES ##开启虚拟用户模式
guest_username=ftpuser ##指定虚拟用户账户 每个虚拟用户登录都会变成这个载体的用户
listen=YES
listen_port=21
text_userdb_names=NO ##当使用者登入后使用ls -al 之类的指令查询该档案的管理权时,预设会出现拥有者的UID,而不是该档案拥有者的名称。若是希望出现拥有者的名称,则将此功能开启。
pasv_enable=YES ##启动被动模式连接
pasv_min_port=30000 ##指定为被动模式数据连接分配的最小端口。可用来指定一个较小的范围以配合防火墙。 默认值:0(使用任何端口)
pasv_max_port=30999 ##指定为被动模式数据连接分配的最大端口。可用来指定一个较小的范围以配合防火墙。 默认值:0(使用任何端口)
user_config_dir=/etc/vsftpd/vsftpd_user_conf ##定义虚拟用户配置文件的目录
pam_service_name=vsftpd.pam ##指定PAM文件
local_umask=022 ##本地用户模式创建文件的umask值
reverse_lookup_enable=NO 禁用DNS反向解析
tcp_wrappers=YES ##如果启用,vsftpd将被tcp_wrappers所支持。进入的(incoming)连接将被tcp_wrappers访问控制所反馈。如果tcp_wrappers设置了 VSFTPD_LOAD_CONF环境变量,那么vsftpd将尝试调用这个变量所指定的配置。默认值:NO
allow_writeable_chroot=YES 允许对禁锢的FTP根目录执行写入操作,而且不拒绝用户的登录请求
chroot_local_user=YES ##如果设为YES,本地用户登录后将被(默认地)锁定在虚根下,并被放在他的home目录下。 警告:这个配置项有安全的意味,特别是如果用户有上传权限或者可使用SHELL的话。在你确定的前提下,再启用它。 注意,这种安全暗示并非只存在于VSFTPD,其实是广泛用于所有的希望把用户锁定在虚根下的FTP软件。 默认值:NO
chroot_list_enable=YES ##如果激活,你要提供一个用户列表,表内的用户将在登录后被放在其home目录,锁定在虚根下 (daidong注:进入FTP后,PWD一下,可以看到当前目录是"/",这就是虚根。是FTP的根目录,并非FTP服务器系统的根目录)。如果 chroot_local_user设为YES后,其含义会发生一点变化。在这种情况下,这个列表内的用户将不被锁定在虚根下。默认情况下,这个列表文件是/etc/vsftpd.chroot_list, 但你也可以通过修改chroot_list_file来改变默认值。 默认值:NO
chroot_list_file=/etc/vsftpd.chroot_list #定义不能更改用户主目录的文件
userlist_deny=YES ##启用“禁止用户名单”,名单文件为ftpusers和user_list
userlist_enable=YES ##开启用户作用名单文件功能
local_max_rate=200k ###设置本地用户最大的传输速率为200kbps
匿名用户模式
1.修改配置文件
anonymous_enable=YES ###表示开启匿名用户访问
anon_umask=022 ###设置匿名用户所上传文件的默认权限掩码值
anon_root=/var/ftp ###设置匿名用户的FTP根目录,也称为宿主目录。匿名登陆所在的目录,注意ftp后不要加/,否则会报错
anon_upload_enable=yes ###是否允许匿名用户上传文件
anon_mkdir_write_enable=yes ###是否允许匿名用户具有创建目录的写入权限
anon_world_readable_only=YES
anon_other_write_enable=YES
anon_max_rate=10k ###设置匿名用户最大的传输速率为10kbps
local_enable=YES
write_enable=YES
local_umak=022
dirmessage_enable=YES
xferlong_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
anon_world_readable_only的作用
linux文件权限分成“属主”、“属组”和“其他人”这三种,如果“其他人”没有可读权限,那anon_world_readable_only这个参数就起效了,对于目录来说,如果“其他人”没有可读权限,且anon_world_readable_only=YES,则匿名用户无法浏览该目录下的所有内容(看上去像个空目录),而对于文件来说,如果“其他人”没有可读权限,且anon_world_readable_only=YES,则匿名用户无法下载该文件。
注:就算文件的“属主”是匿名用户(ftp),而“其他人”没有可读权限,也一样有效。
2.更改匿名用户目录属主
chown ftp /var/ftp/test
ftp目录下其他目录匿名用户只能查看,只有test目录可以创建删除上传下载
注意:不要直接更改/var/ftp的,否则登录会报错
虚拟用户模式
1.先创建载体用户(承载虚拟用户的)
mkdir /data/ftp
useradd -d /data/ftp/ -s /sbin/nologin ftpuser 可以设置不登陆也不需要密码
chmod -Rf 755 /data/ftp/
2.创建虚拟用户
vim /etc/vsftpd/vlogin
虚拟用户名01
密码
虚拟用户名02
密码
明文信息既不安全,也不符合让vsftpd服务程序直接加载的格式,因此需要使用db_load命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件,并且降低数据库文件的权限(避免其他人看到数据库文件的内容)
cd /etc/vsftpd/
db_load -T -t hash -f vlogin vlogin.db
chmod 600 vlogin.db
touch /etc/vsftpd.chroot_list
建立用于支持虚拟用户的PAM文件
(PAM(可插拔认证模块)是一种认证机制,通过一些动态链接库和统一的API把系统提供的服务与认证方式分开,使得系统管理员可以根据需求灵活调整服务程序的不同认证方式)
vim /etc/pam.d/vsftpd.pam
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vlogin
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vlogin
3.虚拟用户配置文件
anonymous_enable=NO
local_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
guest_enable=YES
guest_username=ftpuser
listen=YES
listen_port=21
text_userdb_names=NO
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30999
user_config_dir=/etc/vsftpd/vsftpd_user_conf
pam_service_name=vsftpd.pam
local_umask=022
tcp_wrappers=YES
allow_writeable_chroot=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
userlist_deny=YES
userlist_enable=YES
reverse_lookup_enable=NO
4.为虚拟用户设置不同的权限
mkdir /etc/vsftpd/vsftpd_user_conf/
cd /etc/vsftpd/vsftpd_user_conf/
vim 虚拟用户名01
local_root=/data/ftp/
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
ftp操作命令
登录
lftp 用户名:密码@ftp地址:传送端口
ftp IP地址
ls或dir查看
mkdir创建目录
rmdir删除目录
put 文件名 上传文件
get 文件名 下载文件
p@ssw1rd
1、help、?、rhelp
①help显示LOCAL端(本地端)的命令说明,若不接受则显示所有可用命令;
②?,相当于help,例如:?cd;
③rhelp同help,只是它用来显示REMOTE端(远程端)的命令说明。
2、ascii、binary、Image、type
①ascii切换传输模式为文字模式;
②binary切换传输模式为二进制模式;
③image相当于binary;
④type用于更改或显示目前传输模式。
3、bye、quit
①bye退出FTP服务器;
②quit相当于bye。
4、cd、cdup、lcd、pwd、!
①cd改变当前工作目录;
②cdup回到上一层目录,相当于“cd…”;
③Icd用于更改或显示LOCAL端的工作目录;
④pwd显示目前的工作目录(REMOTE端);
⑤!,用于执行外壳命令,例如“!ls”。
5、delete、mdelete、rename
①delete删除REMOTE端的文件:
②mdelete批量删除文件;
③rename更改REMOTE端的文件名。
6、get、mget、put、mput、recv、send
①get下载文件;
②mget批量下载文件;
③put上传文件;
④mput批量上传文件;
⑤recv相当于get;
⑥send相当于put。
7、hash、verbose、status、bell
①hash当有数据传送时,显示#号,每一个#号表示传送了1024B或8192b;
②verbose切换所有文件传输过程的显示;
③status显示目前的一些参数;
④bell当指令做完时会发出叫声。
8、ls、dir、mls、mdir、mkdir、rmdir
①ls有点像Unix下的ls(list)命令;
②dir相当于“ls-l”;
③mls只是将远端某目录下的文件存于LOCAL端的某文件里;
④mdir相当于mls;
⑤mkdir像DOS下的md(创建了目录)一样;
⑥rmdir像DOS下的rd(删除了目录)一样。
9、open、close、disconnect、user
①open连接某个远端FTP服务器;
②close关闭目前的连接;
③disconnect相当于close;
④user再输入一次用户名和密码(有点像Linux下的su)。
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 未执行请求的的命令,名称不正确。
ftp出现的问题以及防火墙
将21号端口写入防火墙
vim /etc/sysconfig/iptables
写入:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT #添加这一行
重启服务
service vsftpd restart
常见问题
- 530 Login incorrect
pam验证失败,可能是因为你使用的64位操作系统,而pam文件中库文件的调用却使用的是/lib/security/pam_userdb.so。或者是用户名或密码输入错误,也有可能是vsftpd主配置文件中pam_service_name设置的pam文件名称与/etc/pam.d中创建的pam文件不一致
500 oops:cannot change directory:/home/ftp/$USER
selinux未关闭导致
setsebool -P ftp_home_dir 1
上传文件失败
chmod 777 /home/ftp/test