CentOS7 FTP安装与配置

时间:2024-11-14 08:05:57

1FTP的安装

#安装
yum install -y vsftpd

#设置开机启动
systemctl enable

#启动
systemctl start

#停止
systemctl stop

#查看状态
systemctl status

 

2、配置FTP 

#打开配置文件

vim /etc/vsftpd/

 

#显示行号

:set number

 

#修改配置 12

anonymous_enable=NO

 

#修改配置 33

anon_mkdir_write_enable=YES

 

#修改配置48行

chown_uploads=YES

 

#修改配置72行

async_abor_enable=YES

 

#修改配置82行

ascii_upload_enable=YES

 

#修改配置83行

ascii_download_enable=YES

 

#修改配置86行

ftpd_banner=Welcome to blah FTP service.

#
修改配置100行
chroot_local_user=YES

 

#添加下列内容到末尾

use_localtime=YES

listen_port=21

idle_session_timeout=300

guest_enable=YES

guest_username=vsftpd

user_config_dir=/etc/vsftpd/vconf

data_connection_timeout=1

virtual_use_local_privs=YES

pasv_min_port=40000

pasv_max_port=40010

accept_timeout=5

connect_timeout=1
allow_writeable_chroot=YES

 

 

3、建立虚拟用户文件

#创建编辑用户文件

vim /etc/vsftpd/virtusers

#第一行为用户名,第二行为密码。不能使用root作为用户名

leo
12345

 

4、生成虚拟用户数据文件

db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/

 

#设定PAM验证文件,并指定对虚拟用户数据库文件进行读取

 

chmod 600 /etc/vsftpd/

 

5、修改 /etc//vsftpd 文件

# 修改前先备份

 

cp /etc//vsftpd /etc//

 

vi /etc//vsftpd

#先将配置文件中原有的 auth 及 account 的所有配置行均注释掉

auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers

#
如果系统为32位,上面改为lib

 

6、新建系统用户vsftpd,用户目录为/home/vsftpd

#用户登录终端设为/bin/false(即:使之不能登录系统)

useradd vsftpd -d /home/vsftpd -s /bin/false

chown -R vsftpd:vsftpd /home/vsftpd

 

7、建立虚拟用户个人配置文件

mkdir /etc/vsftpd/vconf

cd /etc/vsftpd/vconf

 

#这里建立虚拟用户leo配置文件

touch leo
 

#编辑leo用户配置文件,内容如下,其他用户类似

vi leo

 

local_root=/home/vsftpd/leo/

write_enable=YES

anon_world_readable_only=NO

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

#建立leo用户根目录

mkdir -p /home/vsftpd/leo/

 

8、防火墙设置

IPtables 的设置方式:
vi /etc/sysconfig/iptables

#编辑iptables文件,添加如下内容,开启21端口

-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 40000:40010 -j ACCEPT



firewall 的设置方式:

firewall-cmd --zone=public --add-service=ftp --permanent

firewall-cmd --zone=public --add-port=21/tcp --permanent

firewall-cmd --zone=public --add-port=40000-40010/tcp --permanent

 

 

9、重启vsftpd服务器

systemctl restart

 

10、使用ftp工具连接测试

这个时候,使用ftp的工具连接时,我们发现是可以连接的。传输文件的时候,会发现文件上传和下载都会出现

500503 200等问题。这个时候,可以进行以下操作:

方式一、关闭SELINUX

#打开SELINUX配置文件

vim /etc/selinux/config

 

 

#修改配置参数

#注释 

SELINUX=enforcing

 

#增加 

SELINUX=disabled

 

 

#修改完成后,需要重启!

方式二、修改SELINUX

setenforce 0 #暂时让SELinux进入Permissive模式

 

 

#列出与ftp相关的设置

getsebool -a|grep ftp

 

 

#以下是显示出来的权限,off是关闭权限,on是打开权限。不同的机器显示的可能不一样。我看了我的显示的,和网上其他教程就不太一样

ftp_home_dir --> off

ftpd_anon_write --> off

ftpd_connect_all_unreserved --> off

ftpd_connect_db --> off

ftpd_full_access --> off

ftpd_use_cifs --> off

ftpd_use_fusefs --> off

ftpd_use_nfs --> off

ftpd_use_passive_mode --> off

httpd_can_connect_ftp --> off

httpd_enable_ftp_server --> off

sftpd_anon_write --> off

sftpd_enable_homedirs --> off

sftpd_full_access --> off

sftpd_write_ssh_home --> off

tftp_anon_write --> off

tftp_home_dir --> off

 

 

#将包含有 ftp_home_dir 和 ftpd_full_access 相关的都设置为 1

 

setsebool -P ftp_home_dir 1
setsebool -P allow_ftpd_anon_write 1

setsebool -P ftp_home_dir 1

 

setenforce 1 #进入Enforcing模式

方式三、 SELINUX不对vsftp不做任何限制

setsebool -P ftpd_connect_all_unreserved 1

 

这个时候再使用工具连接,你发现,就可以正常的上传和下载文件了。

 

如果还是有问题尝试给我们用户的ftp目录,设置一下操作权限

chmod -R 775 /home/vsftpd/leo

 

 

 

 

 

 

 

 

虚拟用户原理

