一键安装ftp服务器

1 概述

工作中,需要搭建ftp服务器来实现资源的共享。本文将通过脚本实现自动化安装ftp服务器,并进行相关配置,同时创建ftp登录账户,以及创建两个文件夹,作为公共的文件夹,为所有用户提供共同的访问路径

2 概念解释和注意事项

2.1 chroot_list说明

chroot_list_file=/etc/vsftpd/chroot_list

如果设置为

chroot_local_user=YES

chroot_list_enable=YES(这行可以没有, 也可以有)

chroot_list_file=/etc/vsftpd.chroot_list

那么, 凡是加在文件vsftpd.chroot_list中的用户都是不受限止的用户

即可以浏览其主目录的上级目录。

所以, 如果不希望某用户能够浏览其主目录上级目录中的内容,可以如上设置, 然后在文件vsftpd.chroot_list中不添加该用户即可(此时, 在该文件中的用户都是可以浏览其主目录之外的目录的).

或者, 设置如下

chroot_local_user=NO

chroot_list_enable=YES(这行必须要有, 否则文件vsftpd.chroot_list不会起作用)

chroot_list_file=/etc/vsftpd.chroot_list

然后把所有不希望有这种浏览其主目录之上的各目录权限的用户添加到文件vsftpd.chroot_list(此时, 在该文件中的用户都是不可以浏览其主目录之外的目录的)中即可(一行一个用户名).

2.2 selinux

如果服务已经安装,防火墙端口21已经打开,但是还是不能访问,可能是selinux的影响,建议打开如下的选项

getsebool -a | grep ftp

setsebool -P tftp_home_dir=1

2.3 监听端口问题

如果出现在服务器上可以用ftp localhost登录,但是在window电脑上不能通过资源管理器来访问,即ftp ip的方式访问不了。但是centOS7上服务正常。配置文件有问题导致,可能是同时监听了ipv4和ipv6端口,导致服务异常建议配置文件里只写如监听ipv4端口,不要写ipv6端口,在配置文件里同时监听ipv4和ipv6是上不支持

#listen_ipv6=YES这个语句不要配置

同时配置监听ipv4和ipv6的重启服务报错如下

[root@localhost ~]#service vsftpd restart

Shutting down vsftpd:                                      [  OK  ]

Starting vsftpd for vsftpd: 500 OOPS: run two copies of vsftpd for IPv4 and IPv6

[FAILED]

2.4 vsftpd的配置文件说明

vsftpd.ftpusers:位于/etc目录下。它指定了哪些用户账户不能访问FTP服务器,例如root等。

vsftpd.user_list:位于/etc目录下。该文件里的用户账户在默认情况下也不能访问FTP服务器,仅当vsftpd .conf配置文件里启用userlist_enable=NO选项时才允许访问。

vsftpd.conf:位于/etc/vsftpd目录下。来自定义用户登录控制、用户权限控制、超时设置、服务器功能选项、服务器性能选项、服务器响应消息等FTP服务器的配置。

(1)用户登录控制

anonymous_enable=YES,允许匿名用户登录。

no_anon_password=YES,匿名用户登录时不需要输入密码。

local_enable=YES,允许本地用户登录。

deny_email_enable=YES,可以创建一个文件保存某些匿名电子邮件的黑名单,以防止这些人使用Dos攻击。

banned_email_file=/etc/vsftpd.banned_emails,当启用deny_email_enable功能时,所需的电子邮件黑名单保存路径(默认为/etc/vsftpd.banned_emails)。

(2)用户权限控制

write_enable=YES,开启全局上传权限。

local_umask=022,本地用户的上传文件的umask设为022(系统默认是077,一般都可以改为022)。

anon_upload_enable=YES,允许匿名用户具有上传权限,很明显,必须启用write_enable=YES,才可以使用此项。同时我们还必须建立一个允许ftp用户可以读写的目录(前面说过,ftp是匿名用户的映射用户账号)。

anon_mkdir_write_enable=YES,允许匿名用户有创建目录的权利。

chown_uploads=YES,启用此项,匿名上传文件的属主用户将改为别的用户账户,注意,这里建议不要指定root账号为匿名上传文件的属主用户!

chown_username=whoever,当启用chown_uploads=YES时,所指定的属主用户账号,此处的whoever自然要用合适的用户账号来代替。

chroot_list_enable=YES,可以用一个列表限定哪些本地用户只能在自己目录下活动,如果chroot_local_user=YES,那么这个列表里指定的用户是不受限制的。

chroot_list_file=/etc/vsftpd.chroot_list,如果chroot_local_user=YES,则指定该列表(chroot_local_user)的保存路径(默认是/etc/vsftpd.chroot_list)。

