CentOS7服务器架设ftp过程

一、vsftp安装篇

复制代码代码如下:
# 安装vsftpd
yum -y install vsftpd
# 启动
systemctl start vsftpd.service

# 开启启动
systemctl enable vsftpd.service

二、vsftp相关命令之服务篇

复制代码代码如下:
# 启动ftp服务
service vsftpd start
# 查看ftp服务状态
service vsftpd status
# 重启ftp服务
service vsftpd restart
# 关闭ftp服务
service vsftpd stop

三、vsftp配置篇

复制代码代码如下:
#进入vsftpd配置文件
vim /etc/vsftpd/vsftpd.conf
# 禁止匿名用户anonymous登录
anonymous_enable=NO
# 允许本地用户登录
local_enable=YES
# 让登录的用户有写权限(上传,删除)
write_enable=YES
# 默认umask
local_umask=022
# 把传输记录的日志保存到/var/log/vsftpd.log
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=NO
# 允许ASCII模式上传
ascii_upload_enable=YES
# 允许ASCII模式下载
ascii_download_enable=YES
# 使用20号端口传输数据
connect_from_port_20=YES
# 欢迎标语
ftpd_banner=Welcome to use my test ftp server.
# 接下来的三条配置很重要
# chroot_local_user设置了YES,那么所有的用户默认将被chroot,
# 也就用户目录被限制在了自己的home下,无法向上改变目录。
# chroot_list_enable设置了YES,即让chroot用户列表有效。
# ★超重要:如果chroot_local_user设置了YES,那么chroot_list_file
# 设置的文件里,是不被chroot的用户(可以向上改变目录)
# ★超重要:如果chroot_local_user设置了NO,那么chroot_list_file
# 设置的文件里,是被chroot的用户(无法向上改变目录)
chroot_list_enable=YES
# touch /etc/vsftpd/chroot_list 新建
chroot_list_file=/etc/vsftpd/chroot_list
use_localtime=YES
# 以standalone模式在ipv4上运行
listen=YES
# PAM认证服务名,这里默认是vsftpd,在安装vsftpd的时候已经创建了这个pam文件,
# 在/etc/pam.d/vsftpd,根据这个pam文件里的设置,/etc/vsftpd/ftpusers
# 文件里的用户将禁止登录ftp服务器,比如root这样敏感的用户,所以你要禁止别的用户
# 登录的时候,也可以把该用户追加到/etc/vsftpd/ftpusers里。
pam_service_name=vsftpd
# 重启 vsftpd
service vsftpd restart

四、vsftp用户篇

复制代码代码如下:
# 创建用户
useradd -d /home/webapps/www.xxx.com -s /sbin/nologin -M hzh1990
# 设置用户到文件夹
chown -R username /home/webapps/www.xxx.com/public
# 设置权限
chown -R 777  /home/webapps/www.xxx.com/public
# 添加密码
passwd hzh1990 -> 密码 -> 确认密码
useradd -d /home/webzte -s /sbin/nologin -M webzte
五、遇到的问题
1、启动时遇到问题。
现象与描述
[root@localhost ~]# service vsftpd start
Redirecting to /bin/systemctl start  vsftpd.service
Job for vsftpd.service failed. See ‘systemctl status vsftpd.service’ and ‘journalctl -xn’ for details.
按照提示输入systemctl status vsftpd.service 和 journalctl -xn 显示如下:
[root@localhost ~]# systemctl status vsftpd.service -l
vsftpd.service – Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled)
Active: failed (Result: exit-code) since Thu 2014-09-18 01:50:43 CST; 3min 50s ago
Process: 2136 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=2)Sep 18 01:50:43 localhost.localdomain systemd[1]: vsftpd.service: control process exited, code=exited status=2
Sep 18 01:50:43 localhost.localdomain systemd[1]: Failed to start Vsftpd ftp daemon.
Sep 18 01:50:43 localhost.localdomain systemd[1]: Unit vsftpd.service entered failed state.

 

解决与思考
# When “listen” directive is enabled, vsftpd runs in standalone mode and
# listens on IPv4 sockets. This directive cannot be used in conjunction
# with the listen_ipv6 directive.
listen=NO
把listen改成NO成功启动了

 

