Linux配置与管理FTP服务

| 文章字数:4.9k | 阅读时长:19min
这是一篇更新于 525 天前的文章,其中的信息可能已经有所发展或是发生改变。

FTP用于在Internet上控制文件的双向传输。同时,它也是一个应用程序。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵循同一种协议以传输文件。在FTP的使用中,用户经常遇到两个概念:“下载”和“上传”下载文件就是从远程主机复制文件到自己的电脑上💻;上传文件就是将自己电脑上💻的文件复制到远程计算机。

任务一

配置企业文件下载服务器
某公司视频网站处于经营初期,为了提高公司的知名度,争取更多的用户资源,预把自己拥有的视频资源分享给互联网用户。具体要求如下
**(1)**配置FTP匿名用户的主目录为/var/ftp/anon,下载带宽限制为100KB/S.
**(2)**建立一个名为abc、口令为xyz的FTP账户,下载带宽限制为500KB/S.
**(3)**设置FTP服务器,同时登录到FTP服务器的最大链接数为100;每个IP最大链接数为3;用户空闲时间超过限值为5分钟。
**(4)**服务器IP地址为192.168.131.129
任务实施

设置IP地址

使用setup或者vim /etc/sysconfig/network-scripts/ifcfg-eth0来修改服务器的IP地址,然后使用service network restart重启网络服务。

安装vsftpd文件

1
2
yum install -y vsftpd #安装vsftpd
rpm -qa |grep vsftpd #查询安装信息

建立匿名用户主目录以及abc用户

1
2
3
mkdir /var/ftp/anon
useradd -s /sbin/nologin abc #建立用户不允许本地登录
passwd abc

编辑配置文件

编辑配置文件前首先使用cp -p /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak命令备份配置文件,然后使用vim /etc/vsftpd/vsftpd.conf命令编辑vsftpd配置文件,主要修改的内容如下:
注意有的是需要修改的,有的是需要添加的

anonymous_enable=yes
anon_root=/var/ftp/anon
anon_max_rate=100000
local_enable=yes
local_max_rate=500000
max_clinets=100
max_per_ip=3
connect_timeout=300

配置vsftpd在系统中运行

1
2
chkconfig --levels 2335 vsftpd on #开机运行
service vsftpd restart #重启服务

了解配置文件

anonymous_enable=yes #允许匿名用户登录
local_enable=yes #用户本地用户登录
write_enable=yes #允许本地用户具有写的权限
local_umask=022
#设置本地用户的文件生成掩码为022,默认为077;文件写入格式
anon_mkdir_write_enable=yes #允许匿名用户具有写的权限
dirmessage_enable=yes #激活上传/下载日子,当远程用户更改时提示
ascii_download_enable=yes #允许用户用ASCII格式来上传/下载文件
ftp_banner=welcome to you! #用户登录时提示欢迎词
userlist_enable=yes
#用户列表是否启用,当用户加入到/etc/vsftpd/ftpusers文件时,用户将不能访问FTP服务

经过测试abc用户和匿名用户均可访问FTP服务器资源。

任务二

配置企业内部文件FTP配额
背景某工厂制造加工企业,接到一笔较大的生产订单,需要多部分联合开发配合完成,部门之间需要交换公共文件,同时也需要部门之间有各自保密的文件。
**(1)**新建一个分区,10GB空间,ext3文件系统,挂载到/ftp下,作为FTP服务器数据存放的地方。
**(2)**四个部门:dep1、dep2、dep3、dep4,分别对应目录/ftp/dep1,/ftp/dep2,/ftp/dep3,/ftp/dep4.另外设定一个公共目录/ftp/public
**(3)**五个用户:admin,user1,user2,user3,user4。user1,user2,user3,user4对应的部门分别是dep1,dep2,dep3,dep4,他们只能访问属于自己部门的目录和public目录。admin管理员用户可以访问服务器上的任意一个目录。
**(4)**用户访问权限控制:user1,user2,user3,user4在所能访问的目录,具有上传文件、下载文件的功能,但是不具有删除文件、更改文件权限等功能。admin管理员对所有目录有文件上传、下载、删除、权限更改等功能。
**(5)**对每个部门定制一个quota,设置该账户的文件配额为1000个,磁盘配额为2GB。
**(6)**禁止匿名用户访问

