服务器搭建(一):FTP服务器之vsftpd搭建

前提:系统 cat /etc/redhat-release

Red Hat Enterprise Linux Server release 7.2 (Maipo)

一:安装 vsftpd

查看是否安装vsftpd服务

#rpm -qa | grep vsftpd

没有则安装

#yum -y install vsftpd

二:创建根目录

创建所有项目的文件根目录

#mkdir -p /home/ifile

三:添加宿主用户virtual

并将他的家目录设为 /home/ifile, 且不可登陆 

#useradd -d /home/ifile -s /sbin/nologin virtual

利用 cat /etc/passwd 查看virtual 是否添加

#cat /etc/passwd

四:新建虚拟用户/密码

新建logins 文件

#touch /opt/vsftp/logins

加入虚拟用户+密码(奇数行为用户名,偶数行为密码)到 logins文件

file
^YHNmko0
aios
^YHNmko0
raios
^YHNmko0
waios
^YHNmko0
rwaios
^YHNmko0

 

使用db_load命令生成vsftpd_logins.db文件,每次加入虚拟用户后这个命令就的执行一次!

 

#db_load -T -t hash -f logins vsftpd_logins.db

将生成的vsftpd_logins.db 文件权限修改为 600,即只可root读写.

#chmod 600 /opt/vsftpd/vsftpd_logins.db

 

五:修改 /etc/pam.d/vsftpd 文件

 

加入以下内容:如果是32位系统则加入####32位系统配置,如果是64位系统则加入####64位系统配置

####32位系统配置
auth    sufficient     /lib/security/pam_userdb.so     db=/etc/vsftpd/vsftpd_logins
account sufficient     /lib/security/pam_userdb.so     db=/etc/vsftpd/vsftpd_logins
####64位系统配置
auth    sufficient      /lib64/security/pam_userdb.so   db=/opt/vsftp/vsftpd_logins
account sufficient      /lib64/security/pam_userdb.so   db=/opt/vsftp/vsftpd_logins

六:配置 vsftpd服务的主配置文件 /etc/vsftpd/vsftpd.conf

先备份:

#cd /etc/vsftpd/
#cp vsftpd.conf vsftpd_backup.conf

修改配置最终如下:

# Example config file /etc/vsftpd/vsftpd.conf
##1.
#关于匿名用户配置
#
#是否开启可匿名访问
anonymous_enable=YES

#当设定为YES时,表示anonymous将会略过密码检验步骤,
#而直接进入vsftpd伺服器内喔!所以一般预设都是NO的!(登入时会检查输入的emai)
no_anon_password=YES

#将某些特殊的email address抵挡住,不让那些anonymous登入!
#如果以anonymous登入伺服器时,不是会要求输入密码吗?
#密码不是要你输入你的email address吗?如果你很讨厌某些email address,
#就可以使用这个设定来将他取消登入的权限!需与下个设定项目配合:
#deny_email_enable=YES

#如果deny_email_enable=YES时,可以利用这个设定项目来规定哪个
#email address不可登入我们的vsftpd喔!在上面设定的档案内,
#一行输入一个email address即可!
#banned_email_file=/etc/vsftpd/banned_emails

#是否仅只读
#anon_world_readable_only=NO

#是否允许anonymous具有除了写入之外的权限?
#包括删除与改写伺服器上的档案及档名等权限。
#预设当然是NO!如果要设定为YES,那么开放给
#anonymous写入的目录亦需要调整权限,让vsftpd
#的PID拥有者可以写入才行!
#anon_other_write_enable=YES

#是否让anonymous具有建立目录的权限?预设值是NO!
#这个设定项目比较危险一点~当设定为YES时,表示每个建立的连线都会拥有一支process在负责,
#可以增加vsftpd的效能。不过,除非你的系统比较安全,而且硬体配备比较高,
#否则容易耗尽系统资源喔!一般建议设定为NO的啦!
one_process_model=NO

#2.
##关于文件上传配置
#
# 决定是否允许一些FTP命令去更改文件系统。
# 包括上传文件,删除文件,新增目录,删除目录
write_enable=NO

#对于上传的文件设定权限。默认为666,
#与local_umask配合使用
#file_open_mode=666

#假设umask为022:
#则对于一个文件夹的话,它的默认属性为 777-022=755
#而对于一般的文件的话,则是用 666-022=644.
#如果是077则anonymous传送过来的档案权限会是-rw-------
################################
#如果使用vsftp的是本地用户
#则要修改配置文件中的 local_umask 的值
local_umask=022
#如果使用vsftp的是虚拟用户
#则要修改配置文件中的 anon_umask 的值
anon_umask=333

