记录生活点滴.

mysql 1064 USING BTREE问题

从服务器上通过mysqldump命令导出文件

在导入到另外的库时,提示:

返回:

ERROR 1064 (42000) at line 1972: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘) ENGINE=MyISAM DEFAULT CHARSET=utf8′ at line 13

经查找是mysql版本的问题,导入的库是 server version: 5.0.22,导出的库5.1.41.

打开导出的mysql文件,搜索“USING BTREE”
KEY `code` (`code`) USING BTREE,
修改成
KEY `code`USING BTREE(`code`)

重新导入,问题解决。

 

Popularity: 2%

apache 不修改程序重定向首页名称 rewriterule ^/$ RedirectMatch

最近有个项目需要对首页进行修改,程序是THINKPHP的,需求如下:

将/的内容转到 /more.html

比如:我打开 http://jerryji.cn/的时候跳转到 http://jerryji.cn/more.html

在apache的文档里找到解决方法如下:

RedirectMatch ^/$ /more.html

Popularity: 2%

2011-08-24Linux

没有评论
254 views

Linux 删除 – 开头的文件

之前在Linux上遇到了 以 – 开头的的文件名。

使用

–abc

rm “–abc”

rm “\-\-abc”

都无法删除,问题不在shell传值,是rm 将 –abc 理解成参数了。

既然问题是这样,那么正好可以使用./ 这个路径前缀变通解决这个问题。

rm -rf ./–abc

这样就OK了。

Popularity: 2%

2011-08-01Linux

没有评论
237 views

CentOS 5.5 yum安装Nginx

使用centos的yum安装软件非常的简单方便,但也有一个缺点,就是从yum安装的软件不能保证是最新版的。如果你需要安装最新版的nginx,就需要从官网下载源代码自己手动编译安装了。这篇文章主要介绍如何使用yum安装nginx。
安装EPEL软件包

rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm

安装nginx
在安装之前,你可以使用yum info nginx查看nginx的版本。

install

nginx.conf的位置在/etc/nginx/
nginx 位置在/usr/sbin/
停止nginx:service nginx stop
启动nginx:service nginx start
重启nginx:service nginx restart

Popularity: 3%

2011-08-01Linux

没有评论
270 views

定制 apache 索引(目录浏览)样式

ubuntu(LAMP)默认的配置文件目录在

/etc/2/sites-enabled/000-default

说明: /etc/apache2/ 目录的 httpd.conf 和 apache2.conf 也都是配置文件。一个是全局,一个是用户定义。sites-enabled 可以放多个配置文件。可能是为了便于管理吧。

找到打开了 indexes(目录浏览的部分)

 

#表示开启了索引模式(也就是目录浏览)

Options Indexes

indexOptions FancyIndexing ScanHTMLTitles NameWidth=128 DescriptionWidth=256 HTMLTable VersionSort FoldersFirst

红色部分为可用参数,含义如下:

#ScanHTMLTitles:搜索HTML标题

#NameWidth:文件命显示字节数

#DescriptionWidth:描述显示字节数

#HTMLTable:允许HTML格式

#FoldersFirst:目录优先

#索引排除语法

IndexIgnore header.html footer.html

header.html footer.html 这两个文件不会在索引(目录浏览)中出现。

#索引头部嵌入文件

HeaderName /data/index/header.html

#索引底部嵌入文件

ReadmeName /data/index/footer.html

#默认索引排序方式

IndexOrderDefault Ascending Date

#关闭服务器标志

ServerSignature Off

apache 官方参考文档 mod_autoindex

Popularity: 3%

2011-08-01Linux

没有评论
335 views

如何踢出Linux下其他登陆用户

今天服务器又被攻击了,机房又给我换了一个ip,需要给他们root权限。修改好以后,但是那个root死活不下线。

于是我用下面的办法把他踢下去,然后改密码。

>>who -w
berg – tty1 2009-05-24 18:51
berg + pts/0 2009-05-24 19:02 (123.120.13.***)

berg@sharej.com /home/berg
>>ps aux | grep tty1
root 3221 0.0 0.0 2628 1204 tty1 Ss 18:50 0:00 /bin/login –
berg 5046 0.0 0.0 3116 732 pts/0 R+ 19:20 0:00 grep –color=auto tty1

berg@sharej.com /home/berg
>>sudo kill -9 3221

很简单,很暴力。

Popularity: 3%

保证Linux Apache Web服务器安全的10个建议

如果你是一个系统管理员,你应该按照以下的10点建议来保证Apache web服务器的安全。

1、禁用不必要的模块

