欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

ubuntu 使用 vsftpd 基于系统用户配置相互隔离的 ftp (ftps) 服务并禁止账户 ssh shell 登陆功能

程序员文章站 2022-07-09 19:00:07
我们在日常使用 UbuntuServer 服务器时,经常会直接使用基于 ssh 的 sftp 连接服务器直接进行文件上传和下载,不过这个方式其实有一定的安全隐患,当一个团队有多个人员,需要连接服务器去发布时,如果使用 ssh 则意味着需要将系统的 账户和密码 告知对方,别人就不仅拥有了 sftp 的 ......

    我们在日常使用 ubuntuserver 服务器时,经常会直接使用基于 ssh 的  sftp 连接服务器直接进行文件上传和下载,不过这个方式其实有一定的安全隐患,当一个团队有多个人员,需要连接服务器去发布时,如果使用 ssh 则意味着需要将系统的 账户和密码 告知对方,别人就不仅拥有了 sftp 的连接权限,同时也拥有了 ssh 的连接权限,意味着可以直接登陆服务器,而且 对方使用 sftp 登陆之后可以看到服务器上全部的文件,这显示是不符合预期的,我们要的仅仅是给对方提供一个 ftp 文件上传下载的权限,并且最好能够限定到具体的目录。

 

    针对上面的痛点,我也百度看过不少解决方案,有人说可以 通过配置 账户的 shell ,比如 /usr/sbin/nologin 来实现 账户禁止 ssh 登陆,只保留 sftp 权限,然而我按照多个文章的教程,进行反复操作之后,发现这样的配置确实禁止对应账户远程登陆 ssh 了,但是,,,sftp 也连不上了,,所以在反复实验之后,选择放弃,这时回归最原始的点,想想我需要的是一个ftp服务来提供文件上传下载的方法,为何不直接独立配置 ftp 服务,顺着这个思路,我找到了 linux server 下非常优秀的一款软件  vsftpd,这款软件 支持  ftp, ftps(隐式加密), ftpes(显示加密) ,可以完美解决我们的需求,接下来开始我们的正文,在 ubuntu server 配置 vsftpd 实现不同通过账户,指向不同的文件夹,并且禁用账户的 shell 登陆功能。

 

    sudo apt-get update   #刷新软件源信息

    sudo apt-get vsftpd    #安装 vsftpd

 

    sudo vim /etc/vsftpd.conf   安装好之后开始编辑配置文件,进行如下几项的调整,有些配置项在配置文件中本来存在,修改对应的值即可,有些则不存在需要手动编写,在操作的时候小伙伴要注意    

    listen=yes                            #开启监听 ipv4 地址

    listen_ipv6=no                    #关闭监听 ipv6 地址,ipv4 和 ipv6 不可以同时监听,否则会无法启动

    chroot_local_user=yes        #限定用户只能操作主目录

    write_enable=yes                #开启文件写入功能

    ssl_enable=yes                    #开启 ssl 加密功能,默认为 ftpes 显示加密

    ssl_tlsv1=yes                       #开启 tlsv1 加密支持,默认为 tlsv1

    ssl_sslv2=yes                       #开启 sslv2 协议支持

    ssl_sslv3=yes                       #开启 sslv3 协议支持

    implicit_ssl=yes                   #指定ssl 加密方式为隐式加密(该项开启之后 ftp 工作于 ftps 隐式加密模式下,ftps 模式端口默认为 990,需要特意指定端口为 990,如果不开启则,不需要修改端口)

    listen_port=990                    #设定ftp服务端口 (默认情况不需要指定端口值,implicit_ssl=yes 时才需要该端口配置,个人推荐使用隐式加密,连接更加稳定)

    file_open_mode=0777         #配置 用户默认上传的文件权限为 0777 

    pasv_min_port=6000           #被动连接模式 最小端口

    pasv_max_port=7000          #被动连接模式最大端口

    pasv_enable=yes                 #启用被动连接模式

    pasv_address=x.x.x.x           #服务器对应的外部ip地址(云服务器,这里一定要填写外网ip地址,如果在内网中使用这边,这行配置可以直接注释)

 

    经过上面的调整,vsftpd 模块就算配置完成了,大家可能在百度的时候可能会看到别人还要配置其他很多选项,但是那些其实没必要了,vsftpd 的默认配置,在加上我们上面的调整就相对来说比较完美了,下面介绍三个 vsftpd 的常用命令。

    sudo service vsftpd start         #启动 vsftpd

    sudo service vsftpd restart     #重启 vsftpd

    sudo service vsftpd stop        #停止 vsftpd

 

    vsftpd服务安装完成之后,就可以创建账户来进行测试,我们今天教大家的方法,账户是基于系统账户来配置的,操作如下:

    vim /etc/shells       #编辑系统 shell 规则,加入静止登陆的 shell 规则,追加在文件最后一行即可

    /usr/sbin/nologin    #屏蔽 ssh 登陆

 

    sudo useradd xiaoming      #创建用户xiaoming

    sudo passwd xiaoming        #修改用户 xiaoming 的密码

    sudo usermod -d /var/www xiaoming        #为xiaoming 指定账户主目录

    sudo chmod 555 /var/www        #去除主目录的可写权限 (vsfpd在 chroot_local_user=yes 禁止默认的登陆目录拥有可写权限,如果拥有则会无法登陆)

    sudo usermod -s /usr/sbin/nologin xiaoming        #屏蔽xiaoming对于系统的 ssh 登陆权限    如果要重新放开登陆权限,执行 sudo usermod -s /bin/bash xiaoming

 

    这样一来我就创建了一个账户xiaoming,该账户无法使用 ssh 连接系统,但是支持 ftp 登陆系统,ftp 登陆系统之后默认就会进入 ubuntu 中 nginx 默认的网站目录  /var/www ,这个其实就是我们配置的主目录,大家可以根据自己需求自己调整,主目录地址。客户端这时候可以进行连接测试,客户端推荐使用 filezilla 创建一个站点,注意 协议选择 ftp,加密方式 选择 要求隐式的 ftp over tls,如下图:

ubuntu 使用 vsftpd 基于系统用户配置相互隔离的 ftp (ftps) 服务并禁止账户 ssh shell 登陆功能

 

    filezilla 这时候应该就可以连接到我们 ftp 服务器了,这时候各位如果进行文件上传动作,应该会全部失败,因为我之前设定了主目录的权限为 555,意味着没有任何的可写权限,所以我们需要 在 服务器上提前创建好子目录,以方便我们使用,操作如下:

 

    sudo mkdir /var/www/www.xxxx.com            #创建一个文件夹用于存放 www.xxxx.com 的文件

    sudo chmod 777 /var/www/www.xxxx.com        #调整创建的文件夹权限为 777 

 

    这时候我们重新刷新 ftps 应该就可以看到我们创建的  www.xxxx.com 这个文件夹了,点击进入这个文件夹,然后进行文件上传下载删除动作就会发现全部都可以正常操作了。