# 设定是否允许改变上传文件的属主,与下面一个设定项配合使用)
#chown_uploads=YES
#设置想要改变的上传文件的属主,如果需要,则输入一个系统用户名,例
#如可以把上传的文件都改成root 属主。
#chown_username=whoever



##3.
#日志文件配置
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# You may override where the log file goes if you like. The default is shown
# below.
xferlog_file=/var/log/xferlog.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

dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
#除了/var/log/xferlog的wu-ftp格式登录档之外,
#还可以具有vsftpd的独特登录档格式喔!
#如果你的FTP伺服器并不是很忙碌,
#或许订出两个登录档的撰写(/var/log/{vsftpd.log,xferlog)是不错的。





##4.
#伺服器(ftp文件存储服务器)系统环境配置
#
#主动式连线的数据链接的port
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES

#vsftpd服务的命令通道port
listen_port=4449

#是否使用本地时间?vsftpd预设使用GMT时间(格林威治),
#所以预设的FTP内的档案日期会比台湾晚8小时
#use_localtime=YES

#支援资料流的被动式连线模式(passive mode),一定要设定为YES
pasv_enable=YES

#若设定为YES表示vsftpd是以standalone的方式来启动的
listen=YES

#当使用者进入某个目录时,会显示该目录需要注意的内容,
#显示的档案预设是.message ,你可以使用底下的设定项目来修订
dirmessage_enable=YES

#当dirmessage_enable=YES时,可以设定这个项目来让vsftpd寻找该档案来显示讯息
#message_file=.message

# You may fully customise the login banner string:
#ftpd_banner=@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Welcome to SVFTPD SERVICE@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

#使用ftp命令后的欢迎显示的内容文件
banner_file=/etc/vsftpd/welcome.txt

#单位是秒,在资料连接的主动式连线模式下,
#我们发出的连接讯号在60秒内得不到用户端的回应,则不等待并强制断线咯。
connect_timeout=60

#当使用者以被动式PASV来进行资料传输时,
#如果伺服器启用passive port并等待client超过60秒而无回应,
#那么就给他强制断线!这个设定值与connect_timeout类似,
#不过一个是管理主动连线,一个管理被动连线。
accept_timeout=60

# You may change the default value for timing out an idle session.
#如果使用者在600秒内都没有命令动作,强制离线!避免占着茅坑不拉屎~
#idle_session_timeout=600

#如果伺服器与用户端的资料连线已经成功建立(不论主动还是被动连线),
#但是可能由于线路问题导致300秒内还是无法顺利的完成资料的传送,那用户端的连线就会被我们的vsftpd强制剔除!
#data_connection_timeout=120

#如果vsftpd是以stand alone方式启动的,那么这个设定项目可以设定同一时间,
#最多有多少client可以同时连上vsftpd哩!限制使用FTP的用量!
max_clients=50

#与上面max_clients类似,这里是同一个IP同一时间可允许多少连线
max_per_ip=5

#被动式连线埠口的限制
pasv_min_port=65400
pasv_max_port=65410

#
ls_recurse_enable=NO




##5.
#系统安全配置
#
#如果设定为YES ,那么client就优先(预设)使用ASCII格式下载档案。
#ascii_download_enable=YES

#如果设定为YES ,那么client就优先(预设)使用ASCII格式上传档案。
#ascii_upload_enable=YES

#这个设定项目比较危险一点~当设定为YES时,表示每个建立的连线都会拥有一支process在负责,
#可以增加vsftpd的效能。不过,除非你的系统比较安全,而且硬体配备比较高,
#否则容易耗尽系统资源喔!一般建议设定为NO的啦!
one_process_model=NO

#我们的vsftpd预设以nobody作为此一服务执行者的权限。
#因为nobody的权限相当的低,因此即使被入侵,入侵者仅能取得nobody的权限
#nopriv_user=nobody

#这个是pam模组的名称,我们放置在/etc/pam.d/vsftpd即是这个
pam_service_name=vsftpd



##6.
#权限配置.
#
#6.1 主机登陆权限
#TCP wrappers是透过用户端想要连结的程式档名,然后分析用户端的IP ,看看是否需要放行
#配置 /etc/hosts.allow和 /etc/hosts.deny
#1.样例
#       vsftpd : ALL      #允许/禁止所有ip 访问vsftpd服务
#       ALL : 127.0.0.1   #允许/禁止本机访问本机的所有服务
#       vsftpd : 127.0.0. #允许127.0.0.段的网络访问vsftpd服务
#2注意: 若.allow文件和.deny文件同时满足的ip则以.allow为准
tcp_wrappers=YES