磁盘分区与挂载

增加一块硬盘,然后使用下面命令进行分区,并把分区挂载情况写入/etc/fstab

1
2
3
4
fdisk /dev/sdb
mkfs.ext3 /dev/sdb1
mkdir /ftp
mount /dev/sdb1 /ftp -o usrquota,grpquota #挂载分区

使用vim /etc/fstab命令设置开机自动挂载,在文件最后增加如下内容

1
/dev/sdb1 /ftp ext3 defaults,usrquota,grpquota 0 0

建立用户与用户组并设置权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
groupadd dep1
groupadd dep2
groupadd dep3
groupadd dep4
groupadd market
useradd -G dep1,market user1
useradd -G dep2,market user2
useradd -G dep3,market user3
useradd -G dep4,market user4
useradd -G dep1,dep2,dep3,dep4,market admin
passwd user1
passwd user2
passwd user3
passwd user4
passwd admin
mkdir /ftp/dep1
mkdir /ftp/dep2
mkdir /ftp/dep3
mkdir /ftp/dep4
mkdir /ftp/public
chown user1:dep1 /ftp/dep1
chown user2:dep2 /ftp/dep2
chown user3:dep3 /ftp/dep3
chown user4:dep4 /ftp/dep4
chown admin:market /ftp/public
chmod 770 /ftp/dep1
chmod 770 /ftp/dep2
chmod 770 /ftp/dep3
chmod 770 /ftp/dep4
chmod 770 /ftp/public

最终新建的用户、用户组、文件夹以及权限如下图所示

创建quota,配置磁盘配额

使用setenforce 0关闭SELinux

1
2
3
quotacheck -cuvg /dev/sdb1
quotaon -a
edquota -g dep1


使用edquota -p dep1 -g dep2 dep3 dep4命令把quota属性设置套用到其余用户组。

编辑配置文件

使用vim /etc/vsftpd/vsftpd.conf修改或添加如下几处内容

1
2
3
4
anonymous_enable=NO
local_root=/ftp
user_config_dir=/etc/vsftpd/ftp_config_dir
chroot_list_file=/etc/vsftpd/chroot_list

建立用户独立文件

使用mkdir /etc/vsftpd/ftp_config_dir命令建立每个用户独立文件存放的目录。使用vim /etc/vsftpd/ftp_config_dir/user1命令建立用户配置文件,内容如下

1
cmds_allowed=ABOR,ACCT,APPE,CWD,CDUP,HELP,LIST,MODE,MDTM,NOOP,NLST,PASS,PASV,PORT,PWD,QUIT,REIN,RETR,SITE,SIZE,STOR,STAT,STOU,STRU,SYST,TYPE,USER

使用命令cd /etc/vsftpd/ftp_config_dir进入到目录下,然后使用cp user1 user2,cp user1 user3,cp user1 user4复制配置文件

验证

使用windows作为客户端来进行验证,在资源管理器的地址栏或者,浏览器的地址栏中输入ftp://192.168.131.129可以看到以下内容
这里显示让我们输入账户以及密码才可以登陆。无法使用匿名用户访问
或者当使用cmd命令行输入ftp 192.168.131.129尝试用匿名用户登陆显示登陆失败。

这是因为设置了禁止匿名用户访问所以才会这样,因此应该使用之前建立的用户登陆。为了区分登陆分别在/home/user14的文件夹下创建user1user4文件夹。并且在/ftp/dep14目录下创建名为14的文件。
当各个部门用户登陆成功后分别会显示一个对应自己用户名字的文件夹当管理员admin用户登陆成功后显示如下所示内容。
下面测试使用cmd命令行的方式来进行登陆ftp服务器进行文件的上传以及下载。

user1~4


因为操作都一样所以就截了一张图
查看windows客户端下载的文件

1~4public均为从服务器上下载下来的文件,
查看Linux服务器被上传的文件

测试客户端是否能删除文件
如图显示是无法删除的,到此为止测试各个部门的上传下载以及删除权限已经测试完毕。
测试用户的配额是否配置成功❓
可以搞一个这里搞一个centos的系统镜像来测试,大小为4.16GB.最终发现是无法放入的

admin


这里管理员用户对于四个部门的目录均具有上传、下载、删除的权限,理所当然对于公共目录public也同样具有最高的权限。

