Bendi新闻
>
Centos下SFTP双机高可用环境部署记录

Centos下SFTP双机高可用环境部署记录

8月前

SFTP(SSH File Transfer Protocol),安全文件传送协议。有时也被称作 Secure File Transfer Protocol 或 SFTP。它和SCP的区别是它允许用户中断传输,SCP拷贝速度稍快一些。SFTP可以为传输文件提供一种安全的加密方法。SFTP与FTP有着几乎一样的语法和功能。SFTP 为 SSH的一部分,是一种传输档案至Blogger伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。

下面说下SFTP+Keepalived双机高可用方案部署记录:sftp-test01  172.16.51.191sftp-test02  172.16.51.192VIP          172.16.51.193 一、sftp-test01服务器操作:1)查看openssh的版本使用ssh -V 命令来查看openssh的版本,版本必须大于4.8p1,低于的这个版本需要升级。[root@sftp-test01 ~]# ssh -V  OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013 2)创建sftp组[root@sftp-test01 ~]# groupadd sftp 3)创建一个sftp用户,用户名为mysftp,密码为mysftp修改用户密码和修改Linux用户密码是一样的。[root@sftp-test01 ~]# useradd -g sftp -s /bin/false mysftp[root@sftp-test01 ~]# passwd mysftp 4)sftp组的用户的home目录统一指定到/data/sftp下,按用户名区分,这里先新建一个mysftp目录,然后指定mysftp的home为/data/sftp/mysftp[root@sftp-test01 ~]# mkdir -p /data/sftp/mysftp [root@sftp-test01 ~]# usermod -d /data/sftp/mysftp mysftp 5)配置sshd_config,这个配置里的sftp要严格按照下面的配置来操作,否则重启sshd服务后,会造成sftp登录成功,但ssh远程登录失败的现象!修改或添加下面配置。可以直接下载sshd_config配置进行使用。下载地址:https://pan.baidu.com/s/1o3ILTiC7nClF9NxCmS8YHw    提取密码:de3x[root@sftp-test01 ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak2[root@sftp-test01 ~]# vim /etc/ssh/sshd_config......#Subsystem  sftp  /usr/libexec/openssh/sftp-serverSubsystem       sftp    internal-sftpMatch Group sftpChrootDirectory /data/sftp/%uForceCommand    internal-sftpAllowTcpForwarding noX11Forwarding no 设定Chroot目录权限[root@sftp-test01 ~]# chown root:sftp /data/sftp/mysftp[root@sftp-test01 ~]# chmod 755 /data/sftp/mysftp 6)建立SFTP用户登入后可写入的目录按照上面设置后,在重启sshd服务后,用户mysftp已经可以登录。但使用chroot指定根目录后,根应该是无法写入的,所以要新建一个目录供mysftp上传文件。这个目录所有者为mysftp,所有组为sftp,所有者有写入权限,而所有组无写入权限。[root@sftp-test01 ~]# mkdir /data/sftp/mysftp/upload [root@sftp-test01 ~]# chown mysftp:sftp /data/sftp/mysftp/upload [root@sftp-test01 ~]# chmod 755 /data/sftp/mysftp/upload  7)关闭防火墙[root@sftp-test01 ~]# /etc/init.d/iptables stop[root@sftp-test01 ~]# setenforce 0setenforce: SELinux is disabled[root@sftp-test01 ~]# cat /etc/sysconfig/selinux.......SELINUX=disabled 8)重启sshd服务[root@sftp-test01 ~]# service sshd restart Stopping sshd:                                             [  OK  ]Starting sshd:                                             [  OK  ] 9)验证sftp环境(如对sftp做白名单限制,则就是对sshd做白名单限制。可以在iptables里限制sshd的端口,也可以在/etc/hosts.allow里对sshd服务做限制)如下显示,这说明SFTP已经搭建成功(如果ssh是非22端口,比如是6666端口,则连接命令:sftp -o port=6666 mysftp@172.16.51.191[root@sftp-test01 ~]# sftp [email protected]Connecting to 172.16.51.191...The authenticity of host '172.16.51.191 (172.16.51.191)' can't be established.RSA key fingerprint is c0:f5:1d:03:3b:00:4a:11:54:8c:a7:a3:6f:77:47:c7.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added '172.16.51.191' (RSA) to the list of known hosts.[email protected]'s password:sftp> lsupload sftp> cd uploadsftp> ls 10)使用FileZilla FTP Client连接SFTP服务器输入主机IP地址172.16.51.191、用户名mysftp、密码mysftp、端口(默认为22端口)连接SFTP服务器。连接后,默认的路径是/data/sftp/mysftp 二、sftp-test02服务器需要和上面sftp-test01一样的操作! 三、sftp-test01和sftp-test02两台机器的/data/sftp目录做实时同步(rsync+inotify)考虑到数据完整性和安全性,实施单向实时同步,即从sftp-test01机器的/data/sftp实时同步到sftp-test02的data/sftp操作如下:1)在目标服务器sftp-test02上的部署过程安装配置rsync服务端[root@sftp-test02 ~]# yum install rsync xinetd[root@sftp-test02 ~]# vim /etc/xinetd.d/rsync......   disable  = no...... 启动xineted服务[root@sftp-test02 ~]#  /etc/init.d/xinetd startStarting xinetd:                                           [  OK  ] 创建/etc/rsyncd.conf文件[root@sftp-test02 ~]# vim /etc/rsyncd.conf[root@sftp-test02 ~]# cat /etc/rsyncd.conflog file = /var/log/rsyncd.logpidfile = /var/run/rsyncd.pidlock file = /var/run/rsync.locksecrets file = /etc/rsync.passmotd file = /etc/rsyncd.Motd [sftp_upload]path = /data/sftpcomment = sftp_uploaduid = rootgid = sftpport=873use chroot = noread only = nolist = nomax connections = 200timeout = 600auth users = RSYNC_USERhosts allow = 172.16.51.191 注意:权限不要搞错了!上面填写的uid是root,gid是sftp,是因为/data/sftp/[root@sftp-test02 ~]# ll -d /data/sftpdrwxr-xr-x 3 root root 4096 Nov 21 05:21 /data/sftp[root@sftp-test02 ~]# ll /data/sftp/total 4drwxr-xr-x 3 root sftp 4096 Nov 21 07:28 mysftp 创建用户认证文件[root@sftp-test02 ~]# vim /etc/rsync.passRSYNC_USER:123456@rsync 设置文件权限,即rsyncd.conf和rsync.pass认证文件都是600权限![root@sftp-test02 ~]# chmod 600 /etc/rsyncd.conf[root@sftp-test02 ~]# chmod 600 /etc/rsync.pass 重启rsync服务[root@sftp-test02 ~]# /etc/init.d/xinetd restartStopping xinetd:                                           [  OK  ]Starting xinetd:                                           [  OK  ][root@sftp-test02 ~]# lsof -i:873COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAMExinetd  3797 root    5u  IPv6  16264      0t0  TCP *:rsync (LISTEN) 2)在源服务器172.16.51.191上的部署过程[root@sftp-test01 ~]# yum install rsync xinetd[root@sftp-test01 ~]# vim /etc/xinetd.d/rsync......   disable  = no......[root@sftp-test01 ~]# /etc/init.d/xinetd startStarting xinetd:                                           [  OK  ][root@sftp-test01 ~]# lsof -i:873COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAMExinetd  3444 root    5u  IPv6  15917      0t0  TCP *:rsync (LISTEN) 创建同步的密码文件,这个文件名可以跟服务端的认证文件不一样,但是里面的密码必须一致!用于rsync同步命令中。不过,最好两边的文件设置成一样,便于管理[root@sftp-test01 ~]# cat /etc/rsync.pass123456@rsync 设置rsync.pass密码文件为600权限[root@sftp-test01 ~]# chmod 600 /etc/rsync.pass 查看服务器内核是否支持inotify,出现下面的内容,说明服务器内核支持inotify[root@sftp-test01 ~]# ll /proc/sys/fs/inotifytotal 0-rw-r--r-- 1 root root 0 Nov 21 08:12 max_queued_events-rw-r--r-- 1 root root 0 Nov 21 08:12 max_user_instances-rw-r--r-- 1 root root 0 Nov 21 08:12 max_user_watches 注意:Linux下支持inotify的内核最小为2.6.13,可以输入命令:uname -a查看内核CentOS 5.X 内核为2.6.18,默认已经支持inotify[root@sftp-test01 ~]# uname -aLinux sftp-test01 2.6.32-696.13.2.el6.x86_64 #1 SMP Thu Oct 5 21:22:16 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 下面开始安装inotify-tools[root@sftp-test01 ~]# yum install make gcc gcc-c++[root@sftp-test01 ~]# cd /usr/local/src/[root@sftp-test01 src]# wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz[root@sftp-test01 src]# tar zxvf inotify-tools-3.14.tar.gz[root@sftp-test01 src]# cd inotify-tools-3.14[root@sftp-test01 inotify-tools-3.14]#  ./configure --prefix=/usr/local/inotify[root@sftp-test01 inotify-tools-3.14]# make && make install 发现已经成功安装inotify-tools了[root@sftp-test01 inotify-tools-3.14]# ll -d /usr/local/inotify/drwxr-xr-x 6 root root 4096 Nov 21 08:14 /usr/local/inotify/ 设置系统环境变量[root@sftp-test01 inotify-tools-3.14]# vim /etc/profile.......export PATH=$PATH:/usr/local/inotify/bin[root@sftp-test01 inotify-tools-3.14]# source /etc/profile 添加库文件[root@sftp-test01 inotify-tools-3.14]# vim /etc/ld.so.conf....../usr/local/inotify/lib[root@sftp-test01 inotify-tools-3.14]# ldconfig 修改inotify默认参数(inotify默认内核参数值太小)查看系统默认参数值[root@sftp-test01 inotify-tools-3.14]# sysctl -a | grep max_queued_eventsfs.inotify.max_queued_events = 16384[root@sftp-test01 inotify-tools-3.14]# sysctl -a | grep max_user_watchesfs.inotify.max_user_watches = 8192fs.epoll.max_user_watches = 796344[root@sftp-test01 inotify-tools-3.14]# sysctl -a | grep max_user_instancesfs.inotify.max_user_instances = 128 [root@sftp-test01 inotify-tools-3.14]# sysctl -w fs.inotify.max_queued_events="99999999"fs.inotify.max_queued_events = 99999999[root@sftp-test01 inotify-tools-3.14]# sysctl -w fs.inotify.max_user_watches="99999999"fs.inotify.max_user_watches = 99999999[root@sftp-test01 inotify-tools-3.14]# sysctl -w fs.inotify.max_user_instances="65535"fs.inotify.max_user_instances = 65535 参数说明:max_queued_events:inotify队列最大长度,如果值太小,会出现"** Event Queue Overflow **"错误,导致监控文件不准确max_user_watches:要同步的文件包含多少目录,可以用:find /Data/xqsj_upload -type d | wc -l 统计这些源目录下的目录数,必须保证max_user_watches值大于统计结果(这里/Data/xqsj_upload为同步的源文件目录)max_user_instances:每个用户创建inotify实例最大值 接着执行同步操作:在源服务器上执行rsync首次全量同步的操作(加--delete参数,保持目标目录和源目录下文件绝对一致)[root@sftp-test01 ~]# rsync -avH --port=873 --progress --delete /data/sftp/ [email protected]::sftp_upload --password-file=/etc/rsync.pass 待第一次rsync全量同步完成后,就进行rsync+inotify实时同步脚本操作。实时同步脚本里添加的是--delete-before参数,而不是--delete参数(第一次全量同步时rsync用的参数),二者区别:--delete参数:表示rsync同步前,暴力删除目标目录中的所有文件,然后再执行同步操作。--delete-before参数:表示rsync同步前,会先对目标目录进行一次扫描检索,删除目标目录中对比源目录的多余文件,然后再执行同步操作。显然比--delete参数安全些。 [root@sftp-test01 data]# cd /data/script/[root@sftp-test01 script]# vim sftp_data_rsync.sh#!/bin/bashSRCDIR=/data/sftp/USER=RSYNC_USERIP=172.16.51.192DESTDIR=sftp_upload/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib,move $SRCDIR | while read filedo/usr/bin/rsync -avH --port=873 --progress --delete-before $SRCDIR $USER@$IP::$DESTDIR --password-file=/etc/rsync.passecho " ${file} was rsynced" >> /tmp/rsync.log 2>&1done [root@sftp-test01 script]# chmod 755 sftp_data_rsync.sh[root@sftp-test01 script]# nohup sh sftp_data_rsync.sh &          //按ctrl+c结束[1] 8807[root@sftp-test01 script]# ps -ef|grep inotifyroot      8808  8807  0 22:55 pts/0    00:00:00 /usr/local/inotify/bin/inotifywait -mrq --timefmt %d/%m/%y %H:%M --format %T %w%f%e -e close_write,modify,delete,create,attrib,move /data/sftp/root      8811  8451  0 22:55 pts/0    00:00:00 grep inotify 这样,sftp-test01机器的/data/sftp目录下的文件就会自动实时同步到sftp-test02机器的/data/sftp目录下注意:这是单向实时同步!如果要想做双向实时同步!那就需要在sftp-test02机器上再做个inotify监控脚本(同时,sftp-test01也要做个rsyncd.conf文件)  四、SFTP结合Keepalived做双机高可用1)下载安装Keepalived(两台机器同样操作)[root@sftp-test01 ~]# cd /usr/local/src/[root@sftp-test01 src]# wget http://www.keepalived.org/software/keepalived-1.3.2.tar.gz[root@sftp-test01 src]# tar -zvxf keepalived-1.3.2.tar.gz[root@sftp-test01 src]# cd keepalived-1.3.2[root@sftp-test01 keepalived-1.3.2]# ./configure && make && make install[root@sftp-test01 keepalived-1.3.2]# cp /usr/local/src/keepalived-1.3.2/keepalived/etc/init.d/keepalived /etc/rc.d/init.d/[root@sftp-test01 keepalived-1.3.2]# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/[root@sftp-test01 keepalived-1.3.2]# mkdir /etc/keepalived[root@sftp-test01 keepalived-1.3.2]# cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/[root@sftp-test01 keepalived-1.3.2]# cp /usr/local/sbin/keepalived /usr/sbin/[root@sftp-test01 keepalived-1.3.2]# echo "/etc/init.d/keepalived start" >> /etc/rc.local 2)配置Keepalived.conf文件[root@sftp-test01 keepalived-1.3.2]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak[root@sftp-test01 keepalived-1.3.2]# vim /etc/keepalived/keepalived.conf! Configuration File for keepalived   global_defs {notification_email {[email protected]}   notification_email_from [email protected]smtp_server smtp.wangshibo.comsmtp_connect_timeout 30router_id master-node}   vrrp_script chk_sftp_port {    script "/data/chk_sftp.sh"     interval 2                    weight -5                fall 2                  rise 1  }   vrrp_instance VI_1 {     state MASTER    interface eth0    mcast_src_ip 172.16.51.191    virtual_router_id 51     priority 101           advert_int 1                authentication {                auth_type PASS                auth_pass 1111           }    virtual_ipaddress {                 172.16.51.193    }  track_script {                        chk_sftp_port     }}  sftp-test02服务器作为backup端的Keepalived.conf配置如下:[root@sftp-test02 keepalived-1.3.2]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak[root@sftp-test02 keepalived-1.3.2]# vim /etc/keepalived/keepalived.conf! Configuration File for keepalived   global_defs {notification_email {[email protected]}   notification_email_from [email protected]smtp_server smtp.wangshibo.comsmtp_connect_timeout 30router_id slave-node}   vrrp_script chk_sftp_port {    script "/data/chk_sftp.sh"     interval 2                    weight -5                fall 2                  rise 1  }   vrrp_instance VI_1 {     state BACKUP    interface eth0    mcast_src_ip 172.16.51.192    virtual_router_id 51     priority 99           advert_int 1                authentication {                auth_type PASS                auth_pass 1111           }    virtual_ipaddress {                 172.16.51.193    }  track_script {                        chk_sftp_port     }} 编写sftp监控脚本(两台机器都要写)[root@sftp-test01 keepalived-1.3.2]# vim /data/chk_sftp.sh#!/bin/bashcounter=$(/etc/init.d/sshd status|grep running|wc -l)if [ "${counter}" = "0" ]; then    /etc/init.d/sshd start    sleep 2    counter=$(/etc/init.d/sshd status|grep running|wc -l)    if [ "${counter}" = "0" ]; then        /etc/init.d/keepalived stop    fifi[root@sftp-test01 keepalived-1.3.2]# chmod 755 /data/chk_sftp.sh 3)两台机器都要启动Keepalived[root@sftp-test01 ~]# /etc/init.d/keepalived start[root@sftp-test02 ~]# /etc/init.d/keepalived start 启动后发现sftp-test01已经有了vip资源[root@sftp-test01 ~]# ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo    inet6 ::1/128 scope host       valid_lft forever preferred_lft forever2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000    link/ether 02:f6:cb:83:ad:03 brd ff:ff:ff:ff:ff:ff    inet 172.16.51.191/24 brd 172.16.51.255 scope global eth0    inet 172.16.51.193/32 scope global eth0    inet6 fe80::f6:cbff:fe83:ad03/64 scope link       valid_lft forever preferred_lft forever  4)高可用测试:-> 先关闭sftp-test01机器的Keepalived服务,发现vip资源就会自动漂到sftp-test02机器上继续提供服务。   当sftp-test01机器的Keepalived服务恢复后,vip资源就会自动抢占回来。-> 关闭sftp-test01机器的ssh服务,通过脚本会自动启动ssh服务,当启动失败后,会强制关闭Keepalived服务,从而实现vip资源的漂移! 注意:在FileZilla客户端里使用172.16.51.193的vip进行连接。可以在FileZilla客户端的"文件"里建立"新站点",协议”SFTP登陆类型:正常

