最近在折腾自家的树莓派,需要一个不能登录的账户来访问ftp,于是稍微查询了一些相关资料。

参考:

http://desert3.iteye.com/blog/1685734

http://www.wincold.com/archives/108.html

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

首先是创建一个系统用户,设置密码,并且将其shell设置为/bin/false,这将禁用其账户的shell登录功能。

再稍微进行两下Google,很快就找到所需的操作:修改/etc/shells文件,加上一行/bin/false。

然后自己尝试登录,看到filezilla的信息滚动,成功登录,但是却卡在了列出目录的那一步,没有任何返回结果,这究竟是为什么呢?

再进行了一番Google之后,发现了问题所在,原来是因为ftp的PASV模式的问题,而vsftp服务器由于没有对PASV端口范围及相应的iptables防火墙做设置,数据传输的连接被阻塞导致命令执行超时。虽然调整ftp客户端,不使用PASV模式也能够操作,但是并不是什么时候都会有ftp客户端在手的,还是弄一下好了。

使用下面的设置来启用vsftpd的PASV模式

pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30100

然后再设置iptables,开放PASV的端口

iptables -A INPUT -p tcp --dport 30000:30100 -j ACCEPT

然后就可以顺利的使用普通的浏览器或者windows的文件管理器进行登录了。

嗯,最近又重新将路由的OpenWRT固件重新刷了一次,再次装上vsftpd之后,又出现了在匿名登录的时候,会出现

500:OOPS cannot change directory:/home/ftp

的状况,

在网上各种搜索,都是

setsebool ftpd_disable_trans 1 service vsftpd restart

这样的代码……可是似乎OpenWRT并不支持这样的命令,找了一次啊附加的软件包里面,似乎也没有相关的支持,然后我就苦逼了,不带这样玩吧喂,给点提示都好啊,不要再去刷回那个版本的固件吧,很麻烦的啊喂…… 然后,看着http://guyuanli.itpub.net/post/37743/490567这篇文章里面的介绍,突然想到了“用户”这样的存在,就跑去/etc/passwd里面看,果然看见了

ftp:*:55:55:ftp:/home/ftp:/bin/false

这样的一句,然后随手改成了

ftp:*:55:55:ftp:/mnt/ftp:/bin/false

,重启了一下vsftpd,就OK了。看来应该是ftp用户的主目录的问题