linux上ftp服务安装配置介绍

一.在linux上安装ftp服务

vsftp安装:yum install vsftpd
查看vsftp是否安装rpm -qa | grep vsftpd
关闭selinux
否则会报错:
[root@zabbix-server vsftpd]# getenforce
Enforcing
[root@zabbix-server cacti]# lftp cacti@10.0.0.10
Password:
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]# getenforce
Permissive
[root@zabbix-server cacti]# lftp cacti@10.0.0.10
Password:
lftp cacti@10.0.0.10:~> ls
ls: Login failed: 500 OOPS: cannot change directory:/home/cacti
lftp cacti@10.0.0.10:~> ls
drwxr-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.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
参数介绍参考文档:
http://moerjinrong.blog.51cto.com/11124564/1881357
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 是否允许匿名用户上传文件,预设为NO


guest_enable=YES|NO 所有的实体账号登陆都视为以guest的身份登陆。
guest_username=username 指定访客使用哪个用户的身份。

三.具体应用:本地用户管理

3.1匿名用户是否允许访问
anonymous_enable=YES
anon_mkdir_write_enable=YES
3.2本地用户管理参数chroot_local_user
将用户添加到vsftpd/chroot_list文件中允许访问
local_enable=YES
chroot_list_enable=YES
chroot_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
主配置文件
linux上ftp服务安装配置介绍
注意:此时可以任意切换目录,而且可以任意删除文件和目录,危险,要限制登陆用户只能在固定的目录下操作:修改参数:chroot_local_user=NO
[root@zabbix-server tmp]# grep "chroot_local_user=YES" /etc/vsftpd/vsftpd.conf
chroot_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.conf
chroot_local_user=NO
启动 VSFTPD 服务
service vsftpd restart
查看21端口是否开放
netstat -atln |grep 21
测试:
linux上ftp服务安装配置介绍
此时,只能在家目录/home/cacti/下操作:
linux上ftp服务安装配置介绍
3.3 参数local_root=/var/ftp/pub
指定实体FTP用户所使用的目录,如不指定,实体用户的默认目录为自己的家目录。
测试:
[root@zabbix-server pub]# lftp cacti@10.0.0.10
Password:
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]# ll
total 8
drwxr-xr-x. 3 root root 4096 Dec 24 14:54 test003
drwxr-xr-x. 2 root root 4096 Dec 24 12:30 test004
lftp cacti@10.0.0.10:/> ls
drwxr-xr-x 2 0 0 4096 Dec 24 04:30 test003
drwxr-xr-x 2 0 0 4096 Dec 24 04:30 test004
lftp cacti@10.0.0.10:/> cd test003
lftp cacti@10.0.0.10:/test003> ls [root@zabbix-server ~]# lftp test01@10.0.0.10
Password:
lftp test01@10.0.0.10:~> ls
drwxr-xr-x 2 0 0 4096 Dec 24 06:45 test003
drwxr-xr-x 2 0 0 4096 Dec 24 04:30 test004
lftp test01@10.0.0.10:/> cd test004
lftp test01@10.0.0.10:/test004> mkdir test001
mkdir: Access failed: 550 Create directory operation failed. (test001)
但是不能mkdir dirname 创建目录,原因是上面的目录权限是root
授权:
chown -R test01.test01 pub
[root@zabbix-server ~]# lftp test01@10.0.0.10
Password:
lftp test01@10.0.0.10:~> ls
drwxr-xr-x 3 890 890 4096 Dec 24 06:54 test003
drwxr-xr-x 2 890 890 4096 Dec 24 04:30 test004
lftp test01@10.0.0.10:/> cd test004/
lftp test01@10.0.0.10:/test004> mkdir test001
mkdir ok, `test001' created
lftp test01@10.0.0.10:/test004> ls
drwxr-xr-x 2 890 890 4096 Dec 24 07:12 test001
提示:当前/var/ftp/pub下的目录属主都是test01,所以当使用cacti登陆时,是无法在/var/ftp/pub 下上传文件或者是创建目录的
linux上ftp服务安装配置介绍
linux上ftp服务安装配置介绍

3.4参数listen=YES
注释掉掉参数:listen=YES
测试:
/etc/init.d/vsftpd restart 启动报错:
[root@zabbix-server pub]# /etc/init.d/vsftpd restart
Shutting 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 restart
Shutting down vsftpd: [FAILED]
Starting vsftpd for vsftpd: [ OK ]

3.5参数local_max_rate
限制real user的传输速度,单位为Byte/s,如果为0则表示不限制。
测试:
local_max_rate=10240 每秒传输10KB
linux上ftp服务安装配置介绍
linux上ftp服务安装配置介绍
local_max_rate=1024000 每秒传输1MB

linux上ftp服务安装配置介绍

四.虚拟用户管理
4.1vsftpd基于数据库文件来实现虚拟用户
4.1.1在主配置文件内添加参数,创建多个虚拟用户共享操作一个目录
(1)要用到文件数据库db4
rpm -qa |grep db4
(2)将帐户放入文本:(奇数行)用户名 (偶数行)密码
[root@zabbix-server vsftpd]# cat /etc/vsftpd/vsftpd.txt
test0001
wujianwei
txt01
jianwei
txt02
lixu
(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-auth
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_zhanghu
account 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=YES
guest_enable=YES
guest_username=xunirukou
pam_service_name=vsftpd
local_root=/var/zhandian/xuesong
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/extra

完整配置文件如下:
[root@zabbix-server zhandian]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
max_clients=3
max_per_ip=3
local_max_rate=102400

chroot_local_user=YES
guest_enable=YES
guest_username=xunirukou
pam_service_name=vsftpd
virtual_use_local_privs=YES
local_root=/var/zhandian/xuesong
user_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/xuesong
echo "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.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

chroot_local_user=YES
guest_enable=YES
guest_username=xunirukou
pam_service_name=vsftpd
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/extra
local_root=/var/zhandian/xusong1

(15)客户端虚拟账号测试
[root@zabbix-server vsftpd]# lftp txt01@10.0.0.10
Password:
lftp txt01@10.0.0.10:~> ls
drwxr-xr-x 4 892 892 4096 Dec 25 00:04 xuesong
lftp 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.log
drwxr-xr-x 2 892 892 4096 Dec 25 00:03 test01
drwxr-xr-x 2 892 892 4096 Dec 25 00:03 test03
lftp txt01@10.0.0.10:/xuesong> rm -fr test01 test03
rm ok, 2 files removed
lftp txt01@10.0.0.10:/xuesong> ls
-rw-r--r-- 1 892 892 22179 Dec 25 00:04 install.log
lftp txt01@10.0.0.10:/xuesong> mkdir test01
mkdir ok, `test01' created
lftp 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.syslog
drwxr-xr-x 2 892 892 4096 Dec 25 00:45 test01
lftp 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 xuesong
lftp 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.syslog
drwxr-xr-x 2 892 892 4096 Dec 25 00:45 test01

