linux的多种文件共享方式和iptables

一、实现基于MYSQL验证的vsftpd虚拟用户访问。

1、需要两台主机,vsftpd主机使用centos7,数据库主机使用centos8+mariadb。

2、安装marindb,由于mysql8取消了password()函数,本实验不能使用。

[root@mariadb ~]#yum install mariadb-server
[root@mariadb ~]#systemctl enable --now mariadb
Created symlink /etc/systemd/system/mysql.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/mysqld.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/system/mariadb.service.

3、在数据库服务上配置数据库支持vsftpd服务。

#建立存储虚拟用户数据库和表MariaDB [(none)]> CREATE DATABASE vsftpd;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> USE vsftpd;
Database changed
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
    -> );
Query OK, 0 rows affected (0.004 sec)

#添加虚拟用户,为了安全应该使用PASSWORD函数加密其密码后存储
MariaDB [vsftpd]> INSERT INTO users(name,password) values('ftp1',password('654321')),('ftp2',password('654321'));
Query OK, 2 rows affected (0.003 sec)
Records: 2  Duplicates: 0  Warnings: 0

#创建连接的数据库用户
MariaDB [vsftpd]>  GRANT SELECT ON vsftpd.* TO vsftpd@'10.0.0.%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.001 sec)
MariaDB [vsftpd]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.001 sec)

4、 在FTP服务器上安装vsftpd 和 pam_mysql包。

#安装vsftp和编译安装相关软件包。
[root@vsftp ~]#yum -y install vsftpd gcc gcc-c++ make mariadb-devel pam-devel
#下载pam-mysql编译安装,pam-mysql不支持cengos8。
[root@vsftp ~]#wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
[root@vsftp ~]#tar xvf pam_mysql-0.7RC1.tar.gz
[root@vsftp ~/pam_mysql-0.7RC1]#./configure --with-pam-mods-dir=/lib64/security
[root@vsftp ~/pam_mysql-0.7RC1]#make install
[root@vsftp ~/pam_mysql-0.7RC1]#ll /lib64/security/pam_mysql*
-rwxr-xr-x 1 root root    882 Jan 11 11:08 /lib64/security/pam_mysql.la
-rwxr-xr-x 1 root root 141768 Jan 11 11:08 /lib64/security/pam_mysql.so

5、在FTP服务器上建立pam认证所需文件,连接数据库的信息要和前面设置的一致。

[root@vsftp ~/pam_mysql-0.7RC1]#vim /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so user=vsftpd passwd=123456 host=10.0.0.78 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=123456 host=10.0.0.78 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

6、建立相应用户和修改vsftpd配置文件。

#创建虚拟用户映射的系统用户及对应的目录,ftp根目录不能有写权限,否则无法登陆
[root@vsftp ~/pam_mysql-0.7RC1]#useradd -s /sbin/nologin -d /data/ftproot -r vuser
[root@vsftp ~/pam_mysql-0.7RC1]#mkdir -p /data/{ftproot,ftproot2}/upload
[root@vsftp ~/pam_mysql-0.7RC1]#setfacl -m u:vuser:rwx /data/ftproot/upload
[root@vsftp ~/pam_mysql-0.7RC1]#setfacl -m u:vuser:rwx /data/ftproot2/upload
[root@vsftp ~/pam_mysql-0.7RC1]#vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
#添加下面两项
guest_enable=YES
guest_username=vuser
#修改下面一项,原系统用户无法登录
pam_service_name=vsftpd.mysql
#添加下面一项、配置vsftpd为虚拟用户使用配置文件目录
user_config_dir=/etc/vsftpd/conf.d/

7、在FTP服务器上配置虚拟用户具有不同的访问权限。

#创建所需要目录,并为虚拟用户提供配置文件
[root@vsftp ~]#mkdir /etc/vsftpd/conf.d/
#创建和ftp1用户同名的文件
[root@vsftp ~]#vim /etc/vsftpd/conf.d/ftp1
#选项并设置为YES代表具有写权限
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
#ftp1登录根目录改变为/data/ftproot2
local_root=/data/ftproot2

