搭建ftp
服务过程记录
安装ftp
服务器软件
sudo apt install vstfpd -y
修改配置文件
配置文件目录:/etc/vsftpd.conf
, 也可以通过下面命令来查找:
sudo find /etc/ -name "vsftpd.conf"
sudo vi /etc/vsftpd.conf
具体的文件参照下面的
- 值得注意的是这个配置文件是全局生效的,即不管你创建了多少个用户都只需要这一个文件即可
- 同一个电脑处理安装docker类似的代理外,是不能开启多个
ftp
服务的- 问了
chatgpt
,让安装多个ftp
服务工具,比如vsftpd
和proftpd
,但是会存在文件冲突
- 问了
- 同一个电脑处理安装docker类似的代理外,是不能开启多个
配置文件
cat /etc/vsftpd.conf
# Example config file /etc/vsftpd.conf
# 如果打开ipv4,关闭ipv6,会出问题:端口不监听,服务无效,原因未深究
listen=NO
listen_ipv6=YES
#
# Allow anonymous FTP? (Disabled by default).
anonymous_enable=NO
#
# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
dirmessage_enable=YES
#
# If enabled, vsftpd will display directory listings with the time
# in your local time zone. The default is to display GMT. The
# times returned by the MDTM FTP command are also affected by this
# option.
use_localtime=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
chroot_local_user=YES
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd.chroot_list
secure_chroot_dir=/var/run/vsftpd/empty
#
# This string is the name of the PAM service vsftpd will use.
pam_service_name=vsftpd
#
# This option specifies the location of the RSA certificate to use for SSL
# encrypted connections.
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
# Uncomment this to indicate that vsftpd use a utf8 filesystem.
#utf8_filesystem=YES
# 下面两句用于数据隔离,限制每个用户访问目录
user_sub_token=$USER
# 指定ftp登录后的根目录
local_root=/home/$USER/ftp
用户配置
创建用户
sudo adduser ftpuser
# 上面命令会自动创建/home/ftpuser,777可能报错,所以用755,试了下好像都可以
chmod 755 /home/ftpuser
# 限制用户username只能通过ftp登陆,而不能直接登陆服务器
# 网上看得,实际并没操作这一步
usermod -s /sbin/nologin ftpuser
添加ftp
可访问的用户,一行一个用户名
需要先在/etc/vsftpd.conf
文件中取消#chroot_list_file=/etc/vsftpd.chroot_list
这一行的注释
sudo vim /etc/vsftpd.chroot_list
重启ftp
服务
sudo /etc/init.d/vsftpd restart
# 或者
sudo service vsftpd restart
其它配置项解析
# 允许匿名用户登录
anonymous_enable=YES
# 允许本地用户登录
local_enable=YES
# 开启全局上传
write_enable=YES
# 允许匿名用户上传文件
anon_upload_enable=YES
# 充许匿名用户新建文件夹
anon_mkdir_write_enable=YES
高级用法
数据隔离
为了实现数据隔离,需要为每个用户提供一个独立的访问目录
方法一:通过adduer
命令添加用户,然后在/etc/vsftpd.conf
文件中去做下面的配置
- 已验证过
- 每个用户下面需要有相同目录
# 在配置文件底部添加,如上面的文件示例
user_sub_token=$USER
local_root=/home/$USER/ftp
方法二:为每个用户创建一个独立的访问目录,不一定是该用户的~
目录
- 没有验证过,只做记录
# 例如3个用户
# 1.创建目录
sudo mkdir -p /ftp/user1
sudo mkdir -p /ftp/user2
sudo mkdir -p /ftp/user3
# 2.为每个用户分配相应的目录
sudo usermod -d /ftp/user1 user1
sudo usermod -d /ftp/user2 user2
sudo usermod -d /ftp/user3 user3
# 3.更改目录的所有者和权限
sudo chown user1: /ftp/user1
sudo chown user2: /ftp/user2
sudo chown user3: /ftp/user3
# 4.在/etc/vsftpd.conf文件中添加以下内容
chroot_local_user=YES
权限控制
user1
:只读user2
:可读可写不可删除user3
:可读可写可删除
# 首先需要在/etc/vsftpd.conf文件中启用user_config_dir选项(不存在则新增字段即可)
# 为每个用户启动特定的配置
user_config_dir=/etc/vsftpd/user_conf
# 针对每个用户创建配置文件
# 在/etc/vsftpd/user_conf目录下创建一个与用户名同名的文件,比如user1
cd /etc/vsftpd/user_conf
sudo touch user1
sudo vim user1
# 在文件中添加以下内容以禁止写入和删除
cmds_denied=STOR,DELE,RMD
# 同理针对user2
sudo vim user2
cmds_denied=DELE,RMD
# user3不用特殊操作,修改完之后需要重启vsftpd服务
sudo service vsftpd restart
创建一个用户user4
:可读、可删除但不可写
sudo vim /etc/vsftpd/user_conf/user4
# 允许下载和删除
cmds_allowed=RETR,DELE
# 禁用写入命令
cmds_denied=STOR,APPE,STOU
常用排查指令
如果ftp
无法访问,优先有下面命令排查
查看vsftpd
服务状态
sudo service vsftpd status
查看端口占用
sudo netstat -tulpn | grep vsftpd
查看本机是否可以登录ftp
ftp localhost
一些可能出现的问题
为了在服务器上部署,部署前先用vmware
虚拟机做验证,发现以下问题
问题一:虚拟机需要设置端口转发
关闭虚拟机,在“虚拟机网络设置”里面找到NAT
的网卡,点击NAT
设置,添加端口转发
主机端口:21
类型:TCP
虚拟机ip:虚拟机NAT的ip地址
虚拟机端口:21
# 其它项不用管
问题二:在 /etc/vsftpd.conf
文件中如果打开IPV4
关闭IPV6
会出现端口监听不了的问题
# 如果这么配置,sudo netstat -tulpn | grep vsftpd 命令看不到21端口监听,本身vsftpd服务正常
listen=YES
listen_ipv6=NO
# 改成这样配置没有问题
listen=NO
listen_ipv6=YES
问题三:用户名设置成ftp
,可能会出现问题
自己最开始通过adduser
创建了ftp
的用户,但那时因为其它问题一直连不上,问chatgpt
,说可能有问题,之后删除了该用户也同时解决了其它问题,之后用其它用户没问题了,但不确认本身这么操作有没有问题
END.