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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
运维安全中心(堡垒机),免费版 6个月
简介:

一、

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,如需转载请自行联系原作者
相关文章
|
5天前
|
运维 监控 网络协议
|
5天前
|
运维 关系型数据库 MySQL
运维|MySQL 数据库被黑,心力交瘁
前一阵有一个测试用的 MySQL 数据库被黑了,删库勒索的那种,这里记录一下事情经过,给自己也敲个警钟。
15 2
|
8天前
|
存储 关系型数据库 MySQL
基于案例分析 MySQL 权限认证中的具体优先原则
【10月更文挑战第26天】本文通过具体案例分析了MySQL权限认证中的优先原则,包括全局权限、数据库级别权限和表级别权限的设置与优先级。全局权限优先于数据库级别权限,后者又优先于表级别权限。在权限冲突时,更严格的权限将被优先执行,确保数据库的安全性与资源合理分配。
|
13天前
|
SQL 运维 关系型数据库
MySQL 运维 SQL 备忘
MySQL 运维 SQL 备忘录
38 1
|
17天前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
23 1
|
3月前
|
存储 运维 监控
运维.Linux下执行定时任务(中:Cron的常用替代方案)
本文是关于Linux下执行定时任务系列的第二部分,主要探讨除了Cron之外的常用替代方案。介绍了Systemd Timers、Anacron及at命令三种工具,它们分别适用于不同场景下的定时任务需求。文章详细分析了每种工具的特点、工作原理、基本使用方法及其高级功能,并对比了它们各自的优缺点,帮助读者根据实际情况选择最适合的定时任务解决方案。此外,还提供了指向具体实例和进一步阅读材料的链接。
104 4
运维.Linux下执行定时任务(中:Cron的常用替代方案)
|
3月前
|
移动开发 运维 网络协议
运维必备 | Linux netstat命令详解
运维必备 | Linux netstat命令详解
|
3月前
|
运维 监控 Unix
运维必看,Linux 远程数据同步工具详解。
运维必看,Linux 远程数据同步工具详解。
|
3月前
|
存储 Linux Shell
运维系列.Linux下的用户管理
运维系列.Linux下的用户管理
27 1
|
3月前
|
存储 SQL 运维
运维开发.MySQL.范式与反范式化
运维开发.MySQL.范式与反范式化
50 1