#6.2 chroot权限
#在預設的情況下,是否要將使用者限制在自己的家目錄之內(chroot)?
#如果是 YES 代表用戶預設就會被 chroot,如果是 NO, 則預設是沒有 chroot。
#不過,實際還是需要底下的兩個參數互相參考才行。為了安全性,這裡應該要設定成 YES 才好。
# 为YES时,本地所有用户志显示自己的主目录,
#
#设置虚拟用户被锁定在自己的宿主目录中
chroot_local_user=YES

#是否啟用 chroot 寫入列表的功能?與底下的 chroot_list_flie 有關!
#這個項目得要開啟,否則底下的列表檔案會無效。
#chroot_list_enable=YES

#如果 chroot_list_enable=YES 那麼就必须設定這個項目了!
#這個項目與 chroot_local_user 有關
#chroot_list_file=/etc/vsftpd/chroot_list


#6.3 用户访问权限
#是否借助vsftpd的抵挡机制来处理某些不受欢迎的帐号,与底下的参数设定有关
#相当于开关
userlist_enable=YES
#
# enable=YES 时,ftpusers允许访问,user_list允许访问
# enable=NO  时,ftpusers禁止访问,user_list允许访问
# deny  =YES 时,ftpusers禁止访问,user_list禁止访问
# deny  =NO  时,ftpusers禁止访问,user_list允许访问
#
#当userlist_enable=YES时才会生效的设定,若此设定值为YES时,
#则当使用者帐号被列入到某个档案时,在该档案内的使用者将无法登入vsftpd伺服器!
#该档案档名与下列设定项目有关。
userlist_deny=NO

#若上面userlist_deny=YES时,则这个档案内的帐号都无法使用vsftpd
#若上面userlist_deny=NO时,则这个档案内的账号才能使用vsftpd
userlist_file=/etc/vsftpd/user_list



##7.
#本地用户配置
#
#这个设定值必须要为YES时,在/etc/passwd内的帐号才能以实体用户的方式登入我们的vsftpd伺服器
local_enable=YES

#虚拟用户和本地用户权限相同, 默认是NO
#virtual_use_local_privs=YES

#若这个值设定为YES时,那么任何实体帐号,均会被假设成为guest喔(所以预设是不开放的)
#如果启用,所有的非匿名用户登录时将被视为游客
guest_enable=YES

#在guest_enable=YES时才会生效,指定访客的身份而已
guest_username=virtual

#限制实体用户的总下载流量
local_max_rate=1000000

#对不同的虚拟用户配置不同的权限, vsconf 是一个文件夹,需要用户创建, 其下面的每个文件的文件名为 四. 中的虚拟用户名
user_config_dir=/etc/vsftpd/vsconf

##8.EXTRA or uNKNOW
#async_abor_enable=YES

 

更为具体的请参考:

http://linux.vbird.org/linux_server/0410vsftpd.php#server_real_chroot2

http://bbs.51cto.com/thread-717151-1.html

配合上面的配置

     1. 添加 /etc/vsftpd/welcome.txt 文件:

#touch /etc/vsftpd/welcome.txt

加上:

欢迎使用VSFTPD文件服务
若有需要请联系133-3333-3333

    2. 添加 /etc/vsftpd/chroot_list 文件

#touch /etc/vsftpd/chroot_list

加上aios, 表示 除 aios外,其他用户都是chroot在他们的家目录下

aios

    3. 而 user_list 文件会在系统安装 vsftpd服务时自动创建, 加了如上配置后表示只有 user_list 中的用户才能登陆vsftpd服务.

所以删除以前的数据, 加入 file, aios, raios, waios, rwaios;

file
aios
raios
waios
rwaios

4. 添加个虚拟用户的个性配置

file: 可上传,可下载,可建目录, 可删除或重命名目录/文件, 可修改目录/文件的权限属性 所有项目

# file
local_root=/home/ifile

write_enable=YES

anon_umask=022

# 可显示目录和文件
anon_world_readable_only=NO

# 可删除/重命名
anon_other_write_enable=YES

# 可上传
anon_upload_enable=YES

# 可创建目录
anon_mkdir_write_enable=YES

virtual_use_local_privs=YES
chmod_enable=YES

aois: 可上传,可下载,可建目录, 可删除或重命名目录/文件, 可修改目录/文件的权限属性  针对aios项目

# file
local_root=/home/ifile/aios

write_enable=YES

anon_umask=022

# 可显示目录和文件
anon_world_readable_only=NO

# 可删除/重命名
anon_other_write_enable=YES

# 可上传
anon_upload_enable=YES

# 可创建目录
anon_mkdir_write_enable=YES

virtual_use_local_privs=YES
chmod_enable=YES
 

raios: 可下载  针对aios 项目

# raios - 只读
local_root=/home/ifile/aios

#使 raios 用户的能下载,也只能下载;写成YES,将不能列出文件和目录
anon_world_readable_only=NO

