我们都知道,SFTP对目录有两个限制:

1、目录开始一直往上到系统根目录为止都只能是root

2、目录开始一直往上到系统根目录位置都不可以具有群组写入限制


举个例子,有sftp配置如下:

# Subsystem     sftp   /usr/libexec/openssh/sftp-server

UseDNS no

AddressFamily inet

PermitRootLogin yes

SyslogFacility AUTHPRIV

PasswordAuthentication yes

Subsystem       sftp    internal-sftp

Match Group sftp

ChrootDirectory /data/sftp/%u

ForceCommand    internal-sftp

AllowTcpForwarding no

X11Forwarding no

上面红色部分代表的目录,有以下限制:

1、/、/data、/data/sftp目录所属都只能是root

2、/、/data、/data/sftp目录的属组不可以有写的权限


如果是我们使用nfs作为sftp的目录的话,肯定是需要rw权限的。但是在mount指定rw后,权限会变成777(如下),这样就违背了sftp的权限限制,导致sftp不可用

[root@localhost /]# ls -ld /data

drwxrwxrwt 3 root root 4096 Dec 10 18:05 /data

有人可能想到通过chmod方式,改变挂载目录的,但是也会报错,如下:

[root@localhost /]# chmod 755 data

chmod: changing permissions of ‘data’: Operation not permitted


其实解决方法很简单,只能在/下面建立一个软件,如下:

ln -s /data/sftp  /sftp

然后改下sftp的配置

ChrootDirectory /data/sftp/%u   改成  ChrootDirectory  /sftp/%u

重启sftp,亲测可上传下载。