我的ubuntu是12.04服务器版本,我的文章绝对都是自己从新手的角度考虑,不是东抄西凑随便胡弄大家的
一、直接命令安装
apt-get install vsftpd
安装完成之后,会生成一个/srv/ftp目录
用如下命令都可以查看到是否安装成功
ps -e | grep vsftp
显示结果:
1366 ? 00:00:00 vsftpd
或者
netstat -nat
有21端口记录:
tcp 0 0 0.0.0.0:21 0.0.0.0:*
这样就可以使用如下命令,进行vsftp的操作了
service vsftpd start
service vsftpd restart
service vsftpd stop
二、我期望指定一个本地用户tong,只能对/var/www目录上传下载文件
设置以下几项即可
vi /etc/vsftpd.conf
anonymous_enable=NO #禁止匿名登录
local_enable=YES #开启本地用户访问ftp
local_root=/var/www #访问ftp的默认路径
write_enable=YES #开启上传、写功能
保存退出,继续
useradd -r -g www -d /var/www tong
#我将tong用户的默认目录指定在了/var/www,用户组为www,其实这里直接用useradd tong也没关系
#给用户赋初始密码
passwd tong
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
保存退出
重启vsftpd服务
/etc/init.d/vsftpd restart
测试是否能成功访问
ftp localhost
Name (localhost:root): tong
Password:
230 Login successful.登录成功
ftp> pwd查看当前所处目录,这里显示是"/"
ftp> ls查看当前目录下的文件,确定是在/var/www目录下
到此本地用户访问ftp就已经成功
大家可以再增加个用户,测试一下是否可以登录到/var/www目录下,也可以用其他ftp工具连接,
效果是一 样的!!
三、支持虚拟用户登录
上面我们只是支持了本地用户登录,但是一个项目组创建太多的系统用户,总感觉没必要,特别是团队特别大的时候,所以虚拟用户很有必要。其他网上大多数都讲到了虚拟用户怎么配,但是他们不明白的是,虚拟用户可以了,系统用户又不行了;或者系统用户可以了,虚拟用户又不行了;其实配置两种方式同时公用,只在一点捅破,下面来
vsftpd的认证方式都是通过pam认证的,我这里只讲关键,有愿意研究pam机制的,可以看这里http://kuliuheng.blogbus.com/logs/38544503.html 这里讲的比较详细
我打算创建一个虚拟用户vtong,密码是vtong,来访问/var/www目录
创建虚拟用户列表文件,其实就是一个预编辑文件,路径随便,文件名也命名!
cd /home
vi loguser.txt
输入内容,一行是用户名,一行是密码,如果要增加多个虚拟用户,以此类推。
【这里是可以随时添加或减少的,改变之后只要重新生成一下虚拟用户库即可,后面有介绍】
vtong
vtong
保存退出
安装生成数据库的linux工具包db_utile,你可以用apt-get下载最新的,最新的可以这样看
apt-get install db想看当前源source最新的db-utile,按tab键补全,显示如下
db4.7-util dbar dbtoepub
db4.8-util dbconfig-common dbus
db4otool dbeacon dbus-1-dbg
db5.1-doc dbench dbus-1-doc
db5.1-sql-util dbf2mysql dbus-java-bin
db5.1-util dblatex dbus-test-runner
dbacl dbndns dbus-x11
dballe dbs db-util
dballe-common dbskkd-cdb dbview
这样我们知道db5.1-util是最新版本,你的或许是别的版本,然后安装
apt-get install db5.1-util
安装好之后执行以下命令,根据刚才的文件loguser.txt生成库文件
db5.1_load -T -t hash -f /home/loguser.txt /etc/vsftpd_login.db
设置一下数据库文件访问权限
chmod 600 /etc/vsftpd_login.db
配置PAM文件/etc/pam.d/vsftpd,大家查看/etc/vsftpd.conf就会发现pam_service_name参数就是指定该认证文件的
vi /etc/pam.d/vsftpd
将以下两行放到文件的最开头,其余的都不用改变
auth sufficient pam_userdb.so db=/etc/vsftpd_login
account sufficient pam_userdb.so db=/etc/vsftpd_login
切记,不是下面两行,网上其他地方都写的是如下形式
auth required pam_userdb.so db=/etc/vsftpd_login
account required pam_userdb.so db=/etc/vsftpd_login
sufficient和required的有很大区别,PAM认证有介绍,如下表,不想了解可直接跳过
----------------------------------------------
控制标志 成功结果 失败结果
----------------------------------------------
requisite 堆栈继续执行 堆栈立刻以失败方式中断
required 堆栈继续执行 堆栈继续执行,但是以失败方式中断
sufficient 堆栈立刻以成功方式中断,除非之前模块失败了 堆栈继续执行
optional 堆栈继续执行 堆栈继续执行,只有当模块丢失或者给出
useradd vsftpd -d /home/vsftpd -s /bin/false #如果没有/home/vsftpd目录可手动创建
chown vsftpd:vsftpd /home/vsftpd
最后,编辑/etc/vsftpd.conf文件,确保以下两个变量有配置
guest_enable=YES
guest_username=vsftpd
保存退出
所有配置完成
service vsftpd restart
ftp localhost
用刚才的虚拟用户名和密码登陆,访问成功,路径正确