VSFTP实现多用户访问,基于虚拟用户架设VSFTP

一、配置环境:

centos6.8×86+vsftp2.2.2

vsftp的安装过程可以参考“(腾讯云)centos下配置安装nginx+php+ftp+mysql”第六步:

关闭vsftp:

1
service vsftpd stop

二、架设基于虚拟用户的vsftp:

ftp中的虚拟用户不是真实的linux用户,而是映射帐户来达到设置权限的目的,一些集成工具就会使用这种功能。

修改/etc/vsftpd/vsftpd.conf:

1
vi /etc/vsftpd/vsftpd.conf

更改以下行内容:

1
2
3
4
5
6
7
8
9
10
11
anonymous_enable=NO #不允许匿名访问
local_enable=YES #设定本地用户可以访问,如果使用虚拟用户选择NO以后,所有虚拟用户无法访问
chroot_list_enable=YES #用户不能离开主目录
xferlog_file=/var/log/xferlog #设定vsftpd的服务日志保存路径。
ascii_upload_enable=YES
ascii_download_enable=YES
pam_service_name=vsftpd #PAM文件认证名
guest_enable=YES
guest_username=ftp #使用centos内置的账户ftp
user_config_dir=/var/ftp/user_conf
#设定虚拟用户的FTP文件存放路径,文件名和用户名一致

二、创建相关文件:

1.创建chroot list,添加用户ftp

1
2
touch /etc/vsftpd/chroot_list
echo ftp >> /etc/vsftpd/chroot_list

2.创建日志保存文件:

1
touch var/log/xferlog

3.创建用户密码文本/var/ftp/passwd.txt :

1
vi /var/ftp/passwd.txt

写入你要创建的用户名和密码,奇行是用户名,偶行是密码:

1
2
3
4
user1
12345678
user2
12345678

4.创建虚拟用户的FTP文件存放路径文件夹:

1
mkdir /var/ftp/user_conf

三、进行认证:

1.安装Berkeley DB工具:

1
yum install db4 db4-utils

链接密码文件:

1
db_load -T -t hash -f /var/ftp/passwd.txt /var/ftp/passwd.db

编辑认证文件/etc/pam.d/vsftpd:

1
vi /etc/pam.d/vsftpd

注释原来内容,并加上下面两行:

1
2
auth required pam_userdb.so db=/var/ftp/passwd
account required pam_userdb.so db=/var/ftp/passwd

2.创建虚拟用户FTP服务文件

1
vi /var/ftp/user_conf/user1
1
local_root=/opt/var/user1

#虚拟用户的根目录(根据实际修改)

write_enable=YES #可写

anon_umask=022 #掩码

anon_world_readable_only=NO

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

3.重启vsftp就可以使用了

1
service vsftpd restart

四、使用ftp工具链接ftp服务器:

如图所示,我们的链接已经成功了。

 

(腾讯云)centos下配置安装nginx+php+ftp+mysql

一、安装环境:

centos6.8×86(腾讯云主机)
工具secureCRT(或者putty)+Filezilla
(工具是在客户端使用的)

二、使用客户端链接远程服务器,这里使用的是SecureCRT

1.先建立一个session,地址是腾讯云的ip地址
账号和密码是你当初设的(注意要使用公网IP)

2.使用SSH客户端登陆成功:

三、现在开始安装nginx:

1.安装nginx:
添加centos资源库:
在ssh中输入:

1
vi /etc/yum.repos.d/nginx.repo

更改为以下内容:

1
2
3
4
5
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

使用yum 命令去安装 nginx

1
yum install nginx

测试nginx服务状态:

1
service nginx status

显示已停止
测试nginx配置文件:

1
nginx -t

显示OK则安装成功,稍后可以启动nginx服务

1
service nginx start

此时使用之前SSH的IP地址已经可以成功访问静态网页,但是为了让其支持动态,还需要进行下一步操作。
2.配置nginx:
将你的域名指向腾讯云主机,腾讯1元主机抢到 的话还送一张CN域名首年优惠券。然后编辑nginx的配置文件支持你的域名:

1
vi /etc/nginx/conf.d/default.conf

修改这两项server_name 是你的域名,location是站点根目录