任务三

配置vsftp虚拟用户访问

安装相关文件

1
2
yum install pam* -y
yum install db4* -y

建立用户

建vsftpd服务宿主用户

1
useradd vsftpdadmin -s /sbin/nologin

建立vsftpd服务的宿主用户用来替换root用户,并不需要登录所以指定不可用shell。

建立FTP虚拟宿主账户

1
useradd ftpuser -s /sbin/nologin

配置vsftpd.conf文件

使用vim命令进行编辑,编辑前记得备份使用cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak来备份,vsftpd主配置文件,主要修改下面部分:

1
2
3
anonymous_enable=NO 
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

anonymous_enable=NO不允许匿名用户访问,默认为YES,chroot_list_enable=YES不允许FTP用户离开自己的主目录,chroot_list_file=/etc/vsftpd/chroot_list搭配上面一行使用的,这条是锁定用户只能登录家目录的位置,如果不开启用户登录时就会报500 OOPS的错误。

注意/etc/vsftpd/chroot_list本身是不存在的,需要自己手动创建。往里面输入账户一行一个

文件内具体代码的意义

local_enable=YES #允许本地用户访问
write_enable=YES #允许写入
local_umask=022 #上传后文件的掩码
dirmessage_enable=YES #开启目录标语
xferlog_enable=YES #开启日志
connect_from_port_20=YES #设定连接端口
xferlog_std_format=YES #设定vsftpd服务日子保存路径
idle_session_timeout=600 #会话超时时间
async_abor_enable=YES #支持异步传输功能
ascii_upload_enable=YES #支持ASCII模式上传功能
ascii_download_enable=YES #支持ASCII模式的下载功能
ftpd_banner=Welcome to blah FTP service. #FTP登录欢迎语
chroot_local_user=YES #禁止本地用户登录自己的FTP主目录
pam_service_name=vsftpd #设定pam服务下vsftpd的验证配置文件名
userlist_enable=YES #拒绝登录用户名单

userlist_deny=NO

TCP_wrappers=YES #限制主机对VSFTP服务器的访问
tcp_wrapper=YES
chroot_local_user=NO
guest_enable=YES #设定启用虚拟用户功能
guest_username=ftpuser #指定虚拟用户的宿主用户
virtual_use_local_privs=YES #设定虚拟用户的权限符合其宿主用户
user_config_dir=/etc/vsftpd/vconf #设定虚拟用户个人vsftp的配置文件存放路径

建立日志文件并修改权限

1
2
touch /var/log/vsftpd.log
chown vsftpdadmin.vsftpdadmin /var/log/vsftpd.log

建立虚拟用户文件

1
2
mkdir /etc/vsftpd/vconf
touch /etc/vsftpd/vconf/vir_user

建立虚拟用户

使用vim /etc/vstfpd/vconf/vir_user命令来编辑虚拟用户文件,添加如下内容。

1
2
virtualuser #账号
123456 #密码

使用vim /etc/vsftpd/chroot_list命令来锁定用户目录的配置文件

1
2
virtualuser
virtual2

生成数据库

1
db_load -T -t hash -f /etc/vsftpd/vconf/vir_user /etc/vsftpd/vconf/vir_user.db

设置数据文件的访问权限

1
2
chmod 600 /etc/vsftpd/vconf/vir_user
chmod 600 /etc/vsftpd/vconf/vir_user.db

修改/etc/pam.d/vsftpd内容

使用vim /etc/pam.d/vsftpd命令编辑文件,内容如下所示

1
2
3
#%PAM-1.0
auth sufficient pam_userdb.so db=/etc/vsftpd/vconf/vir_user
account sufficient pam_userdb.so db=/etc/vsftpd/vconf/vir_user

备注:auth是对于用户的用户名口令进行验证,account是对于用户的账户有哪些权限、哪些限制进行验证,sufficent表示充分条件,pam_userdb.so表示该条审核将调用库函数pam_userdb.so进行。db=/etc/vsftpd/vconf/vir_user指定验证库函数将到这个指定的数据库中调用数据进行验证。

创建用户的配置文件

