Ubuntu上搭建ftp
2015-09-30 18:21
537 查看
构建ftp服务器
Date: 8.25Target: 构建ftp服务器
参考
构建ftp服务器
安装vsftpd
修改vsftpdconf
局域网登录
手机登录ftp
1.安装vsftpd
系统缺省就有,直接安装sudo apt-get install vsftpd
测试-下,输入
vsftpd -version
显示vsftpd: version 3.0.2。
在firefox上测试一下,输入ftp://localhost和ftp://192.168.0.104(内网ip),需要输入用户名和密码才能登录。成功后显示的是$HOME,也/home/wang(我现在的用户名)。能查看文件并下载,切换目录,但是不能修改。
基本上ftpd都这步,用默认的就已经搭建完了。
不过发现,这时vsftpd是running的,试着用手机登录却不行,暂时猜想可能是没用户吧。这个下文再提。
2.修改vsftpd.conf
这是实现需要的功能的地方,比如限制用户,限制下载什么的。修改的是/etc/vsftpd.conf。
先保存原文件,恩,都是这样说的。
cp /etc/vsftpd.conf /etc/vsftpd.conf.old
不要自启动,那就要修改其启动脚本
vim /etc/init/vsftpd.conf
将
start on runlevel [2345] or net-device-up IFACE!=lo
改为
start on runlevel [345]
这是改启动级别实现的,这里要根据运行级修改,一般默认是2。
开始修改配置文件
vim /etc/vsftpd.conf
改变ftp根目录,GG跳转到文件尾,插入
local_root=/home/wang/ftp
其中ftp是我刚新建的文件夹,这时重新登录的话,一开始就不是/home/wang,而是local_root(刚设为/home/wang/ftp),说这是为了让用户不能随意操作其他目录。可是却能通过返回上一层到其他目录。后来发现firefox是这样,在chromium却是没这功能。
我是个执着的人,所以钻牛角去了。又搜索了,在Wiki(?)上找到。在Shell上登录
ftp localhost
完了后再输入
pwd
不出意外发现是/home/wang/ftp,好,跟着干。
chroot_local_user=YES
试试×-×。再次登录,呵呵,显示
500 OOPS: vsftpd: refusing to run with writable root inside chroot()。
刚看过,忘了是什么鬼。幸亏度娘,比较和胃口的说法是用户的根目录可写,我们使用了chroot限制,在最近的更新里是不被允许的。要修复这个错误,可以
chmod a-w /home/wang/ftp
去除用户根目录的写权限。又或者简单点(我喜欢)。添加
allow_wirteable_chroot=YES
就ok了,登录,啪啪,行了.这样做后,用户也不能移动到其他目录了。
用户登录时,我希望是带着口令的,即不能让匿名用户登录。那就是默认的效果,不用修改。不过,可以尝试一下匿名的登录
anonymous_enable=NO
发现/和先前带口令登录时不一样,看看就其实默认的是/srv/ftp。修改的话,可以先创建Tinuy文件夹
mkdir /src/ftp/Tinuy
mkdir /home/wang/Tinuy
然后映射虚拟路径
sudo mount --bind /srv/ftp/Tinuy /home/wang/Tinuy
再登录时,的确是变了。改变其中一个文件夹,两个同时变。不过,怎么卸载我还没搞懂<-_<-,慎用慎用,哦米托佛。
关于这里,其实还可以创建虚拟用户,不过这又是另话了。
好了,碰壁完了,改回
anoymous_enable=YES
网上有课程说要修改/etc/init.d/vsftpd的,我在这里找不到这文件,可能是因为用的是Ubuntu 14,启动方式已经改为Upstart,为了支持原来的sysinit,服务的启动脚本是在/etc/init.d里面的,而缺省的运行级是2。在/etc/rc2.d里面没有其符号链接。
如果是以前?/etc/init.d/vsftpd的确是有的。。。吧
3.局域网登录
在浏览器上输入ftp://localhost,或者ftp://127.0.0.1,或者ftp://自己的ip,就行了。4. 手机登录ftp
然后又试着把vsftpd stop,用firefox再登录,发现这次不需要用户名和密码就能登上了,新建标签页也是。不过手机仍没登上。好吧,试着用chromium上,却登不上了。那firefox登上的是啥?。。。一段时间后,现在firefox也登不上了。再次start,这会登上。再次stop,chromium是立即断了连接,firefox是一段时间才登不上的。重新打开firefox也是登不上,需要start,加上用户名和密码才行。
难不成stop不是真正的关?stop时显示vsftpd stop/waiting,waiting是why?这让我想起来那背得欲仙欲死的操作系统,是那进程状态阻塞态或挂起态?
好吧,暂且不管。总之已经安装了vsftpd。service vsftpd start/stop是启。动和关闭。
本地登录行,用手机却登不上,局域网内的啊?!难道是防火墙?试试
ufw enable
允许ftp端口(默认是21)
ufw default allow ufw allow ftp ufw status
开了以后就只能使用ftp登录了,理论上是,但手机登录的时候确实没反应。ping一下,能通。后来开了apache2,也是登不上http。关了ufw
ufw disable
http能登上了,说明防火墙是有用的。关了后也是上不了ftp,而开机是ufw默认是关了,综上就不是防火墙的错,路走歪了。难道是端口问题?在vsftpd.conf里添加了
listen_port=2121
试一下。还是本地可行,与端口无关。先还原端口
netstat -nl
显示21在监听,不过手机还是不行不行的。苦恼中。。。
Date 8.27
想到通过日志文件去看。先重启vsftpd
sudo service vsftpd restart
然后用电脑和手机登录。
然后直接去查看日志文件
cat /var/log/vsftpd.log | grep "Aug 27"
显示如下
Thu Aug 27 09:55:16 2015 [pid 4392] CONNECT: Client "127.0.0.1" Thu Aug 27 09:55:18 2015 [pid 4391] [anonymous] FAIL LOGIN: Client "127.0.0.1" Thu Aug 27 09:55:19 2015 [pid 4395] CONNECT: Client "127.0.0.1" Thu Aug 27 09:55:21 2015 [pid 4394] [wang] OK LOGIN: Client "127.0.0.1" Thu Aug 27 09:55:28 2015 [pid 4399] [wang] OK DOWNLOAD: Client "127.0.0.1", "/chromium-browser.desktop", 12615 bytes, 194.36Kbyte/sec Thu Aug 27 09:56:15 2015 [pid 4412] CONNECT: Client "192.168.0.104" Thu Aug 27 09:56:17 2015 [pid 4411] [anonymous] FAIL LOGIN: Client "192.168.0.104" Thu Aug 27 09:56:18 2015 [pid 4416] CONNECT: Client "192.168.0.104" Thu Aug 27 09:56:19 2015 [pid 4414] [wang] OK LOGIN: Client "192.168.0.104" Thu Aug 27 09:56:21 2015 [pid 4419] [wang] OK DOWNLOAD: Client "192.168.0.104", "/chromium-browser.desktop", 12615 bytes, 42924.52Kbyte/sec
可以看出匿名用户登不上,只能实名制(原来打开文件也是要下载的)。而手机CONNECT显示都没有。应该是手机问题或者是vsftpd配置文件的问题,研究研究。
Date 9.4
后来发现,原来是手机里面的浏览器不支持ftp,下载es或者支持ftp的浏览器就行了。一直以为浏览器支持http和ftp,其实不然,浏览器本身支持http,ftp只是添加的功能,IE、firefox都是支持ftp的,让我误以为浏览器肯定支持ftp的。问题成功解决。
相关文章推荐
- ThinkPHP--数据库连接及model模型定义使用
- php无刷新上传图片
- ThinkPHP--跨控制器调用
- [php] thinkphp生僻标签解析
- ThinkPHP--后台首页品字形框架搭建
- php empty,isset,is_null比较(差异与异同)
- PHP版本5.*的BUG
- PHP图片裁剪类
- ecshop 影响全局的标量lib_main.php
- ThinkPHP 配置
- PHP 手册 语言参考 支持的协议和封装协议
- 学习ThinkPHP3.2.2(四):增加记录
- 学习ThinkPHP3.2.2(三):读取指定的记录
- 学习ThinkPHP3.2.2(一):记录一下第一个例子的运行过程
- 学习ThinkPHP3.2.2(二):第二个入门例子
- PhpExcel中文帮助手册|PhpExcel使用方法
- php 利用array_slice函数获取随机数组或前几条数据
- 千里码-访客统计
- N款PHP开源系统推荐
- PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