用centos8搭建firewalld防火墙

一,firewalld的systemd管理命令

启动:systemctl start firewalld
关闭:systemctl stop firewalld
查看状态:systemctl status firewalld
开机禁用:systemctl disable firewalld
开机启用:systemctl enable firewalld

 

二,firewall-cmd的通用命令:

1,查看firewall-cmd版本:

[root@localhost liuhongdi]# firewall-cmd --version
0.7.0

 

2,查看firewall-cmd帮助

[root@localhost liuhongdi]# firewall-cmd --help

 

3,查看firewalld状态

[root@localhost liuhongdi]# firewall-cmd --state
running

 

4,更新防火墙的规则

[root@localhost liuhongdi]# firewall-cmd --reload
success

说明:–reload的作用:让“永久生效”的配置规则立即生效,并覆盖当前的配置规则

 

5,查看firewalld的所有规则:

[root@localhost zones]# firewall-cmd --list-all

 

三,zone相关命令:

1,得到默认的zone:

[root@localhost liuhongdi]# firewall-cmd --get-default-zone
public

 

2,得到当前正在使用的zone与网卡名称

[root@localhost liuhongdi]# firewall-cmd --get-active-zones
libvirt
  interfaces: virbr0
public
  interfaces: ens33

 

3,得到所有可用的zone

[root@localhost liuhongdi]# firewall-cmd --get-zones
block dmz drop external home internal libvirt public trusted work

 

4,设置默认的zone

[root@localhost liuhongdi]# firewall-cmd --set-default-zone=drop
success
[root@localhost liuhongdi]# firewall-cmd --get-active-zones
drop
  interfaces: ens33
libvirt
  interfaces: virbr0

 

四,services相关命令:

1,列出所有可用的services

 

[root@localhost liuhongdi]# firewall-cmd --get-services

 

2,列出当前已放开的services

[root@localhost liuhongdi]# firewall-cmd --list-services

 

3,  放开一个服务

[root@localhost liuhongdi]# firewall-cmd --add-service=http

 

4,  关闭一个服务

[root@localhost liuhongdi]# firewall-cmd --remove-service=http --permanent
success

 

说明:关于permanent参数:    添加–permanent重启后则永久生效,如无–permanent仅临时生效

 

五,port相关命令:

1,查看所有打开的端口:

[root@localhost liuhongdi]# firewall-cmd --zone=public --list-ports
80/tcp 8080/tcp 22/tcp

 

2,放开一个端口:

[root@localhost liuhongdi]# firewall-cmd --zone=public --add-port=80/tcp --permanent
success

 

3,关闭已放开的端口:

[root@localhost liuhongdi]# firewall-cmd --zone=public --remove-port=80/tcp --permanent
success

 

六,针对permanent参数的验证:

1,添加端口后,如果加了 permanent,不会马上起作用:reload之后会起作用

[root@localhost liuhongdi]# firewall-cmd --zone=public --add-port=80/tcp --permanent
success 
[root@localhost liuhongdi]# firewall-cmd --zone=public --list-ports
8080/tcp 22/tcp
[root@localhost liuhongdi]# firewall-cmd --reload
success
[root@localhost liuhongdi]# firewall-cmd --zone=public --list-ports
8080/tcp 22/tcp 80/tcp

 

2,删除端口,如果加了 permanent,不会马上起作用,也需要reload

[root@localhost liuhongdi]# firewall-cmd --zone=public --remove-port=80/tcp --permanent
success
[root@localhost liuhongdi]# firewall-cmd --zone=public --list-ports
8080/tcp 22/tcp 80/tcp
[root@localhost liuhongdi]# firewall-cmd --reload
success
[root@localhost liuhongdi]# firewall-cmd --zone=public --list-ports
8080/tcp 22/tcp

 

3,如果不加permanent,能马上起作用:

[root@localhost liuhongdi]# firewall-cmd --zone=public --add-port=80/tcp 
success
[root@localhost liuhongdi]# firewall-cmd --zone=public --list-ports
8080/tcp 22/tcp 80/tcp

 

七,针对ip地址的操作:

1,允许一个ip访问:

[root@localhost liuhongdi]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="43.229.53.61" accept'

 

2,禁止一个ip访问

[root@localhost liuhongdi]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="43.229.53.61" drop'

说明:drop也可用reject

两者的区别在于drop不会提示拒绝访问而是直接丢弃数据包

 

3,指定允许一个ip到指定端口的访问

[root@localhost liuhongdi]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.142.166" port protocol="tcp" port="22" accept'
success

 

4,删除一条rich rule

[root@localhost liuhongdi]# firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.142.166" port protocol="tcp" port="22" accept'
success

 

八,手动添加的防火墙规则位于哪里?

 

/etc/firewalld/zones/public.xml

说明:可以手动编辑这个保存规则的xml,然后做reload.

 

九,生产环境中要注意的地方:

如果已添加了http服务,仍然可以添加80 port,

导致要关闭http服务时,也需要关闭80 port,

所以,尽量使用 port,而不要把service和port混用

 

十,一个生产环境中防火墙的zone文件例子:

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are acc
epted.</description>
  <port port="80" protocol="tcp"/>
  <rule family="ipv4">
    <source address="10.0.10.1"/>
    <accept/>
  </rule>
  <rule family="ipv4">
    <source address="43.229.53.61"/>
    <drop/>
  </rule>
</zone>

 

说明:

1,生产环境中防火墙一定要做基于ip地址的限制,不能允许从公网随便访问

2,需要放开的端口越少越好,最好只放开一个有运行中业务的端口

Centos8 的系统内核已经支持BBR了。

安装安装ELRepo
导入公钥:

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

安装ELRepo 8

yum install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm

启用 ELRepo 源仓库:

yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

安装新内核:

yum --enablerepo=elrepo-kernel install kernel-ml

/etc/sysctl.conf,加入如下代码:

net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

保存,并执行 sysctl -p 即可。

或者

echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p

通过以下三条指令验证是否已经开启成功

sysctl net.ipv4.tcp_available_congestion_control
sysctl net.ipv4.tcp_congestion_control
lsmod | grep bbr

php7.4-Migration to pkg-config

A number of extensions have been migrated to exclusively use pkg-config for the detection of library dependencies. Generally, this means that instead of using –with-foo-dir=DIR or similar only –with-foo is used. Custom library paths can be specified either by adding additional directories to PKG_CONFIG_PATH or by explicitly specifying compilation options through FOO_CFLAGS and FOO_LIBS.