nopriv_user=ftpsecure,指定一个安全用户账号,让FTP服务器用作完全隔离和没有特权的独立用户。这是vsftpd系统推荐选项。

async_abor_enable=YES,强烈建议不要启用该选项,否则将可能导致出错!

ascii_upload_enable=YES;ascii_download_enable=YES,默认情况下服务器会假装接受ASCⅡ模式请求但实际上是忽略这样的请求,启用上述的两个选项可以让服务器真正实现ASCⅡ模式的传输。

注意:启用ascii_download_enable选项会让恶意远程用户们在ASCⅡ模式下用“SIZE/big/file”这样的指令大量消耗FTP服务器的I/O资源。

这些ASCⅡ模式的设置选项分成上传和下载两个,这样我们就可以允许ASCⅡ模式的上传(可以防止上传脚本等恶意文件而导致崩溃),而不会遭受拒绝服务攻击的危险。

(3)用户连接和超时选项

idle_session_timeout=600,可以设定默认的空闲超时时间,用户超过这段时间不动作将被服务器踢出。

data_connection_timeout=120,设定默认的数据连接超时时间。

(4)服务器日志和欢迎信息

dirmessage_enable=YES,允许为目录配置显示信息,显示每个目录下面的message_file文件的内容。

ftpd_banner=Welcome to blah FTP service,可以自定义FTP用户登录到服务器所看到的欢迎信息。

xferlog_enable=YES,启用记录上传/下载活动日志功能。

xferlog_file=/var/log/vsftpd.log,可以自定义日志文件的保存路径和文件名,默认是/var/log/vsftpd.log。

anonymous_enable=YES 允许匿名登录local_enable=YES 允许本地用户登录

write_enable=YES 开放本地用户写权限

local_umask=022 设置本地用户生成文件的掩码为022

#anon_upload_enable=YES 此项设置允许匿名用户上传文件

#anon_mkdir_write_enable=YES 开启匿名用户的写和创建目录的权限

dirmessage_enable=YES 当切换到目录时,显示该目录下的.message隐藏文件的内容

xferlog_enable=YES 激活上传和下载日志

connect_from_port_20=YES 启用FTP数据端口的连接请求

#chown_uploads=YES 是否具有上传权限. 用户由chown_username参数指定。

#chown_username=whoever 指定拥有上传文件权限的用户。此参数与chown_uploads联用。

#xferlog_file=/var/log/vsftpd.log

xferlog_std_format=YES 使用标准的ftpd xferlog日志格式

#idle_session_timeout=600 此设置将在用户会话空闲10分钟后被中断

#data_connection_timeout=120 将在数据连接空闲2分钟后被中断

#ascii_upload_enable=YES 启用上传的ASCII传输方式

#ascii_download_enable=YES 启用下载的ASCII传输方式

#ftpd_banner=Welcome to blah FTP service 设置用户连接服务器后显示消息

#deny_email_enable=NO 此参数默认值为NO。当值为YES时,拒绝使用banned_email_file参数指定文件中所列出的e-mail地址用户登录。

#banned_email_file=/etc/vsftpd.banned_emails 指定包含拒绝的e-mail地址的文件.

#chroot_list_enable=YES 设置本地用户登录后不能切换到自家目录以外的别的目录

#chroot_list_file=/etc/vsftpd.chroot_list

#ls_recurse_enable=YES

pam_service_name=vsftpd 设置PAM认证服务的配置文件名称,该文件存放在/etc/pam.d/

userlist_enable=YES 此项配置/etc/vsftpd.user_list中指定的用户也不能访问服务器,若添加userlist_deny=No,则仅仅/etc/vsftpd.user_list文件中的用户可以访问,其他用户都不可以访问服务器。如过userlist_enable=NO,userlist_deny=YES,则指定使文件/etc/vsftpd.user_list中指定的用户不可以访问服务器,其他本地用户可以访问服务器。

listen=YES 指明VSFTPD以独立运行方式启动

tcp_wrappers=YES 在VSFTPD中使用TCP_Wrappers远程访问控制机制,默认值为YES

3 一键化安装脚本

​#!/bin/bash

#

#******************************************************************************

#Author:              Sunny

#Date:                2017-09-11

#FileName:            install_ftp.sh

#version:              1.0

#Your change info:

#Description:          For auto install ftp

#Copyright(C):        2017  All rihts reserved

#*****************************************************************************

#ftp service dir is relative to system dir attribute.for example,if you are use anonmous to login ftp,if you upload some file to ftp,it use defaults user ftp to upload new file,and the new file permisson is 600,so other people could not download the file unless you change the file attribute about  other with r permission

time=`date +%Y%m%d%H%M`

#the function is used to install vsftpd  generate a new config file and create chroot_list and welcome.txt  file

#install ftp server

