网络文件共享

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

1.环境准备和初步规划

主机规化
100.6:Client
100.7:vsftpd服务器
100.17:mysql
防火墙、selinux 、时间。

2、安装数据库并进行相关配置

 service :在数据库服务器上安装
yum –y install mariadb-server
systemctl start mariadb.service
systemctl enable mariadb
client:在数据库服务器上安装
yum –y install mysql-server
1.建立存储虚拟用户数据库和连接的数据库用户
mysql> CREATE DATABASE vsftpd;
mysql> SHOW DATABASES;
mysql> GRANT all ON vsftpd.* TO vsftpd@'192.168.100.%' IDENTIFIED BY '123456';

2.准备相关表 id自增
mysql> USE vsftpd;
Mysql> SHOW TABLES;
mysql> CREATE TABLE users (
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
name CHAR(50) BINARY NOT NULL,
password CHAR(48) BINARY NOT NULL
);
mysql>DESC users;
测试连接
mysql -uvsftpd -h mysqlserver -pmagedu
mysql> SHOW DATABASES;

3.添加虚拟用户
根据需要添加所需要的用户,为了安全应该使用PASSWORD函数加密其密码后存储
mysql> DESC users;
mysql> INSERT INTO users(name,password) values('',password('123456'));
mysql> INSERT INTO users(name,password) values('',password('123456'));
mysql> SELECT * FROM users;
MariaDB [vsftpd]> select * from users;
+----+------+-------------------------------------------+
| id | name | password                                  |
+----+------+-------------------------------------------+
|  1 | wang | *6B8CCC83799A26CD19D7AD9AEEADBCD30D8A8664 |
|  2 | mage | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+----+------+-------------------------------------------+

3、安装vsftpd与编译pam_mysql-0.7RC1

1、编译pam-mysql
[root@7 ]yy mariadb-devel pam-devel gcc-c++
[root@7 ] tar xvf pam_mysql-0.7RC1.tar.gz\
[root@7 ]cd pam_mysql-0.7RC1/
[root@7 pam_mysql-0.7RC1/]./configure --with-pam-mods-dir=/lib64/security
[root@7 ] make && make install
[root@7 ] ll /usr/lib64/security/
-rwxr-xr-x  1 root root    882 Nov 16 17:02 pam_mysql.la
-rwxr-xr-x  1 root root 141768 Nov 16 17:02 pam_mysql.so
2、安装以及配置vftpd

[root@7 ] yy vssftpd
3、在FTP服务器上建立pam认证所需文件
vi /etc/pam.d/vsftpd.mysql 添加如下两行
auth required pam_mysql.so user=vsftpd passwd=123456 host=192.168.100.17 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=123456 host=192.168.100.17 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
注意:参考README文档,选择正确的加密方式
crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示使用mysql password()函数加密,3表示md5加密,4表示sha1加密


配置字段的详情
 auth 表示认证
 account 验证账号密码正常使用
 required 表示认证要通过
 pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝对路径;后面为给此模块传递的参数
 user=vsftpd为登录mysql的用户
 passwd=magedu 登录mysql的的密码
 host=mysqlserver mysql服务器的主机名或ip地址
 db=vsftpd 指定连接msyql的数据库名称
 table=users 指定连接数据库中的表名
 usercolumn=name 当做用户名的字段
 passwdcolumn=password 当做用户名字段的密码
 crypt=2 密码的加密方式为mysql password()函数加密


4、建立相关用户的和修改改vsftpd配置文件,使其适应mysql认证
建立虚拟用户映射的系统用户及对应的目录
[root@7 ~]#useradd -d /data/xyz -s /sbin/nologin vuser
[root@7 ~]#chmod 555 /data/xyz
[root@7 ~]#mkdir /data/xyz/{upload,pub}
[root@7 ~]#setfacl -m u:vuser:rwx /data/xyz/upload

在配置文件中修改
guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd.mysql

4、启动vsftpd服务

service vsftpd start;systemctl start vsftpd
chkconfig vsftpd on;systemctl enable vsftpd
查看端口开启情况
netstat -tnlp |grep :21

5、在FTP服务器上配置虚拟用户具有不同的访问权限


1、配置vsftpd为虚拟用户使用配置文件目录
vim /etc/vsftpd/vsftpd.conf
添加如下选项
user_config_dir=/etc/vsftpd/vusers_config
2、创建所需要目录,并为虚拟用户提供配置文件
mkdir /etc/vsftpd/vusers_config/
cd /etc/vsftpd/vusers_config/
touch wang mage
3、配置虚拟用户的访问权限
虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。如
要让用户wang具有上传文件的权限,可修改/etc/vsftpd/vusers_config/wang文
件,在里面添加如下选项并设置为YES即可,只读则设为NO
注意:需确保对应的映射用户对于文件系统有写权限
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/ftproot 登录目录改变至指定的目录

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

1.安装NFS服务器


软件包:nfs-utils
Kernel支持:nfs.ko
端口:2049(nfsd), 其它端口由portmap(111)分配
相关软件包:rpcbind(必须),tcp_wrappers
[root@7 ]#rpm -ql nfs

2、创建共享文件

[root@xdpp7 /data]mkdir /data/nfsdir{1,2}
[root@xdpp7 /data]#cp /etc/fstab nfsdir1/f1
[root@xdpp7 /data]#cp /etc/fstab nfsdir2/f1

3、修改配置文件

vim /etc/exports.d 或者在/etc/exports(主配置文件)
/data/nfsdir1 * (rw) ----所有的人都可以连接,并且只有读写权限

[root@xdpp7 /data]#exportfs -v
/data/nfsdir1 10.110.115.0/24(ro,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)
/data/nfsdir1<world(rw,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)

4、clinet的配置

 下载client 工具
 yy nfs-utils