The following extensions and SAPIs are affected:

  • CURL:
    • –with-curl no longer accepts a directory.
  • Enchant:
    • –with-enchant no longer accepts a directory.
  • FPM:
    • –with-fpm-systemd now uses only pkg-config for libsystem checks. The libsystemd minimum required version is 209.
  • GD:
    • –with-gd becomes –enable-gd (whether to enable the extension at all) and –with-external-gd (to opt into using an external libgd, rather than the bundled one).
    • –with-png-dir has been removed. libpng is required.
    • –with-zlib-dir has been removed. zlib is required.
    • –with-freetype-dir becomes –with-freetype
    • –with-jpeg-dir becomes –with-jpeg
    • –with-webp-dir becomes –with-webp
    • –with-xpm-dir becomes –with-xpm
  • IMAP:
    • –with-kerberos-systemd no longer accepts a directory.
  • Intl:
    • –with-icu-dir has been removed. If –enable-intl is passed, then libicu is always required.
  • LDAP:
    • –with-ldap-sasl no longer accepts a directory.
  • Libxml:
    • –with-libxml-dir has been removed.
    • –enable-libxml becomes –with-libxml.
    • –with-libexpat-dir has been renamed to –with-expat and no longer accepts a directory.
  • Litespeed:
    • –with-litespeed becomes –enable-litespeed.
  • Mbstring:
    • –with-onig has been removed. Unless –disable-mbregex has been passed, libonig is required.
  • ODBC:
    • –with-iodbc no longer accepts a directory.
    • –with-unixODBC without a directory now uses pkg-config (preferred). Directory is still accepted for old versions without libodbc.pc.
  • OpenSSL:
    • –with-openssl no longer accepts a directory.
  • PCRE:
    • –with-pcre-regex has been removed. Instead –with-external-pcre is provided to opt into using an external PCRE library, rather than the bundled one.
  • PDO_SQLite:
    • –with-pdo-sqlite no longer accepts a directory.
  • Readline:
    • –with-libedit no longer accepts a directory.
  • Sodium:
    • –with-sodium no longer accepts a directory.
  • SQLite3:
    • –with-sqlite3 no longer accepts a directory.
  • XSL:
    • –with-xsl no longer accepts a directory.
  • Zip:
    • –with-libzip has been removed.
    • –enable-zip becomes –with-zip.

简单理解epel源和安装步骤

EPEL源-是什么?

EPEL (Extra Packages for Enterprise Linux)是基于Fedora的一个项目,为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux.

使用很简单:
1. 首先我们需要安装一个叫”epel-release”的软件包,这个软件包会自动配置yum的软件仓库。当然你也可以不安装这个包,自己配置软件仓库也是一样的。

#用于RHEL5系列

wget http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
rpm -ivh epel-release-5-4.noarch.rpm

#用于RHEL6系列

wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm
rpm -ivh epel-release-6-5.noarch.rpm

2. 安装完成之后你就可以直接使用yum来安装额外的软件包了

yum clean all
 
yum makecache
yum install nginx pure-ftpd

3.直接自己手工添加软件仓库配置文件

vi /etc/yum.repos.d/epel.repo
 
[epel]
name=epel
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-releasever&arch=releasever&arch=basearch
enabled=1
gpgcheck=0

CentOS6.5添加阿里云的EPEL源

yum localinstall --nogpgcheck http://mirrors.aliyun.com/epel/6/x86_64/epel-release-6-8.noarch.rpm

安装阿里云Epel源

1、 首先卸载以前装的epel以免影响

rpm -e epel-release

2、 下载阿里提供的epel

wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-6.repo

3、yum clean all

4、yum makecache

阿里云源安装示例:

Epel安装很简单

1、备份(如有配置其他epel源)

mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
 
mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup

2、下载新repo 到/etc/yum.repos.d/

epel(RHEL 7)

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

epel源:rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

更新证书:yum –disablerepo=epel -y update ca-certificates

vim /etc/yum.repos.d/epel.repo

epel(RHEL 6)

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

epel(RHEL 5)

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-5.repo

Nginx的日志文件配置

一、介绍日志文件格式
日志文件的记录是有格式的,我们可以按系统默认的格式去记录,也可以按我们自定义的格式去记录。可以用log_format指令来设置Nginx服务器的日志文件的记录格式。

二、日志格式说明

log_format main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

main:日志格式
$remote_addr:客户端ip地址
$remote_user:客户端用户名
$request:请求的url
$status:请求状态(比如:正在请求中,请求完成等状态)
$body_bytes_sent:发送给客户端的字节数(服务端返回给客户端数据的大小)
$http_referer:原网页的url(从哪个url打开的所访问的页面)
$http_user_agent:客户端的浏览器记录的信息(比如是google浏览器,那么就记录google浏览器的类型等基本信息)
$http_x_forwarded_for:客户端ip地址(类似于$remote_addr)

通常情况下用以上配置即可,可以将main换成combined(默认的日志格式),其他不变即可。

三、Nginx日志文件存储路径配置
1、说明
日志文件在记录的时候,需要存储到磁盘上,存储的路径是可配置的,通过access_log指令来配置Nginx的日志文件的存储路径。
2、修改配置
access_log logs/access.log main;
logs/access.log:这个为日志文件的存放路径,从安装目录开始,意思绝对路径为:/usr/local/nginx/logs/access.log
main:为日志格式,通常为combined
若不想记录Nginx的日志,则将access_log路径配成off即可,如下:
access_log off;

四、Nginx日志文件的切割
1、说明:
为了使Nginx的日志文件存储更合理、有序,我们需要将日志文件进行分开存储,比如我们可以按时间来分开,今天的日志文件存储到一个文件中,明天的日志文件则存储到另一个新的文件中等等。这时候就需要用到了Nginx的日志文件的切割。

有两种方式:
1、手动进行切割
步骤:分两步骤。
(1)进入logs目录。执行命令
mv access.log xxx(随便起个名).log
意思是说将以前的日志文件重命名为一个新的名字的日志文件。
(2)执行命令
kill -USR1 主进程号(需要先用ps -ef|grep nginx命令找到master的进程号)
kill -USR1 主进程号 这个命令在信号控制那章节有提到。进行日志切割的命令。

操作完(1)(2)两步骤后,在logs目录下ls一下,会发现又自动多出了一个日志文件(这个日志文件的命名来源于nginx.conf文件里的access_log的路径),并且里面无内容。这个文件就是切割出来的新文件,再有日志会往这里面写,而不会操作老日志文件。

2、自动进行切割
步骤:
(1)首先创建个sh文件(称为批处理日志文件),进入nginx的logs目录运行命令
touch cutlog.sh(文件名自定义,后缀.sh即可)