8、启动服务。

[root@vsftp ~]#systemctl enable --now vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.

9、测试一下。

#ftp1的根目录里创建一个文件
[root@vsftp ~]#touch  /data/ftproot2/ftp1.txt
#用ftp1账号访问,进入了ftp1单独的目录,并且具有写权限。
[root@centos8 ~]#ftp 10.0.0.57
Connected to 10.0.0.57 (10.0.0.57).
220 (vsFTPd 3.0.2)
Name (10.0.0.57:root): ftp1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (10,0,0,57,161,50).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               0 Jan 11 09:06 ftp1.txt
drwxrwxr-x    2 0        0               6 Jan 11 08:54 upload
226 Directory send OK.
ftp> cd upload
250 Directory successfully changed.
ftp> put test.txt
local: test.txt remote: test.txt
227 Entering Passive Mode (10,0,0,57,209,93).
150 Ok to send data.
226 Transfer complete.
ftp> ls
227 Entering Passive Mode (10,0,0,57,79,45).
150 Here comes the directory listing.
-rw-------    1 996      994             0 Jan 11 09:17 test.txt
226 Directory send OK.
ftp> 

二、通过NFS实现服务器/www共享访问。

1、nfs主机安装nfs软件包并启动服务。

[root@nfs ~]#yum install nfs-utils
[root@nfs ~]#systemctl enable --now nfs-server.service

2、创建需要共享的目录。

[root@nfs ~]#mkdir /www

3、配置nfs服务,/etc/exports文件里写入目录路径和可以访问的地址及权限。

[root@nfs ~]#vim /etc/exports
/www        10.0.0.0/24(rw,no_root_squash)
[root@nfs ~]#exportfs –r

4、客户端安装nfs软件包,无需启动服务。

[root@master ~]#yum install nfs-utils

5、客户端使用showmount查看nfs服务器上的共享内容。

[root@master ~]#showmount -e 10.0.0.78
Export list for 10.0.0.78:
/www 10.0.0.0/24

6、客户端创建/www目录,挂载nfs服务器的/www。

[root@master ~]#mkdir /www
[root@master ~]#mount  10.0.0.78:/www/ /www
#创建一个文件,到nfs服务器查看文件已创建成功
[root@master ~]#touch /www/test.txt
[root@nfs ~]#ll /www
总用量 0
-rw-r--r-- 1 root root 0 1月  11 17:59 test.txt

7、设置开机挂载。

[root@master ~]#umount /www
#fastab文件添加以下行
[root@master ~]#vim /etc/fstab
10.0.0.78:/www                  /www          nfs     _netdev         0 0 

8、执行mount -a重新挂载,测试效果。

[root@master ~]#ls /www
[root@master ~]#mount -a
[root@master ~]#ls /www
test.txt

三、配置samba共享,实现/www目录共享。

1、本实验使用两台centos8主机。

2、在samba服务器上安装samba软件包。

[root@samba ~]#yum -y install samba

3、创建samba系统账户和组,使用smbpasswd -a添加为samba用户并设置密码。

#注意不要用-r 设为系统用户,因为不会生成家目录
[root@samba ~]#groupadd -r admins
[root@samba ~]#useradd -s /sbin/nologin -G admins smb1
[root@samba ~]#useradd -s /sbin/nologin -G admins smb2
[root@samba ~]#smbpasswd -a smb1
New SMB password:
Retype new SMB password:
Added user smb1.
[root@samba ~]#smbpasswd -a smb2
New SMB password:
Retype new SMB password:
Added user smb2.

4、创建需要共享的目录,并给samba用户和组设置权限。

[root@samba ~]#mkdir /www
[root@samba ~]#setfacl -m u:smb1:rwx,g:admins:rwx /www/
[root@samba ~]#mkdir wordpress
[root@samba ~]#touch index.html

4、修改/etc/samba/smb.conf配置文件。

[root@samba /www]#vim /etc/samba/smb.conf
#添加以下内容
[www]
        path = /www
        valid users = smb1,@admins
        writeable = yes
        browseable = yes