2、客户端无法连接ftp
现象与描述
客户端无法连接到服务器,telnet也不行,怀疑被服务器防火墙ban了
解决与思考
先考虑把21端口加入到服务器firewalld规则里,但是太复杂,没查到相关文档,决定禁用firewalld采用iptables来解决。

在CentOS/RHEL 7系统中,要用iptables和ip6tables服务代替FirewallD服务,需要以root身份运行以下命令,先禁用FirewallD:

# systemctl disable firewalld
# systemctl stop firewalld

然后安装iptables-services程序包,以root身份输入以下命令:

# yum install iptables-services

iptables-services程序包包含了iptables和ip6tables服务。然后,以root身份运行iptables和ip6tables命令:

# systemctl start iptables
# systemctl start ip6tables
# systemctl enable iptables
# systemctl enable ip6tables

vi /etc/sysconfig/iptables

systemctl status iptables

 

3、ftp客户端连接进去后,用户能进入到上层及其他目录

现象与描述
如题。
解决与思考

————————————–分割线—————————————————

2016-12-09 决定尝试FTP虚拟用户登录。

我们登录FTP有三种方式,匿名登录、本地用户登录和虚拟用户登录。

匿名登录:在登录FTP时使用默认的用户名,一般是ftp或anonymous。

本地用户登录:使用系统用户登录,在/etc/passwd中。

虚拟用户登录:这是FTP专有用户,有两种方式实现虚拟用户,本地数据文件和数据库服务器。

FTP虚拟用户是FTP服务器的专有用户,使用虚拟用户登录FTP,只能访问FTP服务器提供的资源,大大增强了系统的安全。

一、本地数据文件方式

1. 添加虚拟用户口令文件

[root@CentOS5 /]#vi /etc/vsftpd/vftpuser.txt

添加虚拟用户名和密码,一行用户名,一行密码,以此类推。奇数行为用户名,偶数行为密码。

bobyuan #用户名

123456 #密码

markwang #用户名

123456 #密码

 

2. 生成虚拟用户口令认证文件

将刚添加的vftpuser.txt虚拟用户口令文件转换成系统识别的口令认证文件。

首先查看系统有没有安装生成口令认证文件所需的软件db4-utils。

[root@CentOS5 /]#rpm –qa |grep db4-utils

[root@CentOS5 /]#rpm –ivh db4-utils-4.3.29-9.fc6.i386.rpm

rpm -qa |grep db4-utils

rpm -qa |grep db4

rpm -ivh db4-utils-4.3.29-9.fc6.i386.rpm

上述几行均失败。

yum provides db_load

成功。

db_load -T -t hash -f /etc/vsftpd/vftpuser.txt /etc/vsftpd/vftpuser.db

3. 编辑vsftpd的PAM认证文件

在/etc/pam.d目录下,

[root@CentOS5 /]#vi /etc/pam.d/vsftpd

将里面其他的都注释掉,添加下面这两行:

auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vftpuser

account required /lib/security/pam_userdb.so db=/etc/vsftpd/vftpuser

linux使用scp+ssh实现自动远程备份数据库

1、首先备份数据库到本地

#!/bin/bash
mysql_pwd=”123456″
mysql_dump=”/usr/bin/mysqldump”
cur_year=$(date +”%Y”)
cur_month=$(date +”%m”)
cur_day=$(date +”%d”)
dump_path=”/data/backup/abc/$cur_year-$cur_month”
if [ ! -d “$dump_path” ]; then
mkdir -p “$dump_path”
fi
$mysql_dump -uroot -p$mysql_pwd –socket=/data/mysql_data/mysql.sock –opt abc_2018 | gzip > $dump_path/abc-$cur_day.sql.gz

2、将本地备份文件同步到远程服务器

具体操作:

要求:把192.168.0.2机上的test.tar拷贝到192.168.0.3机器的上

192.168.0.2服务器上:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t rsa -P “” -f ~/.ssh/id_rsa

192.168.0.3服务器上:
mkdir -p ~/.ssh

