震惊君的Linux之旅 ------ 网络文件共享与防火墙

本文介绍通过VSFTPD、NFS、Samba等多种方式实现文件共享的方法,并使用rsync结合inotify实现实时同步。此外,还展示了如何配置iptables以放行特定服务。

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

192.168.37.7:FTP服务器

  • yum install vsftpd ftp
  • 编译安装 pam_mysql

192.168.37.17:数据库服务器

  • yum install mariadb-server

1)FTP服务器:安装所需要的包

yum install gcc gcc-c++ pam-devel mariadb-devel

编译安装 pam_mysql
tar xvf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1/
./configure --with-pam-mods-dir=/lib64/security --with-mysql=/usr --with-pam=/usr
make 
make install

ls /lib64/security/ | grep pam_mysql.so		#确认该模块有无安装成功

2)数据库服务器:创建虚拟用户账号

1、安装mysql服务器,并创建数据库
yum install mariadb-server

create database vsftpd;
show databases;

2、创建存放虚拟用户的表
use vsftpd;
CREATE TABLE users (						
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
name CHAR(50) BINARY NOT NULL,
password CHAR(48) BINARY NOT NULL
);
desc users;

3、添加虚拟用户
INSERT INTO users(name,password) values('ftpuser1',password('magedu'));		#password()要加,避免密码为明文
INSERT INTO users(name,password) values('ftpuser2',password('magedu'));
select * from users;
+----+----------+-------------------------------------------+
| id | name     | password                                  |
+----+----------+-------------------------------------------+
|  2 | ftpuser1 | *6B8CCC83799A26CD19D7AD9AEEADBCD30D8A8664 |
|  3 | ftpuser2 | *6B8CCC83799A26CD19D7AD9AEEADBCD30D8A8664 |
+----+----------+-------------------------------------------+

4、创建一个数据库用户(仅用于查询)
grant SELECT on vsftpd.* to vsftpd@'192.168.37.%' identified by 'centos';
mysql -uvsftpd -pcentos -h192.168.37.17		#测试一下是否可以登录

3)FTP服务器:配置vsftpd服务

1、建立pam认证文件
vim /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so user=vsftpd passwd=centos host=192.168.37.17 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2			#crypt=2表示使用的是mysql password()加密方式
account required pam_mysql.so user=vsftpd passwd=centos host=192.168.37.17 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

2、启用vsftpd.mysql文件,并建立虚拟用户映射的系统用户及其对应的目录
useradd -s /sbin/nologin -d /var/ftproot vuser		#创建系统用户
chmod 555 /var/ftproot 								#去除ftp根目录的写权限
mkdir /var/ftproot/{upload,pub}						#创建子目录用于上传
setfacl –m u:vuser:rwx /var/ftproot/upload			

vim /etc/vsftpd/vsftpd.conf
添加:
guest_enable=YES
guest_username=vuser

修改:
pam_service_name=vsftpd.mysql

重启生效
systemctl restart vsftpd 							

4)使用虚拟用户ftpuser1、ftpuser2分别进行登录测试

>ftp 192.168.37.7
Connected to 192.168.37.7 (192.168.37.7).
220 (vsFTPd 3.0.2)
Name (192.168.37.7:root): ftpuser2
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 (192,168,37,7,21,112).
150 Here comes the directory listing.
drwxr-xr-x    2 0        0               6 Mar 09 13:00 pub
drwxrwxr-x    2 0        0              34 Mar 09 09:10 upload
226 Directory send OK.

>ftp 192.168.37.7
Connected to 192.168.37.7 (192.168.37.7).
220 (vsFTPd 3.0.2)
Name (192.168.37.7:root): ftpuser1
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 (192,168,37,7,113,173).
150 Here comes the directory listing.
drwxr-xr-x    2 0        0               6 Mar 09 13:00 pub
drwxrwxr-x    2 0        0              34 Mar 09 09:10 upload
226 Directory send OK.

5)配置不用虚拟用户拥有不同的权限

mkdir /etc/vsftpd/vusers.d

vim /etc/vsftpd/vsftpd.conf
添加:
user_config_dir=/etc/vsftpd/vusers.d

分别创建对应虚拟用户的配置文件,并自行设定权限即可
cd /etc/vsftpd/vusers.d/
vim ftpuser1 
...
vim ftpuser2
...

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

1)配置共享目录/www

1、安装nfs服务包
yum install nfs-utils rpcbind
systemctl start nfs

2、配置共享列表
mkdir /www
vim /etc/exports
添加:
/www	*(rw)			#rw:可读可写,*:所有都可以连接

