ubuntu安装ftp

第一步:安装ftp

sudo apt install vsftpd

第二部:用ftp工具访问 ,格式就是 ip+登录用户名+密码

现在用你的ftp工具,输入IP、你的ubuntu的账号密码 、端口22,就可以访问了,对,就是这么简单。

此时,通过ftp访问的就是你的家目录。理论上来说,在没有更改配置文件的情况下,任何可以登录linux的正常用户都可以访问ftp,但是,在我本人的实践中,有些用户即使账号密码正确,也不能正常访问该目录,具体原因我未深究。

另外安装后会生成一个ftp账号,其他文章说可以访问,但是我试了后并不能访问,需要去掉/etc/passwd 中ftp账号后的bin/false才可以访问去,原因是/etc/ftpuser中禁止了bin/false,详细内容可以查看:ubuntu vsftpd 530 Login incorrect 根本原因和解决方案 - 简书 (jianshu.com)

但是此时你只有读取的权限,而且默认读取的是‘home/你的用户名‘这个目录,如果你想上传文件,那么请往下看。

ubuntu安装ftp_第1张图片

第三部:新增一个目录

 安装软件后,默认会创建一个/srv/ftp的目录,我们将我们的ftp目录放在这个目录下。

首先,我们需要给该目录一个足够大的盘符(对于盘符不了解的同学可以好好看看鸟哥笔记),这里需要用到挂载,这里需要用到/etc/fstab

该目录是在linux启动阶段读取的一个文件,指定了目录和硬盘分区的关系,按顺序执行里面的命令就把目录自动挂载成功了

这里,我们编辑fstab目录,新增挂载盘和目录的对应

sudo vim /etc/fstab
/dev/sda1    /srv/ftp   ext4    default      00

执行下面命令,ubuntu将会自动重新挂载所有盘符

sudo mount -a 

我们在该挂载目录下新增一个目录,用于存放我们的ftp文件

sudo mkdir /srv/ftp/RD_Release

第四部:创建一个公共账号

 1、新增一个公共用户,访问ftp

sudo useradd –m fibocom -d /srv/ftp/RD_Release
sudo passwd fibocom

------------------------------------------------------------废弃-------------------------------------------------------------

如果没有指定目录,默认会生成一个目录,这时你需要更改默认目录

更改默认目录并删除原家目录,实际上就是更改 /etc/passwd 文件

sudo mkdir /opt/ftpShare
sudo usermod -d /opt/ftpShare fibocom

如果用户被占用,使用kill杀死进程

usermod: user fibocom is currently used by process 23434
yjl@fibocom:~$ sudo kill -9 23434
yjl@fibocom:~$ sudo usermod -d /opt/ftpShare/f1 fibocom
usermod: user fibocom is currently used by process 23550
yjl@fibocom:~$ sudo kill -9 23550

ubuntu安装ftp_第2张图片

更改后,/etc/passwd中的fibocom用户应该显示如下,如果不是,手动更改

fibocom:x:1009:1010::/opt/ftpShare:/bin/bash

-----------------------------------------------------------废弃-------------------------------------------------------------  

 4、使用ftp访问,此时用我们新建的用户访问

ubuntu安装ftp_第3张图片

此时,上传一个文件,如果失败了,可以看看你的家目录权限是否正确,不正确使用下面的命令修改

sudo chown ftp用户:ftp用户组 RD_Release/

试试上传下载,都是OK的

第五步:配置vsftpd

----------------------------------------------------------待商榷--------------------------------------------------------------

1、配置ftp可读写

a、配置ftp可以上传,取消下面一行的注释,然后重启ftp

sudo vim /etc/vsftpd.conf
write_enable=YES

b、重启服务器 

sudo service vsftpd restart

或 

sudo systemctl restart vsftpd.service

----------------------------------------------------------待商榷--------------------------------------------------------------

