暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

CentOS7 FTP及Rsync服务搭建

陶老师运维笔记 2019-11-07
462

CentOS7 FTP及Rsync服务搭建

CentOS7 FTP及Rsync服务搭建

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

1. FTP服务搭建

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

1.1 安装vsftp软件

  1. #安装

  2. yum install -y vsftpd


  3. #设置开机启动

  4. systemctl enable vsftpd.service

  5. #启动

  6. systemctl start vsftpd.service

  7. #停止

  8. systemctl stop vsftpd.service

  9. #查看状态

  10. systemctl status vsftpd.service

1.2 配置vsftpd

  • 备份vsftpd的默认配置文件。

  1. $cd /etc/vsftpd/

  2. $cp vsftpd.conf vsftpd.conf.bak

  • 修改配置vsftpd.conf

  1. #打开配置文件

  2. vim /etc/vsftpd/vsftpd.conf


  3. #显示行号

  4. :set number


  5. #修改配置 12 行

  6. anonymous_enable=NO


  7. #修改配置 33 行

  8. anon_mkdir_write_enable=YES


  9. #修改配置48行

  10. chown_uploads=YES


  11. #修改配置72行

  12. async_abor_enable=YES


  13. #修改配置82行

  14. ascii_upload_enable=YES


  15. #修改配置83行

  16. ascii_download_enable=YES


  17. #修改配置86行

  18. ftpd_banner=Welcome to blah FTP service.


  19. #修改配置100行

  20. chroot_local_user=YES


  21. #添加下列内容到vsftpd.conf末尾

  22. use_localtime=YES

  23. listen_port=21

  24. idle_session_timeout=300

  25. guest_enable=YES

  26. guest_username=vsftpd

  27. user_config_dir=/etc/vsftpd/vconf

  28. data_connection_timeout=1

  29. virtual_use_local_privs=YES

  30. pasv_min_port=40000

  31. pasv_max_port=40010

  32. accept_timeout=5

  33. connect_timeout=1

  34. allow_writeable_chroot=YES

最终配置:

  1. cat /etc/vsftpd/vsftpd.conf |grep -v '#' |grep -v '^$'

  2. anonymous_enable=NO

  3. local_enable=YES

  4. write_enable=YES

  5. local_umask=022

  6. anon_mkdir_write_enable=NO

  7. dirmessage_enable=YES

  8. xferlog_enable=YES

  9. connect_from_port_20=YES

  10. chown_uploads=YES

  11. xferlog_std_format=YES

  12. async_abor_enable=YES

  13. ascii_upload_enable=YES

  14. ascii_download_enable=YES

  15. ftpd_banner=Welcome to blah FTP service.

  16. chroot_local_user=YES

  17. listen=NO

  18. listen_ipv6=YES

  19. pam_service_name=vsftpd

  20. userlist_enable=YES

  21. tcp_wrappers=YES

  22. use_localtime=YES

  23. listen_port=21

  24. idle_session_timeout=300

  25. guest_enable=YES

  26. guest_username=vsftpd

  27. user_config_dir=/etc/vsftpd/vconf

  28. data_connection_timeout=1

  29. virtual_use_local_privs=YES

  30. pasv_min_port=40000

  31. pasv_max_port=40010

  32. accept_timeout=5

  33. connect_timeout=1

  34. allow_writeable_chroot=YES

1.3 建立系统用户vsftpd

  1. #用户登录终端设为/bin/false(即:使之不能登录系统)

  2. useradd vsftpd -d /data1/vsftpd -s /bin/false

  3. chown -R vsftpd:vsftpd /vsftpd/vsftpd

1.4 建立ftp用户

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

  1. cat /etc/vsftpd/virtusers

  2. guest

  3. guestguest

  4. ftpadmin

  5. ftp123456

1.5 生成用户数据文件

  1. db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db

  2. #设定PAM验证文件,并指定对虚拟用户数据库文件进行读取

  3. chmod 600 /etc/vsftpd/virtusers.db

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

  1. #修改前先备份

  2. cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak

  3. vim /etc/pam.d/vsftpd

  4. #先将配置文件中原有的 auth 及 account,session的所有配置行均注释掉

  5. auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers

  6. account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers

  7. #session optional pam_keyinit.so force revoke

  8. #auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed

  9. #auth required pam_shells.so

  10. #auth include password-auth

  11. #account include password-auth

  12. #session required pam_loginuid.so

  13. #session include password-auth

1.7 建立虚拟个人目录