(2)编辑cutlog.sh文件。输入如下内容:
vi cutlog.sh

D=$(date +%Y%m%d)
LOGS_PATH=/usr/local/nginx/logs
mv /usr/local/nginx/logs/access.log /${LOGS_PATH}/${D}.log
kill -USR1 $(cat /usr/local/nginx/nginx.pid)

说明:

D=$(date +%Y%m%d),声明个变量,名为D(自定义),值为date(Linux自带的,类似于函数,用于获取当前时间,并且格式为年月日)
${D}:引用上面变量名为D的变量
$(cat /usr/local/nginx/nginx.pid):cat命令意思是查看。nginx.pid:存储的是nginx的主进程号。连起来的意思就是查看nginx主进程号,带上$(xx)就是说拿到xx

(3)定时执行某个文件,输入如下命令:(注意:运行crontab命令需要先用yum进行安装crontab,否则会出现command not found)
crontab -e
crontab:定时执行某个文件
crontab -e:编辑定时执行的内容

(4)执行完(3)后会出现编辑器,输入如下内容:
23 59 *** /bin/bash /usr/local/nginx/logs/cutlog.sh
含义:在每天23点59分定时执行cutlog.sh文件,这样就实现了每天定时切割日志文件了。
原理:只是将手动切割写成个脚本。

如有需要每隔1个月就备份日志到其他地方并删除原位置的日志等类似需求都可以写个shell脚本,然后用linux的crontab来定时执行。

PHP7.4编译安装问题解决

PHP 7+ 版本极大地改进了性能,在一些WordPress基准测试当中,性能可以达到PHP 5.6的3倍。而PHP 5.6版本在2018年底官方已经不再维护,升级PHP 7是必然选择。

centos7 编辑安装php遇到的问题:

解决 configure: error: no acceptable C compiler found in $PATH 错误

yum install -y gcc gcc-c++

解决 error: the HTTP XSLT module requires the libxml2/libxslt 错误

yum -y install libxml2 libxml2-dev
yum -y install libxslt-devel

解决 error: the HTTP image filter module requires the GD library. 错误

yum -y install gd-devel

解决 error: the GeoIP module requires the GeoIP library. 错误

yum -y install GeoIP GeoIP-devel GeoIP-data

解决 error: the Google perftools module requires the Google perftools 错误

yum -y install gperftools

解决 error: libatomic_ops library was not found. 错误

yum -y install libuuid-devel libblkid-devel libudev-devel fuse-devel libedit-devel libatomic_ops-devel

解决 error trying to exec ‘cc1plus’: execvp: No such file or directory 错误

yum -y install gcc-c++

解决 error: [pool www] cannot get uid for user ‘www-data’ 错误

groupadd www-data
useradd -g www-data www-data

解决configure: error: mbed TLS libraries not found. 错误。
需要安装mbedtls

CentOS 7/8 源码安装 mbedtls 2.16.3, 解决configure: error: mbed TLS libraries not found. 错误。

1、下载并解压

wget https://tls.mbed.org/download/mbedtls-2.16.3-gpl.tgz
tar -xf mbedtls-2.16.3-gpl.tgz
cd mbedtls-2.16.3

备用下载地址:https://down.24kplus.com/linux/mbedtls/mbedtls-2.16.3-gpl.tgz

2、编译安装

make
make DESTDIR=/usr install
ldconfig

如果出现 make[1]: python2: Command not found 错误,执行:

yum -y install python2

如果出现 /usr/bin/env: ‘perl’: No such file or directory 错误,执行:

yum -y install perl

 

解决 error: Cannot find OpenSSL’s <evp.h> 错误

yum install openssl openssl-devel
ln -s /usr/lib64/libssl.so /usr/lib/

解决 error: Libtool library used but ‘LIBTOOL’ is undefined 错误

yum install libtool

解决 exec: g++: not found 错误

yum -y update gcc
yum -y install gcc+ gcc-c++

解决 configure: error: tss lib not found: libtspi.so 错误

yum install trousers-devel

解决 Can’t exec “autopoint”: No such file or directory 错误

yum install gettext gettext-devel gettext-common-devel

解决 configure: error: libcrypto not found. 错误

yum remove openssl-devel
yum -y install openssl-devel

解决 configure: error: Package requirements (libffi >= 3.0.0) were not met: No package ‘libffi’ found 错误

yum install libffi-devel

解决 fatal error: uuid.h: No such file or directory 错误

yum install e2fsprogs-devel uuid-devel libuuid-devel

解决 configure: error: openssl lib not found: libcrypto.so 错误

yum install openssl-devel

解决 tar (child): lbzip2: Cannot exec: No such file or directory 错误

yum -y install bzip2

解决 configure: error: C++ preprocessor “/lib/cpp” fails sanity check 错误

yum install gcc-c++

解决 configure: error: Please reinstall the BZip2 distribution 错误

yum install bzip2 bzip2-devel

解决 configure: error: cURL version 7.15.5 or later is required to compile php with cURL support 错误

yum install curl-devel

解决 configure: error: not found. Please provide a path to MagickWand-config or Wand-config program 错误

yum install ImageMagick-devel

解决 configure: error: no acceptable C compiler found in $PATH 错误

yum install gcc

解决 configure: error: Package requirements (icu-uc >= 50.1 icu-io icu-i18n) were not met: 错误

yum install libicu-devel

解决 configure: error: Package requirements (sqlite3 > 3.7.4) were not met: No package ‘sqlite3’ found 错误

yum install sqlite-devel

解决 configure: error: Package requirements (oniguruma) were not met: No package ‘oniguruma’ found 错误

yum install oniguruma oniguruma-devel

使用源代码安装。

wget https://github.com/kkos/oniguruma/archive/v6.9.4.tar.gz -O oniguruma-6.9.4.tar.gz 
tar -zxvf oniguruma-6.9.4.tar.gz
cd oniguruma-6.9.4/
./autogen.sh
./configure
make
sudo make install

解决 bash: make: 未找到命令…

需要安装gcc,执行一下就可以了:

yum -y install gcc automake autoconf libtool make
yum install gcc gcc-c++

解决 configure: error: Package requirements (libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0) were not met:

Package ‘libzip’, required by ‘virtual:world’, not found
Package ‘libzip’, required by ‘virtual:world’, not found
Package ‘libzip’, required by ‘virtual:world’, not found

第一步:

rpm -q libzip    rpm -q libzip-devel 查看是否有安装过,如果有,卸载它。yum remove libzip-devel libzip