如果你打算源码编译安装apache,你应该禁用以下的模块。如果你运行./configure -help,你将会看到所有可用的你可以禁用/开启的模块。

userdir –用户特定用户的请求映射。例如:带用户名的URL会转化成服务器的一个目录。

autoindex – 当没有默认首页(如index.html)时显示目录列表。

status –显示服务器统计

env – 清除或修改环境变量

setenvif –根据客户端请求头字段设置环境变量

cgi –CGI脚本

actions – 根据特定的媒体类型或请求方法,激活特定的CGI脚本

negotiation –提供内容协商支持

alias – 提供从文件系统的不同部分到文档树的映射和URL重定向

include –实现服务端包含文档(SSI)处理

filter –根据上下文实际情况对输出过滤器进行动态配置

version –提供基于版本的配置段支持

asis – 发送自己包含HTTP头内容的文件

当你执行./configure按照下面禁用以上的所有模块。

./configure \

–enable-ssl \

–enable-so \

–disable-userdir \

–disable-autoindex \

–disable-status \

–disable-env \

–disable-setenvif \

–disable-cgi \

–disable-actions \

–disable-negotiation \

–disable-alias \

–disable-include \

–disable-filter \

–disable-version \

–disable-asis

如果激活ssl且禁用mod_setenv,你将会得到以下错误。

错误: Syntax error on line 223 of /usr/local/2/conf/extra/httpd-ssl.conf: Invalid command ‘BrowserMatch’, perhaps misspelled or defined by a module not included in the server configuration

解决方案:如果你使用ssl,不要禁用setenvif模块。或者你禁用setenvif模块,可以在httpd-ssl.conf注释BrowserMatch。

安装完成全,执行httpd -l,会列出所有已安装的模块。

# /usr/local/apache2/bin/httpd -l

Compiled in modules:

core.c

mod_authn_file.c

mod_authn_default.c

mod_authz_host.c

mod_authz_groupfile.c

mod_authz_user.c

mod_authz_default.c

mod_auth_basic.c

mod_log_config.c

mod_ssl.c

prefork.c

http_core.c

mod_mime.c

mod_dir.c

mod_so.c

在这个例子里,我们安装了如下apache模块:

core.c –Apache核心模块

mod_auth* –各种身份验证模块

mod_log_config.c –允许记录日志和定制日志文件格式

mod_ssl.c – SSL

prefork.c – 一个非线程型的、预派生的MPM

httpd_core.c – Apache核心模块

mod_mime.c – 根据文件扩展名决定应答的行为(处理器/过滤器)和内容(MIME类型/语言/字符集/编码)

mod_dir.c – 指定目录索引文件以及为目录提供”尾斜杠”重定向

mod_so.c – 允许运行时加载DSO模块

2、以单独的用户和用户组运行Apache

Apache可能默认地以nobody或daemon运行。让Apache运行在自己没有特权的帐户比较好。例如:用户apache。

创建apache用户组和用户。

groupadd apache

useradd -d /usr/local/apache2/htdocs -g apache -s /bin/false apache

更改httpd.conf,正确地设置User和Group。

# vi httpd.conf

User apache

Group apache

之后重启apache,执行ps -ef命令你会看到apache以“apache”用户运行(除了第一个都是以root运行之外)。

# ps -ef | grep -i http | awk ‘{print $1}’

root

apache

apache

apache

apache

apache

3、限制访问根目录(使用Allow和Deny)

在httpd.conf文件按如下设置来增强根目录的安全。

 

Options None

Order deny,allow

Deny from all

 

在上面的:

Options None –设置这个为None,是指不激活其它可有可无的功能。

Order deny,allow – 这个是指定处理Deny和Allow的顺序。

Deny from all –阻止所有请求。Deny的后面没有Allow指令,所以没人能允许访问。

4、为conf和bin目录设置适当的权限

bin和conf目录应该只允许授权用户查看。创建一个组和把所有允许查看/修改apache配置文件的用户增加到这个组是一个不错的授权方法。

下面我们设置这个组为:apacheadmin

创建组:

groupadd apacheadmin

允许这个组访问bin目录。

chown -R root:apacheadmin /usr/local/apache2/bin

chmod -R 770 /usr/local/apache2/bin

允许这个组访问conf目录。

chown -R root:apacheadmin /usr/local/apache2/conf

chmod -R 770 /usr/local/apache2/conf

增加合适的用户到这个组。

# vi /etc/group

apacheadmin:x:1121:user1,user2

5、禁止目录浏览

如果你不关闭目录浏览,用户就能看到你的根目录(或任何子目录)所有的文件(目录)。

