我们都知道,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,亲测可上传下载。