Linux运维 第三阶段 (三) VSFTPD(ftps及vsftpd+pam+mysql实现虚拟用户认证)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
运维安全中心(堡垒机),企业双擎版|50资产|一周时长
简介:

一、

FTPfile transferprotocol):21/tcp,文件共享服务,工作在应用层

NFSnetwork file system):依赖RPC工作,基于RPCremote procedure call远程过程调用,主要功能:能让不同主机的两个进程基于二进制格式实现数据通信,而应用层协议不具备这种能力)文件共享服务很多(尤其hadoop的进程依赖于RPC

SAMBASMB/CIFScommon internet file system),用于linuxwindows共享文件

 

 

FTP:有两个连接:命令连接(21/tcp,一直在线);数据连接(20/tcpclient发起数据下载请求时才打开此连接,文件传输完成就断开,再下载再打开完成再关闭,按需打开按需关闭)

 

主动模式:server通过20port主动连接client2002port,2002port被占用则使用2003,依次向下找一个空闲port,从而client接收server的请求(client2001port用于命令连接)

 

被动模式:端口随机(一般>1023BSDOS>5000),通过命令连接,serverclient发送一报文(此报文由两个随机数组成,如15120,根据公式151*256+20=port number,从而得出随机端口数),表示server打开一随机端口等待client连接

注:主动、被动都是站在server角度;主动、被动模式同防火墙的关系

 

杀毒软件(检测文件内容是否危险)

防火墙(tcp,udp这两种协议各65535port,每个port都是一道门,一个入口,防火墙要做的就是把没用的门给关掉,把不请自来的连接挡在门外,通过策略设定哪个门可进可出,什么时候进出,通过连接追踪功能识别请求和响应间的关系(RELATED,相关联的连接,命令连接和数据连接虽有关联,但又是两个独立的连接)

 

 

数据传输模式:文本(html)、二进制(mp3,jpg)(两种FTP都支持)

一般设为自动模式(serverclient协商决定),遵循文件本身的特性传输,否则会是乱码

http借助MIME可将二进制转为文本传输,到client再解码

 

注:结构化程序;半结构化数据;非结构化数据

 

 

服务器端程序:

wu-ftpdwashingtonuniversity ftp daemon)文件传输鼻祖,未用模块化设计,所有功能用同一进程实现,导致某一功能出现问题整个软件崩溃

vsftpdvery secure ftpdaemon)安全,快速,短小精悍

proftpd

pureftpd

filezillawindows,linux都有)

serv-uwindows

客户端程序:

