蜀ICP备16025721号-2
川公网安备51010802033090号
Linux安装vsftpd及配置详解
发布于 2022-07-27 14:00:35
11.6K0
2
代码可运行
举报
文章被收录于专栏:
开源部署
关联问题
换一批
Linux安装vsftpd的步骤是什么?
vsftpd配置文件的位置在哪里?
如何在Linux上启动vsftpd服务?
1 安装vsftpd组件
安装完后,有/etc/vsftpd/vsftpd.conf 文件,是vsftp的配置文件。
[root@linuxidc ~]# yum -y install vsftpd
2、FTP主动模式与FTP被动模式的端口说明
FTP是仅基于TCP的服务,不支持UDP。 与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口)。通常来说这两个端口是21(命令端口)和20(数据端口)。但FTP工作方式的不同,数据端口并不总是20。这就是主动与被动FTP的最大不同之处。
FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。
(一) FTP主动模式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
主动方式的FTP是这样的:客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口,也就是21端口。然后客户端开始 监听端口N+1,
并发送FTP命令“port N+1”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。
针对FTP服务器前面的防火墙来说,必须允许以下通讯才能支持主动方式FTP:
1. 任何大于1024的端口到FTP服务器的21端口。(客户端初始化的连接)
2. FTP服务器的21端口到大于1024的端口。 (服务器响应客户端的控制端口)
3. FTP服务器的20端口到大于1024的端口。(服务器端初始化数据连接到客户端的数据端口)
4. 大于1024端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口)
简明概括:
PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,
客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,
建立一条数据链路来传送数据。
开启主动模式:
pasv_enable=no
若设置为YES,则使用PASV工作模式;若设置为NO,则使用PORT模式。默认值为YES,即使用PASV工作模式。
主动模式下:
SecureFX工具去连接ftp,客户没有允许开放端口,服务器没法与客户端相连接,关闭客户端防火墙
(二) FTP被动模式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于
被动模式时才启用。
在被动方式FTP中,命令连接和数据连接都由客户端发起,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。
当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口(N > 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,
客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交 PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1024)
,并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。
对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:
1. 从任何大于1024的端口到服务器的21端口 (客户端初始化的连接)
2. 服务器的21端口到任何大于1024的端口 (服务器响应到客户端的控制端口的连接)
3. 从任何大于1024端口到服务器的大于1024端口 (客户端初始化数据连接到服务器指定的任意端口)
4. 服务器的大于1024端口到远程的大于1024的端口(服务器发送ACK响应和数据到客户端的数据端口)
简明概括:
PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,
服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据
链路来传送数据。
开启被动模式
默认是开启的,但是要指定一个端口范围,打开vsftpd.conf文件,在后面加上
pasv_enable=yes
若设置为YES,则使用PASV工作模式;若设置为NO,则使用PORT模式。默认值为YES,即使用PASV工作模式。
pasv_min_port=30000
在PASV工作模式下,数据连接可以使用的端口范围的最大端口,0 表示任意端口。默认值为0。
pasv_max_port=30999
在PASV工作模式下,数据连接可以使用的端口范围的最小端口,0 表示任意端口。默认值为0。
表示端口范围为30000~30999,这个可以随意改。改完重启一下vsftpd
由于指定这段端口范围,iptables也要相应的开启这个范围,所以像上面那样打开iptables文件。
也是在21上下面另起一行,更那行差不多,只是把21 改为30000:30999,然后:wq保存,重启下iptables。这样就搞定了。
(三)主动与被动FTP优缺点:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的
防火墙阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端
口,而这 个端口很有可能被服务器端的防火墙阻塞掉。
幸运的是,有折衷的办法。既然FTP服务器的管理员需要他们的服务器有最多的客户连接,那么必须得支持被动FTP。我们可以通过为FTP服务器指定
一个有 限的端口范围来减小服务器高位端口的暴露。这样,不在这个范围的任何端口会被服务器的防火墙阻塞。虽然这没有消除所有针对服务器的
危险,但它大大减少了危险。
简而言之:
主动模式(PORT)和被动模式(PASV)。主动模式是从服务器端向客户端发起连接;被动模式是客户端向服务器端发起连接。两者的共同点是都使
用21端口进行用户验证及管理,差别在于传送数据的方式不同,PORT模式的FTP服务器数据端口固定在20,而PASV模式则在1025-65535之间随机。
常见的FTP客户端软件的PASV方式的关闭方法
大部分FTP客户端默认使用PASV方式。IE默认使用PORT方式。 在大部分FTP客户端的设置里,常见到的字眼都是“PASV”或“被动模式”,
极少见到“PORT”或“主动模式”等字眼。因为FTP的登录方式只有两种:PORT和PASV,取消PASV方式,就意味着使用PORT方式。
(1)IE:工具 -> Internet选项 -> 高级 -> “使用被动FTP”(需要IE6.0以上才支持)。
(2)CuteFTP:Edit -> Setting -> Connection -> Firewall -> “PASV Mode” 或File -> Site Manager,在左边选中站
点 -> Edit -> “Use PASV mode” 。
(3)FlashGet:工具 -> 选项 -> 代理服务器 -> 直接连接 -> 编辑 -> “PASV模式”。
(4)FlashFXP:选项 -> 参数选择 -> 代理/防火墙/标识 -> “使用被动模式” 或 站点管理 -> 对应站点 -> 选项 ->
“使用被动模式”或快速连接 -> 切换 -> “使用被动模式”。
3、 登录方式(三种登录方式)
3.1 防火墙开启21端口
因为ftp默认的端口为21,而CentOS默认是没有开启的,所以要修改iptables文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
[root@linuxidc ~]# vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
在行上面有22 -j ACCEPT 下面另起一行输入跟那行差不多的,只是把22换成21,然后:wq保存。
还要运行下,重启iptables
[root@linuxidc ~]# service iptables restart
3.2 FTP匿名登录
FTP的匿名登录一般有三种:
1、 用户名:anonymous 密码:Email或者为空
2、 用户名:FTP 密码:FTP或者为空
3、 用户名:USER 密码:pass
3.2.1 在IE浏览器或文件管理器中匿名访问
ftp默认开启的匿名用户登录和主动模式,用IE访问需要把“使用被动FTP”选项去掉前面的勾,这样ftp都连接上去
在文件管理器输入框中输入ftp://域名或者ip,如果端口不是21的后面加端口。
3.3 匿名用户权限
3.3.1 vsftpd配置文件
默认配置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
anonymous_enable=YES
#允许匿名用户和本地用户登陆。
local_enable=YES
#匿名用户使用的登陆名为ftp或anonymous,口令为空;匿名用户不能离开匿名用户家目录/var/ftp,且只能下载不能上传。
write_enable=YES
#本地用户的登录名为本地用户名,口令为此本地用户的口令;本地用户可以在自己家目录中进行读写操作;本地用户可以离开自家目录切换至有权限
访问的其他目录,并在权限允许的情况下进行上传/下载。
#写在文件/etc/vsftpd.ftpusers中的本地用户禁止登陆。
3.3.2 匿名用户(anonymous)设置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
anonymous_enable=YES/NO(YES)
#控制是否允许匿名用户登入,YES 为允许匿名登入,NO 为不允许。默认值为YES。
write_enable=YES/NO(YES)
#是否允许登陆用户有写权限。属于全局设置,默认值为YES。
no_anon_password=YES/NO(NO)
#若是启动这项功能,则使用匿名登入时,不会询问密码。默认值为NO。
ftp_username=ftp
#定义匿名登入的使用者名称。默认值为ftp。
anon_root=/var/ftp
#使用匿名登入时,所登入的目录。默认值为/var/ftp。注意ftp目录不能是777的权限属性,即匿名用户的家目录不能有777的权限。
anon_upload_enable=YES/NO(NO)
#如果设为YES,则允许匿名登入者有上传文件(非目录)的权限,只有在write_enable=YES时,此项才有效。当然,匿名用户必须要有对上层目录的写入权。默认值为NO。
anon_world_readable_only=YES/NO(YES)
#如果设为YES,则允许匿名登入者下载可阅读的档案(可以下载到本机阅读,不能直接在FTP服务器中打开阅读)。默认值为YES。
anon_mkdir_write_enable=YES/NO(NO)
#如果设为YES,则允许匿名登入者有新增目录的权限,只有在write_enable=YES时,此项才有效。当然,匿名用户必须要有对上层目录的写入权。
默认值为NO。
anon_other_write_enable=YES/NO(NO)
#如果设为YES,则允许匿名登入者更多于上传或者建立目录之外的权限,譬如删除或者重命名。(如果anon_upload_enable=NO,则匿名用户不能
上传文件,但可以删除或者重命名已经存在的文件 如果anon_mkdir_write_enable=NO,则匿名用户不能上传或者新建文件夹,但可以删除或者重
命名已经存在的文件夹。)默认值为NO。
chown_uploads=YES/NO(NO)
#设置是否改变匿名用户上传文件(非目录)的属主。默认值为NO。
chown_username=username
#设置匿名用户上传文件(非目录)的属主名。建议不要设置为root。
anon_umask=077
#设置匿名登入者新增或上传档案时的umask 值。默认值为077,则新建档案的对应权限为700。
deny_email_enable=YES/NO(NO)
#若是启动这项功能,则必须提供一个档案/etc/vsftpd/banner_emails,内容为email address。若是使用匿名登入,则会要求输入email address,
若输入的email address 在此档案内,则不允许进入。默认值为NO。
banned_email_file=/etc/vsftpd/banner_emails
#此文件用来输入email address,只有在deny_email_enable=YES时,才会使用到此档案。若是使用匿名登入,则会要求输入email address,若输入的email address 在此档案内,则不允许进入。
local_umask目录:
777-022=755
local_umask文件:
666-022=644
事例:
Linux下允许vsftp匿名用户上传和下载的配置
配置要注意三部分,请一一仔细对照:
1、vsftpd.conf配置文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
# vi /etc/vsftpd/vsftpd.conf(vsftpd.conf文件的配置)
anonymous_enable=YES
#允许匿名用户登录FTP
anon_root=/var/ftp/pub
#设置匿名用户的登录目录(如需要,需自己添加并修改)
anon_upload_enable=YES
#打开匿名用户的上传权限
anon_mkdir_write_enable=YES
#打开匿名用户创建目录的权限
anon_other_write_enable=YES
#打开匿名用户删除和重命名的权限(如需要,需自己添加)
anon_umask=022
#匿名用户的掩码(如需要,需自己添加,含义:如umask是022,这时创建一个权限为666的文件,文件的实际权限为666-022=644)
2、ftp目录的权限设置(匿名用户)
默认情况下,ftp的根目录为/var/ftp,为了安全,这个目录默认不允许设置为777权限,否则ftp将无法访问。但是我们要匿名上传文件,需要“other”用户的写权限,正确的做法:
chmod o+w /var/ftp/pub/
上传的文件权限是600,属主和属组默认都是ftp
3、为了安全修改属主权限为匿名的ftp权限,不用默认的root权限
chown ftp /var/ftp/pub/ -R
*net use /d 清除ftp连接缓存**
3.4 本地用户登录
代码语言:javascript
代码运行次数:0
运行
AI代码解释
anonymous_enable=no
#不允许匿名用户登入
local_enable=YES/NO(YES)
#控制是否允许本地用户登入,YES 为允许本地用户登入,NO为不允许。默认值为YES。
local_root=/home/username
#当本地用户登入时,将被更换到定义的目录下。默认值为各用户的家目录。
write_enable=YES/NO(YES)
#是否允许登陆用户有写权限。属于全局设置,默认值为YES。
local_umask=022
#本地用户新增档案时的umask 值。默认值为077。
file_open_mode=0755
#本地用户上传档案后的档案权限,与chmod所使用的数值相同。默认值为0666。
chroot_local_user=YES
#用于指定用户列表文件中的用户不允许切换到上级目录。默认值为NO。
3.4.1 添加一个ftp用户
此用户就是用来登录ftp服务器用的。
[root@linuxidc ~]# useradd ftpuser -s /sbin/nologin
这样一个用户建完,不可以用这个登录,记得用普通登录不要用匿名了。登录后默认的路径为 /home/ftpuser.
3.4.2 给ftp用户添加密码
[root@linuxidc ~]# passwd ftpuser
输入两次密码后修改密码。
3.4.3 关闭匿名访问,设置相应权限
修改/etc/vsftpd/vsftpd.conf文件:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
anonymous_enable=no
local_enable=YES
local_root=/home/ftpuser
write_enable=YES
local_umask=022
file_open_mode=0755
chroot_local_user=YES
3.4.4 重启ftp服务:
[root@linuxidc ~]# service vsftpd restart
3.4.5 访问
在windows资源管理器中连接ftp://ip
本地用户登录(家目录/home/ftpuser),可以创建或删除目录、文件,目录权限是755,文件权限是644
修改路径为/opt/test下(local_root=/opt/test),为了安全,在/opt/test目录下建tt目录,并给tt目录属主和属组修改为ftpuser,这样才可以创建或删除目录,上传、删除文件
3.5虚拟用户登录
代码语言:javascript
代码运行次数:0
运行
AI代码解释
pam_service_name=vsftpd
#虚拟用户使用PAM认证方式。
guest_enable= YES/NO(NO)
#设置PAM使用的名称,默认值为/etc/pam.d/vsftpd。
guest_username=ftp
#启用虚拟用户。默认值为NO。
virtual_use_local_privs=YES/NO(NO)
#这里用来映射虚拟用户。默认值为ftp。
#当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限。默认情况下此参数
是关闭的(NO)。
3.5.1 创建文本格式的用户名、密码列表
首先需要建立一个文本格式的用户名/密码列表文件,奇数行为用户名,偶数行为上一行中用户名所对应的密码。
例如:添加两个用户jene、john,密码分别为abc123、abc456执行以下的操作:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
[root@ling ~]# vi /etc/vsftpd/juser.txt
jene
abc123
john
abc456
3.5.2 生成数据库:
db_load:安装 db4,db4-devel,db4-utils
代码语言:javascript
代码运行次数:0
运行
AI代码解释
# cd //etc/vsftpd #切换到/etc/vsftpd的目录下
# yum -y install db4*
# db_load -T -t hash -f juser.txt juser.db #将刚创建的juser.list列表转换为juser.list.db
file juser.db #查看转换后的文件类型
3.5.3 修改数据文件访问权限:
chmod 600 /etc/vsftpd/juser.db
3.5.4修改pam配置:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
# vi /etc/pam.d/juser.pam //为虚拟用户创建PAM认证文件,文件名为juser.pam(见名之义)
auth required pam_userdb.so db=/etc/vsftpd/juser
account required pam_userdb.so db=/etc/vsftpd/juser
注意:db=/etc/vsftpd/vsftpd_login 后面的.db必须去掉
或
# vi /etc/pam.d/vsftpd
将里面其他的都注释掉,添加下面这两行:
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
3.5.5 创建虚拟账号对应的系统用户:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
# useradd -d /var/ftptom -s /sbin/nologin tom #添加用户tom,指定到新建的家目录,将虚拟用户对应到这个系统账号上,这个
账号无需设置密码及登录Shell
# chmod 755 /var/ftptom/ #调整权限以允许浏览目录
3.5.6 修改主配置文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=no //禁用匿名用户登录
(anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_umask=022 //指定上传权限掩码)
local_enable=YES //需映射本地用户,所以启用些项
write_enable=YES //启用上传写入支持
chroot_local_user=YES //(自建配置)将所有本地用户限制在家目录中
guest_enable=YES //启用映射功能
guest_username=tom //指定映射的系统用户名称
pam_service_name=juser.pam //指定新的PAM认证文件
user_config_dir=/opt/vsftpd/juser_dir //(自建配置)设置虚拟帐号的主目录为/juser_dir
max_clients=300 //(自建配置)设置FTP服务器最大接入客户端数为300个
max_per_ip=10 //(自建配置)设置每个IP地址最大连接数为10个
listen=YES
port_enable=NO //(自建配置)取消PORT模式进行数据传输
connect_from_port_20=NO //(修改配置)PORT模式进行数据传输部使用20端口
ftp_data_port=20
pasv_enable=YES //(自建配置)允许PASV模式进行数据传输
pasv_min_port=65341 //(自建配置)PASV模式下数据传输所使用port范围下界
pasv_max_port=65351 //(自建配置)PASV模式下数据传输所使用port范围上界
3.5.7 建立虚拟账户的配置文件:
如上面的在没有给予虚拟用户上传、建目录等权限的设置,可以用下面的方法给虚拟用户建立独立的配置文件。
在user_config_dir指定路径下,建立与虚拟帐号同名的配置文件并添加相应的配置字段
代码语言:javascript
代码运行次数:0
运行
AI代码解释
# mkdir /opt/vsftpd/juser_dir
cd /opt/vsftpd/juser_dir //切换到这个新建的配置文件夹下
touch jene 创建jene配置文件
touch john 创建john配置文件
#vi jene //为用户jene建立独立的配置文件,允许他可以上传和创建目录
anon_upload_enable=YES
anon_mkdir_write_enable=YES
#touch john //为其它用户(john)创建空的配置文件,也就是他们没有上传和创建目录的权限
[root@ling juser_dir]# service vsftpd reload //重载vsftpd服务器
登录ftp服务器
已经登录tom的家目录下了
以上的虚拟用户jene和john共用映射的tom家目录的
3.5.8 若用自己各自的目录
代码语言:javascript
代码运行次数:0
运行
AI代码解释
vi vsftpd.conf
anonymous_enable=NO(修改配置)禁用匿名用户登录
write_enable=YES (默认开启)允许使用任何可以修改文件系统的FTP的指令
local_enable=YES(默认开启)启用本地用户登录设置
chroot_local_user=YES (自建配置)将所有本地用户限制在家目录中
pam_service_name=juser.pam(默认开启)配置vsftpd使用的PAM模块为vsftpd
user_config_dir=/opt/vsftpd/juser_dir (自建配置)设置虚拟帐号的主目录为/vsftpd_login
代码语言:javascript
代码运行次数:0
运行
AI代码解释
# mkdir /opt/vsftpd/juser_dir //建虚拟账号主目录
# cd /opt/vsftpd/juser_dir //切换到这个新建的配置文件夹下
# touch jene 创建jene配置文件
# touch john 创建john配置文件
为各虚拟用户建立独立的配置文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
# vi jene
anon_world_readable_only=YES 只读,不能下载
anon_world_readable_only=no 表示用户可以浏览FTP目录和下载文件
guest_enable=yes 开启虚拟帐号登录
guest_username=ftp_jene 设置虚拟用户jene对应的系统帐号为ftp_jene
local_root=/opt/jene 用户登入时,所在目录
anon_world_readable_only=no 不允许匿名用户浏览器整个服务器的文件系统
anon_max_rate=50000 限定传输速率为50KB/s
代码语言:javascript
代码运行次数:0
运行
AI代码解释
# vi john
guest_enable=yes 开启虚拟帐号登录
guest_username=ftp_ john 设置虚拟用户john对应的系统帐号为ftp_john
local_root=/opt/john 用户登入时,所在目录
anon_other_write_enable=YES 允许匿名账号具有删除、改名权限
anon_mkdir_write_enable=yes 允许创建文件夹,不能删除目录
anon_upload_enable=yes 开启匿名帐号的上传功能
anon_world_readable_only=no 不允许匿名用户浏览整个服务器的文件系统
anon_max_rate=100000 限定传输速度为100KB/s
重启vsftpd服务
#service vsftpd restart
linux文件权限分成“属主”、“属组”和“其他人”这三种,如果“其他人”没有可读权限,那anon_world_readable_only这个参数就起效了,对于目录来说,如果“其他人”没有可读权限,且anon_world_readable_only=YES,则匿名用户无法浏览该目录下的所有内容(看上去像个空目录),而对于文件来说,如果“其他人”没有可读权限,且anon_world_readable_only=YES,则匿名用户无法下载该文件。
4、修改selinux
外网是可以访问上去了,可是发现没法返回目录(使用ftp的主动模式,被动模式还是无法访问),也上传不了,因为selinux作怪了。
修改selinux:
执行以下命令查看状态:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
[root@linuxidc ~]# getsebool -a | grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> off
ftpd_connect_db --> off
ftpd_use_passive_mode --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
[root@linuxidc ~]#
执行上面命令,再返回的结果看到两行都是off,代表,没有开启外网的访问
代码语言:javascript
代码运行次数:0
运行
AI代码解释
[root@linuxidc ~]# setsebool -P allow_ftpd_full_access on
[root@linuxidc ~]# setsebool -P ftp_home_dir on
这样应该没问题了(如果,还是不行,看看是不是用了ftp客户端工具用了passive模式访问了,如提示Entering Passive mode,就代表是passive模式,默认是不行的,因为ftp passive模式被iptables挡住了,下面会讲怎么开启,如果懒得开的话,就看看你客户端ftp是否有port模式的选项,或者把passive模式的选项去掉。如果客户端还是不行,看看客户端上的主机的电脑是否开了防火墙,关吧)
FileZilla的主动、被动模式修改:
菜单:编辑→设置
5、设置开机启动vsftpd ftp服务
[root@linuxidc ~]# chkconfig vsftpd on
6、修改FTP默认端口
6.1登录服务器,打开vsftp.conf文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
# vim /etc/vsftpd/vsftpd.conf
在文件末尾增加listen_port=2121
pasv_enable=yes
pasv_min_port=30000
pasv_max_port=30999
listen_port=2121
6.2打开/etc/services文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
[plain] view plain copy
# vim /etc/services
找到ftp选项并将21修改成你设置的端口,本文为2121
# 21 is registered to ftp, but also used by fsp
ftp 2121/tcp
ftp 2121/udp fsp fspd
6.3 重启vsftp服务
代码语言:javascript
代码运行次数:0
运行
AI代码解释
# /etc/init.d/vsftpd restart
使用netstat -utlpn | grep vsftp命令查看设置的端口,确认是否成功
# netstat -utlpn | grep vsftp
tcp 0 0 0.0.0.0:2121 0.0.0.0:* LISTEN 33004/vsftpd
tcp 0 0 192.168.11.6:30954 0.0.0.0:* LISTEN 33006/vsftpd
6.4 防火墙加上允许策略:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
# vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2121 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2120 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 30000:30999 -j ACCEPT
在主动模式中,FTP的两个端口是相对固定的,如果命令端口是x的话,那数据端口就是x-1,也就是说默认情况下,命令端口是21,数据端口就是20;你把命令端口改成了2121,那么数据端口就是2120。这样使用防火墙就很方便了,只要开通这两个端口就可以了,但是如果客户端是共享上网的话那岂不是不能正常使用FTP了,这样还是不行,一定需要被动模式。
被动模式中就麻烦了些,命令端口修改为2121,那么数据端口就是2120,但是数据端口是 机的,所以需要在设备里设置一下被动端口范围6000到7000(pasv_min_port=6000 pasv_max_port=7000)
防火墙里允许修改过端口号及随机端口号范围
7、rhel7中修改防火墙:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
1、防火墙添加端口
# firewall-cmd --zone=public --permanent --add-port=80/tcp
# firewall-cmd --reload
# firewall-cmd --zone=public --permanent --add-port=31000-31999/tcp
# firewall-cmd --reload
2、防火墙删除端口
# firewall-cmd --zone=public --permanent --remove-port=80/tcp
# firewall-cmd --reload
3、查看防火墙配置
# cat /etc/firewalld/zones/public.xml
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除
在Rocky Linux上安装FTP服务器可通过以下步骤完成:
1. 安装vsftpd软件包
首先通过dnf命令安装vsftpd服务:
bashCopy Code
sudo dnf install vsftpd -y
该软件包是Rocky Linux推荐的FTP服务器实现23。
2. 基础配置
编辑配置文件/etc/vsftpd/vsftpd.conf,关键配置包括:
禁用匿名访问:anonymous_enable=NO
允许本地用户登录:local_enable=YES
启用写权限:write_enable=YES
限制用户在家目录:chroot_local_user=YES23
3. 用户与权限管理
创建专用FTP用户并设置密码:
bashCopy Code
sudo useradd ftpuser
sudo passwd ftpuser
建议将用户目录权限设置为755,文件权限644以保证安全性46。
4. 防火墙与SELinux配置
开放FTP服务端口:
bashCopy Code
sudo firewall-cmd --add-service=ftp --permanent
sudo firewall-cmd --reload
若启用SELinux,需设置安全上下文:
bashCopy Code
sudo chcon -R -t public_content_t /var/ftp/
sudo setsebool -P ftpd_full_access on
或临时设置为宽松模式setenforce 045。
5. 服务管理
启动服务并设置开机自启:
bashCopy Code
sudo systemctl enable --now vsftpd
sudo systemctl status vsftpd
验证服务是否监听21端口netstat -tulnp | grep vsftpd37。
6. 测试连接
使用lftp或FileZilla等客户端连接测试:
bashCopy Code
lftp ftp://ftpuser@服务器IP
上传/下载文件验证功能是否正常67。
关键注意事项:
生产环境避免使用简单密码
定期检查/var/log/vsftpd.log日志
重要目录不要赋予777权限
在Rocky Linux系统的局域网内部署SSL证书,可通过以下两种方案实现,优先推荐使用自签名证书方案(无需公网域名验证):
一、自签名证书方案(测试/内网环境)
生成CA根证书
使用OpenSSL创建CA私钥和自签名证书,有效期10年:
bashCopy Code
openssl genrsa -out ca.key 2048
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt \
-subj "/C=CN/ST=Beijing/O=Local Network/CN=Local CA"
关键参数说明:-subj可自定义组织信息,-days 3650设置长期有效期5。
签发服务器证书
生成服务器私钥及证书请求文件:
bashCopy Code
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr \
-subj "/CN=server.local" # 使用局域网主机名或IP
使用CA签名服务器证书:
bashCopy Code
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365
生成的文件包括:server.key(私钥)、server.crt(证书)、ca.crt(根证书)5。
部署到Apache
编辑/etc/httpd/conf.d/ssl.conf,配置证书路径:
apacheCopy Code
SSLCertificateFile /path/to/server.crt
SSLCertificateKeyFile /path/to/server.key
SSLCertificateChainFile /path/to/ca.crt
重启Apache生效:systemctl restart httpd3。
客户端信任CA证书
将ca.crt导入局域网内所有设备的受信任根证书颁发机构,否则浏览器会提示不安全连接。
在Rocky Linux上安装phpMyAdmin(MySQL/MariaDB的Web管理工具)的步骤如下,综合了多个高可信度来源的最佳实践35:
1. 安装LAMP基础环境
需确保已安装Apache、MariaDB/MySQL和PHP(推荐PHP 7.4+或8.x):
bashCopy Code
dnf install httpd mariadb-server php php-mysqlnd php-json php-mbstring -y
systemctl enable --now httpd mariadb
2. 安装phpMyAdmin
通过EPEL仓库安装官方包:
bashCopy Code
dnf install epel-release -y
dnf install phpmyadmin -y
3. 配置Apache
编辑phpMyAdmin配置文件,允许局域网访问:
bashCopy Code
sed -i 's/Require local/Require all granted/g' /etc/httpd/conf.d/phpMyAdmin.conf
systemctl restart httpd
4. 配置防火墙
放行HTTP/HTTPS端口:
bashCopy Code
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
5. 安全加固(可选)
修改默认路径:通过符号链接隐藏真实路径:
bashCopy Code
ln -s /usr/share/phpMyAdmin /var/www/html/mydbadmin
设置认证:在Apache中添加基础认证:
bashCopy Code
htpasswd -c /etc/httpd/pma_pass admin
然后在/etc/httpd/conf.d/phpMyAdmin.conf中添加:
apacheCopy Code
AuthType Basic
AuthName "Restricted Access"
AuthUserFile /etc/httpd/pma_pass
Require valid-user
6. 访问验证
通过浏览器访问:
textCopy Code
http://服务器IP/phpMyAdmin
或
http://服务器IP/mydbadmin(若修改路径)
注意事项
若需源码安装特定版本,可参考12的PHP编译方法,但推荐使用仓库简化维护;
云服务器需额外配置安全组规则开放80/443端口3;
出现403错误时检查SELinux状态:setenforce 0临时关闭测试5。
[CSDN首页]
博客
下载
学习
社区
GitCode
InsCodeAI
会议
AI 搜索
会员中心
消息
历史
创作中心
创作
RockyLinux 9.5 部署 mysql
leblancAndSherry
于 2025-05-31 11:28:04 发布
阅读量1.1k
收藏 8
点赞数 14
CC 4.0 BY-SA版权
文章标签: mysql 数据库 linux docker
介绍两种部署方式,一直接部署在 linux 服务器上,二先安装 docker,然后通过 docker 部署
一、直接部署在 Linux 服务器
1、准备工作
(1)更新系统软件包
sudo dnf update -y
1
(2)关闭防火墙
# 测试环境
systemctl stop firewalld
systemctl disable firewalld
# 查看防火墙状态
firewall-cmd --state
# 生产环境建议配置防火墙规则:
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload
1
2
3
4
5
6
7
8
9
10
2、安装 MySQL
方法 1:通过 RockyLinux 默认仓库安装
(1)安装 MySQL 服务器:
dnf install -y mysql-server
1
(2)启动 MySQL 服务并设置开机自启:
systemctl start mysqld
systemctl enable mysqld
# 检查服务状态
systemctl status mysqld
1
2
3
4
5
方法 2:通过 MySQL 官方仓库安装(推荐)
(1)添加 MySQL Yum 仓库,下面两个版本任选一个
# 添加 MySQL 8.0 系列的 YUM 仓库配置文件
dnf install https://dev.mysql.com/get/mysql80-community-release-el9-5.noarch.rpm -y
# 添加 MySQL 8.4 系列的 YUM 仓库配置文件
dnf install https://dev.mysql.com/get/mysql84-community-release-el9-1.noarch.rpm -y
1
2
3
4
5
(2)安装 MySQL 服务器:
dnf install -y mysql-community-server
1
(3)启动 MySQL 服务并设置开机自启:
systemctl start mysqld
systemctl enable mysqld
# 检查服务状态
systemctl status mysqld
1
2
3
4
5
3、安全配置 MySQL
(1)获取临时密码
# 通过 RockyLinux 默认仓库安装时没有密码
sudo grep 'temporary password' /var/log/mysqld.log
1
2
(2)运行安全安装脚本:
sudo mysql_secure_installation
1
(3)按照提示完成以下配置:
输入临时密码(使用默认仓库时,此处是选择密码强度)
设置 root 密码(需满足复杂度要求,密码至少 8 位,且必须包含大小写字母、数字和特殊字符)
移除匿名用户
禁止 root 远程登录
移除测试数据库
重新加载权限表
4、基本配置
(1)修改 root 用户的主机访问限制,允许其从任何主机连接到 MySQL 服务器
# 登录 MySQL:
mysql -u root -p
-- 切换到 mysql 数据库(包含用户权限表)
USE mysql;
-- 更新 root 用户的 host 字段,允许从任意主机连接
UPDATE user SET host = '%' WHERE user = 'root';
-- 刷新权限,使更改立即生效
FLUSH PRIVILEGES;
# 退出 MySQL
EXIT;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(2)创建新用户和数据库
# 登录 MySQL:
mysql -u root -p
# 创建一个名为 mydatabase 的数据库
CREATE DATABASE mydatabase;
# 创建一个用户名为 myuser,允许从任意 IP 登录的用户,密码为 Qwer123!
# 'myuser'@'localhost' 表示这个用户只能从本地连接 MySQL
# 'myuser'@'%' 表示允许从任意 IP 连接
CREATE USER 'myuser'@'%' IDENTIFIED BY 'glen32&*R';
# 授予用户 myuser 对 mydatabase 数据库中所有表的所有权限
# 如果不需要这么多权限,可以按需授权,例如(GRANT SELECT, INSERT, UPDATE ON mydatabase.* TO 'myuser'@'%';)
GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'%';
# 刷新权限,使刚刚的权限设置立即生效
FLUSH PRIVILEGES;
# 退出 MySQL
EXIT;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
5、常用管理命令
# 启动 MySQL 服务:
sudo systemctl start mysqld
# 停止 MySQL 服务:
sudo systemctl stop mysqld
# 重启 MySQL 服务:
sudo systemctl restart mysqld
# 查看 MySQL 状态:
sudo systemctl status mysqld
# 查看 MySQL 版本:
mysql --version
1
2
3
4
5
6
7
8
9
10
11
12
13
14
6、备份与恢复
# 完整备份整个 MySQL 服务器的数据
mysqldump -u root -p --all-databases > all_databases.sql
# 将备份的 SQL 文件导入到当前的 MySQL 服务器中
mysql -u root -p < all_databases.sql
# 备份指定的单个数据库:
mysqldump -u root -p database_name > backup.sql
# 恢复数据库:
mysql -u root -p database_name < backup.sql
1
2
3
4
5
6
7
8
9
7、故障排除
(1)修改 root 密码
# 停止当前 MySQL 服务
sudo systemctl stop mysqld
# 以跳过权限验证并且仅本地访问的方式启动 MySQL
# --skip-grant-tables:跳过权限验证
# --skip-networking:禁止网络连接,仅本地访问
# --user=mysql:以 mysql 用户身份运行
sudo mysqld --skip-grant-tables --skip-networking --user=mysql &
# 登录 MySQL(无需密码)
mysql -u root
# 刷新权限
FLUSH PRIVILEGES;
# 修改 root 用户密码
ALTER USER 'root'@'%' IDENTIFIED BY '你的新密码';
# 刷新权限
FLUSH PRIVILEGES;
# 退出 MySQL
exit;
# 杀死临时运行的 mysqld 进程
sudo killall mysqld
# 正常启动 MySQL 服务
sudo systemctl start mysqld
# 验证是否可以登录
mysql -u root -p
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
32
(2)端口被占用
# 修改配置文件 /etc/my.cnf,添加:
port = 3307
# 重启 mysql
sudo systemctl restart mysqld
1
2
3
4
5
二、使用 docker 部署
1、安装 docker
# 添加阿里云docker-ce仓库
dnf config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 列出当前系统中所有可安装的 docker-ce 版本,并按照版本号从高到低进行排序,同时显示重复的版本。
dnf list docker-ce --showduplicates | sort -r
# 安装最新版本 docker-ce,也可以指定版本安装(dnf install -y docker-ce-3:28.1.1-1.el9)
dnf install -y docker-ce
# 启用Docker Cgroup用于限制进程的资源使用量,如CPU、内存资源
# 创建目录,存放 docker 的配置文件
mkdir -p /etc/docker
# 创建并写入 /etc/docker/daemon.json 文件,设置 Docker 使用 systemd 作为 Cgroup 驱动
# registry-mirrors 配置:docker 镜像加速器的地址列表。
cat > /etc/docker/daemon.json <配置中包ºRequire all grante以以允许外部访Î81。¡
总总结步Ö
放放行防火ÇHTT服服务或关闭防火墙测Ê1;£
修修¸Apach监监听地址Î0.0.0.0;£
调调ÕSELinu策策Â;£
验验证网络连通性与云平台安全×61。¡
若若仍无法解决,可通¹curl -v http:/服服务ÆI和和客户端抓包工具进一步排查连接问Ì6。¡
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
-i.bak \
/etc/yum.repos.d/Rocky-*.repo
dnf makecache
[root@localhost ~]# dnf update
上上次元数据过期检查£0:00:08前前,执行Ó 202年Ä0月Ô2日È星星期È 1时Ê2分·3秒秒¡
错错误£
问问Ì: package iptables-nft-1.8.11-8.el10_0.x86_64 from @System requires iptables-libs(x86-64) = 1.8.11-8.el10_0, but none of the providers c an be installed
- cannot install both iptables-libs-1.8.11-9.el10_0.x86_64 from baseos and iptables-libs-1.8.11-8.el10_0.x86_64 from @System
- cannot install both iptables-libs-1.8.11-9.el10_0.x86_64 from baseos and iptables-libs-1.8.11-8.el10_0.x86_64 from baseos
-无无法为软件包安装最佳更新候Ñ iptables-nft-1.8.11-8.el10_0.x86_64
-无无法为软件包安装最佳更新候Ñ iptables-libs-1.8.11-8.el10_0.x86_64
尝尝试在命令行中添¼ '--allowerasing'来来替换冲突的软件°或» '--skip-broken'来来跳过无法安装的软件°或» '--nobest'来来不只使用软件包的最佳候Ñ)
[root@localhost ~]# dnf upgrade
上上次元数据过期检查£0:00:23前前,执行Ó 202年Ä0月Ô2日È星星期È 1时Ê2分·3秒秒¡
错错误£
问问Ì: package iptables-nft-1.8.11-8.el10_0.x86_64 from @System requires iptables-libs(x86-64) = 1.8.11-8.el10_0, but none of the providers c an be installed
- cannot install both iptables-libs-1.8.11-9.el10_0.x86_64 from baseos and iptables-libs-1.8.11-8.el10_0.x86_64 from @System
- cannot install both iptables-libs-1.8.11-9.el10_0.x86_64 from baseos and iptables-libs-1.8.11-8.el10_0.x86_64 from baseos
-无无法为软件包安装最佳更新候Ñ iptables-nft-1.8.11-8.el10_0.x86_64
-无无法为软件包安装最佳更新候Ñ iptables-libs-1.8.11-8.el10_0.x86_64
尝尝试在命令行中添¼ '--allowerasing'来来替换冲突的软件°或» '--skip-broken'来来跳过无法安装的软件°或» '--nobest'来来不只使用软件包的最佳候Ñ)
[root@localhost ~]# dnf update --allowerasing
上上次元数据过期检查£0:00:50前前,执行Ó 202年Ä0月Ô2日È星星期È 1时Ê2分·3秒秒¡
依依赖关系解决¡
=============================================================================================================================================
软软件° 架架¹ 版版± 仓仓¿ 大大Ð
=============================================================================================================================================
升升¼:
iptables-libs x86_64 1.8.11-9.el10_0 baseos 408 k
移移除依赖的软件°:
iptables-nft x86_64 1.8.11-8.el10_0 @AppStream 522 k
事事务概Ò
=============================================================================================================================================
升升¼ 1软软件°
移移³ 1软软件°
总总下载£408 k
确确定吗£[y/N:£ y
下下载软件包£
iptables-libs-1.8.11-9.el10_0.x86_64.rpm 748 kB/s | 408 kB 00:00
--------------------------------------------------------------------------------------------------------------------------