linux添加sftp账户并设置只能在规定的目录且无法ssh

目的:

为一个服务器创建一个只能使用sftp,并且限定目录在某个子目录的用户。为了之后方便,设置一个用户组,之后添加用户到这里面即可。

步骤:

创建用户和用户组

首先,肯定是要个用户的,并且为了限制他登录,需要设置为nologin,尝试过后得到此参数可以限制。(并且需要注意的是,在允许的shell类型中需要加入/sbin/nologin)

添加shell类型(如果有则无需添加)

sudo vim /etc/shells

linux添加sftp账户并设置只能在规定的目录且无法ssh_第1张图片

创建用户组和sftp用户

-g设定用户组,-d设定登录路径,详情查看菜鸟教程

sudo groupadd sftpUser
sudo useradd -d /home/sftpUser -s /sbin/nologin -g sftpUser tyyh
sudo passwd tyyh # 改个密码
修改sshd_config

sftp是ssh的子模块,需要在其中修改参数,我使用cp进行备份。

参数解释:

Match User tyyh:这行配置用于匹配用户名为"tyyh"的用户。如果要匹配多个用户,可以使用逗号分隔不同的用户名。或者直接Match Group

"ForceCommand internal-sftp" 是一个 OpenSSH(开放式安全外壳协议)的配置选项。它用于限制通过 SSH 连接访问服务器的用户仅能使用 SFTP(SSH 文件传输协议)进行文件传输,而不能执行任何其他命令。

ChrootDirectory /home/sftpUser:这行配置使用chroot将指定用户的根目录限制为/home/sftpUser。

X11Forwarding no:这行配置禁止用户使用X11转发功能,这意味着用户无法在SFTP会话中打开图形界面应用程序。

AllowTcpForwarding no:这行配置禁止用户进行TCP端口转发。这样,用户无法通过SFTP会话在服务器上进行端口转发操作。

cd /etc/ssh
sudo cp -p sshd_config sshd_configbak1018
sudo vim sshd_config
----------------------------
注释: #Subsystem sftp /usr/libexec/openssh/sftp-server

并加上:

Subsystem sftp internal-sftp #指定使用sftp服务使用系统自带的internal-sftp,如果不添加,用户无法通过sftp登录。

并且在文件的末尾加入如下参数,其中特别要注意的是(使用chrootDirectory的这个目录,需要设定为root用户组权限,并且这个参数的先后顺序挺重要的,不然配置无法修改,跟后面的某些参数冲突)

Match User tyyh

ChrootDirectory /home/sftpUser

ForceCommand internal-sftp

X11Forwarding no

AllowTcpForwarding no

为该用户组创建对应能用的目录
cd /home
mkdir sftpUser
sudo chown -R root:root ./sftpUser/
sudo chmod -R 755 ./sftpUser/
cd sftpUser/
mkdir fileStore
sudo chown tyyh:sftpUser fileStore/
sudo chmod 777 fileStore/
重启ssh服务

service sshd restart

成功结果

配置修改成功:

sftp路径:

sftp服务日志查看

查看syslogfacility可得到我们的具体日志路径,大概在/var/log/%syslogfacility里

如我的日志就在路径:/var/log/authpriv.log 

linux添加sftp账户并设置只能在规定的目录且无法ssh_第2张图片

总结

特别是权限问题,卡了我很久,sshd_config中的ChrootDirectory没想到居然要root权限才能正常使用,否则ssh和sftp都会报错。对于linux的权限还是要多多注意。

遇到错误排查过程

修改配置后发现报错,修改配置失败:

Restarting sshd (via systemctl):  Job for sshd.service failed because the control process exited with error code.

根据报错指引查看status:

linux添加sftp账户并设置只能在规定的目录且无法ssh_第3张图片

上网查询得到结果后修改添加位置后能正常修改配置:

然后重新发现问题:

配完配置后,该用户的ssh,sftp出问题,所以一个一个排查问题:

linux添加sftp账户并设置只能在规定的目录且无法ssh_第4张图片

将shell类型改为正常,并且删除sshd配置文件中对该用户组的配置:

可以正常登录,但是没有完成限制

linux添加sftp账户并设置只能在规定的目录且无法ssh_第5张图片

编辑

将shell改为nologin:

毫无变化,照样可以sftp登录,可以确认是在配置中的配置参数有误。测试了可以得到所有能看到的文件:

linux添加sftp账户并设置只能在规定的目录且无法ssh_第6张图片

发现无法使用ssh登录,所以设置了nologin后,用户无法使用ssh登录?

加上参数可以正常使用:

Match User tyyh
X11Forwarding no
AllowTcpForwarding no
PermitTTY no
ForceCommand internal-sftp

linux添加sftp账户并设置只能在规定的目录且无法ssh_第7张图片

发现加上了设定目录之后就登录不上了:

得到错误根源,感觉应该是权限设置问题,导致进去没权限?

linux添加sftp账户并设置只能在规定的目录且无法ssh_第8张图片

然后才发现是因为我本来为了方便进这个目录,将其设置为了当前用户的目录,现在设置为root:root即可得到正确结果:

你可能感兴趣的:(linux,服务器,运维)