mysqli_real_connect(): (HY000/2002): No such file or directory

2017年4月19日 由 Amon 没有评论 »

刚才升级了LAMP,发现不能通过phpmyadmin访问mysql。

报错:

 #2002 - No such file or directory — 服务器没有响应(或本地服务器的套接字没有正确设置)。
mysqli_real_connect(): (HY000/2002): No such file or directory

参考:http://www.codes51.com/article/detail_1996783.html

这个错误是由于无法找到 mysql.sock 文件

启动mysql服务并查看mysql的socket路径,可以通过mysql命令行 STATUS;

 mysql -v -p
Enter password:
...
mysql> STATUS;

输出:

...
UNIX socket:            /tmp/mysql.sock
...

打开php.ini文件中,找到负责数据库连接三种类型的参数:

pdo_mysql.default_socket=
mysqli.default_socket =
mysql.default_socket=

设置三个参数的值是否和mysql的socket值一致。

然后重启httpd,打开phpmyadmin访问mysql正常。

怎样编译安装vsftp

2017年4月19日 由 Amon 没有评论 »

Vsftp(Very Secure FTP)是一种在Unix/Linux中非常安全且快速稳定的FTP服务器。

【端口】

20 ftp-data File Transfer [Default Data] 文件传输协议(默认数据口) ,用来在链接建立后,传输数据用。
21 ftp File Transfer [Control] 文件传输协议(控制) ,用来传输控制信息

【安装vsftp】

官网:https://security.appspot.com/vsftpd.html
文档:https://security.appspot.com/vsftpd/vsftpd_conf.html

查看是否已经安装vsftpd:

rpm -qa | grep vsftpd

yum安装3.0.2:

yum install vsftpd

设置开机启动:

chkconfig vsftpd on

输出:

Note: Forwarding request to 'systemctl enable vsftpd.service'.
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.

卸载:

yum remove vsftpd

【配置】

参考:http://www.ilanni.com/?p=5341
参考:http://www.cnblogs.com/JemBai/archive/2009/02/05/1384413.html
参考:http://www.linuxidc.com/Linux/2014-11/109233.htm
参考:http://webjx.com/server/linux-32984.html
参考:http://www.cnblogs.com/yjken/p/3917937.html

vsftpd.conf 是vsftpd的配置文件,用来控制vsftpd的各项功能。默认位置是 /etc/vsftpd/vsftpd.conf 。

Vsftpd的实现有三种方式:
1. 匿名用户形式:在默认安装的情况下,系统只提供匿名用户访问
2. 本地用户形式:以/etc/passwd中的用户名为认证方式
3. 虚拟用户形式:支持将用户名和口令保存在数据库文件或数据库服务器中。

相对于FTP的本地用户形式来说,虚拟用户只是FTP服务器的专有用户,虚拟用户只能访问FTP服务器所提供的资源,需要用户名和密码才能获取FTP服务器中的文件。

最高权限的系统用户不能用root为用户名,因为vsftpd从安全角度考虑,拒绝root。

基于虚拟用户的配置:所谓虚拟用户就是没有使用真实的帐户,只是通过映射到真实帐户和设置权限的目的。虚拟用户不能登录CentOS系统。

Vsftp虚拟用户的原理是:把虚拟用户的权限映射到系统用户上。而虚拟用户的权限是有系统用户对目录的控制达到的。

如果安装上述要求的话,我们的思路是这样的:在系统中新建用户ailanni,使其对/www目录具有所有权。而修改其用户组,使其用户组对/www目录只具有查看、浏览权限。即可。

【方案1】

创建用户/用户组:

建立所需要的用户(注意该系统用户一定要建立家目录,否则在后边无法登陆FTP服务器。):

useradd ftpuser1
useradd ftpuser2

查看用户所属的用户组:

id ftpuser1
id ftpuser2

输出:

uid=1003(ftpuser1) gid=1003(ftpuser1) groups=1003(ftpuser1)
uid=1004(ftpuser2) gid=1004(ftpuser2) groups=1004(ftpuser2)

可以看到目前ftpuser1用户属于ftpuser1用户组,ftpuser2用户属于ftpuser2用户组。要达到ftpuser2对www目录具有浏览、上传权限。我们需要把该用户加入到ftpuser1用户组,通过这样控制相关权限:

usermod -G ftpuser1 ftpuser2

用户建立完毕,我们现在来创建/www目录,并修改其相关的属性。

实际FTP目录形如:/usr/local/apache2/htdocs/goldgeese.com/zzba.com/uploads

mkdir /www

查看目录权限:

ls -la /www/

输出:

total 8
drwxr-xr-x  2 root root 4096 May 11 01:07 .
dr-xr-xr-x 20 root root 4096 May 11 01:07 ..

查看目录权限:

cd .. && ll

输出:

total 2097448
...
drwxr-xr-x  2 root root       4096 May 11 01:07 www

目前www目录,所属的用户及用户组为root。现在来进行修改,修改ftpuser1用户具有所有权限,ftpuser1用户组具有浏览、权限,其他用户组没有任何权限。把www目录的权限修改为750如下图:

chown -R ftpuser1:ftpuser1 /www
chmod -R 750 /www

相关系统用户及其相关权限设置完毕。

配置vsftpd

切换到vsftpd的安装目录,编辑配置文件 /etc/vsftpd/vsftpd.conf :

pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
chroot_local_user=YES
chroot_list_enable=NO
guest_enable=YES
user_config_dir=/etc/vsftpd/vu
pam_service_name=vsftpd.virtual

创建vsftpd虚拟用户账号的配置目录:

mkdir /etc/vsftpd/vu

创建Vsftpd的虚拟用户,把这些用户名和密码存放在一个文件 /etc/vsftpd/login.txt 。该文件内容格式是:奇行是用户名,偶行是密码,末尾空一行:

vuser1
123456
vuser2
123456

安装Berkeley DB工具,找不到db_load的问题就是没有安装这个包:

yum install db4 db4-utils

生成虚拟用户认证的db文件:

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

如果报错:

db_load: BDB5090 unexpected end of input data or key/data pair
db_load: BDB5079 odd number of key/data pairs

请在login.txt 最后一行添加空行,即回车一下。重新执行命令即正常。

为了使服务器能够使用上述生成的数据库文件,对客户端进行身份验证,需要调用系统的PAM模块。PAM(Plugable Authentication Module)为可插拔认证模块,不必重新安装应用系统,通过修改指定的配置文件,调整对该程序的认证方式。PAM模块配置文件路径为/etc/pam.d/目录,此目录下保存着大量与认证有关的配置文件,并以服务名称命名。

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

auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/login

db=/etc/vsftpd/login 指定了验证库函数将到这个指定的数据库中调用数据进行验证。其实该文件指的是 /etc/vsftpd/login.db 文件,需要去掉.db后缀。

PAM配置完毕后,创建虚拟用户与系统用户对应的文件。切换到 /etc/vsftpd/vu 目录下,并创建 vuser1 文件。注意该文件名称一定要与 login.txt 中的虚拟用户要对应。

guest_username=vuser1
local_root=/www/
virtual_use_local_privs=YES
anon_umask=133

anon_umask表示文件上传的默认掩码。计算方式是777减去anon_umask就是上传文件的权限。在此我们设置的是133,也就是说上传后文件的权限是644。即上传的文件对所属用户来说只有读写权限,没有执行权限。

启动vsftpd服务:

service vsftpd start

问题来了:

ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 3.0.2)
Name (127.0.0.1:root): uploader
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
ftp>

尝试配置多次,依然是“530 Login incorrect.”。怎解?

【方案2】

做如下配置:

anonymous_enable=NO //设定不允许匿名访问
local_enable=YES //设定本地用户可以访问。注:如使用虚拟宿主用户,在该项目设定为NO的情况下所有虚拟用户将无法访问
chroot_list_enable=YES //使用户不能离开主目录
ascii_upload_enable=YES
ascii_download_enable=YES //设定支持ASCII模式的上传和下载功能
pam_service_name=vsftpd //PAM认证文件名。PAM将根据/etc/pam.d/vsftpd进行认证

以下这些是关于vsftpd虚拟用户支持的重要配置项,默认vsftpd.conf中不包含这些设定项目,需要自己手动添加

guest_enable=YES //设定启用虚拟用户功能
guest_username=ftp //指定虚拟用户的宿主用户,CentOS中已经有内置的ftp用户了
user_config_dir=/etc/vsftpd/vuser_conf //设定虚拟用户个人vsftp的CentOS FTP服务文件存放路径。存放虚拟用户个性的CentOS FTP服务文件(配置文件名=虚拟用户名

进行认证:

安装Berkeley DB工具,很多人找不到db_load的问题就是没有安装这个包:

yum install db4 db4-utils

创建用户密码文本 /etc/vsftpd/vuser_passwd.txt ,注意奇行是用户名,偶行是密码:

uploader
123456

生成虚拟用户认证的db文件:

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

如果报错:

db_load: BDB5090 unexpected end of input data or key/data pair
db_load: BDB5079 odd number of key/data pairs

请在 vuser_passwd.txt 最后一行添加空行,即回车一下。重新执行命令即正常。

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

全部注释掉原来语句,再增加以下两句:

auth required /usr/lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required /usr/lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd

参考:http://blog.itpub.net/751371/viewspace-1079151/
参考:https://linux.die.net/man/8/pam_userdb

创建虚拟用户配置文件:

mkdir /etc/vsftpd/vuser_conf/
vi /etc/vsftpd/vuser_conf/uploader  //文件名等于vuser_passwd.txt里面的账户名,否则下面设置无效

内容如下:

local_root=/ftp/www  //虚拟用户根目录,根据实际情况修改
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

设置Selinux:

setsebool -P ftp_home_dir=1   //设置ftp可以使用home目录
sersebool -P allow_ftpd_full_access=1   //设置ftp用户可以有所有权限

设置FTP根目录权限

mkdir /ftp && mkdir /ftp/www && chmod -R 755 /ftp && chmod -R 777 /ftp/www

最新的vsftpd要求对主目录不能有写的权限所以ftp为755,主目录下面的子目录再设置777权限。

配置PASV模式:

vsftpd默认没有开启PASV模式,现在FTP只能通过PORT模式连接,要开启PASV默认需要通过下面的配置

打开/etc/vsftpd/vsftpd.conf,在末尾添加

pasv_enable=YES //开启PASV模式
pasv_min_port=40000 //最小端口号
pasv_max_port=40080 //最大端口号
pasv_promiscuous=YES

在防火墙配置内开启40000到40080端口

设置防火墙:

CentOS 7中默认使用Firewalld做防火墙。

参考:http://jingyan.baidu.com/article/5552ef47f509bd518ffbc933.html
参考:https://segmentfault.com/a/1190000003931716

Firewalld中添加端口方法如下:

firewall-cmd --zone=public --add-port=21/tcp --permanent
firewall-cmd --reload

启动FTP服务器:

service vsftpd start

就可以访问你的FTP服务器了。

【为FTP绑定域名】

1. DNS设置

参考:https://superuser.com/questions/566934/add-ftp-server-to-a-subdomain

例如:ftp://192.168.10.10,想要换成域名 ftp://ftp.abc.com访问

把对应的地址 ftp.abc.com 设置A记录解析到 192.168.10.10 即可。

Create a Host A record in DNS manager with name ftp to your IP of FTP server. OR

Assign a CNAME to www.domain.com with name ftp

2. 服务器端设置

应该在vsftp的配置文件 vsftpd.conf 中指定?还是不需要设置?