比如,当他们浏览http://{your-ip}/images/而images下没有默认首页,那么他们就会在浏览器中看到所有的images文件(就像ls -l输出)。从这里他们通过点击就能看到私人的图片文件,或点点击子目录看到里面的内容。

为了禁止目录浏览,你可以设置Opitons指令为“None“或者是“-Indexes”。在选项名前加“-”会强制性地在该目录删除这个特性。

Indexes选项会在浏览器显示可用文件的列表和子目录(当没有默认首页在这个目录)。所以Indexes应该禁用。

 

Options None

Order allow,deny

Allow from all

(or)

Options -Indexes

Order allow,deny

Allow from all

 

6、禁用.htaccess

在htdocs目录下的特定子目录下使用.htaccess文件,用户能覆盖默认apache指令。在一些情况下,这样不好,应该禁用这个功能。

我们可以在配置文件中按如下设置禁用.htaccess文件来不允许覆盖apache默认配置。

 

Options None

AllowOverride None

Order allow,deny

Allow from all

7、禁用其它选项

下面是一些Options指令的可用值。

Options All –所有的选项被激活(除了MultiViews)。如果你不指定Options指令,这个是默认值。

Options ExecCGI –执行CGI脚本(使用mod_cgi)。

Options FollowSymLinks –如果在当前目录有符号链接,它将会被跟随。

Options Includes –允许服务器端包含文件(使用mod_include)。

Options IncludesNOEXEC –允许服务器端包含文件但不执行命令或cgi。

Options Indexes –允许目录列表。

Options MultiViews -允许内容协商多重视图(使用mod_negotiation)

Options SymLinksIfOwnerMatch – 跟FollowSymLinks类似。但是要当符号连接和被连接的原始目录是同一所有者是才被允许。

绝不要指定“Options All”,通常指定上面的一个或多个的选项。你可以按下面代码把多个选项连接。

Options Includes FollowSymLinks

当你要嵌入多个Directory指令时,“+”和“-”是有用处的。也有可能会覆盖上面的Directory指令。

如下面,/site目录,允许Includes和Indexes。

 

Options Includes Indexes

AllowOverride None

Order allow,deny

Allow from all

 

对于/site/en目录,如果你需要继承/site目录的Indexes(不允许Includes),而且只在这个目录允许FollowSymLinks,如下:

 

Options -Includes +FollowSymLink

AllowOverride None

Order allow,deny

Allow from all

 

/site目录允许IncludesIndexes

/site/en目录允许Indexes和FollowSymLink

8、删除不需要的DSO模块

如果你加载了动态共享对象模块到apache,他们应该在httpd.conf文件在“LoadModule”指令下。

请注意静态编译的Apache模块是不在“LoadModule”指令里的。

在httpd.conf注释任何不需要的“LoadModules”指令。

grep LoadModule /usr/local/apache2/conf/httpd.conf

9、限制访问特定网络(或IP地址)

如果你需要只允许特定IP地址或网络访问你的网站,按如下操作:

只允许特定网络访问你的网站,在Allow指令下给出网络地址。

 

Options None

AllowOverride None

Order deny,allow

Deny from all

Allow from 10.10.0.0/24

 

只允许特定IP地址访问你的网站,在Allow指令下给出IP地址。

 

Options None

AllowOverride None

Order deny,allow

Deny from all

Allow from 10.10.1.21

 

10、禁止显示或发送Apache版本号(设置ServerTokens)

默认地,服务器HTTP响应头会包含apache和php版本号。像下面的,这是有危害的,因为这会让黑客通过知道详细的版本号而发起已知该版本的漏洞攻击。

Server:Apache/2.2.17 (Unix) /5.3.5

为了阻止这个,需要在httpd.conf设置ServerTokens为Prod,这会在响应头中显示“Server:Apache”而不包含任何的版本信息。

# vi httpd.conf

ServerTokens Prod

下面是ServerTokens的一些可能的赋值:

ServerTokens Prod 显示“Server:Apache”

ServerTokens Major 显示 “Server:Apache/2″

ServerTokens Minor 显示“Server:Apache/2.2″

ServerTokens Min d显示“Server:Apache/2.2.17″

ServerTokens OS 显示 “Server:Apache/2.2.17 (Unix)”

ServerTokens Full 显示 “Server:Apache/2.2.17 (Unix) PHP/5.3.5″ (如果你这指定任何的值,这个是默认的返回信息)

除了上面10个apache的安全建议,你还必要确保你的UNIX/Linux操作系统的安全。如果你的操作系统不安全,那么只是确保apache 的安全就没有任何意义了。通常的我们要保持apache版本的更新,最新的apahce版本会修复所有已知的安全问题。还有就是要确保时常查看 apache日志文件。