5、启动samba服务.

[root@samba ~]#systemctl enable --now  smb
Created symlink /etc/systemd/system/multi-user.target.wants/smb.service → /usr/lib/systemd/system/smb.service.

6、客户端安装软件包,cifs-utils是挂载功能使用的。

yum install samba-client cifs-utils

7、客户端访问samba服务端。

#查看samba共享资源列表
[root@centos8 ~]#smbclient -L 10.0.0.88 -U smb1%123456

	Sharename       Type      Comment
	---------       ----      -------
	print$          Disk      Printer Drivers
	www             Disk      
	IPC$            IPC       IPC Service (Samba 4.12.3)
	smb1            Disk      Home Directories
SMB1 disabled -- no workgroup available

#访问共享文件
[root@centos8 ~]#smbclient //10.0.0.88/www -U smb1%123456
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Tue Jan 12 21:30:53 2021
  ..                                  D        0  Tue Jan 12 21:02:22 2021
  index.html                          N        0  Tue Jan 12 21:25:23 2021
  wordpress                           D        0  Tue Jan 12 21:30:53 2021

		104806400 blocks of size 1024. 100041656 blocks available
smb: \> 

8、为方便使用共享资源,把samba共享目录挂载到本机。

[root@centos8 ~]#mount //10.0.0.88/www /www -o username=smb2,password=123456
[root@centos8 ~]#touch test.txt
[root@centos8 ~]#ls /www
index.html  test.txt  wordpress  

9、使用开机自动挂载。

[root@centos8 ~]#umount /www
[root@centos8 ~]#vim /etc/fstab
//10.0.0.88/www      /www         cifs       cred=/etc/smb.txt    0 0

#密码单独保存在/etc/smb.txt文件中
vim /etc/smb.txt
user=smb1
pass=123456
[root@centos8 ~]#chomd 600 /etc/smb.txt
[root@centos8 ~]#mount -a
[root@centos8 ~]#ls /www
index.html  wordpress

8、使用windows访问samba服务器

四、使用rsync+inotify实现/www目录实时同步。

1、本实验使用两台centos8主机。

2、创建需要同步的文件夹,给nobody添加权限,使rsync可以写入。

[root@baksrv ~]#mkdir /www
[root@baksrv ~]#setfacl -m u:nobody:rwx /www

3、备份端安装rsync和rsync-daemon软件包。

[root@baksrv ~]#yum -y install rsync-daemon rsync
[root@baksrv ~]#systemctl enable --now rsyncd
Created symlink /etc/systemd/system/multi-user.target.wants/rsyncd.service → /usr/lib/systemd/system/rsyncd.service.

4、备份端创建rsync配置文件。

[root@baksrv ~]#vim /etc/rsyncd.conf
uid = root
gid = root
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
[www]
path = /www/  
comment = backup dir 
read only = no
auth users = rsyncuser
secrets file = /etc/rsync.pass

5、备份端创建授权登录用户的密码文件并修改权限。

[root@baksrv ~]#echo "rsyncuser:123456" > /etc/rsync.pass
[root@baksrv ~]#chmod 600 /etc/rsync.pass

6、备份端重启服务。

[root@baksrv ~]#systemctl restart rsyncd

7、数据端创建登录用户密码文件,必须修改权限。

[root@datasrv ~]#echo "123456"> /etc/rsync.pass
[root@datasrv ~]#chmod 600 /etc/rsync.pass

8、数据端创建文件夹,创建测试文件。

[root@datasrv /www]#touch /www/{1..10}.txt
[root@datasrv /www]#ls
10.txt  1.txt  2.txt  3.txt  4.txt  5.txt   6.txt  7.txt  8.txt  9.txt

9、数据端执行同步指令。

[root@datasrv /www]#rsync -avz --delete --password-file=/etc/rsync.pass /www/ rsyncuser@10.0.0.78::www
sending incremental file list
./
1.txt
10.txt
2.txt
3.txt
4.txt
5.txt
6.txt
7.txt
8.txt
9.txt