分别建立guest及ftpadmin用户。

  1. mkdir /etc/vsftpd/vconf

  2. cd /etc/vsftpd/vconf

ftpadmin用户:

  1. #建立虚拟用户ftpadmin配置文件

  2. cat /etc/vsftpd/vconf/ftpadmin

  3. local_root=/data1/vsftpd

  4. write_enable=YES

  5. anon_world_readable_only=NO

  6. anon_upload_enable=YES

  7. anon_mkdir_write_enable=YES

  8. anon_other_write_enable=YES


  9. #建立目录

  10. mkdir /data1/vsftpd/

guest用户:

  1. #建立虚拟用户guest配置文件

  2. touch guest

  3. #编辑guest用户配置文件,内容如下

  4. /etc/vsftpd/vconf/guest

  5. local_root=/data1/vsftpd/pub

  6. anon_world_readable_only=NO

  7. #建立目录

  8. mkdir /data1/vsftpd/pub

1.8 修改目录属性及重启FTP

配置完成后结构如下:

  1. tree /etc/vsftpd/

  2. /etc/vsftpd/

  3. ├── ftpusers

  4. ├── user_list

  5. ├── vconf

  6.    ├── ftpadmin

  7.    ├── ftpuser

  8.    └── guest

  9. ├── virtusers

  10. ├── virtusers.db

  11. ├── vsftpd.conf

  12. ├── vsftpd.conf.bak

  13. └── vsftpd_conf_migrate.sh

修改目录属性:

  1. chmod -R 775 /data1/vsftpd/

重启ftp:

  1. #重启

  2. systemctl restart vsftpd.service

  3. systemctl status vsftpd.service

1.9 防火墙

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

  1. chkconfig iptables off

  2. setenforce 0

  3. #IPtables 的设置方式:

  4. iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT

  5. iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 40000:40010 -j ACCEPT

1.10 FTP命令

FTP 登录:

  1. $man ftp

  2. #登录

  3. ftp ftp.tao-ops.com #输入账号/密码

FTP常用命令:

  1. #ftp命令 描述

  2. ls 列出远程机的当前目录

  3. cd 在远程机上改变工作目录

  4. lcd 在本地机上改变工作目录

  5. ascii 设置文件传输方式为 ASCII 模式

  6. binary 设置文件传输方式为二进制模式

  7. close 终止当前的 ftp 会话

  8. get (mget) 从远程机传送指定文件到本地机

  9. put (mput) 从本地机传送指定文件到远程机

  10. open 连接远程 ftp 站点

  11. quit 断开与远程机的连接并退出 ftp

  12. ? 显示本地帮助信息

  13. ! 转到 Shell

  14. prompt 1 关闭交互模式

1.11 文件下载:

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

  • wget下载:

  1. wget -P /tmp ftp://ftp.tao-ops.com:21/README.md --ftp-user=xx --ftp-password=xxxx

  • mac 下载: 直接在浏览器上输入ftp地址,连接ftp服务进行下载。 


2. Rsync服务搭建

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

  • 支持链接、所有者、组信息以及权限信息的拷贝;

  • 通过远程 shell(ssh, rsh)进行传输;

  • 无须特殊权限即可安装使用;

  • 流水线式文件传输模式,文件传输效率高;

  • 支持匿名操作;

2.1 rsync 安装

  1. #检查是否安装

  2. $whereis rsync

  3. $rpm -qa|grep rsync -i

  4. #yum安装rsync

  5. $yum install rsync

查看版本:

  1. #查看版本:

  2. rsync --version

2.2 配置文件

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

  1. vim /etc/rsyncd.conf #主配置文件

  2. touch /etc/rsyncd.secrets #用户名密码文件,一组用户一行,用户名和密码使用 : 分割

  3. touch /etc/rsyncd/rsyncd.motd #非必须,连接上rsyncd显示的欢迎信息,此文件可不创建

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

  1. $man rsyncd.conf

  2. rsyncd.conf(5)

  3. rsyncd.conf(5)

  4. NAME

  5. rsyncd.conf - configuration file for rsync in daemon mode