Popularity: 3%

Linux VPS下简单解决CC攻击

一,准备工作

1,登录进VPS控制面板,准备好随时重启VPS。

2,关闭Web Server先,过高的负载会导致后面的操作很难进行,甚至直接无法登录SSH。

3,以防万一,把设置的Web Server系统启动后自动运行去掉。

(如果已经无法登录进系统,并且重启后负载过高导致刚刚开机就已经无法登录,可联系管理员在母机上封掉VPS的IP或80端口,在母机上用虚拟控制台登录进系统,然后进行2&3的操作,之后解封)

二,找出攻击者IP

1,在网站根目录建立文件ip.,写入下面的内容。

 

<?php 

$real_ip = getenv(‘HTTP_X_FORWARDED_FOR’);

if(isset($real_ip)){

shell_exec(“echo $real_ip > real_ip.txt”);

shell_exec(“echo $_SERVER['REMOTE_ADDR']> proxy.txt”);

}else{

shell_exec(“echo $_SERVER['REMOTE_ADDR'] > ips.txt”)”

}

echo’服务器受到攻击,正在收集攻击源,请在5分钟后访问本站,5分钟内多次访问本站有可能会被当作攻击源封掉IP。谢谢合作!’;

?>

2,设置伪静态,将网站下的所有访问都rewrite到ip.php。

 

Nginx规则: 

(.*) /ip.php;

Lighttpd规则:

url.rewrite = (

“^/(.+)/?$” => “/ip.php”

)

3,启动Web Server开始收集IP

进行完1和2的设置后,启动Web Server,开始记录IP信息。

收集时间建议为3到5分钟,然后再次关闭Web Server。

real_ip.txt,这个文件中保存的IP有80%以上都相同的,这个IP就是攻击者实施攻击的平台的IP。

proxy.txt,这个文件中保存的是攻击者调用的代理服务器的IP,需要封掉。

ips.txt,这里记录的是未表现出代理服务器特征的IP,根据访问次数判断是否为攻击源。

三,对上一段的补充

如果VPS上启用了WEB日志,可以查看日志文件的增长速度来判断是哪个站点被攻击。

如果没有启用日志,并且站点数量很少,临时启用日志也很方便 。

如果没有启用日志,并且站点数量过多,可以使用临时的Web Server配置文件,不绑定虚拟主机,设置一个默认的站点。然后在ip.php里加入下面一行

 