======================================================
发现上面双向实时同步的高可用方案实施后,文件上传到ftp目录下的状态有点问题,有的文件上传后大小变化严重以至文件损坏,无法打开!
后面将双向实时同步策略关闭,往单个机器上传文件就没问题,判断是rsync+inotify双向实时同步造成的。

调整后的新方案:编写一个监控vip资源的脚本,当vip在哪台机器上时,就做这台机器到另一台的rsync单向同步操作,并且后台一直运行这个脚本(通过循环语句保证脚本一直运行)放弃原来的rsync+inotify双向实时同步脚本! 脚本内容如下:停止之前的rsync+inotify实时监控脚本,然后做两台机器的相互信任关系。 1)第一台机器sftp-test01的操作[root@sign-test01 ~]# cat /data/script/sftp_vip_monit.sh#!/bin/bashwhile [ "1" = "1" ]do  NUM=`ip addr|grep 172.16.51.193|wc -l`  if [ $NUM -eq 0 ];then     echo "vip is not at this server" >/dev/null 2>&1  fi   if [ $NUM -eq 1 ];then     /usr/bin/rsync -e "ssh -p22" -avpgolr --progress --delete-before /data/sftp/mysftp/ root@172.16.51.192:/data/sftp/mysftp/  fi done  [root@sign-test01 ~]# chmod 755 /data/script/sftp_vip_monit.sh[root@sign-test01 ~]# nohup sh /data/script/sftp_vip_monit.sh &      //按ctrl+c结束[root@sign-test01 ~]# ps -ef|grep monitroot     10581 22167  0 19:42 pts/0    00:00:00 grep monitroot     15113     1  8 17:15 ?        00:13:00 sh sftp_vip_monit.sh 2)第二台机器sftp-test02[root@sign-test02 ~]# cat /data/script/sftp_vip_monit.sh#!/bin/bashwhile [ "1" = "1" ]do  NUM=`ip addr|grep 172.16.51.193|wc -l`  if [ $NUM -eq 0 ];then     echo "vip is not at this server" >/dev/null 2>&1  fi   if [ $NUM -eq 1 ];then     /usr/bin/rsync -e "ssh -p22" -avpgolr --progress --delete-before /data/sftp/mysftp/ root@172.16.51.191:/data/sftp/mysftp/  fi done [root@sign-test02 ~]# chmod 755 /data/script/sftp_vip_monit.sh[root@sign-test02 ~]# nohup sh /data/script/sftp_vip_monit.sh &      //按ctrl+c结束[root@sign-test02 ~]# ps -ef|grep monitroot     10581 22167  0 19:42 pts/0    00:00:00 grep monitroot     15113     1  8 17:15 ?        00:13:00 sh sftp_vip_monit.sh

=================创建sftp只读账号================

原则上来说,sftp账号登录后只能限定到其用户家目录下,即不能遍历除其家目录下之外的任何其他目录!sftp添加只读账号,这里我采用的方法如下(有些复杂,但经测试可用):  sftp-test01和sftp-test02两个节点机操作一样[root@sftp-test01 ~]# useradd -g sftp -s /bin/false readftp[root@sftp-test01 ~]# passwd readftp  [root@sftp-test01 ~]# mkdir /data/sftp/readftp[root@sftp-test01 ~]# usermod -d  /data/sftp/readftp readftp  [root@sftp-test01 ~]# chown root:sftp /data/sftp/readftp[root@sftp-test01 ~]# chmod 755 /data/sftp/readftp  # 注意将readftp下的upload目录权限设置成写账号mysftp权限,这样readftp账号登录后就只有读权限。[root@sftp-test01 ~]# mkdir /data/sftp/readftp/upload[root@sftp-test01 ~]# chown mysftp:sftp /data/sftp/readftp/upload  由于上面已经编写了两个节点机关于/data/sftp/mysftp/目录的实时同步脚本sftp_vip_monit.sh下面再在两台机器上编写:本机/data/sftp/mysftp/upload/到/data/sftp/readftp/upload/目录的实时同步脚本readftp_monit.sh  1)sftp-test01节点上[root@sftp-test01 ~]# cd /data/script/[root@sftp-test01 script]# vim readftp_monit.sh#!/bin/bashwhile [ "1" = "1" ]do  /usr/bin/rsync -e "ssh -p22" -avpgolr --delete-before /data/sftp/mysftp/upload/ /data/sftp/readftp/upload/done[root@sftp-test01 script]# nohup sh readftp_monit.sh &         #按ctrl+c结束    [root@sftp-test01 script]# ps -ef|grep monitroot      5285 17061  0 11:37 pts/0    00:00:07 sh readftp_monit.shroot     22713 17061  0 10:42 pts/0    00:00:29 sh sftp_vip_monit.shroot     28893 17061  0 12:00 pts/0    00:00:00 grep monit  2)sftp-test02节点上[root@sftp-test02 ~]# cd /data/script/[root@sftp-test02 script]# vim readftp_monit.sh#!/bin/bashwhile [ "1" = "1" ]do  /usr/bin/rsync -e "ssh -p22" -avpgolr --delete-before /data/sftp/mysftp/upload/ /data/sftp/readftp/upload/done[root@sftp-test02 script]# nohup sh readftp_monit.sh &         #按ctrl+c结束    [root@sftp-test02 script]# ps -ef|grep monitroot      5285 17061  0 11:37 pts/0    00:00:07 sh readftp_monit.shroot     22713 17061  0 10:42 pts/0    00:00:29 sh sftp_vip_monit.shroot     28893 17061  0 12:00 pts/0    00:00:00 grep monit  以上操作做,就能保证mysftp为写账号,readftp为只读账号,思路:a)通过mysftp账号登录sftp服务后,可以进行上传、创建,删除和下载的读写操作,操作的文件存在在/data/sftp/mysftp/upload目录下,然后实时同步到   /data/sftp/readftp/upload目录下。b)通过readftp账号登录sfto服务器,只能进行下载的只读操作。由于/data/sftp/mysftp/upload为mysftp权限,没有写权限。而且就算可以进行写操作,写  之后的文件放在/data/sftp/mysftp/upload目录下也会被覆盖掉(因为跟mysftp/upload单向实时同步的),也即写操作失败!

