搭建ftp服务器并基于虚拟用户授权

1,基于本地文本文件的虚拟用户授权

实验操作之前先把SELinux和防火墙关掉,操作环境为CENTOS 7.2

setenforce 0
iptables -F

1,安装vsftpd程序包

yum install vsftpd -y

2,先创建一个用户密码授权文件

mkdir /etc/vsftpd/vuser_db
vim /etc/vsftpd/vuser_db/vuser

3,使用户密码授权和vsftpd的进行连接

vim /etc/pam.d/vsftpd.vuserdb
auth required /usr/lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_db/vuserpass
account required /usr/lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_db/vuserpass

4,根据用户密码授权文件生成授权加密数据库

db_load -T -t hash -f /etc/vsftpd/vuser_db/vuser /etc/vsftpd/vuser_db/vuserpass.db

5,创建一个用户作为虚拟用户的代理用户,创建一个目录作为虚拟用户访问的目录,然后并赋予一些权限

mkdir /ftproot
useradd -d /ftproot/ ftpvuser
mkdir /ftproot/{pub,upload}
setfacl -m u:ftpvuser:rwx /ftproot/upload/

6,编辑vsftpd的主配置文件

vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd.vuserdb
guest_enable=YES
guest_username=vftpuser
user_config_dir=/etc/vsftpd/vuser_dir

7,配置虚拟用户访问权限

mkdir /etc/vsftpd/vuser_dir
vim /etc/vsftpd/vuser_dir/xixi
anon_mkdir_write_enable=YES
anon_umask=022
anon_upload_enable=YES
anon_other_write_enable=YES

8,启动服务并测试

systemctl restart vsftpd

2,基于数据库的虚拟用户授权

实验操作之前先把SELinux和防火墙关掉,操作环境为CENTOS 7.2

setenforce 0
iptables -F

1,安装vsftpd和mariadb程序包

yum install vsftpd mariadb-server -y

2,编译安装vsftpd,mariadb认证驱动文件(centos 6.8可以直接用yum install -y pam_mysql ,安装后的模块在/lib64/security目录下)

a,先安装编译所需的包

yum install -y mariadb-server mariadb-devel pam pam-devel gcc gcc-c++

b,先下载pam_mysql源码包

Download pam-mysql from SourceForge.net

c,解压编译安装

tar -xvf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1/
./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security
make && make install

编译安装后会在/usr/lib64/security/生成两个文件

3,启动数据库并且添加授权用户

systemctl start mariadb
mysql -e "grant all on vsftp.* to vuser@127.0.0.1 identified by 'vpasswd';"
mysql -e "create database if not exists vsftp"
mysql -e "create table if not exists vsftp.users (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,name CHAR(30) NOT NULL UNIQUE KEY,password CHAR(42));"
mysql -e "INSERT INTO vsftp.users (name,password) values ('xixi',PASSWORD('xixi')),('nihao',PASSWORD('nihao'));"
mysql -e "flush privileges;"

4,使用户密码授权和vsftpd的进行连接

vim /etc/pam.d/vsftpd.vuserdb
auth required /usr/lib64/security/pam_mysql.so user=vuser passwd=vpasswd host=127.0.0.1 db=vsftp table=users usercolumn=name passwdcolumn=password crypt=2
account required /usr/lib64/security/pam_mysql.so user=vuser passwd=vpasswd host=127.0.0.1 db=vsftp table=users usercolumn=name passwdcolumn=password crypt=2

5,创建一个用户作为虚拟用户的代理用户,创建一个目录作为虚拟用户访问的目录,然后并赋予一些权限

mkdir /ftproot
useradd -d /ftproot/ ftpvuser
mkdir /ftproot/{pub,upload}
setfacl -m u:ftpvuser:rwx /ftproot/upload/

6,编辑vsftpd的主配置文件

vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd.vuserdb
guest_enable=YES
guest_username=vftpuser
user_config_dir=/etc/vsftpd/vuser_dir

7,配置虚拟用户访问权限

mkdir /etc/vsftpd/vuser_dir
vim /etc/vsftpd/vuser_dir/xixi
anon_mkdir_write_enable=YES
anon_umask=022
anon_upload_enable=YES
anon_other_write_enable=YES

8,启动服务并测试