shell_exec(“echo $_SERVER['HTTP_HOST’]>> domain.txt”);

domain.txt里将保存被访问过的域名,被CC攻击的站点将在里面占绝大多数。

四,开始封堵IP

建立文件ban.php

 

<? 

$threshold = 10;

$ips = array_count_values(file(‘ips.txt’));

$ban_num = 0;

foreach($ips as $ip=>$num){

if($num > $threshold){

$ip = trim($ip);

$cmd = “iptables -I INPUT -p tcp –dport 80 -s $ip -j DROP”;

shell_exec($cmd);

echo “$ip baned! ”;

$ban_num ++;

}

}

$proxy_arr = array_unique(file(‘ips.txt’))’

foreach($proxy_arr as $proxy){

$proxy = trim($proxy);

$cmd = “iptables -I INPUT -p tcp –dport 80 -s $ip -j DROP”;

shell_exec($cmd);

echo “$ip baned! ”;

$ban_num ++;

}

echo “total: $ban_num ips ”;

?>

用下面的命令执行脚本(确保php命令在PATH中)

php ban.php

这个脚本依赖于第二段中ips.txt里保存的结果,当其中记录的IP访问次数超过10次,就被当作攻击源给屏蔽掉。如果是代理服务器,则不判断次数直接 封掉。

封完IP之后,把所有的网站设置恢复正常,站点可以继续正常运行了。

五,一些细节

为保持对操作过程的描述尽量简洁,没有在上面的内容中加入过多的解释,留在这段统一讲述。

1,关于“代理服务器”的一些本质

两个与TCP&HTTP协议相关的值,REMOTE_ADDR和HTTP_X_FORWARDED_FOR。

(1)REMOTE_ADDR总是取离Web服务器最接近的一台主机的IP,如果没有使用代理,这个值就是访问者本身的IP,如果使用了代理,这个值就是 代理服务器的IP,如果通过多个代理服务器进行的连接,这个值就是到达Web服务器前最后一台代理服务器的IP。

REMOTE_ADDR是由TCP/IP层决定的,不能修改不能伪造。

(2)HTTP_X_FORWARDED_FOR,因为这个值是属于HTTP部分,而不是TCP/IP,所以这个值不管是什么,都不影响数据的传 输。事实 上,一般情况下,如果是访问者直接访问Web服务器,这个值为空;通过透明代理的时候,这个值会被代理服务器设置为访问者的IP;通过匿名代理连接时,这 个值可能为代理服务器的IP也可能是空的也有可能是随机的。

HTTP_X_FORWARDED_FOR可以被任意修改。大多数代理服务器都是透明代理,也就是说,会把这个值设置为最原始访问者的IP。

2,关于解决CC攻击的层面问题

按处理效率从高到低排列。

(由于本文是针对VPS服务器所写,而VPS简单来说就是服务器的低端替代品,内存和CPU等资源普遍偏低,当然是处理效率越高越好。)

(1)网络传输层。也就是本文所用的iptables,这个工具本身是工作于系统内核,在建立网络连接时直接把攻击者的连接给否了。在这一层面上将攻击源处理掉后,消耗掉的资源几乎可以忽略不计。

(2)Web Server层,大多数Web Server都可以设置禁止访问的IP。在这一层上解决的意义和上面的差不多,但是效率要差些。

(3)脚本层,从脚本程序上制定适合于本身的策略过滤掉攻击源。网络上有很多流传的在这一层面的解决方案,但是不太适用于VPS,而且设置难度可能要增加几倍或者几十倍。

3,为什么不是从日志收集IP?

主要是考虑两点,一是大多数VPS使用者都因为硬盘空间过小,经常清除日志很麻烦,而直接禁止了日志。

二是如果从日志收集IP,脚本复杂程度要高很多,而且可能要根据情况做些调整,考虑到将要读到本文的人大多数都未必掌握更多的技术,本文的目的就是按部就班的依本文进行操作,即可解决问题。

Popularity: 3%

nginx thinkphp rewrite

thinkphp设置:

‘URL_MODEL’=>2,

.conf设置:

server
{
listen       80;
server_name jerryji.cn;
index index.html index.;
root  /data/htdocs/www/jerryji.cn;

location / {
index index.html index.php;
try_files $uri $uri/ /index.php?s=$uri&$args; #主要是这里
}

location ~ .*\.(php)?$
{
fastcgi_pass  unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fcgi.conf;
}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires      30d;
}

location ~ .*\.(js|css)?$
{
expires      12h;
}

access_log off;
}

Popularity: 4%

2011-07-20Linux

没有评论
462 views

linux/centos如何查看网卡是100M还是1000M?检查100兆还是千兆(1GBPS)带宽接入

如何不被忽悠?/centos如何查看网卡是100M还是1000M?检查100兆还是千兆(1GBPS)带宽接入,请看下面命令

 

[root@www.ctohome.com]# mii-tool -V
mii-tool.c 1.9 2000/04/28 00:56:08 (David Hinds)
SIOCGMIIREG on eth0 failed: Input/output error
eth0: negotiated 100baseTx-FD, link ok
[root@www.ctohome.com]# mii-tool -v
SIOCGMIIREG on eth0 failed: Input/output error
eth0: negotiated 100baseTx-FD, link ok
product info: vendor 00:aa:00, model 57 rev 0
basic mode:   autonegotiation enabled
basic status: autonegotiation complete, link ok
capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
advertising:  100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control
link partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
[root@www.ctohome.com]# ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes:   10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes:  10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: pumbag
Wake-on: g
Current message level: 0×00000001 (1)
Link detected: yes

 

要测试是否是1000M端口,最保险的说用wget测试一个对方的带宽足够大的下载地址:

http://cachefly.cachefly.net/100mb.test
–2011-03-14 22:19:12–  http://cachefly.cachefly.net/100mb.test
Resolving cachefly.cachefly.net… 205.234.175.175
Connecting to cachefly.cachefly.net|205.234.175.175|:80… connected.
HTTP request sent, awaiting response… 200 OK
Length: 104857600 (100M) [application/octet-stream]
Saving to: `100mb.test.2′

100%[===================================================================================================================>] 104,857,600 39.1M/s   in 2.6s

2011-03-14 22:19:14 (39.1 MB/s) – `100mb.test.2′ saved [104857600/104857600]

如果下载速度能超过15MB/s,那么不是100M端口了,通常就是1000M端口

如果是独立服务器,可以通过下面命令核查网卡端口:
[root@www.ctohome.com ]# ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes:   10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes:  10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: pumbag
Wake-on: g
Current message level: 0×00000001 (1)
Link detected: yes

Popularity: 4%

返回顶部