=================只读账号目录权限的坑===================
根据上面的操作完成后, 只读账号readftp登录后, 对于上传的目录下的文件看不到了!! 这是问什么呢??
这是因为readftp只读账号登录后的/data/sftp/readftp/upload/下上传的目录权限不够导致的! 应该赋予755权限.
[root@localhost ~]# ll /data/sftp/readftp/upload/
total 72
drwxr--r-- 2 rbn sftp 4096 Feb 28 13:23 20190225
drwxr--r-- 2 rbn sftp 4096 Feb 27 12:05 20190226
-rwxr--r-- 1 rbn sftp 54 Feb 26 16:52 dir.qdp.mvfc_appo_acct_dtl.20190224.000.00.i
-rwxr--r-- 1 rbn sftp 54 Feb 26 13:51 dir.qdp.mvfc_appo_acct_dtl.20190225.000.00.i

通过/data/script/readftp_monit.sh脚本可知, /data/sftp/readftp/upload下的文件目录权限都是同步/data/sftp/mysftp/upload的.
所以正确做法: 保证/data/sftp/mysftp/upload下的目录一直是755权限

[root@sftp-test01 script]# vim readftp_monit.sh
#!/bin/bash
while [ "1" = "1" ]
do
     /usr/bin/rsync -e "ssh -p22" -avpgolr --delete-before /data/sftp/mysftp/upload/ /data/sftp/readftp/upload/
     /bin/chmod -R 755 /data/sftp/mysftp
