N43-第十八周作业

本文详细介绍了如何在Linux环境中配置基于MYSQL验证的vsftpd虚拟用户访问,通过NFS实现服务器/www共享,配置samba共享,使用rsync+inotify实现目录实时同步,并利用iptables设定网络访问策略。每部分均包含步骤详解和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


 

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️⃣再次测试

在这里插入图片描述

注:可用指定uid,gid(anonuid=1000,anongid=1000,all_squash)压榨所有用户包括root在内为1000实现数据漫游

👇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

在这里插入图片描述

注:新建的tom用户在客户端操作没有上传权限,只有下载权限。这是因为samba虽然指定了共享目录可写,但是对于tom用户在服务端上的文件系统没有授权为可写,所以tom用户暂时没法上传,需要上传文件我们就必须要对其文件系统赋予tom用户有写的权限

 
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值