如果显示链接超时,或者报错530检查selinx,iptbales规则,
以及重启防火墙执行modprobe ip_conntrack_ftp
4.1.2在子配置文件下创建独立的单个虚拟用户操作单个目录
提示:此标题下面的配置是有效的可以实践操作成功
1.将用户限制到某个目录下:
修改配置文件: vim /etc/vsftpd/vsftpd.conf
2.生成一个虚拟的用户来操作ftp(正常我们配置ftp一般是不能用系统用户来使用的,要不然都知道你系统用户了那都可以通过sshd来登录系统了,这也是一个安全隐患,所以我们需要配置一个虚拟用户来操作)
3.创建一个虚拟用户对应的那个系统用户:useradd virftp -s /sbin/nologin
4.创建一个虚拟用户存放用户名密码的文件:vim /etc/vsftpd/vsftpd_login
[root@zabbix-server test1]# cat /etc/vsftpd/vsftpd_login
test1
wujianwei
test2
jianweiwu
然后更改其权限:chmod 600 /etc/vsftpd/vsftpd_login

5.将vsftpd_login这个文件生成一个vsftpd这个服务能识别的一个二进制的库文件:
db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db
6.创建虚拟用户:
(1)创建一个虚拟用户配置文件存放的一个目录: mkdir /etc/vsftpd/extra
(2)进入到这个目录下进行配置文件的创建: cd /etc/vsftpd/extra
(3)创建一个跟第4步配置文件中用户名同名的一个配置文件: vim test1
子配置文件写入内容:
[root@zabbix-server vsftpd]# cat /etc/vsftpd/extra/test1
local_root=/home/virftp/test1
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=600
data_connection_timeout=120
max_clients=10
max_per_ip=5
local_max_rate=50000

此时的主配置文件内容为:
[root@client01 vsftpd]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
#
write_enable=YES
#
local_umask=022
#
dirmessage_enable=YES

This depends on setting xferlog_std_format parameter

xferlog_enable=YES
#
connect_from_port_20=YES
#
xferlog_std_format=YES
#
listen=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

