【vsftpd】Ubuntu下搭建FTP服务器

文章目录

  • 使用ubuntu的vsftpd搭建ftp服务器
  • 一、下载安装
  • 二、通用配置
    • 1.确认服务
    • 2.修改配置文件
        • (1)配置文件
        • (2) 对root用户的配置
        • (3) 重启服务
  • 三、多用户配置
    • 1. 虚拟用户模式
      • (1) VSFTP服务支持三种用户模式
      • (2)建立虚拟宿主用户
      • (3)建立FTP相关工作目录,以及权限管理
      • (3)配置虚拟用户
        • (4) 重启服务
  • 三、可能遇到的问题
    • 1、vsftpd nologin 拒绝访问 无法登录
    • 2、pam_unix(sudo:auth): Couldn't open /etc/securetty: No such file or directory
    • 3、500 OOPS: cannot change directory:/xxx/xxx
  • 总结


使用ubuntu的vsftpd搭建ftp服务器

工作中遇到了搭建ftp服务器的问题。再此记录下搭建过程。


一、下载安装

首先就是下载vsftpd服务。

sudo apt-get install vsftpd

二、通用配置

1.确认服务

  1. 查看服务状态
sudo service vsftpd status
  1. 重启服务
sudo service vsftpd restart

2.修改配置文件

我的配置文件在 /etc/vsftpd.conf,可能不同版本的配置文件目录不一样,在/etc下。

(1)配置文件
# 监听IPV4
listen=YES
# 监听IPV6关闭
listen_ipv6=NO
# 开启日志,默认位置在 /var/log/vsftpd.log
xferlog_enable=YES
# 禁止匿名登录,就是必须要输入账户密码
anonymous_enable=NO
# 允许本地用户登录
local_enable=YES
# 允许写入
write_enable=YES
# 默认目录, 默认登陆后在根目录
local_root=/

# 高版本的vsftpd增加了安全限制,家目录不允许有写入权限"w"
# 将本地目录限制在家目录中
chroot_local_user=YES
# 是否启用chroot_list, 写入其中的用户将取消家目录限制
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
# 让用户拥有家目录的写入权限,而不报错
allow_writeable_chroot=YES

# utf8文件系统
utf8_filesystem=YES

创建chroot_list

touch /etc/vsftpd/chroot_list
(2) 对root用户的配置

因为安全考虑,通常一些用户是不允许通过FTP登录的, 也就是登录黑名单。这些用户被写在一个vfpusers文件中, 可以通过

sudo find / -name "ftpusers"

找到该目录,将里边的root用户注释掉。

(3) 重启服务
sudo service vsftpd restart

三、多用户配置

1. 虚拟用户模式

(1) VSFTP服务支持三种用户模式

  • 匿名用户
    默认VSFTP是支持匿名用户的,该用户登录FTP服务使用anonymous用户直接登录,不需要输入密码。
  • 系统用户
    可以使用Linux系统本身存在的用户,作为FTP用户,具体哪些用户可以登录FTP,可以通过配置文件指定。
  • 虚拟用户
    虚拟用户的特点是只能访问服务器为其提供的FTP服务,而不能访问系统的其它资源。所以,如果想让用户对FTP服务器站内具有写权限,但又不允许访问系统其它资源,可以使用虚拟用户来提高系统的安全性。

说明:虚拟用户在登录过程中会被隐射成匿名用户,因为匿名用户的权限是统一配置的,那么如果想区分匿名用户的权限,默认情况是无法实现的。

(2)建立虚拟宿主用户

虚拟用户并不是系统用户,也就是说这些FTP的用户在系统中是不存在的。他们的总体权限其实是集中映射在一个系统用户身上,所谓vsftpd的[虚拟宿主用户],就是这样一个支持着所有虚拟用户的宿主用户。执行以下命令将虚拟用户映射在virtusers这个用户上。

sudo mkdir /data/ftproot -p
# /sbin/nologin 无法使用shell登陆,只能用ftp其他方式的等登陆
useradd -d /data/ftproot virtusers -s /sbin/nologin

(3)建立FTP相关工作目录,以及权限管理

最新版vsftpd不允许用户主目录有w权限,因此在主目录下新建一个子目录。所有上传、下载、删除、重命名等操作只能在子目录中进行,虚拟用户vuser1的ftp目录是/data/ftproot/vuser1/,没有w权限,设置权限为500,以下是相关目录权限设置参考。(或开启allow_writeable_chroot=YES配置)

/data                                                  #数据目录,便于后期数据备份
└── [drwxr-xr-x]  ftproot                              #FTP服务目录
    └── [dr-x------]  vuser1                         #虚拟用户主目录,后期可以增加vuser2、vuser3...
        └── [drwxr-xr-x]  rootdir                 #虚拟用户FTP工作目录,可以在此目录读写操作

# 创建目录
mkdir -p /data/ftproot/vuser1/rootdir
# 配置权限
chown -R virtusers.virtusers /data/ftproot
chmod 500 /data/ftproot/vuser1

(3)配置虚拟用户

  • 执行以下命令生成虚拟用户列表。
