vsftpd服务

一、vsftpd服务

FTP是File Transfer Protocol( 文件传输协议)的缩写,有两种工作方式,PORT方式(主动式)和PASV方式(被动式)。
FTP协议要用到两个TCP连接,一个是命令链路,用来在FTP 客户端与服务器之间传递命令;另一个是 数据链路,用来上传或下载数据。
vsftpd服务提供了一种安全的文件传输方式。
服务端配置了vsftpd服务后,需关闭防火墙,并且配置selinux相关文件允许该服务传输文件。
客户端通过lftp软件,登录服务端的本地用户,上传或者下载vsftpd服务端的文件。
vsftpd服务允许匿名用户(ftp用户)、服务器本地用户、服务器本地虚拟用户登录。
具体配置可以通过以下命令查看

vim /etc/vsftpd/vsftpd.conf #vsftpd的配置文件
man 5 vsftpd.conf #man 5 查看文件的帮助 
全局设置
anonymous_enable=YES #允许匿名用户登录 
local_enable=YES #允许本地用户登录
geust_enable=YES #允许虚拟用户登录
max_clients=4 #允许用户最大连接数,默认为0,即不限制连接数
write_enable=YES ##允许写权限,STOR, DELE, RNFR,RNTO, MKD, RMD, APPE and SITE.
 STOR - store a file on the remote host 上传文件
 DELE - delete a remote file 删除文件
 RNFR - rename from 重命名
 RNTO - rename to 重命名
 MKD - make a remote directory 新建文件夹
 RMD - remove a remote directory 删除目录
 APPE - append to a remote file 附加到文件
 SITE - site-specific commands 服务器的特定命令
#还有很多设置可以通过man 5 vsftpd.conf查看

1、虚拟用户权限设置

当客户端不指定用户登陆时,并且设置允许匿名用户登录时,就会默认以本地的ftp用户作为匿名用户登录。

lftp 服务端ip #匿名用户登录

当服务器安装vsftpd服务以后,会自动在本地新建一个ftp用户。

cat /etc/passwd | grep ftp
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin ##该用户不可交互式登录shell
安装服务时,应该都会新建一个系统用户,例如httpd,dhcpd等

匿名用户登录时,默认访问以下目录中的文件,并且无法切换出该目录

/var/ftp/ #vsftpd的默认发布目录,即ftp用户的默认访问目录
anon_root=/direcotry #修改匿名用户的默认访问目录

匿名用户(ftp用户)下载时,必须对该文件或者目录有读权限,并且有以下设置限制

anon_world_readable_only=no#默认为yes,全世界有读权限时(即ugo+r)才允许匿名用户下载,为no时只需要ftp用户有读权限即可

匿名用户(ftp用户)上传文件时,ftp用户必须对所在的目录有写权限,以及一下设置

write_enable=YES #全局写权限开启
anon_upload_enable=YES #匿名用户上传权限开启
anon_umask=022 #匿名用户上传文件的权限掩码,默认为077

匿名用户创建目录及其他权限

anon_mkdir_write_enable=YES # 设置匿名用户可以创建目录
anon_other_write_enable=YES #匿名用户的其他权限,例如删除和重命名 

设置匿名用户上传的文件为student所有

chown_uploads=YES #开启改变上传文件所有人的功能,默认为root
chown_username=student #设置匿名用户上传文件所有人
chown_uploads_mode=0644 ##设置上传文件的权限
anon_max_rate=102400 #匿名用户最大传输速率为100kb,数据单位是bytes per second,字节每秒

2、本地用户设置

当以指定用户登录时,需要输入该用户密码

lftp  服务端ip  服务端用户名

本地用户默认访问自己的家目录,可以修改默认访问目录

local_root=/directory

本地用户上传文件,本地用户需对上传所在目录有写权限。

write_enable=YES #开启全局写权限
local_umask=022 #设置上传文件的权限掩码
local_max_rate #本地用户最大传输速率,单位bytes per second

限制用户在自己的家目录,

chroot_local_user=YES #YES时,用户只能访问自己的家目录,但是实际访问时会出现错误。
[root@localhost Desktop]# lftp 172.25.254.15 -u student
Password:
lftp student@172.25.254.15:~> ls 
cd: Login failed: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()

以上设置的意思应该是,把用户家目录作为访问的根目录,但是作为根目录,普通用户有写权限是极不安全的,
所以需要将用户家目录的写权限限制