done

调整后, 只读账号readftp登录后,上传的目录权限应该是755就可以了
[root@localhost ~]# ll /data/sftp/readftp/upload/
total 72
drwxr-xr-x 2 rbn sftp 4096 Feb 28 13:23 20190225
drwxr-xr-x 2 rbn sftp 4096 Feb 27 12:05 20190226
-rwxr-xr-x 1 rbn sftp 54 Feb 26 16:52 dir.qdp.mvfc_appo_acct_dtl.20190224.000.00.i
-rwxr-xr-x 1 rbn sftp 54 Feb 26 13:51 dir.qdp.mvfc_appo_acct_dtl.20190225.000.00.i

================sftp日常运维维护命令===============

cd 路径                        更改到远程目录的路径lcd 路径                       更改到本地目录的路径chgrp group path               将文件path的组更改为groupchmod mode path                将文件path的权限更改为modechown owner path               将文件path的属主更改为ownerexit                           退出 sftphelp                           显示这个帮助文本get 远程路径                    下载文件ln existingpath linkpath       符号链接远程文件ls [选项] [路径]                显示远程目录列表lls [选项] [路径]               显示本地目录列表mkdir 路径                     创建远程目录lmkdir 路径                    创建本地目录mv oldpath newpath            移动远程文件open [用户@]主机[:端口]         连接到远程主机put 本地路径                   上传文件pwd                           显示远程工作目录lpwd                          打印本地工作目录quit                          退出 sftprmdir 路径                    移除远程目录lrmdir 路径                   移除本地目录rm 路径                       删除远程文件lrm 路径                      删除本地文件symlink existingpath linkpath    符号链接远程文件version                          显示协议版本 ===============================================================================sftp mysftp@192.168.10.191                           #ssh是默认22端口的连接方法sftp -o port=6666 mysftp@192.168.10.191              #ssh是6666非默认端口的连接方法