在192.168.0.3建立好.ssh目录后,从192.168.0.2拷贝~/.ssh/id_rsa.pub到192.168.0.3中~/.ssh目录下:
scp ~/.ssh/id_rsa.pub root@192.168.0.3:~/.ssh)。

把从192.168.0.2拷贝过来的id_rsa.pub重命名为authorized_keys(cp id_rsa.pub authorized_keys)

chmod 600 ~/.ssh/authorized_keys

此时拷贝就不需要输入密码:scp test.tar root@192.168.0.3:/var/www

下面就可以把此命令放到计划任务中而自动执行了­:
crontab -e
50 04 * * * /data/backup.sh

vscode Module parse failed: Unexpected character问题的解决

vue-loader@15.*之后除了必须带有VueLoaderPlugin 之外,还需另外单独配置css-loader。

const VueLoaderPlugin = require('vue-loader/lib/plugin')

module.exports = {
  // ...
  module: {
    rules: [
      {
        test: /\.vue$/,
        loader: 'vue-loader'
      },
      {
        test: /\.css$/,
        use: ['style-loader','css-loader']
      }
    ]
  }
  plugins: [
    new VueLoaderPlugin()
  ]
}

单元测试phpunit安装的使用实例(转自CSDN)

一、配置phpunit
1、到phpunit官网下载相应的版本,我的是php 5.6,选择phpunit 4.8:https://phar.phpunit.de/phpunit-old.phar,并把名字改为 phpunit.phar
2、把phpunit.phar放到项目目录app_api下,然后将项目目录D:\webroot\app_api添加到环境变量,以便直接使用phpunit测试
3、按快捷键 Win + R ,输入cmd并回车,进入存放phpunit.phar的路径,输入 echo @php “%~dp0phpunit.phar” %* > phpunit.cmd 并回车,接着输入 phpunit –version 查看版本(如果有误,再试一次)

D:\>cd wamp/

D:\wamp>cd www/api

D:\wamp\www\api>echo @php "%~dp0phpunit.phar" %* > phpunit.cmd

D:\wamp\www\api>phpunit --version
PHPUnit 4.8.36 by Sebastian Bergmann and contributors.

 

二、使用phpunit进行测试
1、使用phpunit,必须使用类 ,简单以login.php为例
<?php

error_reporting(0);

require_once './classes/class_login.php';

$username = $_POST["username"];

$password = $_POST["password"];

$log = new Login;

$response = $log->login($username, $password);

if ($response != "false") {

//登录成功后的处理......

}

echo $response;

?>
2、新建文件夹 classes,并在里面新建 class_login.php ,内容为
<?php

class Login {

// 测试工具PHPUnit要求一定要在这里给变量默认值,于是默认为空。

public function login($username = "", $password = "") {

$con = mysqli_connect("localhost", "root", "123456", "big-bak");

if (!$con) {

die('Could not connect: ' . mysqli_error());

} else {

mysqli_query($con, "SET NAMES utf8");

$result = mysqli_query($con, "SELECT id,username,email FROM ih_user where username = '$username' and password = '$password'");

if (!$result || mysqli_num_rows($result) == 0) {

return "false";

} else {

$result_arr = mysqli_fetch_assoc($result);

return json_encode($result_arr, JSON_UNESCAPED_UNICODE);

}

}

}

}

?>
3、开始写测试文件 login_test.php
<?php

require_once dirname(__FILE__) . '/classes/class_login.php';

class LoginTest extends PHPUnit_Framework_TestCase {

public function testLoginSuccess() {

$expected = '{"id":"1","username":"test","email":"test100@163.com"}';

$username = 'test';

$password = '123456';

$lg = new Login;

$actual = $lg->login($username, $password);

$this->assertEquals($expected, $actual);

}

function testLoginFail() {

$expected = 'false';

$username = '11111';

$password = '11111';

$lg = new Login;

$actual = $lg->login($username, $password);

$this->assertEquals($expected, $actual);

}

}

?>


4、执行phpunit单元测试
正常测试:
将用户test的密码故意修改错再测试:
———————
来源:CSDN
原文:https://blog.csdn.net/nuli888/article/details/51864604