......三种共享方式及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 可见防火墙内容
本文介绍通过VSFTPD、NFS、Samba等多种方式实现文件共享的方法,并使用rsync结合inotify实现实时同步。此外,还展示了如何配置iptables以放行特定服务。
465

被折叠的 条评论
为什么被折叠?