因为在linux之下,使用vsftp建立用户之后,默认使用ftp访问的时候,是会访问到对应的用户家目录。如果想多个用户同时访问某一个目录,同时对同一目录下有着不同的权限,比如部分用户只能看,不修改,或者有的用户只能下载不能上传这些权限,这些设定只能通过vsftp中的虚拟用户来进行设定,普通的用户无法达到这样的效果。

故先通过建立一个普通系统用户,建立家目录,然后将所有的虚拟用户映射到对应的普通系统用户家目录中,然后再对各虚拟用户进行权限控制,达到上述的效果。

新建用户

新建用户marility,用户锁定在/var/www/ruibiaofangxuan目录内

?

1

2

3

4

mkdir /var/www/ruibiaofangxuan

useradd -d /var/www/ruibiaofangxuan marility

chown /var/www/ruibiaofangxuan

chmod u-w /var/www/ruibiaofangxuan

给虚拟用户生成随机密码

?

1

2

[root@marility ~]# tr -cd '[:alnum:]' < /dev/urandom | fold -w32 |head -n1

eFEBgVTfWJ66OhQ3rTuGB4kt5k5r0aMW

vsftp的相关配置文件设置

?

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

31

[root@marility vsftpd]# grep ^[^#] /etc/vsftpd/

anonymous_enable=NO         ##禁止匿名用户

local_enable=YES            ##开启本地账户,虚拟账户需要映射到本地账户

write_enable=YES           

local_umask=022           ##本地用户的umask值

anon_umask=022           ##虚拟用户的umask值设定

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_file=/var/log/xferlog        ##日志路径

xferlog_std_format=YES

ascii_upload_enable=YES       ##允许上传ascii格式文件

ascii_download_enable=YES

ftpd_banner=Welcome to blah FTP service.

chroot_local_user=YES          ##禁锢用户在家目录

chroot_list_enable=NO  ##不启用本地禁用目录,使用虚拟用户时不需要开户本地列表过滤

listen=YES             ##监听ipv4

listen_ipv6=NO

allow_writeable_chroot=YES       ##可以写,因为禁锢家目录需去掉用户写权限

tcp_wrappers=YES

guest_enable=YES            ##开启虚拟账户功能

guest_username=marility       ##虚拟账号映射到本地哪个用户

pam_service_name=ftp          ##加载中哪个文件的机制

user_config_dir=/etc/vsftpd/config   ##虚拟用户的单个权限

 

 

[root@marility vsftpd]# cat /etc/vsftpd/vuser_list

ruibiaofangxuan           ##账户

eFEBgVTfWJ66OhQ3rTuGB4kt5k5r0aMW  ##rubiaofangxuan的密码

admini               ##账户

adminipw              ##admini的密码

将密码文件进行db格式的转化

?

1

[root@marility vsftpd]# db_load -T -t hash -f vuser_list /etc/vsftpd/vuser_list.db

没有db命令的可以先yum -y install db4-utils

然后再改变权限chmod 600 /etc/vsftpd/vuser_list.db

用户密码设定及db解析的设定

?

1

2

3

[root@marility vsftpd]# cat /etc//ftp

auth  required  /lib64/security/pam_userdb.so  db=/etc/vsftpd/vuser_list

account required  /lib64/security/pam_userdb.so  db=/etc/vsftpd/vuser_list

auth是指对用户的用户名口令进行验证。
accout是指对用户的帐户有哪些权限哪些限制进行验证。
再后面的/lib/security/pam_userdb.so表示该条审核将调用pam_userdb.so这个库函数进行。
注意该函数会根据系统的位数而所在位置不同,可以通过rpm –ql pam查看
同时db指向的文件实际上指向的vuser_list.db ,但默认省略db后缀,故上述db的指向时在配置的时候不能写为vuser_list.db

设置虚拟用户的权限

?

1

2

3

4

5

6

7

8

9

10

11

12

13

[root@marility vsftpd]# cat /etc/vsftpd/config/admini

anon_world_readable_only=NO           ##关闭只可读

anon_upload_enable=YES             ##允许上传

anon_mkdir_write_enable=YES           ##允许新建目录

anon_other_write_enable=YES           ##允许修改目录/文件名称,删除

local_root=/var/www/ruibiaofangxuan/home      ##家目录映射

   

[root@marility vsftpd]# cat /etc/vsftpd/config/ruibiaofangxuan

anon_world_readable_only=NO

anon_upload_enable=YES

anon_mkdir_write_enable=NO

anon_other_write_enable=NO

local_root=/var/www/ruibiaofangxuan/home

为了安全,需要将用户禁锢在家目录,故会在中将chroot_local_user=YES功能打开,同时需要关闭用户对自己家目录的写权限

如此设定后,虚拟用户也不能对所映射的用户的家目录写入数据

故可以在marility的家目录下新建一个目录/var/www/ruibiaofangxuan/home

同时将此目录的属主属组改为marility,同时使用chmod改变权限

/etc/vsftpd/config文件中再将两个用户的映射路径local_root设定为所创建目录即可

?

1

2

systemctl restart vsftpd     

systemctl enable vsftpd

重启服务即可

即普通用户只能下载上传资料,而admini用户有所有权限,同时也锁定在/var/www/ruibiaofangxuan此目录中