服务器要通过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配置文件
vi /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,然后就可以了。
标签:sftpuser,创建,用户,sftp,linux,home,SFTP,data From: https://www.cnblogs.com/three-xj/p/16944834.html