1、实现基于MYSQL验证的vsftpd虚拟用户访问
node-2:FTP服务器
node-1:数据库服务器
需要的软件包:mariadb,vsftp,pam_mysql
在node-1上面安装mariadb数据库:
yum –y install mariadb-server
启动服务,设为开机启动:
systemctl start mariadb.service
systemctl enable mariadb
在node-2上面安装vsftpd,pam_mysql
安装相应开发包组
yum -y groupinstall "Development Tools"
按安装连接数据库软件,vsftpd服务
yum -y install mariadb-devel pam-devel vsftpd
下载pam_mysql-0.7RC1.tar.gz
解压pam_mysql
tar xvf pam_mysql-0.7RC1.tar.gz
开始编译安装pam-mysql
cd pam_mysql-0.7RC1/
./configure --with-pam-mods-dir=/lib64/security
make
make install
在数据库服务器上创建虚拟用户账号
创建vsftp相关数据表:
在node-1上测试数据库连接
创建虚拟用户账号:
在FTP服务器上配置vsftpd服务:
vim /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so user=vsftpd passwd=vsftp host=192.168.10.3 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=vsftp host=192.168.10.3 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
建立虚拟用户映射的系统用户及对应的目录
useradd -s /sbin/nologin -d /var/ftproot vuser
chmod 555 /var/ftproot centos7 需除去ftp根目录的写权限
mkdir /var/ftproot/{upload,pub}
setfacl –m u:vuser:rwx /var/ftproot/upload
确保/etc/vsftp/vsftpd.conf中已经启用了以下选项
anonymous_enable=YES
添加下面两项
guest_enable=YES
guest_username=vuser
修改下面一项,原系统用户无法登录
pam_service_name=vsftpd.mysql
启动vsftpd服务:
[root@node-1 ftproot]# systemctl start vsftpd
[root@node-1 ftproot]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
在FTP服务器上配置虚拟用户具有不同的访问权限
配置vsftpd为虚拟用户使用配置文件目录
vim /etc/vsftpd/vsftpd.conf
添加如下选项
user_config_dir=/etc/vsftpd/vusers_config
创建所需要目录,并为虚拟用户提供配置文件
mkdir /etc/vsftpd/vusers_config/
cd /etc/vsftpd/vusers_config/
touch test linux
配置虚拟用户的访问权限
vim /etc/vsftpd/vusers_config/test
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/ftproot 登录目录改变至指定的目录
使用node-3测试
2、通过NFS实现服务器/www共享访问。
两台centos7主机:
nfs服务器:192.168.10.3
客户端:192.168.10.4
服务器端安装nfs软件:
[root@nfs-server ~]# yum install -y nfs-utils
在NFS 服务器上建立用于NFS 文件共享的目录,配置足够权限保证其他人能正常使用:
[root@nfs-server ~]# mkdir /www
[root@nfs-server ~]# chmod 777 /www
[root@nfs-server ~]# ll -d /www
drwxrwxrwx 2 root root 6 Apr 27 16:09 /www
[root@nfs-server ~]# echo "This is test." >/www/test
[root@nfs-server ~]# cat /www/test
This is test.
修改NFS 服务程序的配置文件,默认配置文件为/etc/exports,该文件内容为空
[root@nfs-server ~]# vim /etc/exports
/www 192.168.10.*(rw,sync,root_squash)
注意:IP和后面的权限中间没有空格
参数说明:
ro: 只读
rw: 读写
root_squash: 当NFS 客户端以root 管理员访问时,映射为NFS 服务器的匿名用户
no_root_squash: 当NFS 客户端以root 管理员访问时,映射为NFS 服务器的root 管理员
all_squash: 无论NFS 客户端使用什么账户访问,均映射为NFS 服务器的匿名用户
sync: 同时将数据写入到内存与硬盘中,保证不丢失数据
async优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
启动NFS 服务,还需要顺带重启rpcbind 服务程序
[root@nfs-server ~]# systemctl start nfs-server
[root@nfs-server ~]# systemctl restart rpcbind
客户端查看nfs服务器共享目录:
[root@node-2 ~]# showmount -e 192.168.10.3
Export list for 192.168.10.3:
/www 192.168.10.*
客户端挂载nfs共享目录:
[root@node-2 ~]# mount -t nfs 192.168.10.3:/www /mnt
[root@node-2 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 229048 0 229048 0% /dev
tmpfs 239832 0 239832 0% /dev/shm
tmpfs 239832 5672 234160 3% /run
tmpfs 239832 0 239832 0% /sys/fs/cgroup
/dev/sda5 52403200 1386476 51016724 3% /
/dev/sda2 41922560 32992 41889568 1% /data
/dev/sda1 1038336 144384 893952 14% /boot
tmpfs 47968 0 47968 0% /run/user/0
192.168.10.3:/www 52403200 1386432 51016768 3% /mnt
客户端验证:
[root@node-2 mnt]# touch aaa.txt
[root@node-2 mnt]# ls
aaa.txt test
3、配置samba共享,实现/www目录共享
服务器端安装samba服务:
[root@samba ~]# yum install -y samba
创建用于访问共享资源的账户信息,Samba 服务程序的数据库要求账户必须在当前系统中已经存在。
[root@samba ~]# useradd test
[root@samba ~]# id test
uid=1001(test) gid=1001(test) groups=1001(test)
[root@samba ~]# pdbedit -a -u test
new password:
retype new password:
创建用于共享资源的文件目录
[root@samba ~]# mkdir /www
[root@samba ~]# chown -R test.test /www
[root@samba ~]# ll -d /www
drwxr-xr-x 2 test test 6 Apr 27 17:12 /www
在Samba 服务程序的主配置文件中写入共享信息
[data]
comment = Test Dir
path = /www
public = no
writable = yes
valid users=test
启动samba服务:
[root@samba ~]# systemctl start smb nmb
客户端安装:cifs-utils
[root@node-2 ~]# yum -y install cifs-utils
创建挂载目录
[root@node-2 ~]# mkdir /mnt/test
挂载samba共享目录:
[root@node-2 ~]# mount -o username=test //192.168.10.3/data /mnt/test/
Password for test@//192.168.10.3/data: ******
[root@node-2 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 229048 0 229048 0% /dev
tmpfs 239832 0 239832 0% /dev/shm
tmpfs 239832 5648 234184 3% /run
tmpfs 239832 0 239832 0% /sys/fs/cgroup
/dev/sda5 52403200 1407808 50995392 3% /
/dev/sda2 41922560 32992 41889568 1% /data
/dev/sda1 1038336 144384 893952 14% /boot
tmpfs 47968 0 47968 0% /run/user/0
//192.168.10.3/data 52403200 1413892 50989308 3% /mnt/test
[root@node-2 ~]# cd /mnt/test/
[root@node-2 test]# ls
[root@node-2 test]# touch a.txt
[root@node-2 test]# ls
a.txt
4、使用rsync+inotify实现/www目录实时同步
两台centos7主机:
node-1:服务器
node-2:客户端
服务器端安装软件:rsync+inotify
[root@node-1 ~]# yum install inotify-tools rsync
配置 rsync 服务器端的配置文件
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.10.0/24
[backup]
path = /www/
comment = backup
read only = no
auth users = rsyncuser
secrets file = /etc/rsync.pass
在服务器端生成验证文件
[root@node-1 ~]# echo "rsyncuser:123456" > /etc/rsync.pass
[root@node-1 ~]# chmod 600 /etc/rsync.pass
启动rsyncd服务:
[root@node-1 ~]# systemctl start rsyncd
客户端配置密码文件
[root@node-2 ~]# echo "123456" > /etc/rsync.pass
[root@node-2 ~]# chmod 600 /etc/rsync.pass
创建需要备份的目录:
[root@node-2 www]# mkdir /www
[root@node-2 www]# touch test.txt
[root@node-2 www]# rsync -avz --password-file=/etc/rsync.pass /www/ [email protected]::backup
sending incremental file list
./
test.txt
sent 106 bytes received 38 bytes 288.00 bytes/sec
total size is 0 speedup is 0.00
服务器端验证:
[root@node-1 ~]# cd /data
[root@node-1 data]# ls
test.txt
客户端创建inotify_rsync.sh脚本
#!/bin/bash
SRC='/www/'
DEST='[email protected]::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
5、使用iptable实现: 放行telnet, ftp, web服务,放行samba服务,其他端口服务全部拒绝