配置说明

  1. man rsyncd.conf

  2. $cat /etc/rsyncd.conf

  3. uid = rsync #访问/backup的用户

  4. gid = rsync #访问/backup的用户组

  5. use chroot = no #和安全相关的设置,不用。

  6. max connections = 200 #并发连接数

  7. timeout = 300 #超时时间

  8. pid file = /var/run/rsyncd.pid #进程号所在的文件

  9. lock file = /var/run/rsync.lock #锁文件

  10. log file = /var/log/rsyncd.log #日志文件 服务运行不正常 第一时间看日志。

  11. ignore errors #忽略错误

  12. read only = false #可读写

  13. list = false #不能ls(列表)

  14. hosts allow =172.16.1.0/24 #内网网段。

  15. hosts deny = 0.0.0.0/32 #什么网段不让连。

  16. auth users = rsync_backup #认证虚拟用户(客户端连接使用的用户)。

  17. secrets file = /etc/rsync.password ##认证虚拟用户密码文件。

  18. [backup] #模块标签

  19. comment = ""#注释

  20. path = /data1/backup #备份的路径

配置示例:

  1. uid = nobody

  2. gid = nobody

  3. pid file = /var/run/rsync.pid

  4. port = 873

  5. use chroot=yes

  6. list = no

  7. max connections = 20

  8. log file=/var/log/rsyncd.log

  9. #模块配置(可多个)

  10. [dbatemp]

  11. uid=root

  12. gid=root

  13. path = /data1/dbatemp

  14. auth users = dba

  15. secrets file = /etc/rsyncd.secrets

  16. read only=no


  17. [software]

  18. uid = root

  19. git = root

  20. auth users = ops

  21. path = /data1/vsftpd/software

  22. secrets file = /etc/rsyncd.secrets

  23. read only = no

2.3 密码文件及权限

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

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

  2. $cat /etc/rsyncd.secrets

  3. ops:opspwd123

  4. dba:dbapwd123

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

  1. chmod 600 /etc/rsyncd.secrets

2.4 启动/停止

启动:

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

  1. #默认配置文件是/etc/rsyncd.conf,可能需要显式的指定配置文件

  2. /usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf


  3. $netstat -lanpt |grep 873

  4. tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 3746/rsync

  5. 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行。

  1. #yum intall xinetd

  2. vim /etc/xinetd.d/rsync

  3. service rsync

  4. {

  5. disable = no

  6. socket_type = stream

  7. wait = no

  8. user = root

  9. server = /usr/bin/rsync

  10. server_args = --daemon --config=/etc/rsyncd/rsyncd.conf

  11. log_on_failure += USERID

  12. }

设置自启动:

  1. chkconfig rsync on

  2. service xinetd restart

停止:

  1. ps aux|grep rsync

  2. kill pid

2.5 客户端

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

  1. #格式:用户:密码

  2. vim /etc/rsyncd.secrets.passfile

  3. opspwd123


  4. $chmod 600 /etc/rsyncd.secrets.passfile

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

  1. #--password-file=FILE 从FILE中得到密码。

  2. $rsync --password-file=/etc/rsyncd.secrets.passfile ops@192.168.0.3::software

  3. #export RSYNC_PASSWORD=

  4. $export RSYNC_PASSWORD=opspwd123 ; rsync ops@192.168.0.3::software

2.6 防火墙

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

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

2.7 常用命令

rsync语法:

  1. rsync [OPTION]... SRC DEST

  2. rsync [OPTION]... SRC [USER@][host]:DEST

  3. rsync [OPTION]... [USER@]HOST:SRC DEST

  4. rsync [OPTION]... [USER@]HOST::SRC DEST

  5. rsync [OPTION]... SRC [USER@]HOST::DEST

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


  7. $rsync -avzP data1user@192.168.1.2::data1 ~/data1

  8. 保持传输原有文件权限,用户,用户组,时间,递归的把data1模块数据复制到用户家目录的data1目录里.

  9. 参数 a的意思就是 保留文件原有权限,用户,用户组,时间且递归的copy包括链接文件,块设备在内的所有文件,这个参数很常用

  10. 参数 v是显示传输信息

  11. 参数 P显示传输进度

  12. 参数 z是压缩传输内容进行传输

常用命令:

  1. $export RSYNC_PASSWORD=opspwd123 ;

  2. #限速

  3. $rsync macdown071.zip ops@rsync.tao-ops.com::software/ --bwlimit=50000 -arv

  4. $rsync --password-file=/etc/rsyncd.secrets.passfile ops@ip::software . --bwlimit=50000 -arv


  5. #备份

  6. $rsync -avzP data1user@192.168.1.2::data1 ~/data1

  7. 保持传输原有文件权限,用户,用户组,时间,递归的把data1模块数据复制到用户家的data1目录里。


  8. #删除--delete

  9. rsync -avzP --delete data1user@192.168.1.2::data1 ~/data1

  10. #保持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


最后修改时间:2019-12-17 12:28:36
文章转载自陶老师运维笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论