自从下决心把Gen8的系统从win切换到linux以后,ubuntu20.04作为LTS版本的ubuntu各方面用起来确实还是挺稳定的,其实我的需求特别简单,只需要samba共享,qbittorrent下载,再加上个ftp服务基本就齐活了。可问题就出在这ftp上,一直搞不明白,为什么linux那么适合做服务器系统,但ftp的server端应用却非常的不友好,基本没有靠谱的能够通过GUI进行配置的ftp服务端,一直非常喜欢的filezilla居然也只有win平台独占的server端。大概在linux世界里,最流行的ftp server就是vsftpd了,然而这货的配置体验却不是很好,甚至把我Gen8搞挂了...
搁置了很久以后,昨天终于还是伸着懒腰逼自己要把系统搞好,各种忙活,把系统重新装好了(因为在sata5的位置拓展了一块SSD,所以整个装系统和引导的过程特别艰辛),今天继续研究,终于把vsftpd算是比较完善的搞好了,也差不多能实现各种权限控制了,为了方便以后折腾,这里把经验记录一下。
首先直接apt安装vsftpd就可以了,这一步非常简单。重要的是配置文件的修改。sudo vim /etc/vsftpd.conf
修改配置文件。
listen=NO //是否开启监听ipv4和ipv6数据,这个开了会有奇怪的报错,我是没开
listen_ipv6=YES //是否开启监听ipv6数据
# 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 //是否允许登陆者上传文件,这个是全局参数,不开就没办法上传文件
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022 //设置本地用户默认要减免的权限
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
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 //确认连接传输的端口号为20
# You may override where the log file goes if you like. The default is shown
# below.
xferlog_file=/var/log/vsftpd.log //日志文件存放位置
#
# If you want, you can have your log file in standard ftpd xferlog format.
# Note that the default log file location is /var/log/xferlog in this case.
xferlog_std_format=YES //日志文件采用标准格式
# You may fully customise the login banner string:
ftpd_banner=Welcome to FTP service. //在使用shell时登陆那么会发送欢迎语
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
# (Warning! chroot'ing can be very dangerous. If using chroot, make sure that
# the user does not have write access to the top level directory within the
# chroot)
chroot_local_user=YES //对本地用户是否实施限制,这个开了只允许用户访问自己的主目录,无法越级向上访问,一定要开
chroot_list_enable=YES //开启限制白名单
# (default follows)
chroot_list_file=/etc/vsftpd.chroot_list //白名单路径,这个文件需要自己创建
# This option should be the name of a directory which is empty. Also, the
# directory should not be writable by the ftp user. This directory is used
# as a secure chroot() jail at times vsftpd does not require filesystem
# access.
secure_chroot_dir=/var/run/vsftpd/empty
#
# This string is the name of the PAM service vsftpd will use.
# pam_service_name=vsftpd
pam_service_name=ftp //此处ubuntu的系统需要改为ftp
# 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 //编码统一为utf8编码,可以识别中文,防止乱码
user_config_dir=/etc/vsftpd_user_conf //这句加上可以对用户进行单独的权限控制,后面会提到
allow_writeable_chroot=YES //这句一定要加,不然开启chroot以后如果根目录的权限是777就会报错
配置文件修改好以后接着就是进行用户和权限的设置,这一步也非常关键。需要用上的命令一并写在下面
sudo groupadd ftpusers //创建ftpusers用户组
sudo useradd -d 用户的家目录路径 用户名 //通过这个命令创建本地用户并指定该用户的家目录路径,这个路径以后就是该用户的ftp根目录
usermod -G ftpusers 用户名 //将这个新用户加入到ftpusers用户组中
sudo passwd 用户名 //更改密码
usermod -s /sbin/nologin username //限制用户登录方式;限制用户username只能通过ftp登陆,而不能直接登陆服务器
创建完用户以后,还要将该用户加入vsftpd.chroot_list白名单中,这样才允许访问。
mkdir /etc/vsftpd.chroot_list
vim vsftpd.chroot_list
文件内容如下
#白名单
用户名1
用户名2
用户名3
还记得刚刚在配置文件里加的user_config_dir=/etc/vsftpd_user_conf
这句吗,这句话是来精确控制每个用户能够使用的ftp命令的,也就是ftp权限,需要在/etc/vsftpd_user_conf
目录里头创建和用户名同名的文件,比如smith,编辑内容如下
local_root=/home/user/smith
#这个是我之前创建smith这个用户时给他指定的家目录
cmds_allowed=ABOR,CWD,LIST,MDTM,NLST,PASS,PASV,PORT,PWD,QUIT,RETR,SIZE,TYPE,USER,ACCT,APPE,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST
#这里是你给他设的权限,我这里给的权限符合上头所说的要求,可以上传下载,但不能删除文件,也不能创建文件夹
如果我想给一个用户完整的权限呢,比如我想让naturennn既可以上传下载,又可以删除文件和创建文件夹,那么我可以编辑文件naturennn(当然是/etc/vsfpd_user_conf目录下)为如下内容
local_root=/home/user/naturennn
cmds_allowed=ABOR,CWD,LIST,DELE,RMD,MDTM,MKD,NLST,PASS,PASV,PORT,PWD,QUIT,RETR,RNFR,RNTO,SIZE,STOR,TYPE,USER,ACCT,APPE,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST
至于每个命令是什么意思,如果需要再精确的进行控制,可以个别的查一下。
最后用systemctl restart vsftpd
重启vsftpd服务就可以了。
对了,最后再多说一句关于权限的问题,如果这样操作还是遇到了目录不可读写的问题,可以尝试将该目录的权限设置成777,用chmod 777 目录
即可,也可以尝试改变用户的属权,用chown -R 用户名 目录路径
来尝试更改。
6 comments
Ubuntu20.04配置vsftp经验记录 - 雅布叔叔的糖果屋
什么场景非得要用FTP呢,家里samba ,外面配置个同步盘类的服务就好,FTP我感觉特别的慢。
搭个FTP属于强迫症,其实不常用,平时的习惯是VPN拨回家,然后用samba共享。FTP算是曾经那个高校资源共享时代的留念吧。
现在看这些配置就头晕
自从用了宝塔面板就忘记了
宝塔面板确实方便,不过没有BT软件可以装,而且和BT软件的web端冲突,我之前那次系统崩了就是冲突导致的。