1次绘、實(shí)現(xiàn)基于MYSQL驗(yàn)證的vsftpd虛擬用戶訪問
- 實(shí)驗(yàn)環(huán)境
主機(jī) | os | 軟件 | ip |
---|---|---|---|
vsftp服務(wù)器 | centos7.6 | vsftpd pam_mysql | 172.16.2.137 |
mysql服務(wù)器 | centos7.6 | mariadb-server | 172.16.2.138 |
- mysql服務(wù)器配置
安裝啟動(dòng)mysql服務(wù)
[root@node4 ~]# yum install -y mariadb-server
[root@node4 ~]# systemctl start mariadb
創(chuàng)建vsftp所需數(shù)據(jù)庫沫换、表,生成連接mysql用戶
[root@node4 ~]# mysql
# 新建數(shù)據(jù)庫
MariaDB [(none)]> create database vsftpd;
Query OK, 1 row affected (0.00 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.06 sec)
# 表中錄入數(shù)據(jù)(ftp用戶及密碼)
MariaDB [vsftpd]> insert users (name,password) value('ftpuser1',password('centos'));
Query OK, 1 row affected (0.02 sec)
MariaDB [vsftpd]> insert users (name,password) value('ftpuser2',password('magedu'));
Query OK, 1 row affected (0.01 sec)
# 生成連接mysql用戶
MariaDB [vsftpd]> grant select on vsftpd.users to vsftpd@'172.16.2.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
- ftp服務(wù)端配置
安裝編譯所需軟件及vsftpd
yum -y groupinstall "Development Tools"
yum -y install mariadb-devel pam-devel vsftpd
編譯安裝pam_mysql
[root@node3 ~]# tar xvf pam_mysql-0.7RC1.tar.gz
[root@node3 ~]# cd pam_mysql-0.7RC1/
[root@node3 pam_mysql-0.7RC1]# ./configure --with-pam-mods-dir=/lib64/security/
[root@node3 pam_mysql-0.7RC1]# make && make install
準(zhǔn)備ftp目錄
[root@node3 /]# mkdir -p /data/ftproot/upload
[root@node3 /]# mkdir -p /data/ftproot/upload
[root@node3 /]# chmod 555 /data/ftproot //去掉目錄寫權(quán)限
[root@node3 /]# setfacl -m u:vuser:rwx/data/ftproot/upload //針對(duì)vuser設(shè)置權(quán)限
編譯vsftpd配置文件
[root@node3 /]# vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd.mysql //指定pam認(rèn)證文件
guest_enable=YES
guest_username=vuser //指定用戶
user_config_dir=/etc/vsftpd/vusers.d/ //指定各用戶配置文件目錄
為不同的ftp用戶單獨(dú)配置各自的權(quán)限
[root@node3 /]# mkdir /etc/vsftpd/vusers.d/
[root@node3 /]# vim /etc/vsftpd/vusers.d/ftpuser1
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
[root@node3 /]# vim /etc/vsftpd/vusers.d/ftpuser2
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/data/ftproot2
為不同的ftp用戶準(zhǔn)備目錄
[root@node3 /]# mkdir /data/ftproot2
[root@node3 /]# chmod 555 /data/ftproot2
[root@node3 /]# mkdir /data/ftproot2/upload
[root@node3 /]# setfacl -m u:vuser:rwx /data/ftproot2/upload
新建pam認(rèn)證文件
[root@node3 /]# vim /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so user=vsftpd passwd=123456 host=172.16.2.138 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=123456 host=172.16.2.138 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
啟動(dòng)服務(wù)
[root@node3 /]# systemctl start vsftpd
- 測(cè)試:
使用客戶端登錄(使用不同用戶,上傳文件)
[root@node4 ~]# ftp 172.16.2.137
Connected to 172.16.2.137 (172.16.2.137).
220 (vsFTPd 3.0.2)
Name (172.16.2.137:root): ftpuser1
331 Please specify the password.
Password:
230 Login successful.
ftp> cd upload
250 Directory successfully changed.
ftp> put anaconda-ks.cfg
local: anaconda-ks.cfg remote: anaconda-ks.cfg
227 Entering Passive Mode (172,16,2,137,236,176).
150 Ok to send data.
226 Transfer complete.
1357 bytes sent in 0.00815 secs (166.44 Kbytes/sec)
ftp> ls
227 Entering Passive Mode (172,16,2,137,48,202).
150 Here comes the directory listing.
-rw------- 1 1000 1000 1357 Apr 25 15:25 anaconda-ks.cfg
226 Directory send OK.
[root@node4 ~]# ftp 172.16.2.137
Connected to 172.16.2.137 (172.16.2.137).
220 (vsFTPd 3.0.2)
Name (172.16.2.137:root): ftpuser2
331 Please specify the password.
Password:
230 Login successful.
ftp> cd upload
250 Directory successfully changed.
ftp> put anaconda-ks.cfg
local: anaconda-ks.cfg remote: anaconda-ks.cfg
227 Entering Passive Mode (172,16,2,137,83,141).
150 Ok to send data.
226 Transfer complete.
1357 bytes sent in 5.8e-05 secs (23396.55 Kbytes/sec)
ftp> ls
227 Entering Passive Mode (172,16,2,137,230,150).
150 Here comes the directory listing.
-rw------- 1 1000 1000 1357 Apr 25 15:31 anaconda-ks.cfg
226 Directory send OK.
在ftp服務(wù)端查看目錄,可以看到上傳至不同的目錄
[root@node3 pam_mysql-0.7RC1]# tree /data
/data
├── ftproot
│ └── upload
│ └── anaconda-ks.cfg
└── ftproot2
└── upload
└── anaconda-ks.cfg
2稚伍、通過NFS實(shí)現(xiàn)服務(wù)器/www共享訪問弯予。
- 實(shí)驗(yàn)環(huán)境
主機(jī) | os | 軟件 | ip |
---|---|---|---|
nfs服務(wù)端 | centos7.6 | nfs nfs-utils | 172.16.2.131 |
nfs客戶端 | centos7.6 | - | 172.16.2.132 |
- nfs服務(wù)端配置
安裝軟件
[root@node1 /]#yum install -y nfs-utils
新建共享目錄
[root@node1 /]#mkdir www
新建nfs所需用戶和組
[root@node1 /]#groupadd -g 600 nfsuser
[root@node1 /]#useradd -u 600 -g 600 -r nfsuser -s /sbin/nologin
設(shè)置共享目錄權(quán)限
[root@node1 /]# setfacl -m u:nfsuser:rwx /www
編輯nfs配置文件
[root@node1 /]# vim /etc/exports
/www 172.16.2.0/24(rw,all_squash,anonuid=600,anongid=600) 指定以nfsuser用戶共享
重載配置文件
[root@node1 /]# exportfs -r
查看當(dāng)前共享
[root@node1 /]# exportfs -v
/www 172.16.2.0/24(sync,wdelay,hide,no_subtree_check,anonuid=600,anongid=600,sec=sys,rw,root_squash,all_squash)
重啟服務(wù)
[root@node1 /]# systemctl restart nfs
[root@node1 /]# systemctl restart rpcbind
- nfs客戶端配置
查看nfs服務(wù)器當(dāng)前共享
[root@node2 ~]# showmount -e 172.16.2.131
Export list for 172.16.2.131:
/www 172.16.2.0/24
掛載共享目錄
[root@node2 /]# mkdir /nfsdir
[root@node2 /]# mount 172.16.2.131:/www /nfsdir
- 測(cè)試:
在客戶端新建文件
[root@node2 nfsdir]# touch test1.txt
[root@node2 nfsdir]# ls
test1.txt
在服務(wù)器端查看文件屬性(屬主為nfsuser)
[root@node1 /]# ll /www
總用量 0
-rw-r--r-- 1 nfsuser nfsuser 0 4月 24 23:01 test1.txt
3、配置samba共享个曙,實(shí)現(xiàn)/www目錄共享
- 實(shí)驗(yàn)環(huán)境
主機(jī) | os | 軟件 | ip |
---|---|---|---|
samba服務(wù)端 | centos7.6 | samba | 172.16.2.131 |
samba客戶端 | centos7.6 | cifs-utils | 172.16.2.132 |
- samba服務(wù)端配置
安裝Samba服務(wù)
[root@node1 ~]# yum install -y samba
新建Samba用戶
[root@node1 ~]# useradd -s /sbin/nologin smbuser
[root@node1 ~]# smbpasswd -a smbuser
New SMB password:
Retype new SMB password:
新建共享目錄,并設(shè)置權(quán)限
[root@node1 ~]# mkdir /www
[root@node1 ~]# chmod 777 /www
[root@node1 ~]# touch /www/smb1.txt
編輯samba配置文件
[root@node1 www]# vim /etc/samba/smb.conf
[share]
path = /www //設(shè)置共享目錄文件
write list = smbuser //配置可寫用戶列表
啟動(dòng)服務(wù)
[root@node1 www]# systemctl restart smb.service nmb
- samba客戶端配置
安裝cifs-utils軟件
[root@node2 /]# yum install -y cifs-utils
掛載共享目錄
[root@node2 /]# mkdir /mnt/smb
[root@node2 ~]# mount -o user=smbuser1,password=123456 //172.16.2.131/share /mnt/smb
查看目錄內(nèi)容
[root@node2 ~]# cd /mnt/smb
[root@node2 smb1]# ls
smb1.txt
4锈嫩、使用rsync+inotify實(shí)現(xiàn)/www目錄實(shí)時(shí)同步
實(shí)驗(yàn)環(huán)境
主機(jī) | os | 軟件 | ip |
---|---|---|---|
rsync客戶端 | centos7.6 | rsyncd | 172.16.2.131 |
rsync服務(wù)端 | centos7.6 | inotify-tools | 172.16.2.132 |
- rsyncd服務(wù)端配置
配置rsyncd服務(wù)配置文檔
[root@node2 ~]# 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 = 172.16.2.0/24 //指明客戶端地址范圍
[backup]
path = /backup/ //備份路徑
comment = backup
read only = no //關(guān)閉只讀
auth users = rsyncuser //同步用戶
secrets file = /etc/rsync.pass //認(rèn)證文件
生成認(rèn)證文件(同步用戶、密碼)
[root@node2 ~]# echo "rsyncuser:123456" > /etc/rsync.pass
[root@node2 ~]# chmod 600 /etc/rsync.pass
新建備份目錄
[root@node2 ~]# mkdir /backup
啟動(dòng)服務(wù)
[root@node2 ~]# systemctl start rsyncd
- rsync客戶端配置
設(shè)置epel源垦搬,安裝inotify-tools
[root@node1 ~]# yum install inotify-tools
生成認(rèn)證文件(只需密碼)
[root@node1 ~]# echo "123456" > /etc/rsync.pass
[root@node1 ~]# chmod 600 /etc/rsync.pass
測(cè)試同步功能
[root@node1 /]# rsync -avz --password-file=/etc/rsync.pass /www/ rsyncuser@172.16.2.132::backup
sending incremental file list
./
1111
1111111
sent 177 bytes received 57 bytes 468.00 bytes/sec
total size is 0 speedup is 0.00
編輯實(shí)時(shí)同步腳本
[root@node1 /]# vim /data/backup.sh
#!/bin/bash
SRC='/www/' DEST='rsyncuser@172.16.2.132::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
運(yùn)行腳本
[root@node1 /]# bash /data/backup.sh
- 測(cè)試:
模擬源目錄修改
[root@node1 ~]# touch /www/1233535
修改后立即查看備份目錄修改情況
[root@node2 ~]# ll /backup/
總用量 0
-rw-r--r-- 1 root root 0 4月 26 09:14 1111
-rw-r--r-- 1 root root 0 4月 26 09:16 1111111
-rw-r--r-- 1 root root 0 4月 26 09:21 1233535
-rw-r--r-- 1 root root 0 4月 26 08:45 test
5呼寸、使用iptable實(shí)現(xiàn): 放行telnet, ftp, web服務(wù),放行samba服務(wù),其他端口服務(wù)全部拒絕
加載模塊
[root@node1 netfilter]# vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="nf_conntrack_ftp"
[root@node1 netfilter]# modprobe nf_conntrack_ftp
編輯iptables規(guī)則
[root@node1 netfilter]# iptables -A INPUT -p tcp --dport 23 -j ACCEPT
[root@node1 netfilter]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
[root@node1 netfilter]# iptables -A INPUT -p tcp -m multiport --dport 139,389,445 -j ACCEPT
[root@node1 netfilter]# iptables -A INPUT -p udp -m multiport --dport 137,138 -j ACCEPT
[root@node1 netfilter]# iptables -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT
[root@node1 netfilter]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@node1 netfilter]# iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
[root@node1 netfilter]# iptables -A INPUT -j DROP
[root@node1 netfilter]# iptables -A OUTPUT -j DROP
查看規(guī)則
[root@node1 netfilter]# iptables -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:23
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 139,389,445
44 6588 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 137,138
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:21 state NEW
525 37900 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
13 2170 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
134 12748 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state ESTABLISHED
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0