exportfs -r				#生效配置
exportfs -v				#查询共享目录的列表和信息

3、由于权限压榨的原因,远程主机的root用户会映射为nfsnobody用户,所以要实现对共享目录的增删改还需修改其权限
setfacl -m u:nfsnobody:rwx /www

2)选择一台远程主机挂载并测试是否有效

1、远程主机挂载(37.17)
mkdir /mnt/nfs
mount 192.168.37.7:/www /mnt/nfs

df -h		
192.168.37.7:/www           100G  5.4G   95G   6% /mnt/nfs

2、建个文件看是否成功
cp /etc/fstab /mnt/nfs/f1.txt

(37.7)
ll /www
-rw-r--r-- 1 nfsnobody nfsnobody 595 Mar 10 16:14 f1.txt

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

1)配置samba服务器端(37.7)

1、安装相关包
yum install samba samba-common
systemctl start smb.service

2、创建samba账号(需先创建一个系统账号)
useradd -s /sbin/nologin smbuser1
smbpasswd -a smbuser1				#设定密码
pdbedit -L							#可见已生成,-Lv:详细信息

3、共享/www
mkdir /www
touch /www/smb1.txt					#用于过一会测试
setfacl -m u:smbuser1:rwx /www		#设定权限使其可用于上传

vim /etc/samba/smb.conf
添加:
[share1]
    comment = share dict			#注释添加
    path = /www						#共享的目录
    writeable = Yes					#打开可写
    valid users = smbuser1 			#允许访问该目录的用户,若空则允许所有

systemctl restart smb nmb

2)配置客户端(37.17),并测试

1、安装相应包
yum install samba-client cifs-utils

2、查看共享目录有无生成
>smbclient -L 192.168.37.7 
Enter SAMBA\root's password: 
Anonymous login successful

	Sharename       Type      Comment
	---------       ----      -------
	print$          Disk      Printer Drivers
	share1          Disk      share dict /www		#见此行内容
	IPC$            IPC       IPC Service (Samba 4.10.16)
Reconnecting with SMB1 for workgroup listing.
Anonymous login successful

	Server               Comment
	---------            -------

	Workgroup            Master
	---------            -------
	SAMBA                

>smbclient //192.168.37.7/share1 -U smbuser1
Enter SAMBA\smbuser1’s password: 
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Wed Mar 10 21:11:56 2021
  ..                                  D        0  Wed Mar 10 21:11:42 2021
  smb1.txt                            N        0  Wed Mar 10 21:11:56 2021

104806400 blocks of size 1024. 99148808 blocks available
可见已成功生成

3、挂载(临时挂载,永久则写入/etc/fstab文件,文件类型:cifs)
mkdir /mnt/smbshare
mount -o username=smbuser1,password=xxx //192.168.37.7/share1 /mnt/smbshare			#若客户端为centos6,则还要加sec=ntlmssp选项

df -h 
显示结果即可,此时该文件中的增改删也是可以的~

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

1)通过intify+rsync的自制脚本来实现

1、远程目标37.17
mkdir /backup
yum insyall rsyncd

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
hosts allow = 192.168.37.0/24
[backup]
path = /backup/
comment = backup
read only = no
auth users = rsyncuser
secrets file = /etc/rsync.pass			#用来放密码的文件

echo "rsyncuser:magedu" > /etc/rsync.pass
chmod 600 /etc/rsync.pass
systemctl restart rsyncd

2、本地37.7
yum install inotify-tools
mkdir /www

echo 'magedu' > /etc/rsync.pass
chmod 600 /etc/rsync.pass

vim inotify_rsync.sh
#!/bin/bash
SRC='/www/'				#注意,若写为/www会连改文件一同同步,而非仅同步目录下文件
DEST='rsyncuser@192.168.37.17::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

2)测试结果

1、本机37.7
bash inotify_rsync.sh

开另一个会话窗口,增删改/www中的文件,可见/var/log/changelist.log中的日志变化

2、远程37.17
ll /backup

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

1、添加“执行”内容
其中:
	23:telnet (yum install telnet-server telnet)
	ftp被动模式下是双端口, 一个传数据:随机端口,一个传命令:21
	80:httpd
	139,445:samba
	
iptables -A INPUT -p tcp -m multiport --dports 23,21,80,139,445 -j ACCEPT

iptables -I INPUT 1 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT			#针对ftp服务的随机端口,否则无法获得数据

2、添加“全拒绝”
iptables -A INPUT -j REJECT

iptables -vnL 可见防火墙内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值