一、实现基于MYSQL验证的vsftpd虚拟用户访问
1、编译工具安装
yum install -y cmake gcc-c++ gcc bison libmcrypt openssl openssl-devel ncurses ncurses-devel perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-GD
2、安装mariadb数据库
yum –y install mariadb-server
systemctl start mariadb
3、创建ftp虚拟账户表
mysql -uroot -p (默认为空)
mysql> create database vsftpd; #创建vsftpd数据库
mysql> grant all privileges on vsftpd.* to vsftpd@'%' identified by 'vsftpd'; #创建数据库账户密码
mysql> create table user #创建用户表
(
id int unsigned auto_increment primary key,
name char(50) binary not null,
password char(50) binary not null
);
mysql> insert into user(name,password) values ('ftp1',password('ftp1')); #创建虚拟用户
mysql> insert into user(name,password) values ('ftp2',password('ftp2'));
4、安装pam_mysql-0.7RC1
yum -y install mariadb-devel pam-devel
tar xvf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1
./configure --with-pam-mods-dir=/lib64/security
make && make install
5、创建ftp账户
useradd -r -s /sbin/nologin -d /data/ftpdata vuser #创建vuser操作系统账户
mkdir -p /data/ftpdata/{public,upload}
chmod 555 /data/ftpdata/ #去掉vuser ftp根目录写权限
setfacl -m u:vuser:rwx /data/ftpdata/upload/ #单独给予upload文件目录写的权限
6、创建pam vsftpd.mysql文件
vi /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so user=vsftpd passwd=vsftpd host=172.16.31.7 db=vsftpd table=user usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=vsftpd host=172.16.31.7 db=vsftpd table=user usercolumn=name passwdcolumn=password crypt=2 #填写数据库连接信息
7、修改vsftpd配置文件
vi /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd.mysql #(修改pam引用配置文件)
userlist_enable=YES #默认
tcp_wrappers=YES #默认
guest_enable=YES #开启虚拟用户
guest_username=vuser #所有虚拟用户都映射成vuser账户
user_config_dir=/etc/vsftpd/vusers.d/ #每个虚拟用户独立配置文件
8、单独配置虚拟用户
mkdir -p /etc/vsftpd/vusers.d/
vi /etc/vsftpd/vusers.d/ftp1 #创建ftp1用户配置文件
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES #允许上传
9、验证
ftp1用户可以上传
ftp2用户无法上传
二、通过NFS实现服务器/www共享访问
1、创建共享目录
mkdir -p /www
chmod 755 /www
2、安装nfs服务
yum install -y nfs-utils rpcbind
3、修改nfs配置文件
vi /etc/exports
/www 172.16.31.65(rw,sync,all_squash,anonuid=501,anongid=501)
#rw 可读写
#sync 同步至内存
#all_squash 全部匿名方式登陆
#n匿名账户ID及组501
4、创建匿名账户
groupadd -g 501 nfsuser
useradd -g nfsuser -u 501 nfsuser -s /sbin/nologin
chown -R nfsuser:nfsuser /www
5、启动nfs并刷新配置
systemctl start rpcbind && systemctl start nfs-server
exportfs -r
6、客户端安装
yum install -y nfs-utils
7、挂载nfs盘
mkdir -p /data/www
mount -t nfs 172.16.31.7:/www /data/www
三、配置samba共享,实现/www目录共享
1、创建共享目录
mkdir -p /www
2、安装samba服务
yum install samba –y
3、创建共享账户
groupadd sambauser
useradd sambauser -g sambauser -s /sbin/nologin
chown -R sambauser:sambauser /www
4、将用户添加进samba用户中并设置密码
smbpasswd -a sambauser
5、修改samba配置文件
vi /etc/samba/smb.conf
最后添加
[www]
comment = www #描述
path = /www #共享目录
public = no #隐藏共享目录
browseable = no
printable = no
valid users = sambauser #添加sambauser权限
write list = sambauser #sambauser可写权限
6、启动samba服务
systemctl start smb nmb
7、测试
\172.16.31.7\www
四、使用rsync+inotify实现/www目录实时同步
服务端:172.16.23.243
客户端:172.16.31.7
需求:
客户端 /data/www 目录中的所有文件及目录同步至服务端/data/backup目录中
1、服务端和客户端都安装rsyncd
yum -y install rsync
2、服务端修改rsync配置文件
vi /etc/rsyncd.conf
uid=root #进程启用的用户
gid=root
use chroot = no #不切根
max connections = 0 #无连接数限制
ignore errors #忽略错误
exclude = lost+found/
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
reverse lookup = no #不反向解析
[backup] #创建backup实例
path = /data/backup/ #备份的目录
comment = backup
read only = no
auth users = rsyncuser #同步rsync账户
secrets file = /etc/rsync.pass #密码保存的文件
3、创建rsync同步账户及密码
vi /etc/rsync.pass
rsyncuser:123456 #用户:密码
4、客户端添加rsyncuser的密码
vi /etc/rsync.pass
123456
5、测试rsync
服务端
启动rsync进程
rsync --daemon
chmod 600 /etc/rsync.pass(客户端和服务端都要执行)
客户端
[root@ftptest data]# rsync -avz --password-file=/etc/rsync.pass /data/www/ [email protected]::backup
sending incremental file list
./
f1.txt
f4.txt
f5.txt
sent 221 bytes received 76 bytes 594.00 bytes/sec
total size is 0 speedup is 0.00
服务端
[root@mwh backup]# ll
总用量 0
-rw-r--r-- 1 root root 0 8月 30 12:05 f1.txt
-rw-r--r-- 1 root root 0 8月 30 14:02 f4.txt
-rw-r--r-- 1 root root 0 8月 30 14:05 f5.txt
成功同步
6、客户端安装inotify
yum install inotify-tools
7、定义同步脚本
vi /data/rsyncwww.sh
#!/bin/sh
SRC=/data/www/
[email protected]::backup
inotifywait -mrq -e modify,create,move,delete,attrib $SRC |while read events #-m 持续监控 -r 递归 -q 不记录 -e 定义操作
do
rsync -az --delete --password-file=/etc/rsync.pass $SRC $DEST #--delete 删除backup中源文件不存在的文件
echo "[`date "+%Y-%m-%d %H:%M:%S"`] $events" >> /var/log/sync.log
done
8、执行脚本测试
chmod +x /data/rsyncwww.sh
./rsyncwww.sh
客户端
[root@ftptest www]# touch f{1..10}.txt
[root@ftptest www]# ll
总用量 0
-rw-r--r-- 1 root root 0 8月 30 14:20 f10.txt
-rw-r--r-- 1 root root 0 8月 30 14:20 f1.txt
-rw-r--r-- 1 root root 0 8月 30 14:20 f2.txt
-rw-r--r-- 1 root root 0 8月 30 14:20 f3.txt
-rw-r--r-- 1 root root 0 8月 30 14:20 f4.txt
-rw-r--r-- 1 root root 0 8月 30 14:20 f5.txt
-rw-r--r-- 1 root root 0 8月 30 14:20 f6.txt
-rw-r--r-- 1 root root 0 8月 30 14:20 f7.txt
-rw-r--r-- 1 root root 0 8月 30 14:20 f8.txt
-rw-r--r-- 1 root root 0 8月 30 14:20 f9.txt
服务端
[root@mwh backup]# ll
总用量 0
-rw-r--r-- 1 root root 0 8月 30 14:20 f10.txt
-rw-r--r-- 1 root root 0 8月 30 14:20 f1.txt
-rw-r--r-- 1 root root 0 8月 30 14:20 f2.txt
-rw-r--r-- 1 root root 0 8月 30 14:20 f3.txt
-rw-r--r-- 1 root root 0 8月 30 14:20 f4.txt
-rw-r--r-- 1 root root 0 8月 30 14:20 f5.txt
-rw-r--r-- 1 root root 0 8月 30 14:20 f6.txt
-rw-r--r-- 1 root root 0 8月 30 14:20 f7.txt
-rw-r--r-- 1 root root 0 8月 30 14:20 f8.txt
-rw-r--r-- 1 root root 0 8月 30 14:20 f9.txt
查看日志
[root@ftptest www]# tail -20 /var/log/sync.log
[2020-08-30 14:20:35] /data/www/ CREATE f1.txt
[2020-08-30 14:20:35] /data/www/ ATTRIB f1.txt
[2020-08-30 14:20:35] /data/www/ CREATE f2.txt
[2020-08-30 14:20:35] /data/www/ ATTRIB f2.txt
[2020-08-30 14:20:35] /data/www/ CREATE f3.txt
[2020-08-30 14:20:36] /data/www/ ATTRIB f3.txt
[2020-08-30 14:20:36] /data/www/ CREATE f4.txt
[2020-08-30 14:20:36] /data/www/ ATTRIB f4.txt
[2020-08-30 14:20:36] /data/www/ CREATE f5.txt
[2020-08-30 14:20:36] /data/www/ ATTRIB f5.txt
[2020-08-30 14:20:36] /data/www/ CREATE f6.txt
[2020-08-30 14:20:36] /data/www/ ATTRIB f6.txt
[2020-08-30 14:20:36] /data/www/ CREATE f7.txt
[2020-08-30 14:20:37] /data/www/ ATTRIB f7.txt
[2020-08-30 14:20:37] /data/www/ CREATE f8.txt
[2020-08-30 14:20:37] /data/www/ ATTRIB f8.txt
[2020-08-30 14:20:37] /data/www/ CREATE f9.txt
[2020-08-30 14:20:37] /data/www/ ATTRIB f9.txt
[2020-08-30 14:20:37] /data/www/ CREATE f10.txt
[2020-08-30 14:20:37] /data/www/ ATTRIB f10.txt
同步成功
五、使用iptable实现: 放行telnet, ftp, web服务,放行samba服务,其他端口服务全部拒绝
iptables -I INPUT -s 172.16.31.0/24 -p tcp -m multiport --dports 20,21,23,80,139,445 -j ACCEPT
iptables -A INPUT -j drop #其他入站都drop