FTP:file transfer protocol(文件共享服务)
监听于21/tcp
工作于应用层
FTP工作流程:
1.客户端向服务器发送建立TCP连接的请求
2.服务器响应220代码,表明21端口工作正常,处于侦听状态
3.客户端以user指令发送用户名
4.服务器响应331代码,通知客户端发送密码
5.客户端使用pass指令发送密码
6.服务器验证客户端的用户名和密码匹配关系。如果成功则响应230,通知客户端身份验证通过
7.客户端提交pwd指令,请求显示当前路径
8.服务器响应257代码,显示当前工作目录
FTP用户分类:
1.匿名用户
使用匿名身份获取公共资源,但权限有限,默认对应的目录为ftp
2.实体用户
指ftp服务器的本地账号,使用/etc/passwd中的用户名为认证方式
3.虚拟用户
只能访问ftp共享资源,增强了系统的安全性
vsftpd基于mysql支持虚拟用户,在mysql创建数据库vsftpd,在vsftpd创建users表,连接ftp时查找mysql中的用户,手动定义pam配置文件,使之使用虚拟用户
FTP + PAM + MYSQL
1.安装vsftpd软件包:
- # yum install -y vsftpd
- # service vsftpd start 启动服务
- # chkconfig vsftpd on
- # chkconfig --list vsftpd
- # cd /var/ftp/ 有一个pub目录,默认使用pub存储公开出去的文件
2.安装mysql
- # yum install mysql-devel mysql-server
- # service mysqld start
3.安装pam_mysql模块
手动编译安装pam_mysql,先进行下载
- # tar xf pam_mysql-0.7RC1.tar.gz
- # cd pam_mysql-0.7RC1
- # ./configure --with-mysql=/usr --with-openssl
- # make
- # make install
(1)创建虚拟用户账号
- # mysql
- mysql> create database vsftpd;
- mysql> use vsftpd
- mysql> create table users(id smallint auto_increment not null,name char(20) binary not null,password char(48) binary not null, primary key(id));
- mysql> desc users;
- mysql> grant select on vsftpd.* to vsftpd@localhost identified by 'vsftpd';
- mysql> grant select on vsftpd.* to vsftpd@127.0.0.1 identified by 'vsftpd';
- mysql> insert into users(name,password) value ('tom','redhat'),('jerry','redhat');
- mysql> select * from users;
查看所建立的数据库vsftpd中的表的内容
使用所建立的用户登录ftp服务器
(2)建立pam认证所需要的配置文件
- # vim /etc/pam.d/vsftpd.mysql
- auth required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0
- account required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0
(3)建立虚拟用户映射的系统用户及对应的目录
- #useradd -s /sbin/nologin -d /var/ftproot vuser
- #chmod go+rx /var/ftproot
(4)修改配置文件
- # vim /etc/vsftpd/vsftpd.conf
- anonymous_enable=YES
- local_enable=YES
- write_enable=YES
- anon_upload_enable=NO
- anon_mkdir_write_enable=NO
- chroot_local_user=YES
- 而后添加以下选项
- guest_enable=YES
- guest_username=vuser
- 并确保pam_service_name选项的值如下所示
- pam_service_name=vsftpd.mysql
(5)重启vsftpd服务
- # service vsftpd restart
(6)验证
- # cp /etc/fstab /var/ftproot/
设置可访问ftp服务器的用户的权限
- vim /etc/vsftpd/vsftpd.conf
- 添加如下行:
- user_config_dir=/etc/vsftpd/vusers
建立目录,来存放用户的权限:
- # mkdir /etc/vsftpd/vusers
- # cd /etc/vsftpd/vusers
- # touch tom jerry
- anon_upload_enable=NO 定义不允许上传文件
- # vim jerry
- anon_upload_enable=YES 允许上传文件
anon_mkdir_write_enable=YES 允许建立目录
anon_other_write_enable=YES 允许删除文件
注:
/etc/vsftpd/vsftpd.conf
- anonymous_enable=YES 是否允许匿名用户
- local_enable=YES 是否启用系统用户
- 例: # useradd hadoop
- # echo "hadoop" |passwd --stdin hadoop
- 建立系统用户,就可以使用账号密码登录啦,可以切换到别的目录
- write_enable=YES 是否能上传文件,定义的是系统用户
- anon_upload_enable=YES 是否允许匿名用户可以上传文件
- anon_other_write_enable=YES 匿名用户可以上传文件
- anon_mkdir_write_enable=YES 匿名用户可以建立目录
- anon_other_write_enable=YES 其他用户有写权限
- dirmessage_enable=YES 当用户进入一个目录,是否显示欢迎信息
- 例:# vim /var/ftp/upload/.message
- --welcome to our ftp
- xferlog_enable=YES 是否打开传输日志
- xferlog_file=/var/log/vsftpd.log 传输文件的日志
- xferlog_std_format=YES 日志是否使用标准格式
- ftpd_banner=Welcome to blah FTP service. 显示欢迎信息
- #chown_uploads=YES 当用户上传完成后,是否把属主改为其他用户
- #chown_username=whoever
- idle_session_timeout=600 用户时间超过600秒就断开
- #ascii_upload_enable=YES 是否使用纯文本格式上传和下载,建议不要启用
- #ascii_download_enable=YES
- chroot_list_enable=YES 将匿名用户锁定在文件下
- chroot_list_file=/etc/vsftpd/chroot_list 禁锢那些用户
- chroot_local_user=YES 所有用户都将被禁锢
- pam_service_name=vsftpd pam下vsftp文件的名字,接受pam认证
- tcp_wrappers=YES
- max_clients=# 最多允许的客户端个数
- max_per_ip=# 一个用户最多发起几个请求
实现上传文件与下载,目录的建立
转载于:https://blog.51cto.com/weihong/1188597