第二步:

下载

wget https://libzip.org/download/libzip-1.7.3.tar.gz

解压

tar -xvf libzip-1.7.3.tar.gz

安装cmake3

yum install -y cmake3
sudo ln -sf /usr/bin/cmake3 /usr/bin/cmake

安装libzip

cd libzip-1.7.3/
mkdir build && cd build
cmake ..
make && make install

源码地址

https://pkgs.org/search/?q=libzip

通过源码安装

yum install http://mirror.centos.org/centos/8/AppStream/x86_64/os/Packages/libzip-1.5.2-1.module_el8.2.0+314+53b99e08.x86_64.rpm
yum install http://mirror.centos.org/centos/8/AppStream/x86_64/os/Packages/libzip-devel-1.5.2-1.module_el8.2.0+314+53b99e08.x86_64.rpm

解决 No package ‘libxml-2.0’ found缺失libxml2.0 库,错误:

yum -y install libxml2
yum -y install libxml2-devel

解决 configure: error: Package requirements (libxslt >= 1.1.0) were not met:No package ‘libxslt’ found 错误

yum install libxslt-devel

解决 configure: error: Package requirements (libpng) were not met:No package ‘libpng’ found 错误

yum install libpng-devel

解决 configure: error: Cannot find ldap.h 错误

yum install openldap
yum install openldap-devel

解决 configure: error: Cannot find ldap libraries in /usr/lib 错误

cp -frp /usr/lib64/libldap* /usr/lib/

解决 configure: error: Package requirements (libcurl >= 7.15.5) were not met: 错误

yum install libcurl-devel

解决 configure: error: Package requirements (krb5-gssapi krb5) were not met:

yum -y install krb5-devel

解决 configure: error: Package requirements (libjpeg) were not met:

yum install -y libjpeg-devel

解决 configure: error: Package requirements (freetype2) were not met:

yum -y install freetype freetype-devel

解决 configure: error: Package requirements (libpcre2-8 >= 10.30) were not met:

wget https://ftp.pcre.org/pub/pcre/pcre2-10.35.tar.gz
tar xzvf pcre2-10.35.tar.gz
cd pcre2-10.35

./configure --prefix=/usr/local/pcre2 \
--enable-pcre2-16 \
--enable-pcre2-32 \
--enable-jit \
--enable-jit-sealloc

make && make install

export PKG_CONFIG_PATH=/usr/local/pcre2/lib/pkgconfig/

CentOS7 FTP服务搭建(虚拟用户访问FTP服务)

概述

最近在搞Oracle在Linux系统下集群,针对Linux系统,笔人也是一片空白。Liunx外部文件的传输,避免不了使用FTP服务,所以现在就整理下,CentOS7环境下,FTP服务的搭建。FTP服务器需要安装vsftp服务端软件。我们知道,在建立vsftpd用户时,我们一般是在linux下建立用户useradd的方式来访问ftp,但有时我们只想提供ftp服务,而避免用户用ftp的帐号去登录linux,采用一般的方式只能是限制该用户的访问权限,但还是避免不了用户登录进linux系统,所以比较好的方法是用vsftpd的虚拟用户(virtual users)。

开始部署:

[root@localhost /]# yum  clean all       #清除yum缓存
[root@localhost /]# yum -y install vsftpd*           #安装vsftpd
#配置本地yum仓库或指向互联网都可。
[root@localhost /]# vim /etc/vsftpd/vusers.list      #创建文本格式的用户名/密码列表

下面写入虚拟账号,其中,奇数行为用户名,偶数行为上一行中用户所对应的密码。

mike
123
john
456

写完保存退出即可,上面添加了两个虚拟用户,mike的密码是123,John的密码是456。

#
[root@localhost /]# cd /etc/vsftpd/
[root@localhost vsftpd]# db_load -T -t hash -f vusers.list vusers.db  #创建Berkeley DB格式的数据库文件
[root@localhost vsftpd]# chmod 600 /etc/vsftpd/vusers.*     #为保证数据安全,所以更改下权限
[root@localhost vsftpd]# useradd -d /var/ftproot -s /sbin/nologin test          #添加虚拟用户的映射账号
[root@localhost vsftpd]# chmod 777 /var/ftproot/
[root@localhost vsftpd]# vim /etc/pam.d/vsftpd.vu          为虚拟用户建立PAM认证文件
auth    required        pam_userdb.so db=/etc/vsftpd/vusers
account required        pam_userdb.so db=/etc/vsftpd/vusers

写完上面两行,保存退出即可

[root@localhost vsftpd]# mkdir /etc/vsftpd/vusers_dir        #为不同的虚拟用户建立独立的配置文件
[root@localhost vsftpd]# cd /etc/vsftpd/vusers_dir/
[root@localhost vusers_dir]# vim john    #写入john用户的权限
anon_upload_enable=YES
anon_mkdir_write_enable=YES

写完上面两行,保存退出即可

[root@localhost vusers_dir]# cp john mike           #给用户mike复制一份
[root@localhost vusers_dir]# vim /etc/vsftpd/vsftpd.conf     #编辑主配置文件为如下

我为了使主配置文件简洁一些,注释类的配置我都删除了,以下为我这里主配置文件的所有内容

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd.vu
userlist_enable=YES
tcp_wrappers=YES
guest_username=test
guest_enable=YES
allow_writeable_chroot=YES
anon_world_readable_only=NO
anon_other_write_enable=YES
user_config_dir=/etc/vsftpd/vusers_dir

将主配置文件更改为如上,即可保存退出。

最后重启vsftpd服务器

[root@localhost ~]# systemctl start vsftpd                    #启动vsftpd服务,使用客户端访问验证即可

可通过  tail -f /var/log/secure 指令,查看服务器安全日志,便于分析错误问题,设置操作效果一定要仔细…..

CentOS7 FTP服务搭建(vsftpd.conf配置文件详解)

配置文件说明

/etc/vsftpd/vsftpd.conf这个文件是vsftpd服务的核心配置文件!
我们在修改配置文件的时候,最好先备份一份!

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

配置的大致内容:

# 是否允许匿名登录FTP服务器,默认设置为YES允许
# 用户可使用用户名ftp或anonymous进行ftp登录,口令为用户的E-mail地址。
# 如不允许匿名访问则设置为NO
anonymous_enable=YES
# 是否允许本地用户(即linux系统中的用户帐号)登录FTP服务器,默认设置为YES允许
# 本地用户登录后会进入用户主目录,而匿名用户登录后进入匿名用户的下载目录/var/ftp/pub
# 若只允许匿名用户访问,前面加上#注释掉即可阻止本地用户访问FTP服务器
local_enable=YES
# 是否允许本地用户对FTP服务器文件具有写权限,默认设置为YES允许
write_enable=YES 
# 掩码,本地用户默认掩码为077
# 你可以设置本地用户的文件掩码为缺省022,也可根据个人喜好将其设置为其他值
#local_umask=022
# 是否允许匿名用户上传文件,须将全局的write_enable=YES。默认为YES
#anon_upload_enable=YES
# 是否允许匿名用户创建新文件夹
#anon_mkdir_write_enable=YES 
# 是否激活目录欢迎信息功能
# 当用户用CMD模式首次访问服务器上某个目录时,FTP服务器将显示欢迎信息
# 默认情况下,欢迎信息是通过该目录下的.message文件获得的
# 此文件保存自定义的欢迎信息,由用户自己建立
#dirmessage_enable=YES
# 是否让系统自动维护上传和下载的日志文件
# 默认情况该日志文件为/var/log/vsftpd.log,也可以通过下面的xferlog_file选项对其进行设定
# 默认值为NO
xferlog_enable=YES
# Make sure PORT transfer connections originate from port 20 (ftp-data).
# 是否设定FTP服务器将启用FTP数据端口的连接请求
# ftp-data数据传输,21为连接控制端口
connect_from_port_20=YES
# 设定是否允许改变上传文件的属主,与下面一个设定项配合使用
# 注意,不推荐使用root用户上传文件
#chown_uploads=YES
# 设置想要改变的上传文件的属主,如果需要,则输入一个系统用户名
# 可以把上传的文件都改成root属主。whoever:任何人
#chown_username=whoever
# 设定系统维护记录FTP服务器上传和下载情况的日志文件
# /var/log/vsftpd.log是默认的,也可以另设其它
#xferlog_file=/var/log/vsftpd.log
# 是否以标准xferlog的格式书写传输日志文件
# 默认为/var/log/xferlog,也可以通过xferlog_file选项对其进行设定
# 默认值为NO
#xferlog_std_format=YES
# 以下是附加配置,添加相应的选项将启用相应的设置
# 是否生成两个相似的日志文件
# 默认在/var/log/xferlog和/var/log/vsftpd.log目录下
# 前者是wu_ftpd类型的传输日志,可以利用标准日志工具对其进行分析;后者是vsftpd类型的日志
#dual_log_enable
# 是否将原本输出到/var/log/vsftpd.log中的日志,输出到系统日志
#syslog_enable
# 设置数据传输中断间隔时间,此语句表示空闲的用户会话中断时间为600秒
# 即当数据传输结束后,用户连接FTP服务器的时间不应超过600秒。可以根据实际情况对该值进行修改
#idle_session_timeout=600
# 设置数据连接超时时间,该语句表示数据连接超时时间为120秒,可根据实际情况对其个修改
#data_connection_timeout=120
# 运行vsftpd需要的非特权系统用户,缺省是nobody
#nopriv_user=ftpsecure
# 是否识别异步ABOR请求。
# 如果FTP client会下达“async ABOR”这个指令时,这个设定才需要启用
# 而一般此设定并不安全,所以通常将其取消
#async_abor_enable=YES
# 是否以ASCII方式传输数据。默认情况下,服务器会忽略ASCII方式的请求。
# 启用此选项将允许服务器以ASCII方式传输数据
# 不过,这样可能会导致由"SIZE /big/file"方式引起的DoS攻击
#ascii_upload_enable=YES
#ascii_download_enable=YES
# 登录FTP服务器时显示的欢迎信息
# 如有需要,可在更改目录欢迎信息的目录下创建名为.message的文件,并写入欢迎信息保存后
#ftpd_banner=Welcome to blah FTP service.
# 黑名单设置。如果很讨厌某些email address,就可以使用此设定来取消他的登录权限
# 可以将某些特殊的email address抵挡住。
#deny_email_enable=YES
# 当上面的deny_email_enable=YES时,可以利用这个设定项来规定哪些邮件地址不可登录vsftpd服务器
# 此文件需用户自己创建,一行一个email address即可
#banned_email_file=/etc/vsftpd/banned_emails
# 用户登录FTP服务器后是否具有访问自己目录以外的其他文件的权限
# 设置为YES时,用户被锁定在自己的home目录中,vsftpd将在下面chroot_list_file选项值的位置寻找chroot_list文件
# 必须与下面的设置项配合
#chroot_list_enable=YES
# 被列入此文件的用户,在登录后将不能切换到自己目录以外的其他目录
# 从而有利于FTP服务器的安全管理和隐私保护。此文件需自己建立
#chroot_list_file=/etc/vsftpd/chroot_list
# 是否允许递归查询。默认为关闭,以防止远程用户造成过量的I/O
#ls_recurse_enable=YES
# 是否允许监听。
# 如果设置为YES,则vsftpd将以独立模式运行,由vsftpd自己监听和处理IPv4端口的连接请求
listen=YES
# 设定是否支持IPV6。如要同时监听IPv4和IPv6端口,
# 则必须运行两套vsftpd,采用两套配置文件
# 同时确保其中有一个监听选项是被注释掉的
#listen_ipv6=YES
# 设置PAM外挂模块提供的认证服务所使用的配置文件名,即/etc/pam.d/vsftpd文件
# 此文件中file=/etc/vsftpd/ftpusers字段,说明了PAM模块能抵挡的帐号内容来自文件/etc/vsftpd/ftpusers中
#pam_service_name=vsftpd
# 是否允许ftpusers文件中的用户登录FTP服务器,默认为NO
# 若此项设为YES,则user_list文件中的用户允许登录FTP服务器
# 而如果同时设置了userlist_deny=YES,则user_list文件中的用户将不允许登录FTP服务器,甚至连输入密码提示信息都没有
#userlist_enable=YES/NO
# 设置是否阻扯user_list文件中的用户登录FTP服务器,默认为YES
#userlist_deny=YES/NO
# 是否使用tcp_wrappers作为主机访问控制方式。
# tcp_wrappers可以实现linux系统中网络服务的基于主机地址的访问控制
# 在/etc目录中的hosts.allow和hosts.deny两个文件用于设置tcp_wrappers的访问控制
# 前者设置允许访问记录,后者设置拒绝访问记录。
# 如想限制某些主机对FTP服务器192.168.57.2的匿名访问,编缉/etc/hosts.allow文件,如在下面增加两行命令:
# vsftpd:192.168.57.1:DENY 和vsftpd:192.168.57.9:DENY
# 表明限制IP为192.168.57.1/192.168.57.9主机访问IP为192.168.57.2的FTP服务器
# 此时FTP服务器虽可以PING通,但无法连接
tcp_wrappers=YES