命令行CLI工具(ftp,lftp

GUI工具(gftpd

商业(flashfxp,cuteftp

filezilla

 

 

vsftpd

#yum -y  install  vsftpd

#rpm ql  vsftpd

/etc/vsftpd/vsftpd.conf(主配置文件)

/etc/vsftpd/{ftpusers,user_list}(控制用户登录)

/etc/rc.d/init.d/vsftpd

/etc/pam.d/vsftpd/lib/security/*,基于pam实现用户认证(SUN公司)pluggableauthentication module可插入认证模块,类似nsswitch仅是框架,背后认证机制非常多,模块也非常多,非常灵活,按需定制的一种认证机制)

/var/ftpFTP服务根目录,ftp用户家目录,不允许运行vsftpd程序的用户有写权限,若要上传文件在其下创建目录)

/var/ftp/pub(默认提供给用户要下载的文件在此处放置)

#finger ftp(或#grep  ftp  /etc/passwd

#ps aux | grep  vsftpd

 

ftp用户三类:匿名用户(anonymous,ftp);系统用户;虚拟用户

注:匿名用户和虚拟用户最终都被映射为系统用户

2XX(成功类信息),3XX(信息不完整,无密码等)

 

win命令行中:

>ftp 192.168.101.154

:anonymous

>help(支持的命令有ascii,binary,cd,delete,get,ls,lcd,mkdir,pwd

>bye

 

#man vsftpd.conf

#vim /etc/vsftpd/vsftpd.conf

anonymous_enable=YES

anon_upload_enable=YES(定义匿名用户可上传文件)

anon_mkdir_write_enable=YES(定义匿名用户可创建目录)

anon_other_write_enable=YES(定义匿名用户有删除文件权限,以上三行一般不开放,不给匿名用户过多权限)

local_enable=YES(系统用户默认是在自己的家目录下)

write_enable=YES(定义系统用户上传文件)

chroot_list_enable=YES(是否禁锢用户)

chroot_list_file=/etc/vsftpd/chroot_list(此文件中记录禁锢哪些用户,每一行一个用户)

chroot_local_user=YES(所有用户都禁锢)

dirmessage_enable=YES(用户切至某目录的提示信息,可在需要显示提示的目录下建一隐藏文件.message,如#vim  /var/ftp/upload/.message

xferlog_enable=YES(传输日志,如某用户在某时下载了文件记录进日志)

xferlog_file=/var/log/xfer.log

xferlog_std_format=YES(标准格式,便于日志分析软件分析)

chown_uploads=YES(用户上传文件后将属主改为其它用户,一般不启用,否则用户上传文件后无法编辑修改)

chwon_username=whoever(指定上传文件后更改的属主)

idle_session_timeout=600(控制连接相关,单位秒)

data_connection_timeout=120(数据连接相关)

ascii_upload_enable=YES(不要明确定义传输模式)

ascii_download-enable=YES

max_clients=#(定义ftp的资源访问)

max_per_ip=#(每个ip最多几个连接请求)

listen=YES(将vsftpd定义为独立守护进程,若要定义为瞬时守护进程,则在/etc/xinetd.d/下提供一脚本即可)

pam_service_name=vsftpd(默认vsftpd程序认证用户靠pam

userlist_enable=YES/etc/vsftpd/ftpusers此文件中的用户都禁止访问ftp,若将/etc/vsftpd/user_list清空,root能否登录才真正取决于/etc/vsftpd/ftpusers

userlist_deny=YES(若为YES则是拒绝/etc/vsftpd/user_list文件中的用户登录,若为NO则是仅允许/etc/vsftpd/user_list文件中的用户登录使用ftp服务)

注:文件服务权限=文件系统权限*文件共享权限(两者交集,同时具有的权限ftp服务才有)

 

二、

安全通信方式:ftps(ftp+ssl/TLS)sftp(ssh,openssh有子系统subsystem)

本例中私有CAvsftpd服务器在同一台物理机上

#vim /etc/pki/tls/openssl.cnf(修改dir=/etc/pki/CA

#cd /etc/pki/CA

#(umask 077;openssl  genrsa  -out private/cakey.pem  2048)

#openssl req  -new  -x509 -key  private/cakey.pem  -out cacert.pemFQDNca.magedu.com

#mkdir certs  newcerts  tls

#touch index.txt

#echo 01  >  serial

#mkdir /etc/vsftpd/ssl

#cd !$

#(umask 077;openssl  genrsa  -out vsftpd.key  1024)

#openssl req  -new  -key vsftpd.key  -out  vsftpd.csrFQDNftp.magedu.com

#openssl ca  -in  vsftpd.csr -out  httpd.crt  -days 365

#vim /etc/vsftpd/vsftpd.conf(添加如下信息)

ssl_enable=YES

ssl_tlsv1=YES

ssl_sslv3=YES

allow_anon_ssl=NO

force_local_data_ssl=YES

force_local_logins_ssl=YES

rsa_cert_file=/etc/vsftpd/ssl/vsftpd.crt

rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key

ssl_ciphers=HIGH(在win中使用filezilla出现如下错误再使用此项: 错误:    收到服务器的 TLS 警告:Handshake failed (40)原因:FileZilla不支持默认密码(DES-CBC3-SHA)

win下使用客户端软件filezilla连接服务器(注意选择显式的FTP over TLS

 

 

三、 

vsftpd+mysql+pam实现虚拟用户认证登录ftp

#yum -y  install  “Development Tools”  “Development  Libraries”

#yum -y  install  mysql mysql-server  mysql-devel(注意mysql-devel一定要装上,否则无法实现编译其功能)

 

#tar xf  pam_mysql-0.7RC1.tar.gz

#cd pam_mysql-0.7RC1

#./configure  --with-mysql=/usr  --with-openssl(若不指/usr,则会在根下去找相应库文件,会出现如下错误:configure: error: Cannot locate mysql client library. Please checkyour mysql installation.

#make &&  make  install

 

#mysql

>CREATE DATABASE  vsftpd;

>GRANT select  ON  vsftpd.* TO  vsftpd@localhost  IDENTIFIED BY  ‘vsftpd’;

>GRANT select  ON  vsftpd.* TO  vsftpd@127.0.0.1  IDENTIFIED BY  ‘vsftpd’;

>FLUSH PRIVILEGES;

>USE vsftpd;

>CREATE TABLE  users  (id INT  AUTO_INCREMENT  NOT NULL,name  char(20)  BINARY NOT  NULL,password  char(48) BINARY  NOT  NULL,PRIMARY KEY(id));

>INSERT INTO  users(name,password)  values (‘tom’,’magedu’),(‘jerry’,’magedu’);

 

#vim /etc/pam.d/vsftpd.mysqlpam认证文件,内容中crypt=0表示明文)

auth required /lib/security/pam_mysql.souser=vsftpd passwd=vsftpd host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0

account required /lib/security/pam_mysql.souser=vsftpd passwd=vsftpd host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0

 

#useradd -s  /sbin/nologin  -d /var/ftproot  vuser

#chmod go+rx  /var/ftproot

#vim /etc/vsftpd/vsftpd.conf(确保开启如下选项,将上例中的ssl有关选项注释掉,防止影响此次实验)

anonymous_enable=YES

anon_upload_enable=NO

anon_mkdir_write_enable=NO

local_enable=YES

write_enable=YES

chroot_local_user=YES

guest_enable=YES

guest_username=vuser

pam_service_name=vsftpd.mysql

user_config_dir=/etc/vsftpd/vusers_dir

#mkdir /etc/vsftpd/vusers_dir

#cd !$

#touch tom  jerry

#vim jerry(虚拟用户所能执行的权限都由匿名用户anon的相关选项定义的,所有的虚拟用户都映射到vuser系统用户上,可在指定虚拟用户名命名的文件中指定所特有的权限)

anon_upload_enable=YES

anon_mkdir_write_enable=YES

#service vsftpd  restart

#netstat -tnlp  |  grep :21

 

#ftp 192.168.101.154

Name (192.168.101.154:root): jerry

331 Please specify the password.

Password:

230 Login successful.

ftp> lcd /etc

Local directory now /etc

ftp> put inittab

local: inittab remote: inittab

227 Entering Passive Mode(192,168,101,154,212,62)

150 Ok to send data.

226 File receive OK.

1666 bytes sent in 0.024 seconds (67Kbytes/s)

>bye

#tail /var/log/secure

#ls /var/ftproot

 

 

 

 

以上是学习《马哥课程》做的笔记。

 

 

 

 

 




1FTPfiletransfer protocol),以TCP数据包的模式进行服务器与客户端之间的文件传输;

数据连接:TCP20,用于上传下载数据;TCP21,用于发送FTP命令信息;

数据连接的建立类型:主动模式(服务端从20端口主动向客户端发起连接);被动模式(服务端在指定范围内某个端口被动等待客户端连接);

FTP的用户类型:匿名用户(anonymousftp);本地用户(账号密码等信息保存在/etc/passwd/etc/shadow下)

常见的FTP服务端程序:IISServ-Uwu-ftpdProftpdvsftpdvery secure ftp daemon);

常见的FTP客户端程序:CuteFTPFlashFXPLeapFTPFilezillagftpkuftpFTP命令;

官方站点:http://vsftpd.beasts.org/

主程序:/usr/sbin/vsftpd

主配置文件:/etc/vsftpd/vsftpd.conf

用户控制列表文件:/etc/vsftpd/ftpusers/etc/vsftpd/user_list

2、》匿名权限控制:

anonymous_enable=YES         (启用匿名访问

anon_umask=022               (匿名用户上传的权限掩码,无此项默认600

anon_root=/var/ftp           (匿名用户的FTP根目录

anon_upload_enable=YES       (允许匿名用户上传文件

anon_mkdir_write_enable=YES  (允许创建目录

anon-other_write_enable=YES  (开放其它写入权限

anon_max_rate=0              (限制最大传输速率,字节每秒

》本地用户权限控制:

local_enable=YES             (启用本地系统用户

local_umask=022              (本地用户上传文件的权限掩码

local_root=/home/username    (设置本地用户的FTP根目录

chroot_local_user=YES        (将用户禁锢在主目录

local_max_rate=0             (限制最大传输速率,字节每秒

》常用的全局配置项:

listen=YES        

listen_port=21               (设置监听端口

write_enable=YES             (是否启用写入权限

download_enable=YES          (是否允许下载文件

max_clients=0                (限制并发客户端连接数

max_per_ip=0                 (限制同一IP地址的并发连接数

pasv_enable=YES              (开启被动模式

pasv_min_port=50000          (将客户端的数据连接改在5000060000之间

pasv_max_port=60000  

》访问限制:

usrelist_enable=YESuserlist_deny=YES    (注:出现在/etc/vsftpd/user_list文件里的用户被拒绝访问

userlist_enable=YESuserlist_deny=NO    (注:出现在/etc/vsftpd/ftpusers里的用户拒绝访问,不管user_list做如何更改

》其它安全选项:

connect_timeout=60              (主动模式下,连接信号在60S内得不到客户端响应,强制断线

accept_timeout=60               (被动模式下,等待客户端60S无回应,强制断线

data_connection_timeout=300     serverclient成功建立,由于线路问题300S内无法顺利传送,强制剔除

ftpd_banner=xxx;banner_file=/path    (欢迎信息

tcp_wrappers=YES 

dirmessage_enable=YES           (当用户进入某个目录时,会显示需注意的内容,显示信息的文件默认是.message

message_file=.message

xferlog_enable=YES              (用户上传下载的文件都会被记录下来

xferlog_file=/var/log/vsftpd.log      

3、虚拟用户的创建及使用:

注:特点:减少系统用户的数据,提高系统的安全性;根据不同的用户,设置不同的访问权限

a创建账号数据:建立虚拟FTP用户的账号数据库文件;创建FTP根目录及虚拟用户映射的系统用户;建立支持虚拟用户的PAM认证文件;

b添加虚拟用户支持:在vsftpd.conf文件中添加支持配置;为个别虚拟用户建立独立的配置文件;

c启动服务并测试:重新加载vsftpd配置;使用虚拟FTP账号访问测试。

详细过程:

#vi  /etc/vsftpd/vusers.list         (注:奇数行账号偶数行密码

zhangsan

123

lisi

123

#db_load -T  -t  hash  -f vusers.list  vusers.db    (centos下需安装db4-utils)

#file vusers.db

#chmod 600  /etc/vsftpd/vusers.*

#ls -lh  /etc/vsftpd/vuser.*

#useradd -d  /var/ftproot  -s /sbin/nologin  virtual

#chmod 755  /var/ftproot/

#vi  /etc/pam.d/vsfptd.vu

#%PAM-1.0

auth       required   pam_userdb.so        db=/etc/vsftpd/vusers

account    required   pam_userdb.so        db=/etc/vsftpd/vusers

#vi /etc/vsftpd/vsftpd.conf

local_enable=YES

write_enable=YES

anon_umask=022

guest_enable=YES

guest_username=virtual

pam_service_name=vsftpd.vu

user_config_dir=/etc/vsftpd/vusers_dir

#mkdir /etc/vsftpd/vusers_dir

#cd /etc/vsftpd/vusers_dir

#vi zhangsan

anon_upload_enable=YEs

anon_mkdir_write_enable=YES

#touch lisi

#service  vsftpd  reload

#测试

 

                                 

注:

vsftpd虚拟用户,生产环境中若出现如下报错,将selinux改为permissive

227 Entering Passive Mode(172,17,101,73,189,74).

150 Here comes the directory listing.

226 Transfer done (but failed to opendirectory).




本文转自 chaijowin 51CTO博客,原文链接:http://blog.51cto.com/jowin/1654866,如需转载请自行联系原作者
相关文章
|
2月前
|
安全 关系型数据库 MySQL
Linux下安装mysql8.0(以tar.xz包安装--编译安装)
通过上述步骤,您完成了从下载、编译、安装到配置MySQL 8.0的全过程。此过程虽然较为复杂,但提供了对MySQL安装环境的完全控制,有助于满足特定的部署需求。在实际操作中,根据具体的系统环境,可能还需调整部分步骤或解决未预见的依赖问题。始终参考官方文档和社区资源,保持安装过程与最新版本的兼容性。
933 67
|
19天前
|
运维 监控 安全
盘点Linux服务器运维管理面板
随着云计算和大数据技术的迅猛发展,Linux服务器在运维管理中扮演着越来越重要的角色。传统的Linux服务器管理方式已经无法满足现代企业的需求,因此,高效、安全、易用的运维管理面板应运而生。
|
2月前
|
运维 监控 网络协议
|
27天前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
62 3
|
27天前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
34 3
|
27天前
|
缓存 运维 监控
【运维必备知识】Linux系统平均负载与top、uptime命令详解
系统平均负载是衡量Linux服务器性能的关键指标之一。通过使用 `top`和 `uptime`命令,可以实时监控系统的负载情况,帮助运维人员及时发现并解决潜在问题。理解这些工具的输出和意义是确保系统稳定运行的基础。希望本文对Linux系统平均负载及相关命令的详细解析能帮助您更好地进行系统运维和性能优化。
48 3
|
1月前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
93 3
|
2月前
|
存储 运维 搜索推荐
|
2月前
|
Ubuntu 关系型数据库 MySQL
Linux系统MySQL安装
【10月更文挑战第19天】本文介绍了在 Linux 系统上安装 MySQL 的步骤,包括安装前准备、安装 MySQL、启动 MySQL 服务、配置 MySQL 以及验证安装。适用于 Ubuntu/Debian 和 CentOS/Fedora 系统,提供了详细的命令示例。
237 1
|
2月前
|
关系型数据库 MySQL Linux
Linux系统绿色安装MySQL 8.0.39
Linux系统绿色安装MySQL 8.0.39