vsftpd和nfs搭建

1 先部署nfs
爬虫的机器磁盘不是很大,大数据的机器硬盘比较大,下来的文件就不能放在爬虫的机器上,而需要存储在大数据的硬盘上,于是在大磁盘的机器上搭建nfs主节点,爬虫节点的机器将磁盘mount过去就可以,不会占用爬虫机器的磁盘空间。
参考如何运用nfs让客户端轻松使用服务端共享出来的磁盘
Centos7安装配置NFS服务和挂载

# 在所有节点中执行
yum install nfs-utils -y

# 在nfs主节点中执行(nfs 服务器侧),rpcbind  可以不装,因为nfs-utils会将rpcbind  作为依赖包安装。
yum install rpcbind -y

mkdir -p /appdata/nfs-volume
mkdir -p /appdata/nfs-volume/listed_company
chmod 777 /appdata/nfs-volume

# 添加允许访问的网段
vi /etc/exports
/appdata/nfs-volume  10.128.1.0/24(rw,sync,no_root_squash)

# 启动nfs,
service rpcbind start
service nfs start
chkconfig rpcbind on
chkconfig nfs on
# 查看服务目录和权限
showmount -e

# 开放的端口,如果环境存在隔离,注意开放这些接口给对方
# 比如大数据环境,开放给 爬虫机器访问
[root@bg5 ~]# rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  50049  status
    100024    1   tcp  47513  status
    100005    1   udp  20048  mountd
    100005    1   tcp  20048  mountd
    100005    2   udp  20048  mountd
    100005    2   tcp  20048  mountd
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp  46957  nlockmgr
    100021    3   udp  46957  nlockmgr
    100021    4   udp  46957  nlockmgr
    100021    1   tcp  43574  nlockmgr
    100021    3   tcp  43574  nlockmgr
    100021    4   tcp  43574  nlockmgr

firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=mountd
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --reload

# nfs 客户端侧,这个95是nfs主节点的机器
 mkdir -p /appdata/nfs-volume

[root@sp2 ~]# showmount -e 10.128.2.95
Export list for 10.128.2.95:
/appdata/nfs-volume 10.128.1.0/24

mount -t nfs 10.128.2.95:/appdata/nfs-volume /appdata/nfs-volume

# 设置开机挂载
vi /etc/fstab
10.128.2.95:/appdata/nfs-volume /appdata/nfs-volume nfs rw,tcp,intr 0 1

# 取消挂载
[root@sp3 ~]# umount /appdata/nfs-volume
umount.nfs4: /appdata/nfs-volume: device is busy

[root@sp3 ~]# fuser -m -v /appdata/nfs-volume/
                     USER        PID ACCESS COMMAND
/appdata/nfs-volume: root     kernel mount /appdata/nfs-volume
                     root      32328 ..c.. bash
[root@sp3 ~]# kill -9 32328
[root@sp3 ~]# umount /appdata/nfs-volume

如果购买了云服务,注意开放这些端口
1
1.1 主从
1.1.1 主节点

# 安装rsync
yum install rsync -y
# 安装inotify-tools
yum install gcc gcc-c++ make -y
# 下载
wget https://nchc.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz
#
tar -zxvf inotify-tools-3.13.tar.gz
cd inotify-tools-3.13
./configure --prefix=/usr/local/inotify-tools
make
make install

$ inotify-tools也可以yum安装
 yum install rsync inotify-tools -y

设置ssh无密码登录

ssh-keygen -t rsa
ssh-copy-id rsyncuser@nfs96

配置环境变量

export PATH=$PATH:/usr/local/inotify-tools/bin  
source ~/.bashrc  # 或者你使用的其他shell配置文件

同步文件脚本

cat > /appdata/script/inotify_rsync.sh <<EOF
#!/bin/bash
MONITOR_DIR="/data/k8s_storage"
DEST_DIR="rsyncuser@nfs96:/data/k8s_storage"

inotifywait -r -m -e modify,create,delete,move $MONITOR_DIR |
while read path action file; do
    rsync -avz --delete "$path/$file" "$DEST_DIR${path#$MONITOR_DIR}/"
done

EOF

chmod +x /appdata/script/inotify_rsync.sh
cd /appdata/script
./inotify_rsync.sh &

sh /appdata/script/inotify_rsync.sh

1.1.2 从节点

useradd -m rsyncuser
passwd rsyncuser
chown -R rsyncuser:rsyncuser /data/k8s_storage
chmod 755 /data/k8s_storage/

1.2 相关问题

[root@nfs95 script]# ./inotify_rsync.sh &
[1] 2002
[root@nfs95 script]# Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
sending incremental file list
rsync: change_dir#1 "/data/k8s_storage" failed: Permission denied (13)
rsync error: errors selecting input/output files, dirs (code 3) at main.c(613) [Receiver=3.1.2]
sending incremental file list

# 上面的问题是用户访问目录权限的问题

删除文件夹,从服务器上文件夹没有同步删除,这是脚本中相对路径配置错误问题。

sent 22 bytes  received 12 bytes  68.00 bytes/sec
total size is 0  speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1179) [sender=3.1.2]
sending incremental file list
test/

sent 58 bytes  received 20 bytes  156.00 bytes/sec
total size is 0  speedup is 0.00
sending incremental file list
rsync: change_dir "/data/k8s_storage/test/" failed: No such file or directory (2)

2 安装 vsftpd
参考Centos7安装搭建FTP服务器(最简便方法)

yum -y install vsftpd

# 编辑
vi /etc/vsftpd/vsftpd.conf
anonymous_enable=No
write_enable=No
xferlog_file=/appdata/ftplog/xferlog
ascii_upload_enable=No
ascii_download_enable=No

# 防火墙
firewall-cmd --permanent --zone=public --add-port=60021/tcp
firewall-cmd --permanent --zone=public --add-port=65400-65410/tcp
firewall-cmd --reload 

# 关闭selinux
setsebool ftpd_disable_trans 1

# ftp用户:hidata,这个名字随便取,vsftpd的pam用户
useradd -d /appdata/nfs-volume -s /sbin/nologin hidata
passwd hidata


chown -R hidata /appdata/nfs-volume
#  /appdata/ftplog/xferlog是一个文件,不是一个目录
touch  /appdata/ftplog/xferlog
chown -R hidata /appdata/ftplog/xferlog
systemctl enable vsftpd.service
systemctl start vsftpd.service 
systemctl status vsftpd.service
systemctl restart vsftpd.service 

setsebool ftpd_disable_trans 1,通过关闭selinux解决问题
响应: 500 OOPS: failed to open xferlog log file:/appdata/ftplog/xferlog
错误: 严重错误: 无法连接到服务器

参考ftp登陆报错530 Login incorrect. Login failed.
/sbin/nologin添加到/etc/shells中解决问题
响应: 530 Login incorrect.
错误: 严重错误: 无法连接到服务器
[root@sp2 pam.d]# vi /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/sbin/nologin

查询发现FileZilla的Server采用了被动模式,因此需要在防火墙里开启这个段的端口,注意防火墙开启65400-65410
命令: LIST
错误: 20 秒后无活动,连接超时
错误: 读取目录列表失败

参考Linux系统中vsftpd配置及如何添加vsFTPd用户和设置权限设置访问权限
参考vsftpd安装及虚拟用户配置
3 vsftpd中用户访问控制
下面的稍微复杂一点,因为实际使用需要控制某个用户可以访问具体的目录
3.1 vsftpd主文件

############################## 宿主用户 ##############################
# 这里延续上面的 hidata,因为之前已经创建了

############################## 主配置文件 ##############################
vi /etc/vsftpd/vsftpd.conf

#关闭匿名访问
anonymous_enable=NO
#启用本地系统用户,包括虚拟用户
local_enable=YES
#允许执行FTP命令,如果禁用,将不能进行上传、下载、删除、重命名等操作
write_enable=YES
#本地用户umask值
local_umask=022
dirmessage_enable=YES
#启用日志
xferlog_enable=YES
xferlog_std_format=YES
#关闭ftp-data端口,相当于不使用主动模式
connect_from_port_20=YES
#限制用户不能离开FTP主目录,启用并设置例外用户清单
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/user_list
#使用ipv4进行监听
listen=YES
listen_ipv6=NO
#pam认证文件名称,位于/etc/pam.d/
pam_service_name=vsftpd
#启用全局用户例外清单
userlist_enable=YES
#启用tcp封装
tcp_wrappers=YES
#虚拟用户权限是否与本地用户相同。为NO时,将与匿名用户的权限相同,在每个虚拟用户配置文件里设置匿名用户的选项等于虚拟用户的权限
virtual_use_local_privs=NO
# 防止dos攻击
ascii_upload_enable=No
ascii_download_enable=No
#启用guest后,所有非匿名用户将映射到guest_username进行访问,包括本地系统用户也不能使用,并且转换成一个虚拟用户,与其他虚拟用户的配置方法一样
guest_enable=YES
guest_username=hidata
#虚拟用户配置文件目录
user_config_dir=/etc/vsftpd/user_conf
#启用pasv模式
pasv_enable=YES
listen_port=60021
pasv_min_port=65400
pasv_max_port=65410
# 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
allow_writeable_chroot=YES

3.2 虚拟用户认证文件

vi /etc/vsftpd/loginuser.txt
# 账号
test
# 密码
test123
db_load -T -t hash -f /etc/vsftpd/loginuser.txt /etc/vsftpd/hidata.db
chmod 600 /etc/vsftpd/hidata.db

vi /etc/pam.d/vsftpd
#auth       required    pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth       required    pam_shells.so
#auth       include     password-auth
#account    include     password-auth
#session    required     pam_loginuid.so
#session    include     password-auth
auth required pam_userdb.so db=/etc/vsftpd/hidata
account required pam_userdb.so db=/etc/vsftpd/hidata

下面的配置根据vsftpd版本可能有些不同。

mkdir -p /etc/vsftpd/user_conf
cd /etc/vsftpd/user_conf
touch xftpadmin testuser

# xftpadmin用户
vi /etc/vsftpd/user_conf/xftpadmin
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/appdata/nfs-volume

# testuser用户,控制只读/appdata/nfs-volume/test_dir
vi /etc/vsftpd/user_conf/testuser
local_root=/appdata/nfs-volume/test_dir

3.3 开启SELINUX

setsebool -P ftpd_full_access on

3.4 重启

systemctl restart vsftpd.service 

3.5 使用ssl登录

cd /etc/pki/tls/certs/
openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem

vi /etc/vsftpd/vsftpd.conf

# ssl
ssl_enable=YES
ssl_sslv2=YES
ssl_sslv3=YES
ssl_tlsv1=YES
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem

systemctl restart vsftpd.service 

有的时候需要对上传的文件进行更改时间,执行命令touch -d "2021/05/01" desktop.inidesktop.ini是你自己的文件名,支持批量修改。
如果要批量修改当前目录下的文件

touch -m -d "2023-05-27 10:05:20" ./*;

如果下面还有下级文件,可以采取递归的方式

find ./* -exec touch -m -d "2023-05-17 10:05:50" {} \;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

warrah

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值