除此之外,还有一些其它常用的控制选项

use_localtime=YES    <==是否使用本地时间,默认为NO(默认使用GMT时间)
listen_port=21    <==vsftpd的端口号,默认为21
pasv_enable=YES    <==是否启用数据的被动模式连接,默认为YES
pasv_min_port=0    <==设置FTP被动模式连接的最小端口。默认为0,表示不受限制
pasv_max_port=0    <==设置FTP被动模式连接的最大端口。默认为0,表示不受限制
connect_timeout=60    <==PORT方式下建立数据连接的超时时间,单位为秒 ,默认为60
accept_timeout=60      <==被动(PASV)数据连接的超时时间,单位为秒,默认值为60
max_clients=0    <==vsftpd允许每个客户端的最大连接数,默认为0,表示不受限制
max_per_ip=0    <==vsftpd允许每个IP的最大连接数,默认为0,表示不受限制
local_max_rate=0    <==本地用户所能使用的最大传输速度。默认为0,表示不受限制
anon_max_rate=0     <==匿名用户所能使用的最大传输速度。默认为0,表示不受限制
anon_world_readable_only=YES    <==仅允许匿名用户具有下载可读文件的权限,默认为YES
anon_other_write_enable=YES    <==是否允许匿名用户具有除了写之外的权限,包括删除与修改文件和目录,默认为NO
ftp_username=ftp            <==定义匿名用户的账户名称,默认值为ftp。
no_anon_password=YES        <==匿名用户登录时是否询问口令。设置为YES,则询问。默认NO
anon_umask=022              <==设置匿名用户新增文档的umask。默认077

userlist_enable和userlist _deny选项不同时

userlist_enable=YES && userlist_deny=YES    <==/etc/vsftpd/user_list中的用户禁止访问
userlist_enable=YES && userlist_deny=NO     <==/etc/vsftpd/user_list中的用户允许访问

②/etc/vsftpd/ftpusers这个文件是禁止使用vsftpd的用户列表文件。记录不允许访问FTP服务器的用户名单,管理员可以把一些对系统安全有威胁的用户账号记录在此文件中,以免用户从FTP登录后获得大于上传下载操作的权利,而对系统造成损坏。
③/etc/vsftpd/user_list这个文件禁止或允许使用vsftpd的用户列表文件。这个文件中指定的用户缺省情况(即在/etc/vsftpd/vsftpd.conf中设置userlist_deny=YES)下也不能访问FTP服务器,在设置了userlist_deny=NO时,仅允许user_list中指定的用户访问FTP服务器。

注意:/etc/vsftpd/ftpuser不受任何配制项的影响,它总是有效,它是一个黑名单。当userlist_enable=YES时,userlist_deny选项才会生效。当userlist_enable=YES,userlist_deny=YES时,user_list是一个黑名单;当userlist_enable=YES,userlist_deny=NO时,user_list是一个白名单。需要提醒的是,使用白名单后,匿名用户将无法登入!除非显式在user_list中加入一行:anonymous

传输模式配置

开启被动模式

connect_from_port_20=NO(默认为YES) #设置是否允许主动模式
pasv_enable=YES(默认为YES) #设置是否允许被动模式
pasv_min_port=50000(default:0(use any port))
pasv_max_port=60000(default:0(use any port))

开启主动模式

connect_from_port_20=YES
pasv_enable=NO

上边配置只是开启所需模式要求的,其他配置看实际需求!

用户访问模式配置
vsftpd服务访问模式有三种:匿名用户模式,系统用户模式和虚拟用户模式!

匿名用户配置
Vsftpd默认以匿名用户访问,匿名用户默认访问的FTP服务器端路径为:/var/ftp/pub,匿名用户只有查看权限,无法创建、删除、修改。
这种模式下,不需改动配置文件,直接启动服务即可访问!

如果想要允许匿名用户能够上传、下载、删除文件,需修改/etc/vsftpd/vsftpd.conf配置文件中:

anon_upload_enable=YES               #允许匿名用户上传文件;
anon_mkdir_write_enable=YES          #允许匿名用户创建目录;
anon_other_write_enable=YES          #允许匿名用户其他写入权限。

另外默认Vsftpd匿名用户有两个:anonymousftp,所以匿名用户如果需要上传文件、删除及修改等权限,需要ftp用户对/var/ftp/pub目录有写入权限,使用如下chown和chmod任意一种即可,设置命令如下:

chown -R ftp pub/

如果要关闭匿名用户登录,只需设置:

anonymous_enable=NO

系统用户配置

匿名模式可以让任何人使用ftp服务,比较公开!多适用于共享文件!如果我们想要特定用户使用,就需要使用系统用户登录访问!这种模式,需要我们新建不同用户,linux创建用户:

useradd 新的用户名
passwd 新的用户名

然后需要修改配置文件:

anonymous_enable=NO   #禁止匿名用户登录
chown_uploads=NO      #设定禁止上传文件更改宿主
nopriv_user=ftptest   #设定支撑Vsftpd服务的宿主用户为新建用户
ascii_upload_enable=YES
ascii_download_enable=YES #设定支持ASCII模式的上传和下载功能。
userlist_enable=YES
userlist_deny=NO

最后打开/etc/vsftpd/user_list文件,将新建的用户添加到最后一行(一个用户一行)

这种模式下,登录访问的目录就是/home/新建用户/

虚拟用户配置
系统用户模式虽然可以控制访问,但是如果用户过多,就会影响服务器系统的管理,对服务器安全造成威胁!而且我们需要的仅仅是可以使用搭建在服务器的FTP服务而已!
那么就需要我们设置虚拟用户进行登录,这也是推荐的方式!这种方式更加安全!

虚拟用户就是没有实际的真实系统用户,而是通过映射到其中一个真实用户以及设置相应的权限来实现访问验证,虚拟用户不能登录Linux系统,从而让系统更加的安全可靠。

一、首先需要我们新建一个虚拟宿主用户,也就是上边说的要映射的真实用户:

useradd virtualhost -s /sbin/nologin

这里设置宿主用户也不允许登录系统!

二、然后修改配置文件,下边我给出我的设置:

