首选的FTP服务器搭建方式
安装vsftpd
yum install -y vsftpd
systemctl enable vsftpd #设置开机启动
systemctl is-enabled vsftpd #查看是否开机启动
基于虚拟用户的配置
所谓虚拟用户就是没有使用真实的帐户,只是通过映射到真实帐户和设置权限的目的。虚拟用户不能登录CentOS系统,所以是相对安全的登陆方式
auth required pam_mysql.so user=vsftpd passwd=111111 host=localhost db=vftpuser table=users usercolumn=name passwdcolumn=passwd crypt=0
account required pam_mysql.so user=vftpuser passwd=111111 host=localhost db=vftpuser table=users usercolumn=name passwdcolumn=passwd crypt=0
1.修改配置文件
systemctl start vsftpd
2.建立本地映射用户并设置宿主目录权限
[root@shewei ~]#useradd –d /home/vftpsite –s /sbin/nologin vftpuser
3.配置vsftpd.conf(设置虚拟用户配置项)
[root@shewei ~]#vim /etc/vsftpd/vsftpd.conf
guest_enable=YES #开启虚拟用户
guest_username=vftpuser #FTP虚拟用户对应的系统用户,需要创建系统用户
pam_service_name=vsftpd #PAM认证文件 这里是手动建立的pam认证文件名
4.在MySQL中建立用户口令数据库 #没有数据库就安装数据库,以下用mariadb
[root@shewei ~]#yum -y install mariadb-server
[root@shewei ~]#systemctl start mariadb
[root@shewei ~]#mysql
MariaDB [(none)]> create database vsftpd; #建立虚拟用户数据库,库名vsftpd
MariaDB [(none)]> use vsftpd; #进入vsftpd数据库
MariaDB [(none)]>create table users(name char(16) binary,passwd char(16) binary); #建立虚拟用户口令表,表名users
#16位长度的用户密码区分大小写
MariaDB [(none)]> insert into users (name,passwd) values (‘bobyuan’,password(‘111’));
MariaDB [(none)]> insert into users (name,passwd) values (‘she’,password(‘111’));
#建立两个虚拟用户,bobyuan和she
注意:此处还可以批量添加用户;后期学mysql时可以使用,此时使用单个添加用户
MariaDB [(none)]> grant select on vsftpd.users to vsftpd@localhost identified by ‘111111’;#授权vsftpd这个账号可以读取vsftpd数据库的user表
5.验证mysql的设置是否成功
MariaDB [vsftpd]> show databases; #此处会显示上面添加的vsftpd数据库名字
MariaDB [vsftpd]> use vsftpd; #这里是切换进此数据库
show tables; #这里查看建立的虚拟用户口令表,应显示users
select * from users; #这里显示添加的虚拟用户和密码
退出后使用mysql看能否登陆
mysql -uvsftpd -hlocalhost -p111111
6.编译MySQL的PAM认证模块
查看/lib64/security/目录下有没有MySQL对应的PAM模块,centos7.3也没有,需要编译安装;
# yum install mariadb-devel pam-devel -y
# ./configure –with-pam=/usr –with-mysql=/usr –with-pam-mods-dir=/usr/lib64/security
# make && make install
7.编辑vsftpd的PAM认证文件
在/etc/pam.d目录下,
[root@shewei ~]#vim /etc/pam.d/vsftpd
将里面其他的都注释掉,添加下面这两行: #或者全部删除
auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=111111 host=localhost db=vsftpd table=users u
sercolumn=name passwdcolumn=passwd crypt=0
account required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=111111 host=localhost db=vsftpd table=user
s usercolumn=name passwdcolumn=passwd crypt=0
这里需要注意的是user和passwd填写的是授权数据库访问账号和密码
crypt=0:表示口令使用明文方式保存在数据库中
crypt=1:表示口令使用UNIX的DES加密方式加密后保存在数据库中
crypt=2:表示口令使用MySQL的password()函数加密后保存在数据库中
crypt=3:表示口令使用MD5散列值的方式保存在数据库中
8. 重启vsftpd服务
[root@shewei pam_mysql-0.7RC1]#systemctl restart vsftpd
9. 测试虚拟用户登录FTP
[root@shewei pam_mysql-0.7RC1]#iptables -F
通过其他linux访问就大功告成了;一下是匿名访问和本地用户禁锢访问等:
注意:只有共享权限和本地权限都有的权限才能执行,单独开放一个权限不能读写
共享权限:vsftpd中的主配置文件
本地权限:文件的属主属组
匿名用户:
anonymous_enable=YES #是否允许匿名账号登陆
anon_upload_enable=YES #是否允许上传
anon_mkdir_write_enable=YES #是否能够创建目录
anon_other_write_enable=YES #是否允许其他用户有写权限
程序环境:
主程序 : /usr/sbin/vsftpd
主配置文件: /etc/vsftpd/vsftpd.conf
数据根目录: /var/ftp
Systemd Unit File: /usr/lib/systemd/system/vsftpd.service
配置vsftpd三种用户类别:
匿名用户: anonymous –> ftp, /var/ftp
系统用户: 至少禁止系统用户访问ftp服务,/etc/vsftpd/ftpusers
(此文件中的所有用户禁止登陆)
通过PAM机制实现(/etc/pam.d/vsftpd);
虚拟用户:
用户通过vsftpd服务访问到的默认路径,是用户自己的家目录;默认可以自己有权限访问的所有路径间切换;
禁锢用户于其家目录中;
配置文件:/etc/vsftpd/vsftpd.conf
directive value
注意:directive之前不能有多余字符;
系统用户:
local_enable=YES #是否允许本地用户登陆(包括匿名和虚拟用户)
write_enable=YES #是否拥有写权限
yum install -y vsftpd
辅助配置文件/etc/vsftpd/ftpusers;
列在此文件中的用户均禁止使用ftp服务;
#但是这样还是不安全,因为登陆时候需要提供密码后才会显示登陆失败
容易被抓包抓到密码
chroot_local_user=YES
禁锢所有本地用户于其家目录;需要事先去除用户对家目录的写权限;
chmod a-w /home/users
如果注释chroot_local_user,开启这两个选项;
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list #此文件需要创建
禁锢列表中文件存在的用户于其家目录中;需要事先去除用户对家目录的写权限
写入此文件中的用户都被锁定,
传输日志:
xferlog_enable=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
守护进程的类型:
standalone:独立守护进程;由服务进程自行监听套按字,并接收用户访问请求
transient:瞬时守护进程;由受托管方代为监听套按字,服务进程没有访问
请求时不启动;当托管方收到访问请求时,才启动服务进程;
CentOS 6:xinetd独立守护进程, /etc/xinetd.d/,
CentOS 7:由systemd代为监听;
控制可登录vsftpd服务的用户列表:
userlist_enable=YES
启用/etc/vsftpd/user_list文件来控制可登录用户;
userlist_deny=
YES:意味着此为黑名单;
NO:白名单;
虚拟用户:
用户账号存储于何处?
文件、MySQL、Redis、…
vsftpd:认证功能托管给pam;
虚拟用户的写权限,通过匿名一样的指令进行定义;还能实现不同的用户有不同的权限
user_config_dir=/etc/vsftpd/vusers_config/
原创文章,作者:shewei,如若转载,请注明出处:http://www.178linux.com/74293