[root@xcdp17 /mnt/nfs1]#showmount -e 10.110.115.7
Export list for 10.110.115.7:
/data/nfsdir1 (everyone)

挂载
mkidr /mnt/nfs1
mount 10.110.115.7:/data/nfsdir1 /mnt/nfs1
[root@xcdp17 /mnt/nfs1]#mkdir a
mkdir: cannot create directory ‘a’: Read-only file system

[root@xcdp17 /mnt/nfs1]#vim txt.xtx && ll
-rwxr-xr-x 1 root      root      693 Sep 15 21:27 f1
-rw-r--r-- 1 nfsnobody nfsnobody   0 Sep 15 21:28 f2.txt
-rw-r--r-- 1 nfsnobody nfsnobody  12 Sep 15 21:32 txt.xtx

远程的root到NFS服务器上面,变成nfsnobody的身份,这种行为称之为:权限的压榨,


全部压榨称为一个固定的名字
[root@xdpp7 /data]#useradd -r -s /sbin/nologin wang
[root@xdpp7 /data]#id wang 
uid=989(wang) gid=983(wang) groups=983(wang)


[root@xdpp7 ]#vim /etc/exports.d/ntp.exports 
/data/nfsdir1	*(rw,no_all_squash,all_squash,anonuid=994,anongid=991)
[root@xdpp7 /data]#exportfs -r
[root@xdpp7 /data]#exportfs -v

[root@xcdp17 ~]#mkdir /mnt/nfs2 && mount 10.110.115.7:/data/nfsdir2  /mnt/nfs2
[root@xcdp17 ~]#df
10.110.115.7:/data/nfsdir1  10475520   32768  10442752   1% /mnt/nfs1
10.110.115.7:/data/nfsdir2  10475520   32768  10442752   1% /mnt/nfs2

注意事项:在服务器上,一个目录要通过网络共享需要通过两层,服务自身的控制,文件系统级别的控制

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

1.创建共享目录
mkdir /data/userxyz
echo jhsdfs > /data/userxyz/a.txt
2.添加到SAMBA数据库中去
useradd -s /sbin/nologin userxyz
smbpasswd -a userxyz
3.查看
pdbedit -L -v

4.修改配置文件
[root@7 ~]#vim /etc/samba/smb.conf
全局设置中【添加日志功能】
config file=/etc/samba/conf.d/%U
Log file=/var/log/samba/log.%m
log level=2
[netbios name = MYSERVER] linux 无法解析,Windows可以,但是必须启动systemctl start nmb-service 名词解析服务

家目录的共享设置
[share] ---远程共享信息看到的名称
path=/data/userxyz --- 共享的目录
public=Yes   ----所有人都可以访问
writable=yes  可以被所有用户读写,默认为no
write list=userxyz2  userxyz3 [用户,@组名,+组名,用,分隔]必须要先创建组,将用户加入到组里面

可以把共享的目录拆出来放在/etv/samba/conf.d/xxx 分别设置不同的权限


systemctl restart smb.sservice 

客服端
1.需要下载samba-client 客服端工具
yy samba-client
2.查看共享的目录
[root@localhost ~]#smbclient -L 192.168.100.7/share
	Sharename       Type      Comment
	print$          Disk      Printer Drivers
	share           Disk      
	IPC$            IPC       IPC Service (Samba 4.10.16)


[root@localhost ~]#smbclient //192.168.100.7/share  -U userxzy1%1234
Try "help" to get a list of possible commands.
smb: \>  put 上传 get 下载

注意:通过网络共享的文件,要通过服务自身的权限和文件系统级别的权限


手动挂载:
[root@localhost ~]# mount -o user=userxyz1,password=1234 //192.168.100.7/share  /mnt/

开机自动挂载
vim /etc/fstab
 192.168.100.7/share       /mnt/yxz      cifs    username=userxyz1,password=1234  0 0 或者
 192.168.100.7/share       /mnt/yxz      cifs   credentials=/etc/smb.txt(账号和密码)  0 0 

vim /etc/smb.txt
userxyz1
1234
chmod 600 /etc/smb.txt ---只读

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

rsync服务器17
yy rsync 
配置 rsync 服务器端的配置文件
vi /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.100.0/24
[backup] 
path=/backup/ 
comment=backup 
read only=no
auth users=xyz
secrets file=/etc/rsync.pass


创建账户和密码
echo "xyz:123456" > /etc/rsync.pass
chmod 600 /etc/rsync.pass

mkdir /backup
服务器端启动rsync服务
rsync --daemon 可加入/etc/rc.d/rc.local实现开机启动
systemctl start rsyncd CentOS 7



客服端
echo "magedu" > /etc/rsync.pass
chmod 600 /etc/rsync.pass
客户端测试同步数据
rsync -avz --passwdord-file=/etc/rsync.pass /data/xyz	xyz@192.168.100.17::backup
rsync -avz --passwdord=123456 /data/xyz	xyz@192.168.100.17::backup


可以写进计划任务里面
vim /etc/crontab
*/1 * * * * rsync -avz --password-file=/etc/rsync.pass /data/ xyz@192.168.100.17::backup


脚本执行只要inotify监控的数据发生改变就立即同步
SRC='/data/'
DESC='xyz@192.168.100.17::backup'
inotifywath -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服务,其他端口服务全部拒绝

[root@7 ~]#iptables -A INPUT -p tcp -m multiport --dports 20:23,80,139,445 -m state --state NEW -j ACCEPT 
[root@7 ~]#iptables -A INPUT -p udp -m multiport --dports 137,138 -m state --state NEW -j ACCEPT

[root@7 ~]#iptables -vnL
Chain INPUT (policy ACCEPT 6 packets, 396 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 20:23,80,139,445 state NEW
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 137,138 state NEW


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值