搭建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

blob.png

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

blob.png

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

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

blob.png

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

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

blob.png

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

blob.png

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

blob.png

8,启动服务并测试

systemctl restart vsftpd

blob.png

blob.png

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源码包

pam_mysql-0.7RC1.tar.gz

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/生成两个文件

blob.png

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;"

blob.png

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

blob.png

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

blob.png

blob.png

自动化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 ftp://10.1.0.1/pub/Sources/sources/pam/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....."

  • 搭建ftp服务器并基于虚拟用户授权已关闭评论
  • 1,473 views
    A+
发布日期:2016年10月14日  所属分类:linux
标签: