CentOS7 FTP及Rsync服务搭建

CentOS7 FTP及Rsync服务搭建

文章来源: 陶老师运维笔记- 微信公众号

FTP_RSYNC.jpg

生活及工作中,会攒下一些有用的软件及文档。并且随时间会越来越多,这时可能会希望有一个自已的FTP-Server或Rsync-Server做为文件仓库。 本文介绍下过程。

1. FTP服务搭建

ftp 命令使用文件传输协议(File Transfer Protocol, FTP)在本地主机和远程主机之间或者在两个远程主机之间进行文件传输。

1.1 安装vsftp软件

#安装
yum install -y vsftpd

#设置开机启动
systemctl enable vsftpd.service
#启动
systemctl start vsftpd.service
#停止
systemctl stop vsftpd.service
#查看状态
systemctl status vsftpd.service

1.2 配置vsftpd

  • 备份vsftpd的默认配置文件。
$cd /etc/vsftpd/ 
$cp vsftpd.conf vsftpd.conf.bak
  • 修改配置vsftpd.conf
#打开配置文件
vim /etc/vsftpd/vsftpd.conf

#显示行号
:set number

#修改配置 12 行
anonymous_enable=NO

#修改配置 33 行
anon_mkdir_write_enable=YES

#修改配置48行
chown_uploads=YES

#修改配置72行
async_abor_enable=YES

#修改配置82行
ascii_upload_enable=YES

#修改配置83行
ascii_download_enable=YES

#修改配置86行
ftpd_banner=Welcome to blah FTP service.

#修改配置100行
chroot_local_user=YES

#添加下列内容到vsftpd.conf末尾
use_localtime=YES
listen_port=21
idle_session_timeout=300
guest_enable=YES
guest_username=vsftpd
user_config_dir=/etc/vsftpd/vconf
data_connection_timeout=1
virtual_use_local_privs=YES
pasv_min_port=40000
pasv_max_port=40010
accept_timeout=5
connect_timeout=1
allow_writeable_chroot=YES

最终配置:

cat /etc/vsftpd/vsftpd.conf |grep -v '#' |grep -v '^$'
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_mkdir_write_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
xferlog_std_format=YES
async_abor_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome to blah FTP service.
chroot_local_user=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
use_localtime=YES
listen_port=21
idle_session_timeout=300
guest_enable=YES
guest_username=vsftpd
user_config_dir=/etc/vsftpd/vconf
data_connection_timeout=1
virtual_use_local_privs=YES
pasv_min_port=40000
pasv_max_port=40010
accept_timeout=5
connect_timeout=1
allow_writeable_chroot=YES

1.3 建立系统用户vsftpd

#用户登录终端设为/bin/false(即:使之不能登录系统)
useradd vsftpd -d /data1/vsftpd -s /bin/false
chown -R vsftpd:vsftpd /vsftpd/vsftpd

1.4 建立ftp用户

建立用户文件 vim /etc/vsftpd/virtusers
第一行为用户名,第二行为密码。不能使用root作为用户名

cat /etc/vsftpd/virtusers
guest
guestguest
ftpadmin
ftp123456

1.5 生成用户数据文件

db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
#设定PAM验证文件,并指定对虚拟用户数据库文件进行读取
chmod 600 /etc/vsftpd/virtusers.db 

1.6 修改 /etc/pam.d/vsftpd 文件

#修改前先备份 
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
vim /etc/pam.d/vsftpd
#先将配置文件中原有的 auth 及 account,session的所有配置行均注释掉
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers 
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers 
#session    optional     pam_keyinit.so    force revoke
#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

1.7 建立虚拟个人目录

分别建立guest及ftpadmin用户。

mkdir /etc/vsftpd/vconf
cd /etc/vsftpd/vconf

ftpadmin用户:

#建立虚拟用户ftpadmin配置文件
cat /etc/vsftpd/vconf/ftpadmin
local_root=/data1/vsftpd
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

#建立目录
mkdir /data1/vsftpd/

guest用户:

#建立虚拟用户guest配置文件
touch guest
#编辑guest用户配置文件,内容如下
/etc/vsftpd/vconf/guest
local_root=/data1/vsftpd/pub
anon_world_readable_only=NO
#建立目录
mkdir /data1/vsftpd/pub

1.8 修改目录属性及重启FTP

配置完成后结构如下:

tree /etc/vsftpd/
/etc/vsftpd/
├── ftpusers
├── user_list
├── vconf
│   ├── ftpadmin
│   ├── ftpuser
│   └── guest
├── virtusers
├── virtusers.db
├── vsftpd.conf
├── vsftpd.conf.bak
└── vsftpd_conf_migrate.sh

修改目录属性:

chmod -R 775 /data1/vsftpd/

重启ftp:

#重启
systemctl restart vsftpd.service
systemctl status vsftpd.service

1.9 防火墙

配置前可以关闭setenforce及设置防火墙。

chkconfig iptables off 
setenforce 0
#IPtables 的设置方式:
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 40000:40010 -j ACCEPT

1.10 FTP命令

FTP 登录:

$man ftp
#登录 
ftp ftp.tao-ops.com   #输入账号/密码

FTP常用命令:

#ftp命令  描述
ls  列出远程机的当前目录
cd  在远程机上改变工作目录
lcd 在本地机上改变工作目录
ascii   设置文件传输方式为 ASCII 模式
binary  设置文件传输方式为二进制模式
close   终止当前的 ftp 会话
get (mget)  从远程机传送指定文件到本地机
put (mput)  从本地机传送指定文件到远程机
open    连接远程 ftp 站点
quit    断开与远程机的连接并退出 ftp
?   显示本地帮助信息
!   转到 Shell 中
prompt 1    关闭交互模式

1.11 文件下载:

文件下载除了用ftp get命令外,还可以用ftp客户程序,wget或浏览器等完成。

  • wget下载:
wget -P /tmp  ftp://ftp.tao-ops.com:21/README.md  --ftp-user=xx --ftp-password=xxxx 
  • mac 下载:
    直接在浏览器上输入ftp地址,连接ftp服务进行下载。
    ftp.png

2. Rsync服务搭建

rsync 是一款高效的远程数据备份和镜象工具,可快速地同步多台主机间的文件。官网: https://rsync.samba.org/
Rsync具有如下特性:

  • 支持链接、所有者、组信息以及权限信息的拷贝;
  • 通过远程 shell(ssh, rsh)进行传输;
  • 无须特殊权限即可安装使用;
  • 流水线式文件传输模式,文件传输效率高;
  • 支持匿名操作;

2.1 rsync 安装

#检查是否安装
$whereis rsync
$rpm -qa|grep rsync -i
#yum安装rsync
$yum install rsync

查看版本:

#查看版本:
rsync --version

2.2 配置文件

配置文件有/rsyncd.conf,rsyncd.secrets 等。

vim /etc/rsyncd.conf          #主配置文件
touch /etc/rsyncd.secrets       #用户名密码文件,一组用户一行,用户名和密码使用 : 分割
touch /etc/rsyncd/rsyncd.motd          #非必须,连接上rsyncd显示的欢迎信息,此文件可不创建

yum安装后会有主配置文件 /etc/rsyncd.conf。可以使用 man rsyncd.conf 查看说明。

$man rsyncd.conf
rsyncd.conf(5) 
                                             rsyncd.conf(5)
NAME
       rsyncd.conf - configuration file for rsync in daemon mode

配置说明

man rsyncd.conf
$cat /etc/rsyncd.conf 
uid = rsync #访问/backup的用户
gid = rsync #访问/backup的用户组
use chroot = no #和安全相关的设置,不用。
max connections = 200 #并发连接数
timeout = 300 #超时时间
pid file = /var/run/rsyncd.pid #进程号所在的文件
lock file = /var/run/rsync.lock #锁文件
log file = /var/log/rsyncd.log #日志文件 服务运行不正常 第一时间看日志。
ignore errors #忽略错误
read only = false #可读写
list = false #不能ls(列表)
hosts allow =172.16.1.0/24 #内网网段。
hosts deny = 0.0.0.0/32 #什么网段不让连。
auth users = rsync_backup #认证虚拟用户(客户端连接使用的用户)。
secrets file = /etc/rsync.password ##认证虚拟用户密码文件。
[backup] #模块标签
comment = ""#注释
path = /data1/backup #备份的路径

配置示例:

uid = nobody
gid = nobody
pid file = /var/run/rsync.pid
port = 873
use chroot=yes
list = no
max connections = 20
log file=/var/log/rsyncd.log
#模块配置(可多个)
[dbatemp]
uid=root
gid=root
path = /data1/dbatemp
auth users = dba
secrets file = /etc/rsyncd.secrets
read only=no

[software]
uid = root
git = root
auth users = ops
path = /data1/vsftpd/software
secrets file = /etc/rsyncd.secrets
read only = no

2.3 密码文件及权限

为了安全该把主配置文件中的list设置为No,并配置密码文件并授权。
密码文件:
创建密码文件syncd.secrets 如下。

$vim /etc/rsyncd.secrets       #用户名密码文件,一组用户一行,用户名和密码使用 : 分割
$cat /etc/rsyncd.secrets
ops:opspwd123
dba:dbapwd123

设置文件权限:
说明:rsyncd服务的密码文件权限必须是600。

chmod 600 /etc/rsyncd.secrets

2.4 启动/停止

启动:

rsync 运行可以用rsync --daemon或xinetd方式。
1) daemon命令运行:
rsync --daemon #默认配置文件是/etc/rsyncd.conf

#默认配置文件是/etc/rsyncd.conf,可能需要显式的指定配置文件
/usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf

$netstat -lanpt |grep 873
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      3746/rsync          
tcp6       0      0 :::873                  :::*                    LISTEN      3746/rsync

为保证开机时自动启动,需要手动加上面的命令(/usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf)加入 /etc/rc.local 文件中。
2)xinetd方式运行
xinetd的rsync配置文件是/etc/xinetd.d/rsync,注意修改server_args行。

#yum intall xinetd
vim /etc/xinetd.d/rsync
service rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args     = --daemon --config=/etc/rsyncd/rsyncd.conf
log_on_failure += USERID
}

设置自启动:

chkconfig rsync on
service xinetd restart

停止:

ps aux|grep rsync
kill pid

2.5 客户端

rsync客户端配置:
配置rsync客户端密码文件并授权,权限要为600。

#格式:用户:密码
vim /etc/rsyncd.secrets.passfile 
opspwd123

$chmod 600  /etc/rsyncd.secrets.passfile 

可以使用rsync --password-file=xxx或直接export RSYNC_PASSWORD=pwdxxx;

#--password-file=FILE 从FILE中得到密码。
$rsync --password-file=/etc/rsyncd.secrets.passfile  ops@192.168.0.3::software 
#export RSYNC_PASSWORD=
$export RSYNC_PASSWORD=opspwd123  ; rsync  ops@192.168.0.3::software  

2.6 防火墙

如果服务器开启了防火墙,必须保证端口能穿过防火墙。

iptables -A INPUT -p tcp -m state --state NEW  -m tcp --dport 873 -j ACCEPT

2.7 常用命令

rsync语法:

rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@][host]:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
rsync [OPTION]... [USER@]HOST::SRC DEST
rsync [OPTION]... SRC [USER@]HOST::DEST
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

$rsync -avzP data1user@192.168.1.2::data1 ~/data1
保持传输原有文件权限,用户,用户组,时间,递归的把data1模块数据复制到用户家目录的data1目录里.
参数 a的意思就是 保留文件原有权限,用户,用户组,时间且递归的copy包括链接文件,块设备在内的所有文件,这个参数很常用
参数 v是显示传输信息
参数 P显示传输进度
参数 z是压缩传输内容进行传输

常用命令:

$export RSYNC_PASSWORD=opspwd123 ;
#限速
$rsync macdown071.zip ops@rsync.tao-ops.com::software/   --bwlimit=50000 -arv 
$rsync  --password-file=/etc/rsyncd.secrets.passfile ops@ip::software . --bwlimit=50000 -arv

#备份
$rsync -avzP data1user@192.168.1.2::data1 ~/data1
保持传输原有文件权限,用户,用户组,时间,递归的把data1模块数据复制到用户家的data1目录里。

#删除--delete
rsync -avzP --delete data1user@192.168.1.2::data1 ~/data1
#保持data1模块和用户家目录模块内容完全一致,加上参数 --delete,这样会删除在~/data1目录里但是不在data1

参考:

  • https://www.ibm.com/developerworks/cn/linux/l-cn-filetransfer/
  • https://rsync.samba.org/FAQ.html
  • https://segmentfault.com/a/1190000000444614

陶老师运维笔记

你可能感兴趣的:(CentOS7 FTP及Rsync服务搭建)