使用vim /etc/vsftpd/vconf/virtualuser创建用户配置文件。输入如下所示内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
local_root=/home/share
anonymous_enable=NO
write_enable=YES
local_umask=0333
anon_umask=0777
file_open_mode=0777
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
cmds_allowed=STOR,FEAT,REST,ABOR,CWD,LIST,MDTM,NLST,PASS,PASV,PORT,PWD,QUIT,RMD,RNFR,SIZE,TYPE,USER,ACCT,APPE,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST,RETR
idle_session_timeout=600
data_connection_timeout=120
max_clients=10
max_per_ip=5
local_max_rate=1048576

重启服务

使用service vsftpd restart或者/etc/init.d/vsftpd restart

验证

任务四

部署专家级FTP服务器

配置默认的vsftpd服务器

  1. 挂载系统光盘

    mount /dev/cdrom /mnt

  2. 安装vsftpd

    在此,使用rpm的安装方式来安装,安装包放在系统光盘的Packages目录中

    rpm -ivh /mnt/Packages/vsftpd-2.2.2-11.el6_4.1.x86_64.rpm

  3. 查看vsftpd配置文件

    grep -v “#” /etc/vsftpd/vsftpd.conf

  4. 在系统中允许

    chkconfig –levels 235 vsftpd on
    service vsftpd restart

配置匿名用户访问和下载权限

启动服务

service vsftpd start

测试前关闭selinux和防火墙

1
2
service iptables stop
setenforce 0

在客户机中测试用文件夹方式访问ftp://192.168.131.129.

测试匿名用户的上传和下载权限

注意:使用匿名账户ftp登录(无密),查看现在所有的工作目录为/,这个/并不是服务器的根目录,而是匿名用户自己的家目录,使用ls命令发现里面有一个pub文件。

匿名用户的家目录就是服务器上的/var/ftp目录。在服务器上建立一个可供下载的文件。使用echo "hello world">/var/ftp/1.txt新建一个内容为hello world的文件。回到客户机上使用get 1.txt命令下载文件。

可以在客户机上查看到一个1.txt的文件。在客户机上把下载的文件重命名一下,来测试上传。上传时被拒绝,因为匿名用户默认只能下载而不能上传。测试系统的用户的上传权限,这里可以使用useradd upload新建一个upload用户,使用passwd upload来设置用户的密码。再次用客户机进行测试,用upload登录并上传11.txt文件,文件上传成功。使用ls -l /home/upload命令查看上传文件的权限为644(因为配置文件中local_umask=022)

配置匿名用户拥有完全权限

1.修改配置文件

可以在配置文件中加入anon_mkdir_write_enable=YESanon_upload_enable=YES使匿名用户具有上传删除的权限。

注意当不知道如何配置要添加或者修改哪些选项时。可以使用man来找到答案man vsftpd.conf,查找与anon相关内容,找到anon_other_write_enable它的默认值是NO,所以设置为YES就可以允许上传、创建目录、并且删除、重命名等操作。

2.效果验证

使用service vsftpd reload命令重新加载配置,然后在客户机上再次用匿名用户进行测试。

发现还是无法上传和删除文件,回到服务器后查看ftp目录的权限后发现它没有写的权限,所以是无法上传和删除的。

3.修改权限

选择暴力方法使用chmod 777 /var/ftp将权限设为最大,然后回到客户机登录发现直接报错了。因为我们把/ftp这个目录权限设为最大,这样匿名用户就可以为所欲为了。为了避免类事情的发生为安全起见所以vsfptd设置了不允许登录。

4.正确配置文件夹的权限

1
2
3
4
5
6
7
8
chmod 755 /var/ftp #把权限改为默认的755
cd /var/ftp #进入ftp目录
mkdir anon #在目录下新建目录
chmod 777 anon #修改目录权限
cp 1.txt anon #复制文件到anon目录下
cd anon #进入anon目录
ls -l #查看1.txt的权限
chmod 666 test.txt #修改文件权限为可写

5.测试

回到客户机来测试能否删除1.txt文件和上传新的文件。

配置登录用户禁锢在家目录

vsftp用户登录系统后,当前目录一般为家目录,用户的各种操作均在此目录中实现,但是搭建的vsftpd服务器默认并不是我们想要的这样,用户是可以随意切换到系统中的其他目录中去的,这样就给系统的安全带来了很大的隐患。

测试用户权限

使用upload用户登录到服务器,测试是否可以切换目录。

修改配置文件

