本文共 27496 字,大约阅读时间需要 91 分钟。
一.在linux上安装ftp服务
vsftp安装:yum install vsftpd
查看vsftp是否安装rpm -qa | grep vsftpd关闭selinux否则会报错:[root@zabbix-server vsftpd]# getenforceEnforcing[root@zabbix-server cacti]# lftp cacti@10.0.0.10Password: lftp cacti@10.0.0.10:~> ls ls: Login failed: 500 OOPS: cannot change directory:/home/cacti[root@zabbix-server vsftpd]# setenforce 0[root@zabbix-server vsftpd]# getenforcePermissive[root@zabbix-server cacti]# lftp cacti@10.0.0.10Password: lftp cacti@10.0.0.10:~> ls ls: Login failed: 500 OOPS: cannot change directory:/home/cactilftp cacti@10.0.0.10:~> lsdrwxr-xr-x 3 500 500 4096 Dec 24 02:34 test01二.基本属性介绍:cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak去掉#号默认配置文件:[root@zabbix-server vsftpd]# grep -v "^#" /etc/vsftpd/vsftpd.confanonymous_enable=YESlocal_enable=YESwrite_enable=YESlocal_umask=022anon_upload_enable=YESanon_mkdir_write_enable=YESdirmessage_enable=YESxferlog_enable=YESconnect_from_port_20=YESxferlog_std_format=YESchroot_local_user=YESchroot_list_enable=YESchroot_list_file=/etc/vsftpd/chroot_listlisten=YESpam_service_name=vsftpd
userlist_enable=YEStcp_wrappers=YES参数介绍参考文档:vsftpd.conf的基本属性local_root=/var/ftp 指定实体FTP用户所使用的目录,如不指定,实体用户的默认目录为自己的家目录。ftpd_banner=Welcome!! 登陆后的注释信息。 xferlog_file=/var/log/xferlog 日志存放位置。listen_port=21 监听的端口。
local_root=/var/ftp 使用的ftp目录,全局。write_enable=YES (NO) 是否允许写入,全局。local_enable=YES|NO 是否允许实体用户登陆。
local_max_rate=# 限制real user的传输速度,单位为Byte/s,如果为0则表示不限制。allow_writeable_chroot=YES|NO 是否限制ftp文件夹对实体用户的W权限,如果为NO,则设置W权限时,会报错。anonymous_enable=YES|NO 是否允许匿名用户登录,预设为YES,如果关闭则所有的匿名设置属性都将无效。
anon_root=/path/filename 指定匿名用户ftp目录anon_world_readable_only=YES|NO 是否允许匿名用户具有下载的权限,预设为YES。anon_other_write_enable=YES|NO 是否允许匿名用户具有写入(W)的权限,如删除与更改伺服器上的档案与档名等权限,预设为NO。anon_mkdir_write_enable=YES|NO 是否允许匿名用户具有创建目录的权限 预设为NO。anon_upload_enable=YES|NO 是否允许匿名用户上传文件,预设为NOguest_enable=YES|NO 所有的实体账号登陆都视为以guest的身份登陆。
guest_username=username 指定访客使用哪个用户的身份。三.具体应用:本地用户管理
3.1匿名用户是否允许访问
anonymous_enable=YESanon_mkdir_write_enable=YES3.2本地用户管理参数chroot_local_user将用户添加到vsftpd/chroot_list文件中允许访问local_enable=YESchroot_list_enable=YESchroot_list_file=/etc/vsftpd/chroot_list将用户添加到vsftpd/chroot_list文件中允许访问[root@zabbix-server vsftpd]# cat /etc/passwd |grep ":5[0-9][0-9]:" | awk -F : '{print $1}' >/etc/vsftpd/chroot_list主配置文件注意:此时可以任意切换目录,而且可以任意删除文件和目录,危险,要限制登陆用户只能在固定的目录下操作:修改参数:chroot_local_user=NO[root@zabbix-server tmp]# grep "chroot_local_user=YES" /etc/vsftpd/vsftpd.confchroot_local_user=YES[root@zabbix-server tmp]# sed -i 's#chroot_local_user=YES#chroot_local_user=NO#g' /etc/vsftpd/vsftpd.conf[root@zabbix-server tmp]# grep "chroot_local_user=NO" /etc/vsftpd/vsftpd.confchroot_local_user=NO启动 VSFTPD 服务service vsftpd restart查看21端口是否开放netstat -atln |grep 21测试:此时,只能在家目录/home/cacti/下操作:3.3 参数local_root=/var/ftp/pub 指定实体FTP用户所使用的目录,如不指定,实体用户的默认目录为自己的家目录。测试:[root@zabbix-server pub]# lftp cacti@10.0.0.10Password: lftp cacti@10.0.0.10:~> ls lftp cacti@10.0.0.10:/> ls[root@zabbix-server pub]# mkdir /var/ftp/pub/{test003,test004} –p[root@zabbix-server test01]# cd /var/ftp/pub/
[root@zabbix-server pub]# lltotal 8drwxr-xr-x. 3 root root 4096 Dec 24 14:54 test003drwxr-xr-x. 2 root root 4096 Dec 24 12:30 test004 lftp cacti@10.0.0.10:/> lsdrwxr-xr-x 2 0 0 4096 Dec 24 04:30 test003drwxr-xr-x 2 0 0 4096 Dec 24 04:30 test004lftp cacti@10.0.0.10:/> cd test003lftp cacti@10.0.0.10:/test003> ls [root@zabbix-server ~]# lftp test01@10.0.0.10Password: lftp test01@10.0.0.10:~> ls drwxr-xr-x 2 0 0 4096 Dec 24 06:45 test003drwxr-xr-x 2 0 0 4096 Dec 24 04:30 test004lftp test01@10.0.0.10:/> cd test004lftp test01@10.0.0.10:/test004> mkdir test001mkdir: Access failed: 550 Create directory operation failed. (test001)但是不能mkdir dirname 创建目录,原因是上面的目录权限是root授权:chown -R test01.test01 pub[root@zabbix-server ~]# lftp test01@10.0.0.10Password: lftp test01@10.0.0.10:~> ls drwxr-xr-x 3 890 890 4096 Dec 24 06:54 test003drwxr-xr-x 2 890 890 4096 Dec 24 04:30 test004lftp test01@10.0.0.10:/> cd test004/lftp test01@10.0.0.10:/test004> mkdir test001mkdir ok, `test001' createdlftp test01@10.0.0.10:/test004> lsdrwxr-xr-x 2 890 890 4096 Dec 24 07:12 test001提示:当前/var/ftp/pub下的目录属主都是test01,所以当使用cacti登陆时,是无法在/var/ftp/pub 下上传文件或者是创建目录的3.4参数listen=YES
注释掉掉参数:listen=YES测试:/etc/init.d/vsftpd restart 启动报错:[root@zabbix-server pub]# /etc/init.d/vsftpd restartShutting down vsftpd: [FAILED]Starting vsftpd for vsftpd: 500 OOPS: vsftpd: not configured for standalone, must be started from inetd[FAILED][root@zabbix-server pub]# /etc/init.d/vsftpd restartShutting down vsftpd: [FAILED]Starting vsftpd for vsftpd: [ OK ]3.5参数local_max_rate
限制real user的传输速度,单位为Byte/s,如果为0则表示不限制。测试:local_max_rate=10240 每秒传输10KBlocal_max_rate=1024000 每秒传输1MB四.虚拟用户管理
4.1vsftpd基于数据库文件来实现虚拟用户4.1.1在主配置文件内添加参数,创建多个虚拟用户共享操作一个目录(1)要用到文件数据库db4rpm -qa |grep db4(2)将帐户放入文本:(奇数行)用户名 (偶数行)密码[root@zabbix-server vsftpd]# cat /etc/vsftpd/vsftpd.txt test0001wujianweitxt01jianweitxt02lixu(3)生成帐户的文件数据库db_load -T -t hash -f vsftpd.txt /etc/vsftpd/vsftpd_zhanghu.db(4)修改文件数据库访问权限chmod 600 /etc/vsftpd/vsftpd_zhanghu.db(5)手工建立虚拟用户所需的PAM配置文件编辑认证相关的一个配置文件:(告诉配置文件你得用哪种方式去认证,要不然会用系统默认的用户名和密码,现在我们要用虚拟用户的来认证,这时候就需要告诉配置文件他的这些密码库文件这些在哪里,要去用它)vi /etc/pam.d/vsftpd 编辑此配置文件,注释掉原来的内容,添加下面的红色字体代码auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_zhanghu类型为认证 设置为required 传递pam_userdb.so参数 数据库文件在/etc/vsftpd/vsftpd_zhanghu无需加.db,默认的!account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_zhanghu实践验证可行配置文件:[root@zabbix-server vsftpd]# cat /etc/pam.d/vsftpd#%PAM-1.0#session optional pam_keyinit.so force revoke#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed#auth required pam_shells.so#auth include password-auth#account include password-auth#session required pam_loginuid.so#session include password-authauth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_zhanghuaccount required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_zhanghu保存之前我们要先去确认下/lib/security/pam_userdb.so这个文件存在不存在
(因为这个关系到系统是32位还是64位的问题,32位的系统是存放在上面所说的路径下的,但是如果是64位操作系统的话是存放在/lib64/security/pam_userdb.so里的) 可以用uname -a查看系统是多少位的操作系统(6)添加一个虚拟用户的入口帐户
useradd -d /var/zhandian -s /sbin/nologin xunirukou(7)在主配置文件中添加虚拟用户的配置内容/etc/vsftpd/vsftpd.conf
虚拟用户的新添加配置chroot_local_user=YESguest_enable=YESguest_username=xunirukoupam_service_name=vsftpdlocal_root=/var/zhandian/xuesongvirtual_use_local_privs=YESuser_config_dir=/etc/vsftpd/extra完整配置文件如下:
[root@zabbix-server zhandian]# cat /etc/vsftpd/vsftpd.confanonymous_enable=NOlocal_enable=YESwrite_enable=YESlocal_umask=022dirmessage_enable=YESxferlog_enable=YESconnect_from_port_20=YESxferlog_std_format=YESlisten=YESpam_service_name=vsftpd
userlist_enable=YEStcp_wrappers=YESmax_clients=3max_per_ip=3local_max_rate=102400chroot_local_user=YES
guest_enable=YESguest_username=xunirukoupam_service_name=vsftpdvirtual_use_local_privs=YESlocal_root=/var/zhandian/xuesonguser_config_dir=/etc/vsftpd/extra(可有可无)(8)在vsftpd.conf配置文件中指定用户配置文件的目录(此步骤可以省略)
user_config_dir=/etc/vsftpd/extra(9)建立配置文件中指定用户配置文件的目录(此步骤可以省略)mkdir /etc/vsftpd/extra(10)因为入口帐户是一个本地帐户,所以要指定虚拟用户具有本地帐户的权限,才能读写 自己空间中的文件,虚拟用户就可以就拥有写权限virtual_use_local_privs=YES(11)此处的步骤可以省略touch /etc/vsftpd/vsftpd_zhandian/xuesongecho "local_root=/var/zhandian/xuesong" >> /etc/vsftpd/vsftpd_zhandian/xuesong(12)mkdir /var/zhandian/xusong(13)chown -R xunirukou: xunirukou /var/zhandian/(14)重启服务/etc/init.d/vsftpd restart此时,主配置文件内容为:[root@zabbix-server extra]# cat /etc/vsftpd/vsftpd.confanonymous_enable=NOlocal_enable=YESwrite_enable=YESlocal_umask=022dirmessage_enable=YESxferlog_enable=YESconnect_from_port_20=YESxferlog_std_format=YESlisten=YESpam_service_name=vsftpd
userlist_enable=YEStcp_wrappers=YESchroot_local_user=YES
guest_enable=YESguest_username=xunirukoupam_service_name=vsftpdvirtual_use_local_privs=YESuser_config_dir=/etc/vsftpd/extralocal_root=/var/zhandian/xusong1(15)客户端虚拟账号测试
[root@zabbix-server vsftpd]# lftp txt01@10.0.0.10Password: lftp txt01@10.0.0.10:~> ls drwxr-xr-x 4 892 892 4096 Dec 25 00:04 xuesonglftp txt01@10.0.0.10:/> cd xuesong/lftp txt01@10.0.0.10:/xuesong> ls-rw-r--r-- 1 892 892 22179 Dec 25 00:04 install.logdrwxr-xr-x 2 892 892 4096 Dec 25 00:03 test01drwxr-xr-x 2 892 892 4096 Dec 25 00:03 test03lftp txt01@10.0.0.10:/xuesong> rm -fr test01 test03rm ok, 2 files removed lftp txt01@10.0.0.10:/xuesong> ls-rw-r--r-- 1 892 892 22179 Dec 25 00:04 install.loglftp txt01@10.0.0.10:/xuesong> mkdir test01mkdir ok, `test01' createdlftp txt01@10.0.0.10:/xuesong> put /root/install.log.syslog 5890 bytes transferred lftp txt01@10.0.0.10:/xuesong> ls-rw-r--r-- 1 892 892 22179 Dec 25 00:04 install.log-rw-r--r-- 1 892 892 5890 Dec 25 00:45 install.log.syslogdrwxr-xr-x 2 892 892 4096 Dec 25 00:45 test01lftp txt01@10.0.0.10:/xuesong>[root@zabbix-server vsftpd]# lftp txt02@10.0.0.10s
Password: lftp txt02@10.0.0.10:~> ls drwxr-xr-x 3 892 892 4096 Dec 25 00:45 xuesonglftp txt02@10.0.0.10:/> cd xuesong/lftp txt02@10.0.0.10:/xuesong> ls-rw-r--r-- 1 892 892 22179 Dec 25 00:04 install.log-rw-r--r-- 1 892 892 5890 Dec 25 00:45 install.log.syslogdrwxr-xr-x 2 892 892 4096 Dec 25 00:45 test01如果显示链接超时,或者报错530检查selinx,iptbales规则,
以及重启防火墙执行modprobe ip_conntrack_ftp4.1.2在子配置文件下创建独立的单个虚拟用户操作单个目录提示:此标题下面的配置是有效的可以实践操作成功1.将用户限制到某个目录下:修改配置文件: vim /etc/vsftpd/vsftpd.conf2.生成一个虚拟的用户来操作ftp(正常我们配置ftp一般是不能用系统用户来使用的,要不然都知道你系统用户了那都可以通过sshd来登录系统了,这也是一个安全隐患,所以我们需要配置一个虚拟用户来操作)3.创建一个虚拟用户对应的那个系统用户:useradd virftp -s /sbin/nologin4.创建一个虚拟用户存放用户名密码的文件:vim /etc/vsftpd/vsftpd_login[root@zabbix-server test1]# cat /etc/vsftpd/vsftpd_logintest1wujianweitest2jianweiwu然后更改其权限:chmod 600 /etc/vsftpd/vsftpd_login5.将vsftpd_login这个文件生成一个vsftpd这个服务能识别的一个二进制的库文件:
db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db6.创建虚拟用户:(1)创建一个虚拟用户配置文件存放的一个目录: mkdir /etc/vsftpd/extra(2)进入到这个目录下进行配置文件的创建: cd /etc/vsftpd/extra(3)创建一个跟第4步配置文件中用户名同名的一个配置文件: vim test1子配置文件写入内容:[root@zabbix-server vsftpd]# cat /etc/vsftpd/extra/test1local_root=/home/virftp/test1anonymous_enable=NOwrite_enable=YESlocal_umask=022anon_upload_enable=NOanon_mkdir_write_enable=NOidle_session_timeout=600data_connection_timeout=120max_clients=10max_per_ip=5local_max_rate=50000此时的主配置文件内容为:
[root@client01 vsftpd]# cat /etc/vsftpd/vsftpd.confanonymous_enable=NOlocal_enable=YES#write_enable=YES#local_umask=022#dirmessage_enable=YESxferlog_enable=YES
#connect_from_port_20=YES#xferlog_std_format=YES#listen=YESpam_service_name=vsftpd
userlist_enable=YEStcp_wrappers=YESchroot_local_user=YES
guest_enable=YESguest_username=virftpvirtual_use_local_privs=YESuser_config_dir=/etc/vsftpd/extra(4)既然在上面配置文件中我们有限制test1的家目录到/home/vsftpd/test1下,我们自然要去创建这个目录:mkdir /home/virftp/test1然后更改其属主以及属组为我们的系统用户:chown -R virftp:virftp /home/virftp/test1(5)编辑认证相关的一个配置文件:(告诉配置文件你得用哪种方式去认证,要不然会用系统默认的用户名和密码,现在我们要用虚拟用户的来认证,这时候就需要告诉配置文件他的这些密码库文件这些在哪里,要去用它)vim /etc/pam.d/vsftpd 把配置文件中原来的信息注释掉(不注释掉,会在登陆的时候报错),然后在下面添加信息:auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login此处默认/etc/vsftpd/vsftpd_login 的vsftpd_login.db一定要去掉后缀.db[root@zabbix-server vsftpd]# cat /etc/pam.d/vsftpd
#%PAM-1.0#session optional pam_keyinit.so force revoke#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed#auth required pam_shells.so#auth include password-auth#account include password-auth#session required pam_loginuid.so#session include password-authauth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_loginaccount sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login保存之前我们要先去确认下/lib/security/pam_userdb.so这个文件存在不存在
(因为这个关系到系统是32位还是64位的问题,32位的系统是存放在上面所说的路径下的,但是如果是64位操作系统的话是存放在/lib64/security/pam_userdb.so里的) 可以用uname -a查看系统是多少位的操作系统7.编辑vsftpd的配置文件: vim /etc/vsftpd/vsftpd.conf(将一些关于匿名用户信息行的选项打开并将其改成NO;注:local_enable=YES这一行就是默认的YES别去改)并在配置文件最底下添加一些配置信息:[root@zabbix-server vsftpd]# tail -5 /etc/vsftpd/vsftpd.confchroot_local_user=YESguest_enable=YESguest_username=virftpvirtual_use_local_privs=YESuser_config_dir=/etc/vsftpd/extra8.重启vsftpd服务: /etc/init.d/vsftpd restart9.测试:
[root@zabbix-server vsftpd]# lftp test1@10.0.0.10Password: lftp test1@10.0.0.10:~> ls lftp test1@10.0.0.10:/> mkdir txt01mkdir ok, `txt01' createdlftp test1@10.0.0.10:/> cd txt01/lftp test1@10.0.0.10:/txt01> lslftp test1@10.0.0.10:/txt01> put /root/install.log22179 bytes transferredlftp test1@10.0.0.10:/txt01> ls-rw-r--r-- 1 893 893 22179 Dec 25 08:16 install.loglftp test1@10.0.0.10:/txt01>如果测试链接不上,很大情况是iptables 导致的,
要在命令行执行命令:modprobe ip_conntrack_ftp 基本上可以解决问题[root@zabbix-server ~]# ll /home/virftp/test1/total 4drwxr-xr-x. 2 virftp virftp 4096 Dec 25 16:16 txt01[root@zabbix-server ~]# ll /home/virftp/test1/total 24-rw-r--r--. 1 virftp virftp 22179 Dec 25 16:16 install.log[root@zabbix-server ~]# ll /home/virftp/test1total 4drwxr-xr-x. 2 virftp virftp 4096 Dec 25 16:16 txt01[root@zabbix-server ~]# ll /home/virftp/test1/total 24按照上面的配置添加一个虚拟用户test2来访问指定的目录/home/virftp/test2
mkdir /home/virftp/test2 授权给系统用户virftp
[root@zabbix-server virftp]# cd /home/virftp/You have new mail in /var/spool/mail/root[root@zabbix-server virftp]# chown -R virftp.virftp test2cp /etc/vsftpd/extra/test1 /etc/vsftpd/extra/test2修改配置文件:[root@zabbix-server virftp]# vim /etc/vsftpd/extra/test2local_root=/home/virftp/test2
anonymous_enable=NOwrite_enable=YESlocal_umask=022anon_upload_enable=NOanon_mkdir_write_enable=NOidle_session_timeout=600data_connection_timeout=120max_clients=1max_per_ip=1local_max_rate=50000~ [root@zabbix-server extra]# /etc/init.d/vsftpd restart测试:[root@zabbix-server virftp]# lftp test2@10.0.0.10Password: lftp test2@10.0.0.10:~> ls lftp test2@10.0.0.10:/> mkdir wujianwei01mkdir ok, `wujianwei01' createdlftp test2@10.0.0.10:/> put /root/install.log22179 bytes transferred lftp test2@10.0.0.10:/> ls-rw-r--r-- 1 893 893 22179 Dec 25 08:40 install.logdrwxr-xr-x 2 893 893 4096 Dec 25 08:40 wujianwei01lftp test2@10.0.0.10:/>[root@zabbix-server extra]# cd /home/virftp/test2/You have new mail in /var/spool/mail/root[root@zabbix-server test2]# lltotal 28-rw-r--r--. 1 virftp virftp 22179 Dec 25 16:40 install.logdrwxr-xr-x. 2 virftp virftp 4096 Dec 25 16:40 wujianwei01[root@zabbix-server test2]#4.1.3接着4.1.2的配置测试接着4.1.2的配置测试:如果想新添加lftp的远程登陆虚拟用户以及重新设置用户使用ftp上传的指定目录:[root@zabbix-server extra]# cat /etc/vsftpd/extra/test3
local_root=/opt/test3anonymous_enable=NOwrite_enable=YESlocal_umask=022anon_upload_enable=NOanon_mkdir_write_enable=NOidle_session_timeout=600data_connection_timeout=120max_clients=10max_per_ip=5local_max_rate=5000[root@zabbix-server extra]# mkdir /opt/test3/ -p[root@zabbix-server extra]chown -R virftp.virftp /opt/test3/在配置文件中添加第三个虚拟用户:test3密码:jian
[root@zabbix-server extra]# vim /etc/vsftpd/vsftpd_logintest1wujianweitest2jianweiwutest3jian[root@zabbix-server vsftpd]# db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db测试:lftp test3@10.0.0.11:/> put /tmp/test0001 4 bytes transferredlftp test3@10.0.0.11:/> lsdrwxr-xr-x 2 2017 2017 4096 Feb 16 11:30 333drwxr-xr-x 2 2017 2017 4096 Feb 16 11:31 3344drwxr-xr-x 2 2017 2017 4096 Feb 16 12:50 4444-rw-r--r-- 1 2017 2017 4 Feb 16 12:50 test0001lftp test3@10.0.0.11:/> put /data/soft/lepus_data.sql lepus_table.sql percona-toolkit-2.2.11-1.noarch.rpm rep_2017-02-12.sqllftp test3@10.0.0.11:/> put /data/soft/lepus_table.sql `/data/soft/lepus_table.sql' at 74677 (100%) [Waiting for transfer to complete]t@client01 extra]# lftp test3@10.0.0.11
Password: lftp test3@10.0.0.11:~> ls drwxr-xr-x 2 2017 2017 4096 Feb 16 11:30 333drwxr-xr-x 2 2017 2017 4096 Feb 16 11:31 33444.1.4测试
[root@zabbix-server extra]# cat /etc/vsftpd/vsftpd.confanonymous_enable=NOlocal_enable=YESwrite_enable=YESlocal_umask=022dirmessage_enable=YESxferlog_enable=YESconnect_from_port_20=YESxferlog_std_format=YESlisten=YESpam_service_name=vsftpduserlist_enable=YEStcp_wrappers=YESchroot_local_user=YESguest_enable=YESguest_username=virftpvirtual_use_local_privs=YESuser_config_dir=/etc/vsftpd/extra[root@client01 extra]# cat /etc/vsftpd/vsftpd_login
test1wujianweitest2jianweiwutest3jiantest4weitest5lixu×××字体为新添加的用户和密码[root@zabbix-server extra]# db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db测试:登陆lftp
[root@client01 extra]# lftp test5@10.0.0.11Password: lftp test5@10.0.0.11:~> ls drwxr-xr-x 2 2017 2017 4096 Feb 16 15:18 test00001drwxr-xr-x 3 2017 2017 4096 Feb 16 11:39 test1-rw-r--r-- 1 2017 2017 118252 Feb 16 15:22 thold-v0.5.0.tgzlftp test5@10.0.0.11:/> mkdir txt00000000mkdir ok, `txt00000000' createdlftp test5@10.0.0.11:/> lsdrwxr-xr-x 2 2017 2017 4096 Feb 16 15:18 test00001drwxr-xr-x 3 2017 2017 4096 Feb 16 11:39 test1-rw-r--r-- 1 2017 2017 118252 Feb 16 15:22 thold-v0.5.0.tgzdrwxr-xr-x 2 2017 2017 4096 Feb 16 15:30 txt00000000lftp test5@10.0.0.11:/> quit[root@client01 extra]# ll /home/virftp/total 128drwxr-xr-x 2 virftp virftp 4096 Feb 16 23:18 test00001drwxr-xr-x 3 virftp virftp 4096 Feb 16 19:39 test1-rw-r--r-- 1 virftp virftp 118252 Feb 16 23:22 thold-v0.5.0.tgzdrwxr-xr-x 2 virftp virftp 4096 Feb 16 23:30 txt00000000此时生产的文件默认是在虚拟用户virftp的家目录下参考文档:属性参数介绍参考文档:虚拟用户登陆配置参考文档:ftp参数以及实践参考文档:4.2vsftpd基于mysql实现虚拟用户
上传文件:pam_mysql-0.7RC1.tar.gz
cd /data/soft/tar xf pam_mysql-0.7RC1.tar.gz -C /usr/local/
cd /usr/local/pam_mysql-0.7RC1/./configure --with-openssl编译安装报错:configure: error: Cannot find pam headers. Please check if your system is ready for pam module development.解决办法:yum install pam-develLibraries have been installed in:
/lib/security在/lib/security/ 下面生成两个文件pam_mysql.so pam_mysql.la[root@zabbix-server pam_mysql-0.7RC1]# ll /lib/security/*-rwxr-xr-x. 1 root root 871 Feb 25 14:20 /lib/security/pam_mysql.la-rwxr-xr-x. 1 root root 135902 Feb 25 14:20 /lib/security/pam_mysql.so[root@zabbix-server pam_mysql-0.7RC1]# cp /lib/security/pam_mysql.so /lib64/security/之前安装好,ftp登陆时一直显示530错误的原因就是在这,没有拷贝pam_mysql.so文件到/lib64/security/ 这个目录下 导致的2.编辑文件vim /etc/pam.d/vsftpd
全部注释掉里面的内容,否则在后面会报错的[root@zabbix-server pam_mysql-0.7RC1]# cat /etc/pam.d/vsftpd #%PAM-1.0#session optional pam_keyinit.so force revoke#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed#auth required pam_shells.so#auth include password-auth#account include password-auth#session required pam_loginuid.so#session include password-auth编辑新的配置文件/etc/pam.d/vsftp.mysql 写入下面两行内容[root@zabbix-server pam_mysql-0.7RC1]# cat /etc/pam.d/vsftp.mysql
auth required /lib64/security/pam_mysql.so user=xiao passwd=redhat host=10.0.0.10 db=vsftp table=user usercolumn=name passwdcolumn=password crypt=2account required /lib64/security/pam_mysql.so user=xiao passwd=redhat host=10.0.0.10 db=vsftp table=user usercolumn=name passwdcolumn=password crypt=2
注意此处必须为/lib64/security/pam_mysql.so ,因为服务器的系统为x86_64为的系统,如果为32为的系统则采用/lib/security/pam_mysql.so
参数注释:设置类型为认证,并如果不通过就整个认证都不通过,但是还是要检查后续认证属性,指定认证文件库文件并赋予参数,DB账号是xiao 密码是redhat mysql服务器地址是192.168.1.2 数据库是vsftp 表是table 账号字段是name 密码字段是password 加密类型为mysql。3.添加虚拟用户virtual并创建[root@host1 ~]# useradd -s /sbin/nologin virtual 创建虚拟映射的实体账号,并不允许登陆。[root@host1 ~]# mkdir /etc/vsftpd/extra 创建虚拟用户存放目录。[root@host1 ~]# vim /etc/vsftpd/extra/xiao 设定虚拟用户的文件指定ftp上传的目录。local_root=/tmp/xiaowu xiao的目录为/tmp/xiaowuwrite_enable=YES 允许写入。4.创建数据库vsftp,以及存储ftp的登陆账户的表user
mysql> create database vsftp; mysql> use vsftp;Database changedmysql> show tables;mysql> create table user(name char(20) not null primary key,password char(48) not null); mysql> insert into user values('xiao',password('redhat'));mysql> grant select on vsftp.* to xiao@'%' identified by 'redhat';mysql> flush privileges[root@zabbix-server vsftpd]# cat /etc/vsftpd/extra/xiao
local_root=/tmp/xiaowuwrite_enable=YES[root@zabbix-server vsftpd]# chown -R virtual.virtual /tmp/xiaowu指定用户上传的目录并且授权virtual.virtual 这样ftp登陆后就可以在此目录下读写内容5.测试:1.登陆ftp创建文件和目录测试[root@zabbix-server xiao]# lftp xiao@10.0.0.10Password: lftp xiao@10.0.0.10:/> mkdir 1mkdir ok,1' created<br/>lftp xiao@10.0.0.10:/> mkdir 2<br/>mkdir ok,
2' createdlftp xiao@10.0.0.10:/> lsdrwxr-xr-x 2 890 890 4096 Feb 25 08:13 1drwxr-xr-x 2 890 890 4096 Feb 25 08:13 2lftp xiao@10.0.0.10:/> put /tmp/vsftpd.conf ./put: /tmp/xiao: Is a directory362 bytes transferredTransfer of 1 of 2 files failedlftp xiao@10.0.0.10:/> lsdrwxr-xr-x 2 890 890 4096 Feb 25 08:13 1drwxr-xr-x 2 890 890 4096 Feb 25 08:13 2-rw-r--r-- 1 890 890 362 Feb 25 08:14 vsftpd.conf 2.在mysql的是数据库增加新的用户wujianwei
mysql> insert into user values('wujianwei',password('wujianwei'));Query OK, 1 row affected (0.05 sec)mysql> select from user;+-----------+-------------------------------------------+| name | password |+-----------+-------------------------------------------+| xiao | 84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
| wujianwei | *101A59321A57E815F59012E62A366E084B8934A3 |+-----------+-------------------------------------------+2 rows in set (0.00 sec)登陆ftp[root@zabbix-server vsftpd]# lftp wujianwei@10.0.0.10Password: lftp wujianwei@10.0.0.10:~> ls drwxr-xr-x 2 890 890 4096 Feb 25 09:01 testdrwxr-xr-x 3 890 890 4096 Feb 25 07:46 test001此时显示的是系统创建的虚拟用户virtual默认的目录
lftp wujianwei@10.0.0.10:/> mkdir test1mkdir ok,test1' created<br/>lftp wujianwei@10.0.0.10:/> mkdir test2<br/>mkdir ok,
test2' createdlftp wujianwei@10.0.0.10:/> lsdrwxr-xr-x 2 890 890 4096 Feb 25 09:01 testdrwxr-xr-x 3 890 890 4096 Feb 25 07:46 test001drwxr-xr-x 2 890 890 4096 Feb 25 09:08 test1drwxr-xr-x 2 890 890 4096 Feb 25 09:08 test2[root@zabbix-server virtual]# ll /home/virtualtotal 16drwxr-xr-x. 2 virtual virtual 4096 Feb 25 17:01 testdrwxr-xr-x. 3 virtual virtual 4096 Feb 25 15:46 test001drwxr-xr-x. 2 virtual virtual 4096 Feb 25 17:08 test1drwxr-xr-x. 2 virtual virtual 4096 Feb 25 17:08 test2 实践可行的配置文件
[root@zabbix-server extra]# cat /etc/vsftpd/vsftpd.conf |grep -v "^#" >/tmp/vsftpd.conf[root@zabbix-server extra]# cat /tmp/vsftpd.conf anonymous_enable=NOlocal_enable=YESwrite_enable=YESlocal_umask=022dirmessage_enable=YESxferlog_enable=YESconnect_from_port_20=YESxferlog_std_format=YESlisten=YESpam_service_name=vsftp.mysql
userlist_enable=YEStcp_wrappers=YESguest_enable=yesguest_username=virtualchroot_local_user=YESvirtual_use_local_privs=YESuser_config_dir=/etc/vsftpd/extra测试可行的配置文件配置文件参数介绍参考文档:五.vsftpd.conf常用配置详解
vsftp.conf属性详解,作为查询使用。
[env]local_root=/var/ftp 指定ftp目录。write_enable=YES|NO 是否允许使用者上传,全局。use_locatime=YES|NO 是否启用本地时间。listen_port=# 指定vsftp所使用的端口。ftpd_banner=text 显示的文字说明。banner_file=/path/file 指定某个纯文字档案座位登陆时的vsftp欢迎字眼。[env] [mode]
listen=YES|NO 是否以 standalone(主动) 方式启动,预设为NO。connect_from_port=21 主动式连线使用的FTP端口。ftp_data_port=20 主动式连线使用的FTP数据端口connect_timeout=60 主动模式下,在#秒后得不到回应就强制中断。pasv_enable=YES|NO 是否开启被动(passive)连线模式。
accept_timeout=120 被动模式下,服务器等待客户端超过#秒就强制断线。pasv_min_port=0,pasv_max_port=0 被动模式时,使用的port范围,0表示1-65535随机采用不限制。data_connection_timeout=30 如果已经建立连接,但是因为线路问题导致在#秒被没有完成资料的传输,就强制踢除客户端。
idle_session_timeout=60 如果使用者在#秒内都没有命令动作就强制断线。max_clients=10 同一时间最大的连接数。max_per_ip=5 同一IP同一时间可以允许多少连线。[env] [message]
dirmessage_enable=YES|NO 当进入特定目录时会显示提示,显示内容为每一个目录下面的隐藏文件.message。message_file=.message 显示的是.message就是这个选项来指定的。[anonymous] [mod]
anonymous_enable=YES|NO 是否允许匿名用户登录,预设为YES,如果关闭则所有的匿名设置属性都将无效。anon_root=/path/filename 指定匿名用户ftp目录anon_world_readable_only=YES|NO 是否允许匿名用户具有下载的权限,预设为YES。anon_other_write_enable=YES|NO 是否允许匿名用户具有写入(W)的权限,如删除与更改伺服器上的档案与档名等权限,预设为NO。
如果要设置为YES,则需要调整开放给anonymous写入目录的权限,即开放对应PID(anonymous账户)的W权限。anon_mkdir_write_enable=YES|NO 是否允许匿名用户具有创建目录的权限 预设为NO。如果anon_other_write_enable=NO 此属性则不能生效,必须更改为YES。anon_upload_enable=YES|NO 是否允许匿名用户上传文件,预设为NO如果anon_other_write_enable=NO 此属性不能生效。[anonymous] [password check]
deny_email_enable=YES|NO 是否抵挡不允许的email登陆。banned_email_file=/etc/vsftpd/banned_emails 拒绝登陆的email的list,需要deny_mail_enable设置为YES。no_anon_passwd=YES|NO 是否要略过密码check环节。[anonymous] [other]
anon_max_rate=# 限制anonymous的传输速度,单位为Byte/s,如果为0则表示不限制。anon_umask=077 设置上传文件的默认掩码。[real user]
local_enable=YES|NO 是否允许实体用户登陆。local_max_rate=# 限制real user的传输速度,单位为Byte/s,如果为0则表示不限制。allow_writeable_chroot=YES|NO 是否限制ftp文件夹对实体用户的W权限,如果为NO,则设置W权限时,会报错。[real user] [change root]
chroot_local_enable=YES|NO 开启目录锁定功能。 chroot_list_enable=YES|NO 开机目录锁定的list限制。chroot_list_enable result YES 所有用户都锁定目录,list中的用户不锁定。 NO 所有用户都不锁定目录,list中的用户锁定。
chroot_list_file=/etc/vsftpd/chroot_list : 指定chroot list。
[real user] [userlist_deny]
userlist_enable=YES|NO 是否开启访问限制功能。userlist_deny=YES|NO 是否开启list访问限制。userlist_deny result YES 所有用户都可以访问,list中的用户无法访问。 NO 所有用户都无法访问,list中的用户可以访问。
userlist_file=/etc/vsftpd/user_list : 指定userlist。
[safe]
acsii_download_enable=YES|NO 是否指定用户使用acsii格式下载档案。acsii_upload_enable=YES|NO 是否指定用户使用acsii格式上传档案。one_process_model=YES|NO 设定为YES时,每一个连线都会拥有一个单独的precess负责,都够提升vsftp的性能,但是会占用系统资源,建议设置为NOtcp_wrappers=YES|NO 是否支援TCP Wrappers。pam_service_name=vsftpd pam模组的名称。[safe] [log]
xferlog_enable=YES|NO 是否在上传与下载档案时将信息记录在日志文件中。xferlog_file=/var/log/xferlog 生成的日志文件存放的位置。xferlog_std_format=YES|NO 日志文件通过标准的xferlog格式书写,难读。dual_log_enable=YES|NO 是否生成额外的一个log文档。vsftpd_log_file=/var/log/vsftpd.log 额外log文档的存放位置。[safe] [process user]
nopriv_user=username 以指定的user作为process的user,防止被***时,仅仅只会获得指定user的低权限,不会对系统造成太大的伤害。[guest]
guest_enable=YES|NO 所有的实体账号登陆都视为以guest的身份登陆。guest_username=username 指定访客使用哪个用户的身份。virtual_use_local_privs=YES 为YES时,虚拟用户权限与实体用户一样。六常见问题:
1.ftp无法登陆,请检查你的文件夹权限并检查主配置文件中的属性是否打开了,如anonymous_enable,local_enable等。2.无法切换目录或者个别用户无法登陆,请检查chroot_list,ftpusers,user_list文件内容或者主配置文件中的配置是否正确。3.mysql存储无法登陆,请查看日志文件/var/log/secure,/var/log/message,/var/log/xferlog,并确认认证文件没有写错,仔细检查配置文件与目录和被映射的实体用户的权限。如果遇到密码错误,检查密码文件,如mysql表中字段长度类型是否正确,数据库用户是否能远程登陆访问数据库user表。4.如果遇到在编译安装pam_mysql模块中遇到configure: error: Your system doesn’t appear to be configured to use PAM. Perhaps you need to specify the correct location where the PAM modules reside. 情况,可以尝试添加一个选项 –with-pam-mods-dir=/lib/security/ 自己手动指明pam库的存放位置。5.无法正常工作时,请检查端口是否开启,或检查防火墙和selinux是否有配置正确。6.防火墙影响:解决:modprobe ip_conntrack_ftp参考文档:操作实践:
环境:mysql数据库均为yum安装,系统为centos6.7[root@zabbix-server pam_mysql-0.7RC1]# rpm -qa mysql*
mysql-connector-odbc-5.1.5r1144-7.el6.x86_64mysql-libs-5.1.73-7.el6.x86_64mysql-5.1.73-7.el6.x86_64mysql-devel-5.1.73-7.el6.x86_64mysql-server-5.1.73-7.el6.x86_64vsftpd介绍参考文档:
转载于:https://blog.51cto.com/wujianwei/2058447