1
2
3
4
5
6
7
8
9
server {
listen 80;
server_name youdomian.com;
#charset koi8-r;
#access_log /var/log/nginx/log/host.access.log main;
location / {
root /var/youdomian.com;
index index.html index.htm;
}

修改下面的项使其支持php

1
2
3
4
5
6
7
 location ~ \.php$ {
# root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}

详见:
default.conf
重新加载nginx使其生效

1
service nginx reload

四、安装php-fpm

1.为了 nginx 能够执行 php 文件,还需要安装php-fpm
直接使用yum源安装

1
yum install php-fpm

2.安装成功以后检查php-fpm运行状态,方法和nginx检查方法一致,这里不再赘述
重启nginx,使其支持php。

1
service nginx restart

3.现在可以在网站根目录下新建一个index.php进行测试

1
2
cd /var/youdomian.com
vi index.php

只需加上这样一句:

1
<!--?php phpinfo(); ?-->

可以得到如下结果,说明成功:

你的php版本可能和我的不同,但是建议升级到5.6,升级php可以看:

五、安装mysql

1.配置扩展,并令php-fpm支持:

1
2
yum install php-pecl-apc php-mysql php-gd php-mcrypt php-pear php-mbstring php-xmlrpc php-dom
service php-fpm restart

2.安装mysql

1
yum install mysql-server

3.启动mysql服务

1
service mysqld start

4.进行mysql安全设置,这里可以一路y下去:

1
mysql_secure_installation

这里可能还有一个问题,就是mysql不能正常链接,需要添加外网访问的支持。
使用phpmyadmin(可选)来管理mysql:

 

六、安装服务端FTP管理工具VSFTP

安装vsftp:

1
yum install vsftpd

启用vsftpd

1
service vsftpd restart

当然这样的话只能使用root用户登陆,是不安全的,为了更好保护数据,我们通常会建立相关的ftp虚拟账户,请看vsftp搭建多站点,这个过程通过虚拟账户来实现,能够更好的保护root。
VSFTP实现多用户:

VSFTP实现多用户访问,基于虚拟用户架设VSFTP

 

这样本篇文章就结束了,如果大家再安装过程中遇到什么问题,可以给我留言,看到以后会尽快回复大家的。

centos6安装phpmyadmin 管理mysql

一、安装环境:

centos6.8 32位腾讯云主机
php5.6+mysql5.5
(如果不升级可能会导致各种奇怪的错误)
但是基本上所有的主机刚开始都是过时版本,所以可能需要升级,安装升级方法参考:

二、开始安装:

1.首先去phpmyadmin官网查看最新包:

https://www.phpmyadmin.net/downloads/

可以看到最新版为4.66,可以用wget命令获取到linux或者使用ftp工具上传即可

1
 wget https://files.phpmyadmin.net/phpMyAdmin/4.6.6/phpMyAdmin-4.6.6-all-languages.tar.gz

2.解压:

1
tar -xvzf phpMyAdmin-4.6.6-all-languages.tar.gz

此处要和你下载的版本名一致。
解压以后,将其放在你网站的根目录,并修改文件夹名称如:

1
2
3
mv phpMyAdmin-4.6.6-all-languages /var/x.wolfmark.org/
cd /var/x.wolfmark.org
mv phpMyAdmin-4.6.6-all-languages phpmyadmin

3.最后修改一下config.sample.inc.php这个文件就可以使用了

1
2
cp config.sample.inc.php config.inc.php
vi config.inc.php

后面也可以参考官方文档:https://docs.phpmyadmin.net/zh_CN/latest/setup.html#manually-creating-the-file
为$cfg[‘blowfish_secret’]项加密

1
$cfg['blowfish_secret'] = '1{dd0`&lt;Q),5XP_:R9UK%%8"EEcyH#{o';

分号之间的内容随便填,越复杂越好
更改授权,允许ip段登陆:

1
$cfg['Servers'][$i]['host'] = '127.0.0.1';

127.0.0.1更改为你的ip地址
现在就可以访问你的phpmyadmin了
如:https://x.wolfmark.org/phpmyadmin

centos下升级mysql5.5+php5.6

现在windows中的软件随着需求量每时每刻都在更新,不更新再难满足用户需求。linux也是一样,落伍的软件版本已经不再试用,本篇文章主要针对linux环境下php和mysql的升级。

测试环境:

CENTOS6.8(腾讯云学生机) mysql 版本 5.1 php 版本5.3

一、更新php版本为5.6

1.查看并删除原有的php5.3(如果没有安装可以直接安装php5.6)

查看原本的php版本:

1
 php -V

查看已经安装的php的包:

1
 yum list installed | grep php

然后删除这些包:

1
yum remove ... ...

检查是否删除完毕:

1
yum list installed | grep php

结果为空则证明删除完毕
2.安装php5.6
添加源:

1
2
rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

使用yum list命令查看可安装的包:

1
yum list --enablerepo=remi --enablerepo=remi-php56 | grep php

安装php5.6

1
yum install ... ...

省略号为上面显示的和php5.6有关的内容
比如我这里是:

1
yum install php56w.i386 php56w-bcmath.i386 php56w-cli.i386 php56w-common.i386 php56w-dba.i386 php56w-devel.i386 php56w-embedded.i386 php56w-enchant.i386 php56w-fpm.i386 php56w-gd.i386 php56w-imap.i386 php56w-interbase.i386 php56w-intl.i386 php56w-ldap.i386 php56w-mbstring.i386 php56w-mcrypt.i386 php56w-mssql.i386 php56w-mysql.i386 hp56w-mysqlnd.i386 php56w-odbc.i386 php56w-opcache.i386 php56w-pdo.i386

一定要把目录中的所有项都安装,否则会出现未知错误,只能卸了重新安装。
成功以后,我们可以查看现在的php版本:

1
 php --version

重启php-fpm:

1
service php-fpm restart

二、升级mysql到5.5

1.卸载原来的mysql5.1
查看是否安装了mysql:

1
rpm -qa| grep mysql

卸载mysql5.1:

1
rpm -e mysql-libs --nodeps

2.安装mysql5.5
添加源

1
2
rpm -Uvh http://mirror.steadfast.net/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

查看是否增加成功:

1
yum --enablerepo=remi,remi-test list mysql mysql-server

得到如下结构:

1
2
3
4
5
6
7
8
Loading mirror speeds from cached hostfile
* remi: mirrors.tuna.tsinghua.edu.cn
* remi-safe: mirrors.tuna.tsinghua.edu.cn
* remi-test: mirrors.tuna.tsinghua.edu.cn
* webtatic: sp.repo.webtatic.com
Installed Packages
mysql.i686 5.5.54-1.el6.remi @remi
mysql-server.i686 5.5.54-1.el6.remi @remi

安装mysql5.5

1
yum --enablerepo=remi,remi-test install mysql mysql-server

到最后显示complete表示安装成功
启动mysql

1
/etc/init.d/mysqld start

支持mysql开机启动

1
chkconfig --levels 345 mysqld on

以后还可以安装phpmyadmin来管理mysql,详见:

笑盐生

笑盐生

——————脩于而公元二零一七年二月二十四日凌晨,夜不能昧

孤舟披蓑问苍穹,腾龙搅海枭愚鰕。

盐生万里富船去?乌云一号复空舣!

穿着蓑衣,脚踏孤舟,(如浩宇间的一颗孤星般)质问苍穹,高高在上的龙们吹一口气,就可以翻江倒海,高傲而冷漠它们从不知道那小小的鰕虎鱼。盐生想着这些都快忘记了自己远渡万里来到彼岸,就是这船上的东西,也许卖完一船的盐巴就可以得到他此生都难以想象的财富,他就是要用这些来为家中病倒的母亲凑足药费,也许还有剩下的……可以娶个勤劳善良的媳妇也说不定……乌云一下遮住了半边的苍天,盐生被怒号的狂风刮得东倒西歪,他拼命的朝前划着船,可是瘦弱的他在瓢泼大雨下不堪一击,可是他还是不停的将盐巴往船舱里靠紧一点。不知过了多久,船到了彼岸,又和他来这里前一样干干净净,什么都没有剩下。

兰山蓝

兰山蓝
牛大香
安宁深处有单家
肉蛋双飞吃不腻
小菜加上来解乏
凡年双归冬不寒
一栽难得一回聚

——————————————修于公元二零一七年一月三十日

梦虚旎天涯乐于春

水中望月月压湾,
镜中看花画弗圆?
愚拙蘧心伴汝玩,
春风得意知不远。

——————————————脩于公元二零一七年一月

(No title)

愿四域友乐享冬至

雨漱间尖山峦平,
旦改乡音亦难云。
行军侧卧百朝行,
鱼虾百万亿金轮。
至东多食饺,南地更团圆?

__________________________脩于二零一六年冬至日

关于stl标准库里的list的删除

使用C++ STL里的list 我刚开始用的是remove();
这个方法现在发现真的是捉襟见肘。
因为每次移除是按值匹配移除,
所以相同的值的所有元素都被移除:

例子,转置一个链表的一段值:

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
33
34
35
36
37
//程序详见:
template<class T>
void ReverseInPart( T & L ,int n )
{//实现功能的主要部分,反转f到t的f-t个元素
    cout << "Enter two number as changed form and to :" ;
    int f, t ;
    cin >> f >> t ;

    if(f >= t || t > n || f < 1)
    {
        cout  << "Do not need reverse!\n" ;
                return;
    }

    Literator lt= L.begin();
    int l = 1 ;
    while ( l < f)
    {
        lt++;
        l++ ;
    }
    Literator ch = lt ;//使用迭代器来完成
    ++ch;
    //迭代器始终指向一个元素的位置,所以lt迭代器每次都前移
    //而ch每次指向下一个元素,即第i+1个元素
    for(int i = f ; i < t ; ++i,--lt)
    {
        int x =  *ch ;

        ++ch;
        //由于remove会删除所有值为*ch 的元素,所以ch 应该先增加
        //使用erase更方便,详见gx/abort_stl_list
        L.remove(x);
        L.insert(lt,x);
    }
//remove void remove( const TYPE &val );删除所有值为val的元素
}

可以看出如果输入链表元素都是不同的值的话都无所谓
比如说 1→2→3→4→5,现在逆转2~5
得到:1→5→4→3→2
但是如果输入中有相同的数就会发生错误,
如原链表:1→2→2→1
(其实是个镜像链表,这个在《程序员面试算法》的第17题有体现)
逆转3~4后,L.remove(x);这里x值为1时,
将导致删除两个元素,最后得到的链表就变成了:
2→1→2
后面发现erase()这个方法,可以直接删除迭代器
指向的链表元素,这个方法是很方便的:

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
33
34
35
36
template<class T>
void ReverseInPart( T & L ,int n )
{//实现功能的主要部分,反转f到t的f-t个元素
    cout << "Enter two number as changed form and to :" ;
    int f, t ;
    cin >> f >> t ;

    if(f >= t || t > n || f < 1)
    {
        cout  << "Do not need reverse!\n" ;
                return;
    }

    Literator lt= L.begin();
    int l = 1 ;
    while ( l < f)
    {
        lt++;
        l++ ;
    }
    Literator ch = lt ;//使用迭代器来完成
    ++ch;
    //迭代器始终指向一个元素的位置,所以lt迭代器每次都前移
    //而ch每次指向下一个元素,即第i+1个元素
    for(int i = f ; i < t ; ++i,--lt)
    {
        int x =  *ch ;
                Literatir d_ch;
        ++ch;
        //由于remove会删除所有值为*ch 的元素,所以ch 应该先增加
        //使用erase更方便,详见gx/abort_stl_list
        L.erase(d_ch);
        L.insert(lt,x);
    }
//remove void remove( const TYPE &val );删除所有值为val的元素
}

初识C++引用&

在将左程云的《程序员面试代码指南》JAVA版转化为C++版中遇到的问题之一就是JAVA的一切皆引用:
C++引用:

1
void swap(int &a,int &b)

两种写法,比如用来交换数组a的i和j两个位置的值:
写法1:

1
2
3
4
5
6
7
8
9
10
11
//1:声明为指针型:
template<class T>
void Swap(T *a,T *b)
{
    T  tmp ;
    tmp = *a ;
    *a = *b;
    *b = tmp ;
}
//调用时:
Swap(&a[i],&a[j]);

写法2:

1
2
3
4
5
6
7
8
9
//2:声明为引用类型;
void Swap(T &a,T &b)
{
    T c = a;
    a = b ;
    b = c;
}
//调用时:
swap(list[i],list[k]);

未完待续!