如果要在Linux服务器上搭建一个安全、高性能、稳定性好的FTP服务器,那么vsftpd可能是你的首选应用。vsftpd意思为“very secure FTP daemon(非常安全的FTP进程)”,是一个基于GPL发布的类UNIX类操作系统上运行的服务器的名字(是一种守护进程),可以运行在诸如Linux、BSD、Solaris、HP-UX以及Irix等系统上面。vsftpd支持很多其他传统的FTP服务器不支持的良好特性。本篇就说下vsftpd的主配置文件里的选项,以及如何结合mysql+pam+vsftpd做虚拟用户认证
FTP服务器的连接分为两种;
命令连接;客户端向 服务器发起请求连接,一旦建立连接就不断开,必须等到人为断开的时候才会断开此次连接操作,此连接是监听到ftp的21号端口
数据连接;客户端与服务器之间进行数据传输的连接,是按需连接,一旦此次数据传输结束,此次连接就会断开。只是断开连接,不是退出FTP服务此,数据连接20端口
1、FTP服务的安装配置;
yum -y install vsftpd
服务脚本;/etc/rc.d/init.d/vsftpd
数据文件;/var/ftp/
主程序;/usr/sbin/vsftpd
/etc/pam.d/vsftpd;认证文件
pam; Plugable Authentication Module,插件式认证模式
nsswitch; 名称解析框架
模块化;/lib64/libnss* , /usr/lib64/libnss*
配置文件;/etc/nsswitch.conf
pam;认证框架
模块化;
/lib64/security/pam*.so
配置文件;/etc/pam.conf和/etc/pam.d、*
2、vsftpd的主配置文件详解;
[root@linux ~]# vim /etc/vsftpd/vsftpd.conf 主配置文件 anonymous_enable=YES //是否开启匿名用户访问 anonymous_enable=YES //是否开启本地用户既系统用户访问 write_enable=YES //是否开启本地用户的写权限:上传文件的权限 local_umask=022 //系统用户上传文件时候的umask默认值 anon_upload_enable=YES //是否开启虚拟用户上传文件的权限 anon_mkdir_write_enable=YES //是否开启虚拟用户新建文件件的权限 chown_uploads=YES //是否开启上传文件的属主修改 chown_username=whoever //上传文件后所属主 xferlog_file=/var/log/xferlog xferlog_std_format=YES //日志记录,需要开启上面两项才可以生效 idle_session_timeout=600 //连接超时时间 data_connection_timeout=120 //数据传输超时时间 ascii_upload_enable=YES ascii_download_enable=YES //是否开启ascii码的上传、下载 chroot_list_enable=YES //是否锁定用户登录后的目录,配置文件在/etc/vsftpd/chroot_list,表内定义了锁定的用户列表 chroot_local_user=YES //只禁固所有用户只允许登录访问自已家目录的文件 chroot_list_file=/etc/vsftpd/chroot_list //用户登录以后把用户锁在那个目录下的定义 。默认匿名用户登录FTP是可以切换至root用户下的,这样是非常不安全的vim /etc/vsftpd/chroot_list这个目录可以将用户锁定到自已的家目录中,只需将用户加入到这个文件当中即可 listen=YES //设置ftp服务是否为独立进程 pam_service_name=vsftpd //pam认证服务名称 userlist_enable=YES // 用户列表限定 用法(定义黑白名单) 定义黑名单:userlist_enable=YES 、userlist_deny=YES 定义白名单:userlist_enable=YES、userlist_deny=NO max_clients = // 单个IP最多发起几个请求的 max_per_ip = //最多允许几个IP链接FTP服务器
3、设置环境测试
关闭本机的SElinux关闭。
新建两个用户;aa,hao ,把其中一个用户锁定在家目录内。来验证两个用户各自
登录FTP时的结果;
useradd aa
useradd hao
打开主配置文件vim /etc/vsftpd/vsftpd.conf,开启以下两项功能
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
注意默认;chroot_list文件是不存在的,用的时候创建即可
vim /etc/vsftpd/chroot_list 创建chroot_list文件,把hao用户加入进去.这样hao用户在
登录FTP时只能在自己的家目录内,不能切换至其它目录
hao
现在重启动vsftpd服务,注意,主配置文件只要被修改过就必须重新启动,让其重新加载新的配置文件。
service vsftpd start
说明:chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list 这两项可以被下面这一个选项所代替
chroot-local_user=YES. 这是表示将所有用户限制,登录FTP时只能在自已的家目录中
vsftpd+pam+mysql
安装开发环境用到的包
Desktop Platform Development
Development tools
[root@linux ~]# yum -y install mysql-server mysql-devel pam_mysql [root@linux ~]# service mysqld start 创建一个存储虚拟用户的数据库名为vsftpd,并对其授权 spacer.gif 添加测试的用到的虚拟用户;bb,cc密码为'redhat' spacer.gif mysql> use vsftpd; mysql> grant all on vsftpd.* to vsftpd@localhost identified by 'redhat'; mysql> grant all on vsftpd.* to [email protected] identified by 'redhat'; mysql>flush privileges;
建立pam认证所需文件 #vi /etc/pam.d/vsftpd.mysql 这是一个事先不存在的文件,需要时创建即可 添加如下两行 auth required /lib64/security/pam_mysql.so user=vsftpd passwd=redhat host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 account required /lib64/security/pam_mysql.so user=vsftpd passwd=redhat host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
由于mysql的安装方式不同,pam_mysql.so基于unix sock连接mysql服务器时可能会出问题,此时,建议授权一个可远程连接的mysql并访问vsftpd数据库的用户。
建立虚拟用户映射的系统用户及对应的目录; 这个目录其实就是所有能虚拟用户的共享目录 useradd -s /sbin/nologin -d /var/ftproot user chmod go+rx /var/ftproot 启动vsftpd的主配置文件的以下几项; 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=vsftpd.mysql
两个用户都可正常登录FTP,而useradd 创建的用户,是不能登录FTP的
配置虚拟用户让其拥有各自的权限,vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问,每个虚拟用户的配置文件名同虚拟用户的用户名。
配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可。
1、配置vsftpd为虚拟用户使用配置文件目录
vim /etc/vsftpd/vsftpd.conf 添加如下选项;
user_config_dir=/etc/vsftpd/user_config
2、创建所需要的目录,并为虚拟用户提供配置文件;
mkdir /etc/vsftpd/user_config
创建两个同虚拟用户名一样 文件 touch bb cc ouyang
3、配置虚拟用户的访问权限
虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。比如,如果需要让tom用户具有上传文件的权限,可以修改/etc/vsftpd/vusers/tom文件,在里面添加如下选项即可。
anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable={YES|NO}
示例;此处我把bb用户的权限设为可以上传文件,cc用户没有
vim bb
anon_upload_enable=YES
完事,睡觉了、、、