http://www.jianshu.com/p/f90e0f81134b#
背景:
CentOS 6.3
vsftpd.x86_64 0:2.2.2-13.el6_6.1
从墙角找了一台能用的旧机器,Pentium D & 1G RAM & 160G HDD,费了一番功夫终于装上了 CentOS 6.3,才发现物理机安装跟虚拟机安装的过程还是有点差别滴,之前在虚拟机上配置过 vsftpd,今天在这台机器上也装一个试试看.
安装 vsftpd
yum install vsftpd
/etc/vsftpd/vsftpd.conf
默认设置
[root@DX3906c ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES //匿名访问 开启
local_enable=YES //本地实体用户访问 开启
write_enable=YES //允许用户上传数据
local_umask=022 //建立新目录和文件的权限
dirmessage_enable=YES //目录下有 .message 文件则显示该文件的内容 ???
xferlog_enable=YES //日志文件记录 记录于 /var/log/vferlog
connect_from_port_20=YES //支持主动式连接功能
xferlog_std_format=YES //支持 WuFTP 的日志文件格式
listen=YES //使用 stand along 方式启动 vsftpd
pam_service_name=vsftpd //支持 PAM 模块的管理
userlist_enable=YES //支持 /etc/vsftpd/user_list 文件内的登陆账号控制
tcp_wrappers=YES //支持 TCP Wrappers 的防火墙机制
serIoUsly,有一些选项的意义和作用我也不是很懂,注释是对着鸟哥服务器篇敲下来的,OK,下面添加一个选项:
use_localtime=YES //使用本地时间,vsftpd默认使用GMT格林尼治时间
匿名登录与下载
匿名登录的配置比较简单,so先搞下这个吧miao~
vsftpd默认的匿名用户的主目录是 ftp 用户的主目录,试试用 finger ftp
看一下在哪里咧
[root@DX3906c ~]# finger ftp
-bash: finger: command not found
啊咧,没装...好吧,yum install finger
之后再看一下
[root@DX3906c ~]# finger ftp
Login: ftp Name: FTP User
Directory: /var/ftp //ftp用户的主目录 Shell: /sbin/nologin //账户不能用于登录系统
Never logged in.
No mail.
No Plan.
可以看到ftp用户的主目录在 /var/ftp,那也就是说匿名用户登陆之后的看到的就是这个啦,想让人家去你的ftp下载东西的话,文件要放到这里.那么我有一个问题,这个目录可以随便改吗?待会配置好了匿名用户登录再改改试试看
[root@DX3906c ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES //匿名访问 开启
local_enable=YES //本地实体用户访问 开启
write_enable=YES //允许用户上传数据
local_umask=022 //建立新目录和文件的权限
dirmessage_enable=YES //目录下有 .message 文件则显示该文件的内容 ??? xferlog_enable=YES //日志文件记录 记录于 /var/log/vferlog
connect_from_port_20=YES //支持主动式连接功能
xferlog_std_format=YES //支持 WuFTP 的日志文件格式
在后面添加:
no_anon_password=YES //匿名登录时,不检验密码
idle_session_timeout=600 //匿名用户10分钟无操作则掉线
banner_file=/etc/vsftpd/anon_welcome.txt //匿名用户登录后看到的欢迎信息
然后需要编辑一下 anon_welcome.txt 文件,不然 ftp 会无法正常连接
配置完之后重启一下 vsftpd 服务 service vsftpd restart
在本机先测试一下能不能连接成功吧 使用 ftp localhost
[root@DX3906c ftp]# ftp localhost
Trying ::1...
ftp: connect to address ::1Connection refused
Trying 127.0.0.1...
Connected to localhost (127.0.0.1). 220-Welcome to Zion's FTP 220-My E-mail:70ka42@gmail.com 220 Name (localhost:root): anonymous 500 OOPS: cannot change directory:/home/ftp Login Failed.
可以看到欢迎信息已经显示出来了,但是匿名用户登录失败了,这是为什么呢?百度了一下,发现是 selinux 引起的,查看一下当前系统的 selinux 状态: /usr/sbin/sestatus -v
[root@DX3906c ftp]# /usr/sbin/sestatus -v
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
临时关闭 selinux setenforce 0
再看一下 selinux 状态 getenforce
,已经是 Permissive
了,再登录下 ftp 试试
[root@DX3906c ftp]# ftp localhost
Trying ::1...
ftp: connect to address ::1Connection refused
Trying 127.0.0.1...
Connected to localhost (127.0.0.1). 220-Welcome to Zion's FTP 220-My E-mail:70ka42@gmail.com 220 Name (localhost:root): anonymous 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files.
OK,登陆成功了,听说不关闭 selinux 的话,也可以修改 selinux 的一些配置来处理这个问题,这个就容后再议吧,现在selinux只是临时关闭,永久关闭需要修改 /etc/selinux/config 文件,将SELINUX=enforcing改为SELINUX=disabled,然后重启即可.
然后来试试在远程计算机上能不能登录,之前在虚拟机上安装的时候发现本机能登,但是远程登不上,后来发现是防火墙的问题,iptables的配置我还不太清楚,所以就抄近路直接在GUI下打开了FTP的21端口,现在也如法炮制好了.我使用Chrome登录然后Chrome直接崩溃了miao~,但是Windows资源管理器可以成功匿名登录,并且可以下载文件,那说明还是比较成功滴.
番外篇
下面研究一下刚才的问题,ftp 的默认目录可以改吗?来试试看.
[root@DX3906c ~]# vim /etc/passwd
......
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
......
改成
ftp:x:14:50:FTP User:/home/ftp:/sbin/nologin
再 finger
一下看看已经改了,
[root@DX3906c ~]# finger ftp
Login: ftp Name: FTP User
Directory: /home/ftp Shell: /sbin/nologin
再重启一下 vsftd 服务 service vsftpd restart
现在在 /home/ftp
下建一个文件看看
[root@DX3906c ~]# touch /home/ftp/ Hello_FTP.txt
登录ftp
[root@DX3906c ftp]# ftp localhost
Trying ::1...
ftp: connect to address ::1Connection refused
Trying 127.0.0.1...
Connected to localhost (127.0.0.1). 220-Welcome to Zion's FTP 220-My E-mail:70ka42@gmail.com 220 Name (localhost:root): anonymous 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> dir //列出当前目录下的文件,ls也可以 227 Entering Passive Mode (127,0,1,145,180). 150 Here comes the directory listing. -rw-r--r-- 1 0 0 0 Dec 09 19:09 Hello_FTP.txt 226 Directory send OK.
列出了 Hello_FTP.txt,说明目录修改成功啦.
匿名用户上传权限的配置
在 /etc/vsftpd/vsftpd.conf 中添加以下内容:
anon_mkdir_write_enable=YES //匿名用户建立目录的权限
anon_upload_enable=YES //匿名用户上传文件的权限
#anon_other_write_enable=YES //匿名用户删除和重命名文件的权限,还是关掉比较好miao~
老规矩,重启一下 vsftpd 服务 /etc/init.d/vsftpd restart
登陆看看能不能上传文件咧
touch upload_test.txt
ftp> put upload_test.txt
local: upload_test.txt remote: upload_test.txt
227 Entering Passive Mode (127,93,233). 553 Could not create file.
提示 553 Could not create file.
似乎是权限问题 查查 vsftpd.conf 的 manual
anon_upload_enable
If set to YES,anonymous users will be permitted to upload files under certain conditions. For this to work,the option
write_enable must be activated,and the anonymous ftp user must have write permission on desired upload locations.
anon_mkdir_write_enable
If set to YES,anonymous users will be permitted to create new directories under certain conditions. For this to work,the
option write_enable must be activated,and the anonymous ftp user must have write permission on the parent directory.
看一下ftp目录的权限:
[root@DX3906c ~]# ll /home/
total 24
drwxr-xr-x. 3 root root 4096 Dec 9 20:26 ftp
属主是root,ftp没有写权限,怪不得不能上传,改一下属主再上传下试试:
[root@DX3906c ~]# chown ftp /home/ftp
......
Name (localhost:root): anonymous
500 OOPS: vsftpd: refusing to run with writable anonymous root
Login Failed.
这下登都不上去了...错误提示似乎是说匿名用户的根目录不能是可写的,那再改下权限试试:
[root@DX3906c home]# mkdir ./ftp/uploads/
[root@DX3906c home]# chown ftp ./ftp/uploads
[root@DX3906c home]# chown root ./ftp
[root@DX3906c home]# /etc/init.d/vsftpd restart
......
ftp> cd uploads
250 Directory successfully changed.
ftp> put upload_test.txt
local: upload_test.txt remote: upload_test.txt
227 Entering Passive Mode (127,193,252). 150 Ok to send data. 226 Transfer complete.
匿名用户不可下载匿名用户上传的文件
这个功能的描述比较绕口啊,其实就是用在比如:[学生交作业(只可以上交不可以看别人的作业)/上传资源需要审核]等场景,具体的实现原理就是匿名用户上传文件之后将文件的属主改为其他用户,那么以匿名用户继承的ftp用户的权限就不能下载这些文件了.这个地方我还不是很理解,先放一下吧,等到搞定了实体账号的配置之后再回过头来搞这个吧乜乜达...