【为FTP绑定证书】

参考:https://www.digitalocean.com/community/tutorials/how-to-configure-vsftpd-to-use-ssl-tls-on-a-centos-vps
参考:https://wordpress.youran.me/%e9%85%8d%e7%bd%aevsftpd%e4%bd%bf%e7%94%a8ssl%e5%8a%a0%e5%af%86/
参考:https://bbs.aliyun.com/read/261025.html

1. 生成密钥和证书

参考:https://amon.org/letsencrypt

生成 server.key 密钥和 server.crt 证书。

2. 将密钥和证书加在一起生成vsftpd需要的pem文件

cat server.key > /etc/vsftpd/server.pem
cat server.crt >> /etc/vsftpd/server.pem

3. 配置SSL

ssl_enable=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=YES
rsa_cert_file=/etc/vsftpd/server.pem

这里只强制本地用户使用SSL登录,没有强制匿名用户使用SSL登录。

4. 重启vsftpd,如果没有出错的话,那么就可以测试用户SSL连接了。

通过源码编译安装3.0.3:

参考:http://blog.csdn.net/webdesman/article/details/1913496

没有configure这个东西,貌似不能指定安装路径。

wget https://security.appspot.com/downloads/vsftpd-3.0.3.tar.gz  && tar -xzvf vsftpd-3.0.3.tar.gz && cd vsftpd-3.0.3
make
make install
cp vsftpd.conf /etc/
cp RedHat/vsftpd.pam /etc/pam.d/ftp

在 make 时 报错:

/usr/bin/ld: cannot find -lcap

然而系统中已经安装有libcap:

Package libcap-2.22-8.el7.x86_64 already installed and latest version

再想想。

【参考资料】

参考:http://www.sudu.cn/info/html/edu/network/20070101/296435.html
参考:http://www.sudu.cn/service/detail.php?id=11656
参考:http://www.cnblogs.com/hhuai/archive/2011/02/12/1952647.html
参考:http://www.cnblogs.com/itech/archive/2012/09/16/2687378.html
参考:http://fantasy0707.iteye.com/blog/865228
参考:http://www.linuxidc.com/Linux/2014-11/109233.htm

参考:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/3/html/Reference_Guide/s1-ftp-vsftpd-conf.html
参考:https://www.digitalocean.com/community/tutorials/how-to-set-up-vsftpd-on-ubuntu-12-04

怎样为Dedecms配置memcache

2017年4月19日 由 Amon 没有评论 »

参考:https://amon.org/memcached

参考:http://jingyan.baidu.com/article/a681b0dec5cf793b19434673.html
参考:http://www.moke8.com/article-1039-1.html
参考:http://blog.csdn.net/aa705123123/article/details/6309878

一,织梦后台后台设置

进入系统后台,在[系统基本参数]下面的”性能选项”卡当中,关于memcache进行如下配置:

cfg_memcache_enable : 是否启用memcache缓存,如果为否(N),默认使用文件缓存;
这个选项设置为开启:Y

cfg_memcache_mc_defa : 默认memcache缓存服务器地址;
这个选项中填入服务器地址:memcache://127.0.0.1:11211/default127

cfg_memcache_mc_oth : 附加memcache缓存服务器地址;
这个如果没有可以为空.

三、设定缓存时间
cfg_puccache_time : 需缓存内容全局缓存时间(秒),这个里面需要设定缓存周期,默认为36000秒

四、Memcache的分布式应用
* memcache适合与web server安装在同一server上
* memcache可以在n个端口开n个进程,如果和web server在同一机器的话,还能减少网络开销.
* 配置简单,启动一个进程就行了,免去了配置文件

五、DedeCMS缓存函数开发说明
由于封装成小助手的形式,所以在使用的时候先初始化:
helper(‘cache’);
几个简单的方法:
SetCache() 设定缓存信息
GetCache() 获取缓存内容
DelCache() 删除缓存内容,简单的使用例子如:

$rs = GetCache(‘memberlogin’, $mid);
if( empty($rs) )
{
$rs = $dsql->GetOne(“SELECT * FROM `dede_member` WHERE mid='{$mid}’ “);
SetCache(‘memberlogin’, $mid, $rs, 1800);
}

六,Windows下的Memcache安装:
—————————-
1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:/memcached
2. 在终端(也即cmd命令界面)下输入 ‘c:/memcached/memcached.exe -d install’ 安装
3. 再输入: ‘c:/memcached/memcached.exe -d start’ 启动。NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。
4.下载php_memcache.dll,请自己查找对应的PHP版本的文件
5. 在C:/winnt/php.ini 加入一行 ‘extension=php_memcache.dll’
6.重新启动Apache,然后查看一下phpinfo,如果有memcache,那么就说明安装成功!

memcached的基本设置:

-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以管理员的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25-n 最小分配空间,key+value+flags默认是48
-h 显示帮助

七,php.ini中的配置:
——————–
[Memcache]

; 一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,
; 它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。

; 是否在遇到错误时透明地向其他服务器进行故障转移。
memcache.allow_failover = On

; 接受和发送数据时最多尝试多少个服务器,只在打开memcache.allow_failover时有效。memcache.max_failover_attempts = 20

; 数据将按照此值设定的块大小进行转移。此值越小所需的额外网络传输越多。
; 如果发现无法解释的速度降低,可以尝试将此值增加到32768。
memcache.chunk_size = 8192

; 连接到memcached服务器时使用的默认TCP端口。
memcache.default_port = 11211

; 控制将key映射到server的策略。默认值”standard”表示使用先前版本的老hash策略。
; 设为”consistent”可以允许在连接池中添加/删除服务器时不必重新计算key与server之间的映射关系。
;memcache.hash_strategy = “standard”; 控制将key映射到server的散列函数。默认值”crc32″使用CRC32算法,而”fnv”则表示使用FNV-1a算法。
; FNV-1a比CRC32速度稍低,但是散列效果更好。
;memcache.hash_function = “crc32”

;memcache也可以作为session的存储模块,具体参看:memcache PHP 的 session.save_handler.

怎样为DeDeCMS配置FTP服务器

2017年4月19日 由 Amon 没有评论 »

参考:http://www.cnblogs.com/xiongpq/p/3384759.html

部署memcached:

参考:https://amon.org/vsftp

network error: connection reset by peer

2017年4月19日 由 Amon 没有评论 »

刚才新建了一个VPS,ping正常。

但使用Putty链接时,报错:

network error: connection reset by peer

但使用WinSCP链接时,报错:

网络错误:软件造成的软件中止

记得从前看过一篇文章提到是因为这个VPS是从镜像创建而导致的,需要在控制面板中进行设置来解决问题。Well,从前做过总结:

参考:https://amon.org/vultr-snapshots

然而点击View Console控制台按钮后报错:

Server disconnected (code: 1006)

OK,于是搜索到不少资料。

Wifi的问题?在公司可以访问,在家也可以访问其他几个IP?难道歧视新IP?

I have the same issue while on holiday, the problem is the wifi here has blocked every port except for port 80 (for web browsing) so I can’t acces my machine from here :(, I’m guessing your problem is the same.

参考:https://www.digitalocean.com/community/questions/when-using-access-console-the-error-server-disconnected-code-1006-is-returned

果然,通过代理访问View Console控制台,成功进入。

参考:http://www.aboutyun.com/thread-17330-1-1.html
参考:http://stackoverflow.com/questions/18022025
参考:http://blog.csdn.net/DiegoTJ/article/details/5541791
参考:http://blog.csdn.net/zangpuu/article/details/6618927
参考:http://bbs.chinaunix.net/thread-2003343-1-1.html

然而问题怎么彻底解决呢?

请往:https://amon.org/vultr-snapshots