waios: 可上传,可下载  针对aios项目

# waios - 可读可写
local_root=/home/ifile/aios

#写成YES,将不能列出文件和目录
anon_world_readable_only=NO

#开启可写
write_enable=YES

#可上传
anon_upload_enable=YES

#
anon_umask=022

rwaios: 可上传,可下载,可建目录  针对aios项目

# rwaios = 可读可写可建目录
local_root=/home/ifile/aios

# 可下载
anon_world_readable_only=NO

# 可写
write_enable=YES

# 可上传
anon_upload_enable=YES

#
anon_umask=022

# 可mkdir
anon_mkdir_write_enable=YES

 

此时的文件服务器可以介绍为:

    1. 可匿名登陆, 无需密码, 且登陆后的家目录为 ftp 用户的家目录, 一般为/var/ftp

    2. chroot_list 放的是可以切换到其他目录的用户清单

    3. user_list 放的是可登陆该vsftpd服务的用户清单

    4. 若添加新用户,且该用户绑定在virtual用户下, 在 /opt/vsftpd/logins 中加入新增用户名和密码,重新使用命令db_load生成 .db文件并覆盖, 在/etc/vsftpd/vsconf/ 文件夹下新增新增用户的个性文件,并配置相关权限, 最后还要在 /etc/vsftpd/user_list 中加入该新增用户,表示该用户可登陆!

 

七: 测试

 

使用FileZilla ftp客户端测试, 客户端下载地址为: https://filezilla-project.org/download.php?type=client

准备工作: 

    1.在 virtual 用户的家目录下 创建两个项目分别为 aios 和 hra, 并修改文件权限为 750

#cd /home/ifile/
#mkdir aios
#mkdir hra

    修改其权限

#chmod 750 aios/
#chmod 750 hra/

因为 我们待会要把这个两个项目做成虚拟用户的家目录, 所以他们相对于 virtual 用户而言不能有写的权限,否则其实vsftpd服务启动成功了,在进入他们的目录时候会报 “500 OOPS: vsftpd: refusing to run with writable root inside chroot()”错误.

这样两个项目的根目录就建好了, 接着就分别在 aios/ 和 hra/下创建 imgs/, txts/, excels/ 文件和 imgs/,pdfs/, tables/文件

#mkdir /aios/imgs
#mkdir /aios/txts
#mkdir /aios/excels

#mkdir /hra/imgs
#mkdir /hra/pdfs
#mkdir /hra/tables

紧接着修改新建的 6个文件的owner和group,把他们改成 virtual的:

#cd aios/
#chown virtual:virtual imgs/
#chown virtual:virtual txts/
#chown virtual:virtual excels/

#cd ../hra/
#chown virtual:virtual imgs/
#chown virtual:virtual pdfs/
#chown virtual:virtual tables/

最后有

home/	->	ifile/	->	aios/	->	imgs/
 (root)		(root)	      (root/750)     (virtual/755)
					->	txts/
					     (virtual/755)
					->	excels/
					     (virtual/755)

home/	->	ifile/	->	hra/	->	imgs/
(root)		(root)	      (root/750)     (virtual/755)
					->	pdfs/
					     (virtual/755)
					->	tables/
					     (virtual/755)                  

 

准备工作完毕,开始测试.

1.启动服务:

#systemctl start vsftpd.service

 

2.登陆 waios:

 

上传  MySQL 5.1参考手册.chm 文件, 

我想把它放在 txts/chms/ 下,所以要建一个目录

但是发现:

状态:	正在创建目录“/txts/chms”...
命令:	MKD chms
响应:	550 Permission denied.

原来 waios 没有新建目录的权限,所以 到 rwaios 或者 aios 下去创建:

状态:	正在创建目录“/txts/chms”...
状态:	读取“/txts”的目录列表...
状态:	列出“/txts”的目录成功
状态:	读取“/txts/chms”的目录列表...
状态:	列出“/txts/chms”的目录成功

 

目录创建成功后,切回到 waios 用户, 上传 MySQL 5.1参考手册.chm 文件

 

 

3. 若我想上传 jdk_1.7.CHM 文件, 但上传后不想被其他人任何人下载, 这是就用到 aios 或 file 这两个虚拟账号的 chmod_enable=YES 修改文件权限:

右击 上传后的 jdk_1.7.CHM 文件, 选择文件权限,变成 040, 确定

为什么是 040呢, 首先最后一个0那是一定的,第一个0那是应为 无论是file, aios, raios, waios, rwaios 都是绑定在 virtual这个用户上的,他们具体的操作都是有virtual完成, 所以第一个要为0,不能让 其他虚拟用户读.

登陆 raios 看看能不能下载,发现:

而此时 file 则是可以上传、下载、删除所有项目文件。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值