chmod u-w /home/*
dr-x------. 14 student student 4096 Nov  1 14:40 student
[root@localhost Desktop]# lftp 172.25.254.15 -u student
Password:
lftp student@172.25.254.15:/> ls
drwxr-xr-x    2 1000     1000            6 Oct 24 07:39 下载
drwxr-xr-x    2 1000     1000            6 Oct 24 07:39 公共
drwxr-xr-x    2 1000     1000            6 Oct 24 07:39 图片
drwxr-xr-x    2 1000     1000            6 Oct 24 07:39 文档
drwxr-xr-x    2 1000     1000            6 Oct 24 07:39 桌面
drwxr-xr-x    2 1000     1000            6 Oct 24 07:39 模板
drwxr-xr-x    2 1000     1000            6 Oct 24 07:39 视频
drwxr-xr-x    2 1000     1000            6 Oct 24 07:39 音乐

设置限制用户切出家目录的黑白名单

chroot_local_user=YES #设置为YES时,将所有用户限制在自己家目录。默认情况是NO,即默认不限制
chroot_list_enable=YES #启动例外用户的名单。
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list #例外用户名单,这个文件保存的是第一条设置的黑名单。
#当chroot_local_user=YES时,此名单不限制用户在家目录,=NO时,此名单限制用户在家目录。

设置本地用户登录的黑白名单

vim /etc/vsftpd/ftpusers #用户黑名单
还有一个文件,可以设置为黑名单或者白名单
userlist_deny=NO #为NO时,表示下面的文件为白名单,为YES时,是黑名单,默认是YES
/etc/vsftpd/user_list YES #当被设置成白名单时,只有该文件中的用户可以登录

3、虚拟用户设置

创建虚拟用户

vim /etc/vsftpd/loginusers #创建文件保存用户名和密码,名字随意
ftpuser1 #奇数行用户名,偶数行密码,不要多出空行
123
ftpuser2
123
ftpuser3
123

将以上文件加入数据库

db_load -T -t hash -f /etc/vsftpd/loginusers  /etc/vsftpd_loginusers.db 
#-T表示允许应用程序能够将文本文件转译载入进数据库,
#-T 的子选项-t,追加在在-T选项后,用来指定转译载入的数据库类型,这里设置的是bd数据库类型。hash表示使用hash加密,
#-f 指定包含用户名和密码的文本文件,db_load命令可以将用户文本信息文件转换为db数据库并使用hash加密

在验证登录的配置文件中加入保存用户名和密码的文件

vim /etc/pam.d/ckvsftpd #自己创建文件,名称任意
account     required    pam_userdb.so   db=/etc/vsftpd/loginusers
auth        required    pam_userdb.so   db=/etc/vsftpd/loginusers

最后在vsftpd配置文件中设置,允许虚拟用户登录并且指定验证登陆的文件

vim /etc/vsftpd/vsftpd.conf
guest_enable=YES
pam_service_name=ckvsftpd

指定虚拟用户以一个本地用户的身份登录,默认访问该用户的家目录

useradd -s /sbin/nologin  -M ftpuser #添加一个用户,该用户不可登录系统,并且不创建用户家目录
guest_username=ftpuser

设置虚拟用户访问时的默认目录

mkdir /ftpuserhome #新建一个目录作为虚拟用户的家目录 
chgrp ftpuser /ftpuserhome #设置这个目录的所属组为ftpuser用户所属组
chmod g+s /ftpuserhome #添加强制位,该目录下新建的目录及文件所属组为该目录所属组
mkdir /ftpuserhome/ftpuser{1..3} #分别创建桑和虚拟用户的家目录

设定虚拟用户家目录

vim /etc/vsftpd/vsftpd.conf #编辑vsftpd配置文件
local_root=/ftpuserhome/$USER
user_sub_token=$USER

单独设置虚拟账号配置文件

mkdir -p /etc/vsftpd/userconf

#在vsftpd配置文件中制定该文件生效
user_config_dir=/etc/vsftpd/userconf

vim /etc/vsftpd/userconf/ftpuser1 #在这个文件中设置的相关参数优先级高

设置了配置文件的参数之后,记得重启服务。

2、SELinux

SELinux是 Security-Enhanced Linux 的简称,是Linux的一个扩张“强制访问控制”的安全模块。
设置selinux模式,需要重启才能生效

vim /etc/sysconfig/selinux
  2 # This file controls the state of SELinux on the system.
  3 # SELINUX= can take one of these three values:
  4 #     enforcing - SELinux security policy is enforced.             ##实行安全管理
  5 #     permissive - SELinux prints warnings instead of enforcing.   ##显示警告代替实行
  6 #     disabled - No SELinux policy is loaded.                      ##不实行
  7 SELINUX=disable 
getenforce #查看selinux状态

临时设置selinux模式,不需要重启

setenforce 0 #设置SELinux为permissive模式
setenforce 1 #设置SELinux为enforcing模式

selinux对linux文件安全有十分严格的控制
例如,我们在桌面新建一个文件,将这个文件mv到httpd的默认发布目录,
但是selinux设置为1时候通过http却不能访问这个文件。
同一磁盘下的文件,mv相当于重命名,不同磁盘下mv是剪切,粘贴的过程。
不能通过http访问是因为每个文件创建时都有一个标签,叫做文件的安全上下文,mv不能改变这个文件的安全上下文。

ls -Z /var/www/html/
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 liu1
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 westos

这个标签可以通过命令改变标签,

[root@localhost html]# chcon unconfined_u:object_r:httpd_sys_content_t:s0 liu1
[root@localhost html]# ls -Z
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 liu1

也可以通过restorecon 命令恢复文件的安全上下文

[root@localhost html]# restorecon  liu1

selinux对各个服务也有相应的设置,例如一下与文件传输服务相关的布尔选项

[root@localhost Desktop]# getsebool -a | grep ftp #查看selinux对ftp的相关设置
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相关布尔选项,让ftp在selinux开启的情况下也能正常使用

setsebool -P ftpd_anon_write on #开启匿名用户的写权限
setsebool -P ftp_home_dir on #用户可以访问家目录
setsebool -P ftpd_full_access on #所有的访问都通过,使用虚拟用户时需开启
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值