背景:客户需要到我服务器上存取文件,单独给他创建sftp账号。
步骤:
1、创建一个sftp用户,名称暂定为sjzx_sftp_user,并修改密码
useradd -s /sbin/nologin -M sjzx_sftp_user
passwd sjzx_sftp_user
2、创建根目录,这里就先以 用户名为 根目录名
mkdir /sjzx_sftp_user
#需要设置该目录的权限,确保该目录及该目录以上的系统根目录的拥有者都只能是root用户
chown root:root /sjzx_sftp_user
#其次要确保该跟目录往上的根目录都不可以具有群组写入权限
chmod 755 /sjzx_sftp_user
3、创建用户sjzx_sftp_user目录,这里设置目录名为upload
mkdir /sjzx_sftp_user/upload
#同时给该用户赋予sjzx_sftp_user该sftp用户的目录权限:
chown root:sjzx_sftp_user /sjzx_sftp_user/upload
#这里的目录sftp的权限也只能是755,否则无法限制目录,切记切记
chmod 755 /sjzx_sftp_user/upload
#最后在upload目录创建一个temp工作目录给sjzx_sftp_user用户用来各种操作
mkdir /sjzx_sftp_user/upload/temp
#因为要让用户读写操作,所以权限给777
chmod 777 /sjzx_sftp_user/upload/temp
4、修改配置文件,记得先备份
vim /etc/ssh/sshd_config
配置内容详细说下:
注释掉这行:#Subsystem sftp /usr/libexec/openssh/sftp-server
然后添加下面的内容:
Subsystem sftp internal-sftp
Match User sftpuser #匹配用户,如果要匹配多个组,多个组之间用逗号分隔
ChrootDirectory /sjzx_sftp_user/upload #用chroot将指定用户的根目录
ForceCommand internal-sftp #指定sftp命令
X11Forwarding no #这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉
AllowTcpForwarding no
5、重启sshd服务
systemctl restart sshd.service 或者用 service sshd restart
6、测试连接
sftp -oPort=22 sjzx_sftp_user@ip地址
ps:最终效果:
用户连接sftp后进入/sjzx_sftp_user/upload/,不能访问upload以上目录,
进入咱们给定的/sjzx_sftp_user/upload/temp的工作目录,
在temp目录内该用户可随意操作(传输文件,增删改查等操作)