上面的说法来源于:如何在Ubuntu 18.04上使用VSFTPD设置FTP服务器 (myfreax.com),但是我们上面已经试过了,在没有开启write_enable时,也是可以读写的

2、限制用户只能打开某个目录

我们关注配置文件中的三个参数

  1. chroot_local_user=YES
  2. chroot_list_enable=YES
  3. chroot_list_file=/etc/vsftpd.chroot_list

关于这三个参数的关系,我们摘录文章内容如下:vsftpd 配置:chroot_local_user与chroot_list_enable详解_Laurence的技术博客-CSDN博客_chroot_list

  • chroot_local_user #是否将所有用户限制在主目录,YES为启用 NO禁用.(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到要目录之外的)
  • chroot_list_enable #是否启动限制用户的名单 YES为启用  NO禁用(包括注释掉也为禁用)
  • chroot_list_file=/etc/vsftpd/chroot_list #是否限制在主目录下的用户名单,至于是限制名单还是排除名单,这取决于chroot_local_user的值,我们可以这样记忆: chroot_local_user总是一个全局性的设定,其为YES时,全部用户被锁定于主目录,其为NO时,全部用户不被锁定于主目录。那么我们势必需要在全局设定下能做出一些“微调”,即,我们总是需要一种“例外机制",所以当chroot_list_enable=YES时,表示我们“需要例外”。而”例外“的含义总是有一个上下文的,即,当”全部用户被锁定于主目录“时(即chroot_local_user=YES),"例外"就是:不被锁定的用户是哪些;当"全部用户不被锁定于主目录"时(即chroot_local_user=NO),"例外"“就是:要被锁定的用户是哪些。这样解释和记忆两者之间的关系就很清晰了!

 对于chroot_local_user与chroot_list_enable的组合效果,可以参考下表:
 

chroot_local_user=YES chroot_local_user=NO
chroot_list_enable=YES 1.所有用户都被限制在其主目录下 2.使用chroot_list_file指定的用户列表,这些用户作为“例外”,不受限制 1.所有用户都不被限制其主目录下 2.使用chroot_list_file指定的用户列表,这些用户作为“例外”,受到限制
chroot_list_enable=NO 1.所有用户都被限制在其主目录下 2.不使用chroot_list_file指定的用户列表,没有任何“例外”用户 1.所有用户都不被限制其主目录下 2.不使用chroot_list_file指定的用户列表,没有任何“例外”用户

需要注意的是:

  • 上表中,#chroot_local_user=YSE注释不取消,相当于chroot_local_user=NO,同理,#chroot_list_enable=YES不取消,相当于chroot_list_enable=NO
  • 从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报错:vsftpd:500 OOPS: vsftpd: refusing to run with writable root inside chroot ()

所以,我修改vsftpd.conf ,释掉了chroot_local_user=YSE的井号,相当于上表中的左下角的,所有用户都只能访问自己目录下的列表,没有例外

yjl@fibocom:~$ sudo vim /etc/vsftpd.conf

再次刷新

sudo service vsftpd restart

或 

sudo systemctl restart vsftpd.service

实际试了下,重启成功了

但我我发现修改了改文件并没有任何效果,这个ftp用户既可以访问上层目录,也可以上传文件,还可以删除文件,也就是说,上面的配置对vsftp一点用也没有。

vsftpd.conf不生效的原因探究一(可以跳过)

关于这个问题,网上讨论的人很少,有两种解决方案

1、更换其他ftp软件 configuration - vsftpd disregards changes to config file - Server Fault,在这个答案中提问者使用了bftpd,他认为原因应该是没有在 systemd 中加载 vsftpd 服务,这个暂未研究

2、,vsftpd修改配置后不能马上生效的问题-chenjintao_ii-ChinaUnix博客 这篇文章提到,由于之前的连接占用了进程,该进程并未读取新的配置文件,这个我试过,删除所有相关pid后,改配置文件仍然不生效