链接:https://www.cnblogs.com/kevingrace/p/7868049.html

(版权归原作者所有,侵删)

微信扫码关注该文公众号作者

来源:马哥Linux运维

相关新闻

用乐高来记录家庭旅行时刻,留下美好的回忆看似寻常的罐装汽水,Airbnb放任屋主装设针孔摄影机,10年客诉记录数万起[电脑] ProArt 创艺国度 记录一次紧张的装机加州别墅和公寓及联排房价中位数是多少?美国房产销售创下1995年来最低销售记录!美国房产最前线 孙斯陶 2024.01.24记录慈母关怀监狱青年跨越高墙的爱 新片《爱子归来》温暖人心“顺着网线打死你!”美国亚裔男子打飞的千里锤击网友;可口可乐继承人被判罚$9亿,创下全美性侵赔偿金最高记录手动高嘲和X生活高嘲,有什么不同?真实记录多位女性的自述分享 Linux 下一个强大的现代 Shell 历史记录全世界拥有最多乐高套装之人的吉尼斯纪录被刷新!新记录保持者拥有超过6000套乐高套装!高亚麟被曝出轨、家暴,聊天记录曝光,塌房风刮到《家有儿女》了"每个纽约人的噩梦"纽约"神经"女将俩女游客推下地铁,"疯婆"恶行累累,已有9进宫记录。马斯克脑机接口再造奇迹:瘫痪小伙意念玩赛车击败正常人,打破光标控制记录,产生271页宝贵数据保存微信聊天记录?这个方法有点东西!西雅图年轻一代房主的数量打破了历史记录房产|硅谷房价中位数达到200万美元,创全美记录!最航运 | 赫伯罗特Q2电话会议问答环节记录以及市场资讯郑刚教授:心脏植入式电子设备记录的房颤负荷与死亡率相关揭秘EB-5项目真相!投资人赴美实地考察全记录太厉害!新西兰队摘下10金创记录!工人、老板、会计……他们还有另一重身份!不过,闭幕式上NZ被消失了……最航运 | 马士基第二季度财报电话会议问答环节完整记录!耶鲁博士爸辞职“体育鸡娃”,10年后女儿一路破老虎伍兹记录、进斯坦福……真难!美国人再次刷新“卡债”记录,近一半佛州家庭入不敷出! !好样的!19岁华裔少年争创独自飞行七大洲记录!欲为儿童癌症研究募集百万!8年终消掉的“犯罪记录”
logo
联系我们隐私协议©2024 bendi.news
Bendi新闻
Bendi.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Bendi.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。