0. 背景
Linux机器上已有路径/data/tomcat/apache-tomcat-8.5.96/webapps/webroot
,需要在该路径之下配置一个sftp用户账户对外暴露给业务人员使用。
下面是相关配置:
-
SFTP 用户名:iios
-
SFTP主目录:
/data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp
-
iios用户的sftp目录(用户根目录):
/data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/iios
-
iios用户sftp上传目录:
/data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/iios/upload
下面的命令皆在root用户下操作完成
1. 创建sftp相关目录 && 生成 sftp用户
创建目录:
mkdir -p /data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/iios/upload
为什么创建了 /sftp/iios/upload 三级目录?
当sftp的方式用户登录到用户根目录(/sftp/iios/)后,根目录是无法写入的。所以还需要在用户根目录下创建upload目录。详细解释在后文
创建角色:
-
创建用户组:
groupadd sftp
-
useradd -g sftp -M -s /sbin/nologin iios
- -g :指定用户组
- -M :不要创建该用户的家目录
- -s:指定该用户登录后使用的shell
- /sbin/nologin 与 /bin/false 区别
-
配置该用户密码:passwd iios
2. 修改sftp 配置文件
-
vi /etc/ssh/sshd_config
# Subsystem sftp /usr/libexec/openssh/sftp-server #注释掉此行并添加下列多行 Subsystem sftp internal-sftp Match User iios ChrootDirectory /data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/ #chroot目录,按需自定义 X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp
注意:ChrootDirectory 目录不能直接配置到用户sftp上传目录,需要配置到上一级即用户根目录
-
重启ssh服务:
service sshd reload
orsystemctl restart sshd
3. 配置sftp目录权限
注意:ChrootDirectory 的权限设定有两个非常重要的规则
- 从该目录开始上钻到系统根目录为止的目录的所有者有且仅是root
- 从该目录开始上钻到系统根目录为止的目录都不能具有群组写入权限
如果你的目录层级较多,记得逐级检查!!!
按上述规则设置SFTP主目录与用户根目录的目录权限
chown root:root /data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/
chown root:root /data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/iios
chmod 755 /data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/
chmod 755 /data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/iios
将iios用户sftp上传目录的目录权限设置为 iios ,这样iios才可以上传文件
chown iios:sftp data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/iios/
chmod 777 /data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/iios/
4. 测试sftp
- 终端中测试sftp 是否能登录: sftp iios@localhost
- 之后使用sftp工具上传文件
5. QA
- 为什么创建了 /sftp/iios/upload 三级目录?
-
- sshd_config配置文件的
ChrootDirectory
配置的路径属主必须是root且只有属主拥有写权限,即ChrootDirectory
(…/sftp/iios)最大权限也只有755 - 即在iios的用户根目录中,iios用户没有写入权限
- 为了保证iios有写入权限,只能在用户根目录再创建一个子目录(/upload),由于该目录不受规则约束,所以可以自由设置权限例如777
- sshd_config配置文件的