通过sftp协议配置FTP

我现在有一个需求,要使用FTP图形工具,连接公司的Linux服务器,上传文件到指定的工作目录里,现在有一种简单的方式可以实现需求。

可以利用SFTP文件传输协议,它们基于SSH或SSL/TLS加密连接,这种协议,默认使用22端口(这个端口并不安全,需要修改成其它自定义端口,防止被扫描),它不需要单独安装FTP服务,只要服务器上启用了SSH服务,并且你有一个有效的系统用户账户,就可以使用SFTP协义进行文件传输。

现在我的需求如下:
1.我要给同事创建一个名为zw的账号
2.她连接到服务器后,需要将文件上传到 /data/jiemo/upload目录里,这时她只能在FTP软件上,看到upload目录,她无法访问其它系统目录,如:/root,/home,/etc等目录。

现在正式操作:

1.创建账号

创建一个只能用于ftp连接,而不能ssh登陆服务器的账号

adduser zw
passwd zw
然后出现提示:设置密码,并在确认一次密码
usermod -s /sbin/nologin zw    #设置该账号不能用于ssh登陆

2.创建ftp目录

mkdir -p /data/jiemo/upload

其中 /data/jiemo 是给账号zw设置的根目录,当她通过FTP连接到服务器时,会看到/data/jiemo 下面拥有的子目录,但是它无法访问/data/jiemo 以外的其它目录。

3.设置目录权限

chown root:root /data/jiemo
chmod 755 /data/abc/zw

根据目录/data/jiemo 的属主必须是root,属组可以换成其它的,但是属主必须是root,/data和 jiemo这两个层级的权限必须是755,这是不能更改的权限,要记住。

然后给upload设置权限,upload的属主和属组,都分给zw账号

chown zw:zw /data/jiemo/upload
chmod 755 /data/jiemo/upload

4.配置SSH

这是最重要的一步,在文件的尾部添加代码

vi /etc/ssh/sshd_config
#添加下面这段代码
Match User zw
    ForceCommand internal-sftp
    PasswordAuthentication yes
    ChrootDirectory /data/jiemo
    PermitTunnel no
    AllowAgentForwarding no
    AllowTcpForwarding no
    X11Forwarding no

主要是两个地方要设置

Match User zw   # 填写账号名 每次只能填写一个账号名,不能添加多个
ChrootDirectory /data/jiemo   # 设置根目录

重启ssh服务,让配置生效

systemctl restart sshd

当设置ChrootDirectory 后,通过SFTP连接服务器后,只会看到upload目录

image.png

如果需要给多个账号,设置不同的权限目录,就复制刚才的代码,进行多次添加。

5.关于安全方面的处理

在配置sftp账号上传文件后,日志/var/log/secure文件里,就可以看到各种扫描,有了很多非法攻击。需要修改一下端口号,将默认的22和2222端口去掉。

vi /etc/ssh/sshd_config
找到Port部分 删掉默认端口,改成新端口 12379

Port 12379

然后运行命令 systemctl restart sshd 重启ssh服务

连接ftp时,如果出现连接不上的问题时,也可以查看/var/log/secure 这个日志文件。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容