anonymous_enable=NO  #设定不允许匿名访问
local_enable=YES  #设定本地用户可以访问。注意:主要是为虚拟宿主用户,如果该项目设定为NO那么所有虚拟用户将无法访问。
write_enable=YES  #设定可以进行写操作。
local_umask=022  #设定上传后文件的权限掩码。
anon_upload_enable=NO  #禁止匿名用户上传。
anon_mkdir_write_enable=NO  #禁止匿名用户建立目录。
dirmessage_enable=YES  #设定开启目录标语功能。
xferlog_enable=YES  #设定开启日志记录功能。
connect_from_port_20=YES #设定端口20进行数据连接。(主动模式)
chown_uploads=NO  #设定禁止上传文件更改宿主。
#chown_username=whoever
xferlog_file=/var/log/xferlog
#设定Vsftpd的服务日志保存路径。注意,该文件默认不存在。必须要手动touch出来,并且由于这里更改了Vsftpd的服务宿主用户为手动建立的Vsftpd。必须注意给与该用户对日志的写入权限,否则服务将启动失败。
xferlog_std_format=YES #设定日志使用标准的记录格式。
#idle_session_timeout=600 #设定空闲连接超时时间,单位为秒,这里默认。
#data_connection_timeout=120 #设定空闲连接超时时间,单位为秒,这里默认
#nopriv_user=ftptest

async_abor_enable=YES  #设定支持异步传输功能。

ascii_upload_enable=YES
ascii_download_enable=YES  #设定支持ASCII模式的上传和下载功能。

ftpd_banner=Welcome to blah FTP service.  #设定Vsftpd的登陆标语。

#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd/banned_emails

chroot_list_enable=NO #禁止用户登出自己的FTP主目录。

# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list

ls_recurse_enable=NO  #禁止用户登陆FTP后使用"ls -R"的命令。该命令会对服务器性能造成巨大开销。如果该项被允许,那么挡多用户同时使用该命令时将会对该服务器造成威胁。
listen=YES 设定该Vsftpd服务工作在StandAlone模式下
#listen_ipv6=YES

userlist_enable=YES  #设定userlist_file中的用户将不得使用FTP。
#userlist_deny=NO
tcp_wrappers=YES  #设定支持TCP Wrappers

#下边是关于虚拟用户的重要配置
guest_enable=YES  #设定启用虚拟用户功能。
guest_username=virtualhost  #指定虚拟用户的宿主用户。
virtual_use_local_privs=YES  #设定虚拟用户的权限符合他们的宿主用户。
pam_service_name=vsftpd  #设定PAM服务下Vsftpd的验证配置文件名。因此,PAM验证将参考/etc/pam.d/下的vsftpd文件配置。
user_config_dir=/etc/vsftpd/virtualconf  #设定虚拟用户个人Vsftp的配置文件存放路径。也就是说,这个被指定的目录里,将存放每个Vsftp虚拟用户个性的配置文件,一个需要注意的地方就是这些配置文件名必须和虚拟用户名相同。

需要注意的地方
①Vsftpd的日志文件不存在,建立Vsftpd的日志文件,并更该属主为Vsftpd的服务宿主用户。

touch /var/log/vsftpd.log
chown virtualhost.virtualhost /var/log/vsftpd.log

②建立虚拟用户配置文件存放路径:

mkdir /etc/vsftpd/virtualconf

这里是跟配置文件中的user_config_dir这一项是对应的!

三、接着制作虚拟用户数据库文件,这里需要先安装db4包,用来支持文件数据库。
安装:

yum install db4

然后建立虚拟用户名单文件:touch /etc/vsftpd/virtusers
建立了一个虚拟用户名单文件,这个文件就是来记录vsftpd虚拟用户的用户名和口令的数据文件,我这里给它命名为virtusers。为了避免文件的混乱,我把这个名单文件就放置在/etc/vsftpd/下。
接着编辑这个文件,将虚拟用户信息写入这个文件vi /etc/vsftpd/virtusers

virtual1
123456
virtual2
123456

类似上边的格式,一行用户名,一行密码
接着生成虚拟用户数据文件:

db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db

四、设定PAM验证文件,并指定虚拟用户数据库文件进行读取
这里需要我们安装pam服务,一般系统都会有安装:

yum install pam

Vsftp的PAM验证配置文件:/etc/pam.d/vsftpd
这里对应的就是核心配置文件中的pam_service_name,它会去找/etc/pam.d/vsftpd这个文件!

那么我们需要编辑这个文件,同样的编辑前先备份一下:

cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak

然后编辑文件:vi /etc/pam.d/vsftpd

#%PAM-1.0
auth    sufficient      /lib/security/pam_userdb.so     db=/etc/vsftpd/virtusers
account sufficient      /lib/security/pam_userdb.so     db=/etc/vsftpd/virtusers

以上两条是手动添加的,内容是对虚拟用户的安全和帐户权限进行验证。
这里的auth是指对用户的用户名口令进行验证。
这里的accout是指对用户的帐户有哪些权限哪些限制进行验证。
其后的sufficient表示充分条件,也就是说,一旦在这里通过了验证,那么也就不用经过下面剩下的验证步骤了。相反,如果没有通过的话,也不会被系统立即挡之门外,因为sufficient的失败不决定整个验证的失败,意味着用户还必须将经历剩下来的验证审核。
再后面的/lib/security/pam_userdb.so表示该条审核将调用pam_userdb.so这个库函数进行。
最后的db=/etc/vsftpd/virtusers则指定了验证库函数将到这个指定的数据库中调用数据进行验证。

这里有一个问题需要注意一下:
如果你的系统是64位的,那么这里要改成:

/lib64/security/pam_userdb.so

否则会验证失败!不能登录!

五、配置虚拟用户
1.规划好虚拟用户的主路径:mkdir /opt/vsftp/
2.建立测试用户的FTP用户目录:

mkdir /opt/vsftp/virtual1/  /opt/vsftp/virtual2/

3.建立虚拟用户配置文件模版

cp /etc/vsftpd/vsftpd.conf.bak /etc/vsftpd/virtualconf/vconf.tmp

4.定制虚拟用户模版配置文件: vi /etc/vsftpd/virtualconf/vconf.tmp

local_root=/opt/vsftp/virtuser
指定虚拟用户的具体主路径。
anonymous_enable=NO
设定不允许匿名用户访问。
write_enable=YES
设定允许写操作。
local_umask=022
设定上传文件权限掩码。
anon_upload_enable=NO
设定不允许匿名用户上传。
anon_mkdir_write_enable=NO
设定不允许匿名用户建立目录。
idle_session_timeout=600
设定空闲连接超时时间。
data_connection_timeout=120
设定单次连续传输最大时间。
max_clients=10
设定并发客户端访问个数。
max_per_ip=5
设定单个客户端的最大线程数,这个配置主要来照顾Flashget、迅雷等多线程下载软件。
local_max_rate=50000
设定该用户的最大传输速率,单位b/s。

这里将原vsftpd.conf配置文件经过简化后保存作为虚拟用户配置文件的模版。这里将并不需要指定太多的配置内容,主要的框架和限制交由 Vsftpd的主配置文件vsftpd.conf来定义,即虚拟用户配置文件当中没有提到的配置项目将参考主配置文件中的设定。而在这里作为虚拟用户的配置文件模版只需要留一些和用户流量控制,访问方式控制的配置项目就可以了。这里的关键项是local_root这个配置,用来指定这个虚拟用户的FTP主路径。
5.更改虚拟用户的主目录的属主为虚拟宿主用户:

chown -R virtualhost.virtualhost/opt/vsftp/

6.配置虚拟用户,从虚拟用户模版配置文件复制:
cp /etc/vsftpd/virtualconf/vconf.tmp /etc/vsftpd/virtualconf/virtual1

7.针对具体用户进行定制:vi /etc/vsftpd/virtualconf/virtual1

local_root=/opt/vsftp/virtual1
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=300
data_connection_timeout=90
max_clients=1
max_per_ip=1
local_max_rate=25000

当然,如果很熟练的话3,4,6步骤都可以省略!不要设置!
这里主要是为了方便!可以在原来的基础的进行修改而已!

最后别忘了,开启或者重启服务!

测试

我们可以先在模板目录新建一个空文件

touch /opt/vsftp/virtual1/test.txt

登录一下,在windows打开cmd:(当然我们使用浏览器,或者使用windows文件浏览窗口都可以!)

ftp 192.168.164.133

使用用户virtual1和密码123456登录!
然后输入ls,展示该目录下文件列表。
看有没有我们刚才新建的test.txt文本?!
然后测试一下上传,使用put命令,然后看一下目录中是否有上传的文件?
接着测试一下建立目录操作:mkdir newdir,看是否有新目录被创建?!
然后测试一下下载:使用get test.txt,将test.txt文件下载到本地!注意默认的下载路径为windows用户目录c:\Users\xxxxx目录下`!

centos7ftp服务器的搭建

注意,如果要所有人同时编辑 FTP 上的所有文件,可以将 vsftpd.conf 配置文件中的 local_umask 选项设置为 002,并且在创建用户时通过 -g ftp 将所有的 FTP 用户加入同一个用户组。

yum install -y vsftpd #安装vsftpd服务
rpm -qa | grep vsftpd #查看vsftpd版本信息
vim /etc/selinux/config #更改selinux=disabled
setenforce 0 #关闭selinux
getenforce #查看selinux状态
firewall-cmd –permanent –add-service=ftp #防火墙放行vsftpd
firewall-cmd –reload #防火墙配置立即生效
firewall-cmd –list-all #查看防火墙放行服务

systemctl start vsftpd # 启动vsftpd服务
systemctl enable vsftpd # 开机自启动vsftpd服务

1. 安装 ftp 服务端软件

yum install vsftpd

2. 配置 vsftpd.conf 配置文件

vsftpd 只需要设置这个文件即可,所有设置项的等号两边不能有空白!!

vim /etc/vsftpd/vsftpd.conf

常见的设置如下,所有的可用设置可以通过 man 5 vsftpd.conf 查看:

#FTP 用户新建文件和目录的默认权限,022 对应 755 只有自己可以修改,002 对应 775 同一个用户组的都可以修改
local_umask=002
#禁止匿名访问
anonymous_enable=NO
#接受本地用户
local_enable=YES
#允许上传
write_enable=YES
#用户只能访问限制的目录
chroot_local_user=YES
#设置所有的 FTP 用户使用同一个目录,不然所有用户默认使用各自的家目录。
local_root=/home/ftp
#支持 PAM 服务的管理,为 vsftpd 使用配置文件
pam_service_name=vsftpd

3. 创建 FTP 目录并调整权限

这个是避免“500 OOPS: vsftpd: refusing to run with writable root inside chroot()”

mkdir /home/ftp
chmod a-w /home/ftp
mkdir /home/ftp/data

4. 添加ftp用户

-M 不自动建立用户的家目录,-d <登入目录> 指定用户登入时的启始目录,-g ftp 将所有用户添加到同一个用户组,-s /sbin/nologin 使这些用户只能使用 FTP 无法登陆系统:

useradd -d /home/ftp -M -g ftp -s /sbin/nologin xiaoming
passwd xiaoming

5. 修改 pam.d/vsftpd

这时候登录 ftp 会报错: 530 login incorrect

vim /etc/pam.d/vsftpd

注释掉下面一行:

#auth    required pam_shells.so

6. 启动 vsftpd

systemctl start vsftpd

现在可以登录了,看到的是 /home/ftp,并且限制在该目录。

可以在浏览器用 ftp://xxx.xxx.xxx.xxx 访问,也可以用 ftp 软件比如 FileZilla,密码就是 xiaoming 的密码。

Centos7 Mysql8.0版本 重置root密码

问题产生背景:

安装完 最新版的 mysql8.0后忘记了密码,向重置root密码;找了网上好多资料都不尽相同,根据自己的问题总结如下:

1 修改配置文件免密码登录mysql

需要登录你安装mysql的电脑或者服务器,修改etc文件夹下的my.cnf 配置文件让其跳过登录密码检查。

vim /etc/my.cnf //永久修改
echo skip-grant-tables >> /etc/my.conf //临时修改

2 在 [mysqld]最后加上如下语句 并保持退出文件;

skip-grant-tables

3 重启mysql服务:

systemctl restart mysqld.service

第二步免密码登录到mysql上;直接在命令行上输入:

mysql  
//或者  
mysql -u root -p   
//password直接回车

第三步: 给root用户重置密码;

ALTER user 'root'@'localhost' IDENTIFIED BY 'Zhige123#';

然后我们继续编辑/etc/my.conf删除掉刚刚添加的那一行skip-grant-tables,然后重启mysql。

至此修改成功; 从新使用用户名密码登录即可;

systemctl restart mysqld.service 
systemctl status mysqld.service 
mysql -u root

结尾提示:

select host, user, authentication_string, plugin from user;
host: 允许用户登录的ip‘位置’%表示可以远程;

user:当前数据库的用户名;

authentication_string: 用户密码;在mysql 5.7.9以后废弃了password字段和password()函数;

plugin: 密码加密方式;

退出mysql, 删除/etc/my.cnf文件最后的 skip-grant-tables 重庆mysql服务;