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

浙公网安备 33010602011771号