vi /etc/vsftpd/vuserlist

虚拟用户列表的内容。说明:奇数行为用户名,偶数行为用户密码,如果有多个用户,直接在下面写,不要有空格或换行

vuser1
123456
  • 用系统的db_load工具来生成db文件,出于安全角度修改vuserlist.db为600权限。
db_load -T -t hash -f /etc/vsftpd/vuserlist /etc/vsftpd/vuserlist.db
chmod 600 /etc/vsftpd/vuserlist.db
  • 修改PAM验证。
    找到PAM的文件路径
$ sudo find / -name "pam_userdb.so"
/usr/lib/x86_64-linux-gnu/security/pam_userdb.so   # 用这个,一般在lib目录下的
/snap/core18/1944/lib/x86_64-linux-gnu/security/pam_userdb.so

修改/etc/pam.d/vsftpd,这个文件名与/etc/vsftpd.conf中的pam_service_name=vsftpd相对应。在最前面加入以下两行内容。

# 注意,sufficient模式的意义大约是满足了就通过验证,不满足就验证下一个。本地用户可能也要用pam认证,所以放到所有认证的开头,并且不是required模式。
auth sufficient /usr/lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/vuserlist
account sufficient /usr/lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/vuserlist
  • 创建及配置虚拟用户的配置文件。
mkdir /etc/vsftpd/vuser_conf/
vi /etc/vsftpd/vuser_conf/vuser1

写入

local_root=/data/ftproot/vuser1
anon_upload_enable=YES
anon_world_readable_only=NO
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

首先需要修改vsftpd.conf文件。
在最下面增加配置

#如果前面/etc/pam.d/vsftpd没有改文件名,就不修改
pam_service_name=vsftpd
#虚拟用户使用本地用户的权限
virtual_use_local_privs=YES
#开启虚拟用户
guest_enable=YES
#指定虚拟用户的宿主用户
guest_username=virtusers
#指定用户的配置文件路径,里面是为每个用户的配置文件
user_config_dir=/etc/vsftpd/vuser_conf
#开启被动模式
pasv_enable=YES
#被动模式最小端口,本示例设置为30100
pasv_min_port=30100
#被动模式最大端口,本示例设置为30200
pasv_max_port=30200
#被动模式的IP地址,VPC环境下需要设置为服务器公网地址
# pasv_address=X.X.X.X
(4) 重启服务
sudo service vsftpd restart

三、可能遇到的问题

1、vsftpd nologin 拒绝访问 无法登录

解决用户:小飞飞飞鱼
【vsftpd】Ubuntu下搭建FTP服务器_第1张图片
用户名和密码都是正确的,网络也是通的,使用系统用户登录能连接成功。最后找到原因,在/etc/shells里添加一行/sbin/nologin,也就是新建用户时使用的参数,意思是建立不需要登录到系统中的用户,这个用户就就做虚拟用户,它只访问它的家目录下的文件。

vi /etc/shells
# 添加一行
/sbin/nologin
# 重启
sudo service vsftpd restart

2、pam_unix(sudo:auth): Couldn’t open /etc/securetty: No such file or directory

解决用户:阿亮
ubuntu 20.04的bug的导致。
解决办法:创建 /etc/securetty

# /etc/securetty: list of terminals on which root is allowed to login.
# See securetty(5) and login(1).

console

# Local X displays (allows empty passwords with pam_unix's nullok_secure)
:0
:0.0
:0.1
:1
:1.0
:1.1
:2
:2.0
:2.1
:3
:3.0
:3.1
#...


# ==========================================================
#
# TTYs sorted by major number according to Documentation/devices.txt
#
# ==========================================================

# Virtual consoles
tty1
tty2
tty3
tty4
tty5
tty6
tty7
tty8
tty9
tty10
tty11
tty12
tty13
tty14
tty15
tty16
tty17
tty18
tty19
tty20
tty21
tty22
tty23
tty24
tty25
tty26
tty27
tty28
tty29
tty30
tty31
tty32
tty33
tty34
tty35
tty36
tty37
tty38
tty39
tty40
tty41
tty42
tty43
tty44
tty45
tty46
tty47
tty48
tty49
tty50
tty51
tty52
tty53
tty54
tty55
tty56
tty57
tty58
tty59
tty60
tty61
tty62
tty63

# UART serial ports
ttyS0
ttyS1
ttyS2
ttyS3
ttyS4
ttyS5
#...ttyS191

# Serial Mux devices    (Linux/PA-RISC only)
ttyB0
ttyB1
#...

# Chase serial card
ttyH0
ttyH1
#...

# Cyclades serial cards
ttyC0
ttyC1
#...ttyC31

# Digiboard serial cards
ttyD0
ttyD1
#...

# Stallion serial cards
ttyE0
ttyE1
#...ttyE255

# Specialix serial cards
ttyX0
ttyX1
#...

# Comtrol Rocketport serial cards
ttyR0
ttyR1
#...

# SDL RISCom serial cards
ttyL0
ttyL1
#...

# Hayes ESP serial card
ttyP0
ttyP1
#...

