欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

linux创建SFTP用户 有大用 有大大用

服务器要通过SFTP接收一个文件,创建一个用户专门通过SFTP连接、上传文件用,但不允许通过该用户登陆。记录下步骤以及遇到的报错。

步骤

需要root用户。
这次创建用户名sftpuser,所属群组sftp。sftpuser的用户目录建在/data/sftpuser

#创建sftp群组
groupadd sftp
#创建用户sftpuser,指定群组sftp,不允许登陆
useradd -g sftp -M -s /sbin/nologin sftpuser
#修改下密码
passwd sftpuser

#创建sftpuser的home目录
mkdir -p /data/sftpuser
chmod 755 /data
chmod 755 /data/sftpuser
usermod -d /data/sftpuser sftpuser

#修改ssh配置文件
vim /etc/ssh/sshd_config
#找到下面语句,注释掉
#SubSystem sftp /usr/libexec/sftp-server
#然后添加以下配置
Subsystem sftp internal-sftp
AllowTcpForwarding no
X11Forwarding no
Match Group sftp
ChrootDirectory %h
ForceCommand internal-sftp

修改完:x 保存退出。然后重启sshd
service sshd restart

然后应该就可以连接登陆了
sftp sftpuser@localhost

但sftpuser目前没有写权限,创建一个目录,给它分配写权限

mkdir -p /data/sftpuser/file/receive
chown sftpuser:sftp /data/sftpuser/file/receive
chmod 755 /data/sftpuser/file/receive

然后就可以在/file/receive上传文件

踩坑和解决

开始按步骤配置好后,连接报错。

packet-write-wait:Connection to xxx port 22:Broken pipe

从这看不出错误原因。可以去操作系统的日志查看
在/var/log/下secure.log里
可以查看到有一条日志:

fatal:bad ownership or modes for chroot directory component "/home/"

看报错大概是/home/的所有权或者权限有问题。事实上,我最开始用户目录创建在/home/sftpuser。SFTP登陆的路径,要求各层级都归属root且其他用户都没有写权限,而我服务器上/home不是归属root用户的。

所以把sftpuser的用户目录改在了/data/sftpuser,然后/data和/data/sftpuser的所有权都归属到root用户,文件权限都改成755,然后就可以了。


来自  https://www.cnblogs.com/three-xj/p/16944834.html


普通分类: