起步
公司给了任务,用户访问ftp://username:password@ip/xxx.rar
可以下载特定目录的文件。
安装 vsftp
sudo apt-get install vsftpd
# 安装后版本是3.0.2
- 启动:
sudo /etc/init.d/vsftpd start
或者sudo service vsftpd start
- 重启:
sudo /etc/init.d/vsftpd restart
或者sudo service vsftpd restart
- 启动:
sudo /etc/init.d/vsftpd stop
或者sudo service vsftpd stop
配置选项
搭建FTP服务需要关注:
- 如何添加ftp用户
- 冻结某ftp用户
- 登录的默认目录
- 用户访问的目录范围
- 用户有哪些权限?是否上传文件?是否创建文件夹?
vsftp的主要配置文件在 /etc/vsftpd.conf
:
#是否监听网络。
listen=YES
# 是否允许匿名登录
anonymous_enable=NO
# 允许本地用户登录
local_enable=YES
# 是否允许FTP全局的写权限
# write_enable=YES
# 是否允许匿名用户上传,前提write_enable开启才有效
# anon_upload_enable=YES
# 是否允许匿名用户新建目录
# anon_mkdir_write_enable=YES
# 是否开启目录推送,即登录后列出当前目录列表
dirmessage_enable=YES
# 是否开启登录、上传、下载等事件的日志功能。应开启!
xferlog_enable=YES
# 指定默认的日志文件,可指定为其他文件。
xferlog_file=/var/log/vsftpd.log
# 若设置为YES,则启用标准的ftpd日志格式。可以不启用。
# xferlog_std_format=YES
# 服务器的端口是否设为20。如果不想用端口20,可以另外通过ftp_data_port来指定端口号。
connect_from_port_20=YES
# 是否开启匿名用户上传文件后自动修改文件所有者
# chown_uploads=YES
# chown_username=whoever 当开启后,这里设置文件所有者
# 不活动用户的超时时间,超过这个时间则中断连接。
idle_session_timeout=600
# 数据连接超时时间 。
# data_connection_timeout=120
# FTP用户登入时显示的信息 。
# ftpd_banner=Welcome to blah FTP service.
# 指定一个目录,用做在每个本地系统用户登录后的默认目录。
# local_root=/home/ftp
# 指定一个目录,用做匿名用户登录后的默认目录。
# anon_root=/home/ftp
# 这个组合用于指示用户可否切换到默认目录以外的目录。 其中,
# chroot_list_file默认是/etc/vsftpd.chroot_list,该文件定义一个用户列表。
# chroot_local_user 设置为NO,chroot_list_enable设置为NO,则所有用户都是可以切换到默认目录以外的.
# 若chroot_local_user 设置为YES,chroot_list_enable设置为NO,则锁定FTP登录用户只能在其默认目录活动,不允许切换到默认目录以外。
# 若chroot_local_user 设置为YES,chroot_list_enable设置为YES,则chroot_list_file所指定的文件里面的用户列表都可以访问默认目录以外的目录,而列表以外的用户则被限定在各自的默认目录活动。
# 若chroot_local_user设置为NO,chroot_list_enable设置为YES,则chroot_list_file所指定的文件里面的用户列表都被限定在各自的默认目录活动,而列表以外的用户则可以访问默认目录以外的目录。
# 建议设置:chroot_local_user与chroot_list_enable都设置为YES。这样就只有chroot_list_file所指定的文件里面的用户列表可以访问默认目录以外的目录,而列表以外的用户则被限定在各自的默认目录活动!
# 好处:所有人都被限制在特定的目录里面。如果某些特定用户需要访问其他目录的权限,只需将其用户名写入chroot_list_file文件就可以赋予其访问其他目录的权限!
# chroot_local_user、 chroot_list_enable、chroot_list_file
# userlist_file、userlist_enable、userlist_deny
# 这个组合用于指示用户可否访问FTP服务。
# 其中,userlist_file默认是/etc/vsftpd.user_list,该文件定义一个用户列表。
# 若userlist_enable设置为YES,userlist_deny设置为NO,则只有userlist_file所指定的文件里面的用户列表里面的用户可以访问FTP。
若userlist_enable设置为YES,userlist_deny设置为YES,则userlist_file所指定的文件里面的用户列表里面的用户都被拒绝访问FTP。
若userlist_enable设置为NO,userlist_deny设置为YES,则这个列表没有实际用处,起不到限制的作用!因为所有用户都可访问FTP。
建议设置:userlist_enable与userlist_deny都设置为YES。这样则userlist_file所指定的文件里面的用户列表里面的用户都被拒绝访问FTP。
好处:只需将某用户帐号加入到userlist_file所指定文件里面的用户列表,就可以起到暂时冻结该用户的功能!
# user_config_dir
# 指定一个目录用于存放每个用户各自的配置文件,比如指定user_config_dir=/etc/vsftpd_user_conf, 则kkk登录后会产生一个/etc/vsftpd_user_conf/kkk的文件,这个文件保存的配置都是针对kkk这个用户的。可以修改这个文件而 不用担心影响到其他用户的配置。
准备工作
- /home/ftp作为默认目录
mkdir /home/ftp
- 修改目录属性
chown ftp:ftp /home/htp
,没有用户或组群就新建addgroup ftp
- 增加ftp用户
adduser --shell /bin/false --home /home/ftp your_usr_name
,加入到ftp群组:usermod -aG ftp your_usr_name
- 新建两文件:
touch /etc/vsftpd.chroot_list
touch /etc/vsftpd.user_list
以下是我用的配置vsftp.conf:
listen=YES
#listen_ipv6=YES
anonymous_enable=YES
local_enable=YES
write_enable=YES
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
#chown_uploads=YES
#chown_username=whoever
#xferlog_file=/var/log/vsftpd.log
#xferlog_std_format=YES
idle_session_timeout=600
data_connection_timeout=120
#nopriv_user=ftpsecure
#async_abor_enable=YES
#ascii_upload_enable=YES
#ascii_download_enable=YES
#ftpd_banner=Welcome to blah FTP service.
#deny_email_enable=YES
#banned_email_file=/etc/vsftpd.banned_emails
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
#ls_recurse_enable=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
anon_root=/home/ftp
local_root=/home/ftp
userlist_file=/etc/vsftpd.user_list
userlist_enable=NO
userlist_deny=YES
user_config_dir=/etc/vsftp_user_conf
待续