Linux学习作业---第十八周(8.24-8.30)

一、实现基于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、验证


image.png
image.png

ftp1用户可以上传


image.png

image.png

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


image.png

四、使用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

你可能感兴趣的:(Linux学习作业---第十八周(8.24-8.30))