昨天折腾一晚上,给linux服务器设立一个厂商的sftp账号,让他只能访问这个文件夹,看不到我服务器的其他内容,所以还要限制它shell登录,步骤详细如下:
1、创建sftp组
groupadd sftp
2、创建一个sftp用户,用户名为andy
useradd -g sftp -s /bin/false amy
3、修改密码为haoroot
passwd amy
4、sftp组的用户的home目录统一指定到/data/sftp下
mkdir -p /data/sftp/amy
5、指定andy的home为/data/sftp/amy
usermod -d /data/sftp/amy amy
6、配置sshd_config
vi /etc/ssh/sshd_config
输入/Subsystem搜索到下列内容,然后注释
# Subsystem sftp /usr/libexec/openssh/sftp-server
在文件结尾处添加
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
然后按Esc ,输入: wq保存配置文件。7、设定Chroot目录权限
chown root:sftp /data/sftp/amy
chmod 755 /data/sftp/amy
8、建立SFTP用户登入后可写入的目录
mkdir /data/sftp/amy/upload
chown amy:sftp /data/sftp/amy/upload
chmod 755 /data/sftp/amy/upload
9、修改/etc/selinux/config
vi /etc/selinux/config
#SELINUX=enforcing
#改为
#SELINUX=disabled
10、关闭SELINUX生效
输入命令
setenforce 0
11、重启sshd服务
service sshd restart
但是!!!意外就在这个时候发生了。。。死活连不上!就是连不上!!报错如下:
> Write failed: Broken pipe
> Couldn't read packet: Connection resetby peer
查看/var/log/secure,发现如下一个错误fatal: bad ownership or modes for chrootdirectory component "/data/"
这大概就是“目录的属主和权限配置不当”的意思。“在sftp配置中,ChrootDirectory /var/www/project,参数限定用户登录sftp后的活动范围。这个参数配置要求比较严格,需要限制目录的每个上级目录的属主都是root,例如/var/www/project,它就要求/ /var /var/www三个目录的owner都是root。如果不好更改,可以用软链接的形式实现,例如 ln -s /var/www/project /home/project ”,这段话是我参考的,试用了但是真的软连接也没有卵用。过了3个小时,我就陷入这个怪圈。之后,经大神提示,换了个路径,一样的步骤后,可以登录了。
冷笑一声,继续找原因。
原来是我的/data/的空间是另一个服务器的硬盘挂载到我的服务器的,再怎么更改属性也不管用。
还有一个问题,我发现就是用户名和文件夹名也要统一(比如),不然也是进不去滴,这个很多教程里没说~
这下好了,智商受到了碾压,也吸取了深深的教训。
感慨:linux太博大精深了,太无极限了。