sent 598 bytes  received 209 bytes  1,614.00 bytes/sec
total size is 0  speedup is 0.00

10、备份端查看是否备份成功。

[root@baksrv /www]#ls
10.txt  1.txt  2.txt  3.txt  4.txt  5.txt  666  6.txt  7.txt  8.txt  9.txt

11、数据端安装inotify-tools软件包。

[root@datasrv ~]#yum -y install inotify-tools

12、数据端创建inotify_rsync.sh脚本,注意: 此脚本执行前先确保两主机初始数据处于同步状态,此脚本实现后续的数据同步。

#!/bin/bash
SRC='/www/'
DEST='rsyncuser@10.0.0.78::www'
rpm -q rsync &> /dev/null || yum -y install rsync
rpm -q inotify-tools &> /dev/null || yum -y install inotify-tools
{
inotifywait -mrq --exclude=".*\.swp" --timefmt '%Y-%m-%d %H:%M:%S' --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
}&

13、数据端执行脚本即可实时同步数据,使用nohup可以使脚本持续运行,即使退出终端窗口也不会停止。

[root@datasrv ~]#nohup bash inotify_rsync.sh 

14、把此脚本作为服务执行。

[root@datasrv ~]#vim /usr/lib/systemd/system/bak.service
[Unit]
Description=autobak
After=network.target
[Service]
Type=forking
ExecStart=/root/inotify_rsync.sh
ExecStop=/bin/kill -s QUIT ${MAINPID}
[Install]
WantedBy=multi-user.target

[root@datasrv ~]#systemctl enable --now bak
Created symlink /etc/systemd/system/multi-user.target.wants/bak.service → /usr/lib/systemd/system/bak.service.

reboot

15、重启后脚本已经在后台监控,无需手工执行了。

[root@datasrv ~]#systemctl status bak
● bak.service - autobak
   Loaded: loaded (/usr/lib/systemd/system/bak.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2021-01-12 18:43:40 CST; 36min ago
 Main PID: 1572 (inotify_rsync.s)
    Tasks: 3 (limit: 12337)
   Memory: 1.8M
   CGroup: /system.slice/bak.service
           ├─1572 /bin/bash /root/inotify_rsync.sh
           ├─1573 inotifywait -mrq --exclude=.*\.swp --timefmt %Y-%m-%d %H:%M:%S --format %T %w %f -e create,delete,moved_to,close_write,attrib /www/
           └─1574 /bin/bash /root/inotify_rsync.sh

Jan 12 18:43:40 backup systemd[1]: Starting autobak...
Jan 12 18:43:40 backup systemd[1]: Started autobak.

五、使用iptable实现: 放行telnet, ftp, web服务,放行samba服务,其他端口服务全部拒绝。

1、设置ftp服务被动模式的端口号范围,可根据实际需要调整范围,以便添加防火墙规则。

[root@centos ~]# vim /etc/vsftpd/vsftpd.conf
#添加以下内容
pasv_enable=YES
pasv_min_port=60000
pasv_max_port=60100
[root@wjcentos home]# systemctl restart vsftpd.service

2、设置防火墙规则。

[root@centos ~]#iptables -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@centos ~]#iptables -A INPUT -p tcp --dport 60000:60100 -j ACCEPT 
[root@centos ~]#iptables -A INPUT -p tcp -m multiport --dports  80,443,20,21,23,139,445  -j ACCEPT
[root@centos ~]#iptables -A INPUT -p udp -m multiport --dports 137,138 -j ACCEPT
[root@centos ~]#iptables -A INPUT -j DROP


#持久化保存规则
[root@centos ~]#yum install iptables-services
[root@centos ~]#systemctl enable --now  iptables.service 
Created symlink /etc/systemd/system/multi-user.target.wants/iptables.service → /usr/lib/systemd/system/iptables.service.
[root@centos ~]#iptables-save > /etc/sysconfig/iptables
posted @ 2021-01-17 16:17  IT乐乐  阅读(199)  评论(1)    收藏  举报