# Computone IntelliPort II serial card
ttyF0
ttyF1
#...ttyF255

# Specialix IO8+ serial card
ttyW0
ttyW1
#...

# Comtrol VS-1000 serial controller
ttyV0
ttyV1
#...

# ISI serial card
ttyM0
ttyM1
#...

# Technology Concepts serial card
ttyT0
ttyT1
#...

# Specialix RIO serial card
ttySR0
ttySR1
#...ttySR511

# Chase Research AT/PCI-Fast serial card
ttyCH0
ttyCH1
#...ttyCH63

# Moxa Intellio serial card
ttyMX0
ttyMX1
#...ttyMX127

# SmartIO serial card
ttySI0
ttySI1
#...

# USB dongles
ttyUSB0
ttyUSB1
ttyUSB2
#...

# LinkUp Systems L72xx UARTs
ttyLU0
ttyLU1
ttyLU2
ttyLU3

# StrongARM builtin serial ports
ttySA0
ttySA1
ttySA2

# SCI serial port (SuperH) ports and SC26xx serial ports
ttySC0
ttySC1
ttySC2
ttySC3
ttySC4
ttySC5
ttySC6
ttySC7
ttySC8
ttySC9

# ARM "AMBA" serial ports
ttyAM0
ttyAM1
ttyAM2
ttyAM3
ttyAM4
ttyAM5
ttyAM6
ttyAM7
ttyAM8
ttyAM9
ttyAM10
ttyAM11
ttyAM12
ttyAM13
ttyAM14
ttyAM15

# Embedded ARM AMBA PL011 ports (e.g. emulated by QEMU)
ttyAMA0
ttyAMA1
ttyAMA2
ttyAMA3

# DataBooster serial ports
ttyDB0
ttyDB1
ttyDB2
ttyDB3
ttyDB4
ttyDB5
ttyDB6
ttyDB7

# SGI Altix console ports
ttySG0

# Motorola i.MX ports
ttySMX0
ttySMX1
ttySMX2

# Marvell MPSC ports
ttyMM0
ttyMM1

# PPC CPM (SCC or SMC) ports
ttyCPM0
ttyCPM1
ttyCPM2
ttyCPM3
ttyCPM4
ttyCPM5

# Altix serial cards
ttyIOC0
ttyIOC1
#...ttyIOC31

# NEC VR4100 series SIU
ttyVR0

# NEC VR4100 series SSIU
ttyVR1

# Altix ioc4 serial cards
ttyIOC84
ttyIOC85
#...ttyIOC115

# Altix ioc3 serial cards
ttySIOC0
ttySIOC1
#...ttySIOC31

# PPC PSC ports
ttyPSC0
ttyPSC1
ttyPSC2
ttyPSC3
ttyPSC4
ttyPSC5

# ATMEL serial ports
ttyAT0
ttyAT1
#...ttyAT15

# Hilscher netX serial port
ttyNX0
ttyNX1
#...ttyNX15

# Xilinx uartlite - port
ttyUL0
ttyUL1
ttyUL2
ttyUL3

# Xen virtual console - port 0
xvc0

# pmac_zilog - port
ttyPZ0
ttyPZ1
ttyPZ2
ttyPZ3

# TX39/49 serial port
ttyTX0
ttyTX1
ttyTX2
ttyTX3
ttyTX4
ttyTX5
ttyTX6
ttyTX7

# SC26xx serial ports (see SCI serial ports (SuperH))

# MAX3100 serial ports
ttyMAX0
ttyMAX1
ttyMAX2
ttyMAX3

# OMAP serial ports
ttyO0
ttyO1
ttyO2
ttyO3

# User space serial ports
ttyU0
ttyU1

# A2232 serial card
ttyY0
ttyY1

# IBM 3270 terminal Unix tty access
3270/tty1
3270/tty2
#...

# IBM iSeries/pSeries virtual console
hvc0
hvc1
#...
#IBM pSeries console ports
hvsi0
hvsi1
hvsi2

# Equinox SST multi-port serial boards
ttyEQ0
ttyEQ1
#...ttyEQ1027

# ==========================================================
#
# Not in Documentation/Devices.txt
#
# ==========================================================

# Embedded Freescale i.MX ports
ttymxc0
ttymxc1
ttymxc2
ttymxc3
ttymxc4
ttymxc5

# LXC (Linux Containers)
lxc/console
lxc/tty1
lxc/tty2
lxc/tty3
lxc/tty4

# Serial Console for MIPS Swarm
duart0
duart1

# s390 and s390x ports in LPAR mode
ttysclp0

# ODROID XU4 serial console
ttySAC0
ttySAC1
ttySAC2
ttySAC3

3、500 OOPS: cannot change directory:/xxx/xxx

(1) 登陆ftp的用户,没有创建家目录。
(2) 如果有家目录,就要看看用户指定的local_root是否是有效目录。并且该目录不能有 
      `写` `w` 权限。但这个目录下的其他目录内是可以读写的。

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

你可能感兴趣的:(Linux,工具,ubuntu,服务器,ftp服务器)