rpm -q  vsftpd &>/dev/null || yum -y install vsftpd &>/dev/null;

#install ftp  client,not necessary,but suggest

rpm -q ftp &>/dev/null || yum -y install ftp &>/dev/null;

[ -e /etc/vsftpd/vsftpd.conf ] && mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf."$time".bak

[ -e /etc/vsftpd/welcome.txt ] && mv  /etc/vsftpd/welcome.txt  /etc/vsftpd/welcome.txt."$time".bak

cat >>/etc/vsftpd/vsftpd.conf<

#should not listen both ipv4 and ipv6 port.suggest just only listen ipv4,so listen_ipv6 does not need to config.

#about anonymous

anonymous_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

anon_upload_enable=YES

#about entity user

local_enable=YES

write_enable=YES

local_umask=022

userlist_enable=YES

userlist_deny=YES

userlist_file=/etc/vsftpd/user_list

chroot_local_user=YES

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

#about server env

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_std_format=YES

listen=YES

pam_service_name=vsftpd

tcp_wrappers=YES

use_localtime=yes

#/etc/vsftpd/welcom.txt  need be created by manual

banner_file=/etc/vsftpd/welcome.txt

eof

[ -e /etc/vsftpd/chroot_list ] || touch /etc/vsftpd/chroot_list

cat >>/etc/vsftpd/welcome.txt<

Welcome to sunny ftp

eof

#create ftp users without login system pemission

echo "If you don't want to create user ,you can enter number 0 to skip create new ftp user"

read -p "how many ftp users would you want to create(eg:3,means create 3 users total): " usernu

[[ "$usernu" =~ ^[0-9]+$  ]] || { echo your input is no num,user does not create,please check;$usernu=0; }

if [ -z ${usernu:-} ];then

usernu=0

fi

read -p "enter passwd for all new users(default:ftp123): " pass

if [ -z ${pass:-} ];then

pass=ftp123

fi

while [ "$usernu" -gt 0 ];do

read -p "pleas input new username you want to create: " user

if $(id "$user" &>/dev/null);then

echo "$user" is already exist,$user will not be create again

continue

else

useradd -s /sbin/nologin -d /var/ftp/"$user" "$user"

echo "$pass"| passwd --stdin "$user"

echo "$user" >> /etc/vsftpd/chroot_list

let usernu--

fi

done

echo "You will create two dir under /var/ftp for project"

echo "dir share : everyone can do create,delete,upload,download files after one minute once file is upload under share"

echo "dir share_project : it  is similar to dir share,but one can delete file under it"

read -p "If you want to make two share dir,enter yes,it will not create if your enter other: " answer

if [ "$answer" = "yes" ];then

[ -e /var/ftp/share ] || mkdir /var/ftp/share

[ -e /var/ftp/share_project ] || mkdir /var/ftp/share_project

grep "/ftp/share1" /etc/crontab &>/dev/null || echo "* * * * * root chmod -R 777 /var/ftp/share">>/etc/crontab

chattr +a /var/ftp/share_project

else

echo "no share dir was created"

fi

#both cent 6 and 7

chkconfig vsftpd on

service vsftpd restart &>/dev/null

#centOS7 can run below cmd to restart and enble service when start system as well

#systemctl restart vsftpd.service

#systemctl enable vsftpd

setenforce 0  &>/dev/null

#if you want to use selinux,your run cmd below to make ftp work normal

#getsebool -a | grep ftp

#setsebool -P tftp_home_dir=1

#setsebool -P tftp_anon_write=1

#setsebool -P ftpd_anon_write=1

netstat -netlp | grep vsftpd &>/dev/null && echo "Your ftp is working,your can use it now" || echo "Your ftp service does not start,Please check"

unset usernu

unset pass

unset time

4 总结

本文的一键安装,用户可以根据自己的需要决定是否创建新的ftp用户,以及是否创建共享文件夹

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • ftp 文件传输协议 跨平台 上传下载文件 vsftpd 工具:非常安全的文件传输协议;默认的命令端口21号,数据...
    柒夏锦阅读 3,858评论 1 9
  • FTP服务概述 简单FTP构建及访问 VSFTP服务基础 用户禁锢、黑白名单 FTP并发及带宽限制 一、FTP服务...
    紫_轩阅读 7,453评论 3 25
  • 图片更清晰,文字在最下面 FTP是TCP/IP的一种应用,使用TCP而不是UDP,所以是可靠的,面向连接的。 FT...
    停下浮躁的心阅读 1,615评论 0 4
  • vsftpd.conf 部分:文件格式(5)索引 返回主要内容 名称 vsftpd.conf - vsftpd的配...
    张龙象阅读 2,098评论 0 1
  • #################匿名权限控制############### anonymous_enable=Y...
    牧民阅读 4,258评论 2 4