chroot_local_user=YES
guest_enable=YES
guest_username=virftp
virtual_use_local_privs=YES
user_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-auth
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account 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.conf
chroot_local_user=YES
guest_enable=YES
guest_username=virftp
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/extra
8.重启vsftpd服务: /etc/init.d/vsftpd restart

9.测试:
[root@zabbix-server vsftpd]# lftp test1@10.0.0.10
Password:
lftp test1@10.0.0.10:~> ls
lftp test1@10.0.0.10:/> mkdir txt01
mkdir ok, `txt01' created
lftp test1@10.0.0.10:/> cd txt01/
lftp test1@10.0.0.10:/txt01> ls
lftp test1@10.0.0.10:/txt01> put /root/install.log
22179 bytes transferred
lftp test1@10.0.0.10:/txt01> ls
-rw-r--r-- 1 893 893 22179 Dec 25 08:16 install.log
lftp test1@10.0.0.10:/txt01>

如果测试链接不上,很大情况是iptables 导致的,
要在命令行执行命令:modprobe ip_conntrack_ftp 基本上可以解决问题
[root@zabbix-server ~]# ll /home/virftp/test1/
total 4
drwxr-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/test1
total 4
drwxr-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 test2
cp /etc/vsftpd/extra/test1 /etc/vsftpd/extra/test2
修改配置文件:
[root@zabbix-server virftp]# vim /etc/vsftpd/extra/test2

local_root=/home/virftp/test2
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=600
data_connection_timeout=120
max_clients=1
max_per_ip=1
local_max_rate=50000
~
[root@zabbix-server extra]# /etc/init.d/vsftpd restart
测试:
[root@zabbix-server virftp]# lftp test2@10.0.0.10
Password:
lftp test2@10.0.0.10:~> ls
lftp test2@10.0.0.10:/> mkdir wujianwei01
mkdir ok, `wujianwei01' created
lftp test2@10.0.0.10:/> put /root/install.log
22179 bytes transferred
lftp test2@10.0.0.10:/> ls
-rw-r--r-- 1 893 893 22179 Dec 25 08:40 install.log
drwxr-xr-x 2 893 893 4096 Dec 25 08:40 wujianwei01
lftp 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]# ll
total 28
-rw-r--r--. 1 virftp virftp 22179 Dec 25 16:40 install.log
drwxr-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/test3
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=600
data_connection_timeout=120
max_clients=10
max_per_ip=5
local_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_login
test1
wujianwei
test2
jianweiwu
test3
jian
[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 transferred
lftp test3@10.0.0.11:/> ls
drwxr-xr-x 2 2017 2017 4096 Feb 16 11:30 333
drwxr-xr-x 2 2017 2017 4096 Feb 16 11:31 3344
drwxr-xr-x 2 2017 2017 4096 Feb 16 12:50 4444
-rw-r--r-- 1 2017 2017 4 Feb 16 12:50 test0001
lftp 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.sql
lftp 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 333
drwxr-xr-x 2 2017 2017 4096 Feb 16 11:31 3344

4.1.4测试
[root@zabbix-server extra]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
chroot_local_user=YES
guest_enable=YES
guest_username=virftp
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/extra

[root@client01 extra]# cat /etc/vsftpd/vsftpd_login
test1
wujianwei
test2
jianweiwu
test3
jian
test4
wei
test5
lixu
×××字体为新添加的用户和密码
[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.11
Password:
lftp test5@10.0.0.11:~> ls
drwxr-xr-x 2 2017 2017 4096 Feb 16 15:18 test00001
drwxr-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.tgz
lftp test5@10.0.0.11:/> mkdir txt00000000
mkdir ok, `txt00000000' created
lftp test5@10.0.0.11:/> ls
drwxr-xr-x 2 2017 2017 4096 Feb 16 15:18 test00001
drwxr-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.tgz
drwxr-xr-x 2 2017 2017 4096 Feb 16 15:30 txt00000000
lftp test5@10.0.0.11:/> quit
[root@client01 extra]# ll /home/virftp/
total 128
drwxr-xr-x 2 virftp virftp 4096 Feb 16 23:18 test00001
drwxr-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.tgz
drwxr-xr-x 2 virftp virftp 4096 Feb 16 23:30 txt00000000
此时生产的文件默认是在虚拟用户virftp的家目录下
参考文档:
属性参数介绍参考文档:
http://moerjinrong.blog.51cto.com/11124564/1881357
虚拟用户登陆配置参考文档:
http://7179431.blog.51cto.com/7169431/1877508
ftp参数以及实践参考文档:http://123.57.218.140/15668

4.2vsftpd基于mysql实现虚拟用户

  1. pam_mysql-0.7RC1编译安装
    yum install vsftpd –y
    vim /etc/vsftpd/vsftpd.conf 在此配置文件的最下面添加一下参数:
    pam_service_name=vsftp.mysql
    userlist_enable=YES
    tcp_wrappers=YES
    guest_enable=yes
    guest_username=virtual
    chroot_local_user=YES
    virtual_use_local_privs=YES
    user_config_dir=/etc/vsftpd/extra

上传文件: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-devel

重新编译:
./configure --with-openssl
make &&make install
make[1]: Entering directory `/usr/local/pam_mysql-0.7RC1'
/bin/sh ./mkinstalldirs /lib/security
/bin/sh ./libtool --mode=install /usr/bin/install -c pam_mysql.la /lib/security/pam_mysql.la
/usr/bin/install -c .libs/pam_mysql.so /lib/security/pam_mysql.so
/usr/bin/install -c .libs/pam_mysql.lai /lib/security/pam_mysql.la
PATH="$PATH:/sbin" ldconfig -n /lib/security

Libraries 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=2

account 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/xiaowu
write_enable=YES 允许写入。

4.创建数据库vsftp,以及存储ftp的登陆账户的表user
mysql> create database vsftp;
mysql> use vsftp;
Database changed
mysql> 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/xiaowu
write_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.10
Password:
lftp xiao@10.0.0.10:/> mkdir 1
mkdir ok, 1' created<br/>lftp xiao@10.0.0.10:/&gt; mkdir 2<br/>mkdir ok,2' created
lftp xiao@10.0.0.10:/> ls
drwxr-xr-x 2 890 890 4096 Feb 25 08:13 1
drwxr-xr-x 2 890 890 4096 Feb 25 08:13 2
lftp xiao@10.0.0.10:/> put /tmp/vsftpd.conf ./
put: /tmp/xiao: Is a directory
362 bytes transferred
Transfer of 1 of 2 files failed
lftp xiao@10.0.0.10:/> ls
drwxr-xr-x 2 890 890 4096 Feb 25 08:13 1
drwxr-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.10
Password:
lftp wujianwei@10.0.0.10:~> ls
drwxr-xr-x 2 890 890 4096 Feb 25 09:01 test
drwxr-xr-x 3 890 890 4096 Feb 25 07:46 test001

此时显示的是系统创建的虚拟用户virtual默认的目录
lftp wujianwei@10.0.0.10:/> mkdir test1
mkdir ok, test1' created<br/>lftp wujianwei@10.0.0.10:/&gt; mkdir test2<br/>mkdir ok,test2' created
lftp wujianwei@10.0.0.10:/> ls
drwxr-xr-x 2 890 890 4096 Feb 25 09:01 test
drwxr-xr-x 3 890 890 4096 Feb 25 07:46 test001
drwxr-xr-x 2 890 890 4096 Feb 25 09:08 test1
drwxr-xr-x 2 890 890 4096 Feb 25 09:08 test2
[root@zabbix-server virtual]# ll /home/virtual
total 16
drwxr-xr-x. 2 virtual virtual 4096 Feb 25 17:01 test
drwxr-xr-x. 3 virtual virtual 4096 Feb 25 15:46 test001
drwxr-xr-x. 2 virtual virtual 4096 Feb 25 17:08 test1
drwxr-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=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES

pam_service_name=vsftp.mysql
userlist_enable=YES
tcp_wrappers=YES
guest_enable=yes
guest_username=virtual
chroot_local_user=YES
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/extra
测试可行的配置文件
配置文件参数介绍参考文档:
http://123.57.218.140/15668

五.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的性能,但是会占用系统资源,建议设置为NO
tcp_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
参考文档:http://www.myexception.cn/vsts/480445.html

操作实践:
环境:mysql数据库均为yum安装,系统为centos6.7

[root@zabbix-server pam_mysql-0.7RC1]# rpm -qa mysql*
mysql-connector-odbc-5.1.5r1144-7.el6.x86_64
mysql-libs-5.1.73-7.el6.x86_64
mysql-5.1.73-7.el6.x86_64
mysql-devel-5.1.73-7.el6.x86_64
mysql-server-5.1.73-7.el6.x86_64

vsftpd介绍参考文档:
https://blog.csdn.net/yskcg/article/details/5859919

转载于:https://blog.51cto.com/wujianwei/2058447

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值