修改配置文件去掉"chroot_local_user=YES"前的注释符号#

重启服务

可以使用service vsftpd reload命令重启服务器使刚才的配置生效。

测试

在客户机使用upload用户登录,切换到根目录然后使用ls命令来查看文件发现并不能看到根目录下的内容,只能看到自己家目录下的内容。

配置实现现在某些用户访问

vsftp服务和samba服务不一样,在samba服务中系统和samba用户是分开的,而在vsftp服务中,只要是系统默认用户就是vsftp用户。也就是说只要能够登录系统就可以登录vsftp服务器,这样做显然是不太合理的。

1.查看配置vsftpd配置的相关文件

/etc/vsftpd目录下有一个user_list文件,使用cat命令来查看文件中的内容,发现都是拒绝登录vsftp服务器的用户。所以谁不可以登录就把账号写进这个文件中。

2.添加拒绝账户到文件中

使用vim /etc/vsftpd/user_list命令编辑文件在最后一行加入upload账户用以拒绝访问upload登录ftp服务器。然后重启服务

3.效果验证

回到客户机用upload登录,会显示失败。

备注这里登录失败的原因是应为把upload写进了user_list这个文件中,这个拒绝用户登录之所以生效是因为/etc/vsftpd/vsftpd.conf配置文件中默认有“user_list_enalbe=YES”这行设置,如果把此配置改成“user_list_enable=YES”那么就只有写进user_list文件中的用户才可以登录。

配置虚拟用户FTP访问

在vsftp服务器中,系统用户就是vsftp用户,那么vsftp账户也能够登录系统,为了系统安全考虑,运维人员往往需要只建立vsftp用户,而不希望登录系统,这时就需要用到vsftp服务器的虚拟账户功能。

新建虚拟用户名文件

使用vim /etc/vsftpd/vuser命令创建用于存放虚拟用户的文件。文件中奇数行为用户名,偶数行为密码。先在创建两个名分别为Tom和Jack,密码为qwe123的虚拟用户。

将文件转换成数据库文件

1
2
cd /etc/vsftpd
db_load -T -thash -f vuser vuser.db

参数-T指定转换后的文件类型为hash,参数-f指定转换后的文件名为vuser.db。可以使用file vuser.db来查看文件的类型。

修改用户文件权限

为了安全,不能让其他用户拥有vuser和vuser.db文件的任何权限。

1
2
chmod 600 /etc/vsftpd/vuser
chmod 600 /etc/vsftpd/vuser.db

创建虚拟用户的映射账户

虚拟用户创建之后,要给虚拟用户映射到一个系统账号,使用useradd -d /opt/vuser -s /sbin/nologin vuser命令新建一个虚拟用户的映射账号vuser,指定宿主目录为/opt/vuser,并指定不能登录系统。

配置用户认证信息

使用vim /etc/pam.d/vsftpd.vu命令为虚拟用户创建pam认证模块,名字为vsftpd.vu。在认证文件中加入如下内容

1
2
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser

这里的vuser其实是vuser.db,这里省略了.db,否则会报错。

开启虚拟用户访问

使用vim /etc/vsftpd/vsftpd.conf编辑配置文件,在文件的最后添加如下内容,注释掉pam_service_name=vsftpd。如下图所示

1
2
3
guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd.vu

效果验证

使用service vsftpd restart命令重启服务,用客户机进行测试。分别使用Tom和Jack登录并上传文件

使用ls -l /opt/vuser命令查看上传的文件的属主,发现属主均为vuser。

配置虚拟用户拥有不同的文件权限

开启单独配置文件功能

打开vsftpd.conf配置文件,加入以下一行内容,告诉配置文件在vu_dir目录下找用户的单独权限配置文件

1
user_config_dir=/etc/vsftpd/vu_dir

建立用户权限文件

1
2
3
mkdir -p /etc/vsftpd/vu_dir #新建vu_dir目录
cd /etc/vsftpd/vu_dir #进入vu_dir目录
touch Jack

使用man命令发现anon_umask(匿名上传)的默认权限为600,如国要改变Jack的上传权限为644的话,就把这个值设置为022即可。使用vim Jack命令编辑文件在文件中写入anon_umask=022

效果验证

重启服务后,用客户机登录Jack上传一个新的文件。

扫码加我微信