ps -eLf |grep vsftpd |grep -v grep
sudo kill -9 PID

vsftpd.conf不生效的原因探究二

一次偶然的操作,我暂停了vsftpd服务器,在linux中使用ftp localhost连接本地ftp提示连接失败,但是在windows中连接依然连接成功,这成功引起了我的怀疑:修改配置文件不生效的原因是否是因为服务器上还有另一个ftp server在运行?

ps -ef |grep ftp

yjl      29603 29602  0 14:41 ?        00:00:00 /usr/lib/openssh/sftp-server
yjl      30553 30552  0 15:00 ?        00:00:00 /usr/lib/openssh/sftp-server
tester1  31082 31081  0 15:08 ?        00:00:00 /usr/lib/openssh/sftp-server
tester1  31191 31190  0 15:10 ?        00:00:00 /usr/lib/openssh/sftp-server
tester1  31385 30845  0 15:16 pts/2    00:00:00 ftp localhost
tester1  31486 31485  0 15:18 ?        00:00:00 /usr/lib/openssh/sftp-server
tester1  31694 31693  0 15:21 ?        00:00:00 /usr/lib/openssh/sftp-server
yjl      31957 29441  0 15:31 pts/0    00:00:00 grep --color=auto ftp
 

使用ps命令查看当前有哪些ftp在运行,看到一串sftp-server,这是什么呢?

sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的其中一部分,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。

来源:Linux sftp命令详解 - 小a玖拾柒 - 博客园 (cnblogs.com)

通过上面的说明我明白了,我是用错了工具,我一直使用windows的filezilla连接linux的vsftpd,但是我使用的是sftp协议,根据上面的说明,这个sftp不是一个程序,而是ssh自带的工具,所以说,即使没有安装vsftpd,也可以通过filezilla连接到linux!我一直以为是修改配置文件不生效,原来原因根本和配置文件没关系,我一直在用一个和vsftpd不相干的东西来调试vsftpd,我真是醉了。。

配置vsftpd账号和权限(未完成)

vsFTP配置总结之虚拟用户及权限管控_u011457628的专栏-CSDN博客_vsftp虚拟用户配置

vsftpd Sample Configuration with user_list [FastHandle - IT Operations Examples]

备注一(bug解决方法):

一、bug描述:执行 sudo systemctl restart vsftpd.service 后不生效

原因:可能是/etc/init.d下没有vsftpd ,导致vsftpd.conf不生效  ,我没有研究怎么把vsftpd加入到init.d中(当然你也可以花时间研究一下),而是采用了重启vsftpd,再次访问ftp就正常了。(我的vsftp 启动不了呢???)

sudo service vsftpd restart

二、ftp连接时提示500 OOPS: priv_sock_get_result

ubuntu安装ftp_第4张图片

原因是我屏蔽了/etc/vsftpd.conf中的pam_service_name=vsftpd

参考LinuxQuestions.org - vsftpd problem 500 oops:socket

ubuntu安装ftp_第5张图片

三、530 Login incorrect.

原因是 /etc/ftpuser中禁止了bin/false,详细内容可以查看:ubuntu vsftpd 530 Login incorrect 根本原因和解决方案 - 简书 (jianshu.com)

备注二:vsftpd.conf中的配置简短介绍

启用本地用户 FTP 访问

现在,如果需要,您可以使本地用户使用其帐户登录到FTP服务器。为此,我们需要在/etc/vsftpd.conf上启用以下设置

local_enable=YES

使用此选项,用户可以登录到服务器。要进行测试,只需执行以下命令

ftp localhost

来源:

How To Install An FTP Server On Ubuntu With Vsftpd

linux ftp服务器设置,只允许用户访问指定的文件夹,禁止访问其他文件夹

如何在Ubuntu 18.04上使用VSFTPD设置FTP服务器

FTP Server

如何使用 Ubuntu Server 設定 Linux FTP Server (manjaro.site)

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