systemctl restart vsftpd

自动化ftp数据库安装脚本

#!/bin/bash
yum install -y mariadb-server mariadb-devel pam pam-devel gcc gcc-c++ vsftpd wget
pmadir=`mktemp -d /tmp/pma.XXXX`
wget -q http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz -P $pmadir
cd $pmadir && tar -xvf pam_mysql-0.7RC1.tar.gz
cd $pmadir/pam_mysql-0.7RC1 && ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security
make && make install

systemctl start mariadb

mysql -e "grant all on vsftp.* to vuser@127.0.0.1 identified by 'vpasswd';"
mysql -e "create database if not exists vsftp"
mysql -e "create table if not exists vsftp.users (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,name CHAR(30) NOT NULL UNIQUE KEY,password CHAR(50));"
mysql -e "INSERT INTO vsftp.users (name,password) values ('xixi',PASSWORD('xixi')),('tom',PASSWORD('tom'));"
mysql -e "flush privileges;"

sed -i "/\[mysqld\]/askip_name_resolve=NO" /etc/my.cnf


mkdir /ftproot
useradd -r -d /ftproot vftpuser
mkdir /ftproot/{pub,upload}
setfacl -m u:vftpuser:rwx /ftproot/upload

cat > /etc/pam.d/vsftpd.mysql << eof
auth required /usr/lib64/security/pam_mysql.so user=vuser passwd=vpasswd host=127.0.0.1 db=vsftp table=users usercolumn=name passwdcolumn=password crypt=2
account required /usr/lib64/security/pam_mysql.so user=vuser passwd=vpasswd host=127.0.0.1 db=vsftp table=users usercolumn=name passwdcolumn=password crypt=2
eof

sed -i "/pam_service_name=vsftpd/d" /etc/vsftpd/vsftpd.conf
cat >> /etc/vsftpd/vsftpd.conf <<eof
guest_enable=YES
guest_username=vftpuser
user_config_dir=/etc/vsftpd/vusers_config
pam_service_name=vsftpd.mysql
eof


mkdir -pv /etc/vsftpd/vusers_config
echo "write conf.....ok"
cat >> /etc/vsftpd/vusers_config/tom <<eof
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_umask=022
eof

cat >> /etc/vsftpd/vusers_config/xixi <<eof
anon_upload_enable=YES
anon_mkdir_write_enable=YES
eof

##start####教室环境需要清空dns解析,否则连接很慢,其他环境可以注释
sed -i "/.*/d" /etc/resolv.conf
#########end

rm -rf $pmadir && echo "delete cache....ok"
systemctl start vsftpd
setenforce 0
iptables -F
echo "is ok....."

基于文件认证的脚本

#!/bin/bash
yum install -y vsftpd
mkdir /ftproot
useradd -r -d /ftproot vftpuser
mkdir /ftproot/{pub,upload}
setfacl -m u:vftpuser:rwx /ftproot/upload
cat > /etc/pam.d/vsftpd.db << eof
auth required /usr/lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_db/vuserpass
account required /usr/lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_db/vuserpass
eof
sed -i "/pam_service_name=vsftpd/d" /etc/vsftpd/vsftpd.conf
cat >> /etc/vsftpd/vsftpd.conf <<eof
guest_enable=YES
guest_username=vftpuser
user_config_dir=/etc/vsftpd/vusers_config
pam_service_name=vsftpd.db
eof

mkdir /etc/vsftpd/vuser_db
echo -e "nihao\nnihao\nxixi\nxixi" >>/etc/vsftpd/vuser_db/vuser
db_load -T -t hash -f /etc/vsftpd/vuser_db/vuser /etc/vsftpd/vuser_db/vuserpass.db
mkdir -pv /etc/vsftpd/vusers_config
echo "write conf.....ok"
cat >> /etc/vsftpd/vusers_config/xixi <<eof
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_umask=022
eof
cat >> /etc/vsftpd/vusers_config/nihao <<eof
anon_upload_enable=YES
anon_mkdir_write_enable=YES
eof
##start####教室环境需要清空dns解析,否则连接很慢
sed -i "/.*/d" /etc/resolv.conf
#########end
systemctl start vsftpd
setenforce 0
iptables -F
echo "is ok....."
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值