文章目录
- 一、实战
- 1. 创建sftp组:
- 2. 创建一个用户sftpuser:
- 3. 设置sftpuser用户的密码,会要求你输入两次密码确认:
- 4. 创建一个sftp的上传目录:
- 5. 修改用户sftpuser所在的目录:
- 6. 配置sshd_config:
- 7. 设定Chroot目录权限:
- 8. 建立SFTP用户登入后可写入的目录
- 9. 重启sshd服务:
- 10. 测试是否能正常登陆:
- 11. 关闭SElinux:
- 二、常见问题
- 2.1. 这里讨论了为什么要关闭这功能
- 2.2. 连接异常
(附解决Write failed: Broken pipe Couldn’t read packet: Connection reset by peer)…
一、实战
1. 创建sftp组:
groupadd sftp
2. 创建一个用户sftpuser:
useradd -g sftp -s /bin/false sftpuser
#参数说明:
/etc/group 文件包含所有组
/etc/shadow /etc/passwd 系统存在的所有用户名
3. 设置sftpuser用户的密码,会要求你输入两次密码确认:
passwd sftpuser
4. 创建一个sftp的上传目录:
mkdir /app/data
5. 修改用户sftpuser所在的目录:
usermod -d /app/data sftpuser
6. 配置sshd_config:
vim /etc/ssh/sshd_config
如果没有vim,请执行
vi /etc/ssh/sshd_config
#找到如下这行,并注释掉
#Subsystem sftp /usr/libexec/openssh/sftp-server
#添加如下几行(如果添加之后出现问题,则添加到最后)
Subsystem sftp internal-sftp #这行指定使用sftp服务使用系统自带的internal-sftp
Match Group sftp #这行用来匹配用户组
ChrootDirectory /app/data #用chroot将用户的根目录指定到/app/data ,这样用户就只能在/app/data 下活动
AllowTcpForwarding no
ForceCommand internal-sftp #指定sftp命令
为什么用 internal-sftp 而不用默认的 sftp-server,这是因为:
这是一个进程内的 sftp 服务,当用户 ChrootDirectory 的时候,将不请求任何文件;更好的性能,不用为 sftp 再开一个进程。
#保存退出
7. 设定Chroot目录权限:
chown -R root:root /app/data
chmod 755 /app/data
8. 建立SFTP用户登入后可写入的目录
mkdir /app/data/sftpuser
chown -R sftpuser:sftp /app/data/sftpuser/
chmod 755 /app/data/sftpuser/
9. 重启sshd服务:
service sshd restart
10. 测试是否能正常登陆:
#执行这一行命令,输入密码即可
sftp sftpuser@localhost
11. 关闭SElinux:
vim /etc/sysconfig/selinux
#找到如下这行
SELINUX=enforcing
#修改为
SELINUX=disabled
#保存退出
二、常见问题
2.1. 这里讨论了为什么要关闭这功能
https://www.zhihu.com/question/20559538
2.2. 连接异常
[root@localhost home]# sftp sftpuser@localhost
Connecting to localhost...
sftpuser@localhost's password:
Write failed: Broken pipe
Couldn't read packet: Connection reset by peer
这个问题,是由于用户组决定的,解决很简单
我的sftp前缀目录是/app/data
首先,咱们找到/app目录,查看他的权限,也就是用户组和用户
从上图,可以看出用户和户组都是root权限对吧,不要问为都是root,一句话,不是root,不好使。
然后,找到/app下面的data目录
从上图,可以看出用户和户组都是root权限对吧,不要问为都是root,一句话,不是root,不好使。
上面是sftpuser的限制活动的目录。
下面进入到,sftpuser登录后的目录看看权限是什么样的呢?
从上图,可以看出用用户是sftpuser、用户组是sftp权限对吧,不要问为这样设置,一句话,不这样设置,不好使。
完美解决!
这样问题不好发现,
补充:
我当初是怎样发现这个问题的呢?
搭建sftp服务器 只要不在/app目录下面创建都好使,但是在/app目录下面创建就是不好使,然后我就比对目录权限之间的区别,发现/app的用户是oracle 用户组是oinstall,怎样测试和配置都不好使。希望能够帮助到小伙伴们!