第十八周作业
1、实现基于MYSQL验证的vsftpd虚拟用户访问
1️⃣环境准备,一台虚拟机作为FTP服务器,另一台做数据库服务器
数据库服务器(centos8)上安装并启动:
yum install -y mariadb-server
systemctl start mariadb-server
FTP服务器(centos7)上安装vsftpd和pam_mysql:
centos7无对应rpm包,需手动编译安装(centos6的pam_mysql由epel源提供)
安装开发包组:yum -y groupinstall "Development Tools"
yum install -y mariadb-devel pam-devel vsftpd
可能还需要安装gcc-c++、gcc
2️⃣编译安装pam_mysql
下载:http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
tar xvf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1/
./configure --with-pam-mods-dir=/lib64/security/
make && make install
3️⃣在数据库服务器上创建虚拟用户账号
建立存储虚拟用户数据库和连接的数据库用户:
MariaDB [(none)]> create database vsftpd;
MariaDB [(none)]> grant select on vsftpd.* to vsftpd@'192.168.9.%' identified by 'centos';
准备相关表:
MariaDB [(none)]> use vsftpd;
MariaDB [vsftpd]> show tables;
MariaDB [vsftpd]> CREATE TABLE users ( -> id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, -> name CHAR(50) BINARY NOT NULL, -> password CHAR(48) BINARY NOT NULL -> );
测试成功:
添加虚拟用户(为了安全应该使用PASSWORD函数加密密码)
MariaDB [vsftpd]> insert users (name,password) value('xiaoli',password('123456'));
MariaDB [vsftpd]> insert users (name,password) value('xiaobai',password('654321'));
4️⃣在FTP服务器上配置vsftpd服务
在FTP服务器上建立pam认证所需文件
在/etc/pam.d/下创建vsftpd.mysql
auth required pam_mysql.so user=vsftpd passwd=centos host=192.168.9.105 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=centos host=192.168.9.105 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
- 配置字段说明
auth 表示认证
account 验证账号密码正常使用
required 表示认证要通过
pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝对路径;后面为给此模块传递的参数
user=vsftpd 登录mysql的用户
passwd=magedu 登录mysql的的密码
host=mysqlserver mysql服务器的主机名或ip地址
db=vsftpd 指定连接msyql的数据库名称
table=users 指定连接数据库中的表名
usercolumn=name 当做用户名的字段
passwdcolumn=password 当做用户名字段的密码
crypt=2 密码的加密方式为mysql password()函数加密
建立相应用户和修改vsftpd配置文件,使其识别mysql认证
建立虚拟用户映射的系统用户和对应目录:
useradd -d /data/ftproot -s /sbin/nologin vuser
chmod 555 /data/ftproot/
#根目录不能有写权限
mkdir /data/ftproot/upload
#创建一个上传文件夹
setfacl -m u:vuser:rwx /data/ftproot/upload
#给读写执行权限
在/etc/vsftpd/vsftpd.conf下新增以下两行:
guest_enable=YES
guest_username=vuser
⚠修改了pam_service_name=vsftpd,原系统用户无法登陆
5️⃣重启vsftpd服务,进行ftp连接测试
systemctl restart vsftpd
6️⃣在FTP服务器上配置虚拟用户具有不同的访问权限(vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可)
/etc/vsftpd/vsftpd.conf文件下指定路径为:user_config_dir=/etc/vsftpd/vusers.d/
设置小丽具有上传权限(只读为NO):
mkdir /etc/vsftpd/vusers.d/
vim /etc/vsftpd/vusers.d/xiaoli
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
重启服务并测试:
7️⃣登录目录改变至指定的目录
同上一步,创建xiaobai单独的配置文件并写入:local_root=/data/ftproot2
2、通过NFS实现服务器/www共享访问
1️⃣环境准备,NFS服务器(centos7,192.168.9.103),客户端(centos8,192.168.9.105)
在NFS服务器上安装nfs-utils和rpcbind服务(其中rpcbind用来传输协商网络协议号)
启动rpc和nfs服务systemctl start rpcbind
systemctl start nfs-server
2️⃣配置NFS共享/www目录
mkdir /data/www
/data/www 192.168.9.105(rw,root_squash,all_squash)
/www目录共享给192.168.9.105主机,并且以只读/压榨所有用户权限方式共享
3️⃣重启nfs-server服务,showmount -e
查看共享目录
4️⃣将192.168.9.103/data/www共享目录挂载在192.168.9.105客户端的/mnt目录下
mount 192.168.9.103:/data/www /mnt/
5️⃣授权
denied表示需要nfs服务端为nfsnobody授权其对/data/www目录读写执行权限
setfacl -m u:nfsnobody:rwx /data/www/
6️⃣再次测试
👇autofs挂载规则
相对路径法(路径被分为父目录和子目录):
光盘挂载形式:mount /dev/sr0 /misc/cd(dirname=/misc,basename=cd)
在/etc/auto.master文件中存放挂载配置
/etc/auto.misc中配置格式如下
示例mount 192.168.9.103:/data/nfsdir1 /misc/nfs
将nfs -fstype=nfs,rw 192.168.9.103:/data/nfsdir1
写入/etc/auto.misc中,即可通过cd /misc/nfs
命令自动挂载
示例mount 192.168.9.103:/data/iii /home/iii
vim /etc/auto.home
,写入iii -fstype=nfs,rw 192.168.9.103:/home/iii
(支持通配符* -fstype=nfs,rw 192.168.9.103:/home/&
),在/etc/auto.master文件中写入/iii /etc/auto.home
(此例子👆用相对路径挂载会失效,因其由父目录/misc决定规则auto.misc)
绝对路径法:
示例mount 192.168.9.103:/data/iii /home/iii
vim /etc/auto.master
写入/- /etc/auto.test
vim /etc/auto.test
写入详细全路径iii -fstype=nfs,rw 192.168.9.103:/home/iii
3、配置samba共享,实现/www目录共享
1️⃣环境准备,samba服务器(centos7,192.168.9.103),客户端(centos8,192.168.9.105)
服务器安装yum install -y samba
2️⃣配置samba共享/www目录
mkdir /data/www
vim /etc/samba/smb.conf
#添加以下内容
[share]
comment = share /data/www
path = /data/www
read only = no
create mask =0664
directory mask = 0775
testparm
验证文件是否OK
3️⃣启动服务systemctl start smb
,在客户端使用smbclient查看是否能够看到smb服务端共享的目录
smbclient -L \\192.168.9.103
4️⃣在服务器上添加一个samba账户
[root@centos7 backup]#useradd -s /sbin/nologin tom
[root@centos7 backup]#smbpasswd -a tom
New SMB password:
Retype new SMB password:
Added user tom.
[root@centos7 backup]#pdbedit -L
tom:1010:
5️⃣在客户端192.168.9.105上用新建的用户去连接samba服务
smbclient //192.168.9.103/share -U tom%centos
6️⃣在服务器上授权tom用户可以对/www目录有读写执行权限
setfacl -m u:tom:rwx /data/www/
7️⃣测试
4、使用rsync+inotify实现/www目录实时同步
1️⃣环境准备,服务器(centos7,192.168.9.103),客户端(centos8,192.168.9.105)
两边都安装yum install -y inotify-tools
2️⃣配置rsync服务,让其工作为守护进程模式
vim /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
host allow = 192.168.9.0/24
[backup]
path = /data/backup/
comment = share backup
read only = no
auth users = jerry
secrets file = /etc/rsync.pass
3️⃣新建/backup目录和/etc/rsync.pass文件,并且配置一个用户和密码用于rsync同步
[root@centos7 ~]#mkdir /data/backup
[root@centos7 ~]#ll /data/backup
total 0
[root@centos7 ~]#echo "jerry:centos" > /etc/rsync.pass
[root@centos7 ~]#cat /etc/rsyncd.pass
jerry:centos
[root@centos7 ~]#chmod 600 /etc/rsync.pass
注:rsync.pass文件用于存放rsync同步数据时用到的用户和密码,这个文件的格式是用户名:密码,这些都是明文的,为了其内容的安全,通常我们把其权限设置为非root用户不可读写的权限
4️⃣启动rsync服务rsync --daemon
5️⃣客户端上创建用于rsync服务器上的用户对应的密码文件和创建/www目录
[root@CentOS8 ~]$echo "centos" > /etc/rsync.pass
[root@CentOS8 ~]$chmod 600 /etc/rsync.pass
[root@CentOS8 ~]$cat /etc/rsync.pass
centos
[root@CentOS8 ~]$mkdir /data/www
6️⃣客户端测试同步数据
rsync -avz --password-file=/etc/rsync.pass /etc/fstab jerry@192.168.9.103::backup
7️⃣在客户端上编写脚本,实现实时监控/www目录下的资源,如有变动,立刻同步至rsync服务器对应的目录下
vim inotify_rsync.sh
#!bin/bash
SRC='/data/www/'
DEST='jerry@192.168.9.103::backup'inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} |while read DATE TIME DIR FILE;do
FILEPATH=${DIR}${FILE}
rsync -az --delete --password-file=/etc/rsync.pass $SRC $DEST && echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >> /var/log/changelist.log
done
8️⃣测试
服务器192.168.9.103:/backup目录为空
运行192.168.9.105客户端上脚本bash inotify_rsync.sh
,并在客户端/www下创建test4.txt文件
查看192.168.9.103的/backup是否同步
5、使用iptable实现:放行telnet,ftp,web服务,放行samba服务,其他端口服务全部拒绝
#ftp被动模式无法确定端口,还需添加连接跟踪模块modprobe nf_conntrack_ftp
#跟踪模块路径:/lib/modules/kernelversion/kernel/net/netfilter
#vim /etc/sysconfig/iptables-config
#IPTABLES_MODULES= "nf_conntrack_ftp"
#[root@centos7 ~]#modproble nf_conntrack_ftp
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 20:21,23,80,445,139 -m state --state NEW -j ACCEPT
iptables -A INPUT -p udp -m multiport --dports 137,138 -m state --state NEW -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT-j DROP