文章来源: 陶老师运维笔记- 微信公众号html
生活及工做中,会攒下一些有用的软件及文档。而且随时间会愈来愈多,这时可能会但愿有一个自已的FTP-Server或Rsync-Server作为文件仓库。 本文介绍下过程。linux
ftp 命令使用文件传输协议(File Transfer Protocol, FTP)在本地主机和远程主机之间或者在两个远程主机之间进行文件传输。git
#安装
yum install -y vsftpd
#设置开机启动
systemctl enable vsftpd.service
#启动
systemctl start vsftpd.service
#中止
systemctl stop vsftpd.service
#查看状态
systemctl status vsftpd.service
复制代码
$cd /etc/vsftpd/
$cp vsftpd.conf vsftpd.conf.bak
复制代码
#打开配置文件
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
复制代码
最终配置:shell
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
复制代码
#用户登陆终端设为/bin/false(即:使之不能登陆系统)
useradd vsftpd -d /data1/vsftpd -s /bin/false
chown -R vsftpd:vsftpd /vsftpd/vsftpd
复制代码
创建用户文件 vim /etc/vsftpd/virtusers 第一行为用户名,第二行为密码。不能使用root做为用户名数据库
cat /etc/vsftpd/virtusers
guest
guestguest
ftpadmin
ftp123456
复制代码
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
#设定PAM验证文件,并指定对虚拟用户数据库文件进行读取
chmod 600 /etc/vsftpd/virtusers.db
复制代码
#修改前先备份
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
复制代码
分别创建guest及ftpadmin用户。vim
mkdir /etc/vsftpd/vconf
cd /etc/vsftpd/vconf
复制代码
ftpadmin用户:segmentfault
#创建虚拟用户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
复制代码
配置完成后结构以下:安全
tree /etc/vsftpd/
/etc/vsftpd/
├── ftpusers
├── user_list
├── vconf
│ ├── ftpadmin
│ ├── ftpuser
│ └── guest
├── virtusers
├── virtusers.db
├── vsftpd.conf
├── vsftpd.conf.bak
└── vsftpd_conf_migrate.sh
复制代码
修改目录属性:bash
chmod -R 775 /data1/vsftpd/
复制代码
重启ftp:
#重启
systemctl restart vsftpd.service
systemctl status vsftpd.service
复制代码
配置前能够关闭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
复制代码
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 关闭交互模式
复制代码
文件下载除了用ftp get命令外,还能够用ftp客户程序,wget或浏览器等完成。
wget -P /tmp ftp://ftp.tao-ops.com:21/README.md --ftp-user=xx --ftp-password=xxxx
复制代码
rsync 是一款高效的远程数据备份和镜象工具,可快速地同步多台主机间的文件。官网: rsync.samba.org/ Rsync具备以下特性:
- 支持连接、全部者、组信息以及权限信息的拷贝;
- 经过远程 shell(ssh, rsh)进行传输;
- 无须特殊权限便可安装使用;
- 流水线式文件传输模式,文件传输效率高;
- 支持匿名操做;
#检查是否安装
$whereis rsync
$rpm -qa|grep rsync -i
#yum安装rsync
$yum install rsync
复制代码
查看版本:
#查看版本:
rsync --version
复制代码
配置文件有/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
复制代码
为了安全该把主配置文件中的list设置为No,并配置密码文件并受权。 密码文件: 建立密码文件syncd.secrets 以下。
$vim /etc/rsyncd.secrets #用户名密码文件,一组用户一行,用户名和密码使用 : 分割
$cat /etc/rsyncd.secrets
ops:opspwd123
dba:dbapwd123
复制代码
设置文件权限: 说明:rsyncd服务的密码文件权限必须是600。
chmod 600 /etc/rsyncd.secrets
复制代码
####启动: 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
复制代码
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
复制代码
若是服务器开启了防火墙,必须保证端口能穿过防火墙。
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
复制代码
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
复制代码