vsftpd服务

来源:互联网 发布:c语言中的英文字母 编辑:程序博客网 时间:2024/06/05 19:11

一、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 ftpftp: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 #开启改变上传文件所有人的功能,默认为rootchown_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 studentPassword: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 studentPassword:lftp student@172.25.254.15:/> lsdrwxr-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 #奇数行用户名,偶数行密码,不要多出空行123ftpuser2123ftpuser3123

将以上文件加入数据库

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/loginusersauth        required    pam_userdb.so   db=/etc/vsftpd/loginusers

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

vim /etc/vsftpd/vsftpd.confguest_enable=YESpam_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/$USERuser_sub_token=$USER

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

mkdir -p /etc/vsftpd/userconf#在vsftpd配置文件中制定该文件生效user_config_dir=/etc/vsftpd/userconfvim /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 --> offftpd_anon_write --> offftpd_connect_all_unreserved --> offftpd_connect_db --> offftpd_full_access --> offftpd_use_cifs --> offftpd_use_fusefs --> offftpd_use_nfs --> offftpd_use_passive_mode --> offhttpd_can_connect_ftp --> offhttpd_enable_ftp_server --> offsftpd_anon_write --> offsftpd_enable_homedirs --> offsftpd_full_access --> offsftpd_write_ssh_home --> offtftp_anon_write --> offtftp_home_dir --> off

可以通过开启ftp相关布尔选项,让ftp在selinux开启的情况下也能正常使用

setsebool -P ftpd_anon_write on #开启匿名用户的写权限setsebool -P ftp_home_dir on #用户可以访问家目录setsebool -P ftpd_full_access on #所有的访问都通过,使用虚拟用户时需开启
原创粉丝点击