存档

‘safe’ 分类的存档

卸载赛门铁克SEP11后不能上网的解决方法

2011年9月15日 3 条评论

我刚才删除了我系统上的,版本11.0.780.1109. 是运行安装程序后。选择的删除。

删除后确实就不能联网了。

 

按照官方手动删除的方法。第一步,找到网卡属性,在TCP/IP协议那一堆里。卸载“Teefer2 Driver”

重启电脑后能联网了

 

分类: safe 标签: ,

查看你服务器的安全性

2011年4月4日 没有评论

链接:http://www.dbasky.net/archives/2011/01/post-12.html

大家是否想了解自己服务器是否被”黑客”给盯上了?是否想知道有多少人在”关注”的你服务器的密码呢?

我们完全可以查看服务器的安全日志:

[root@game-test extra]# less /var/log/secure | grep “Failed password”|wc -l
539

按ip的尝试次数来个排名不分先后

[root@game-test extra]# grep -o ‘[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}’ /var/log/secure | sort | uniq -c
1 0.0.0.0
1163 113.130.71.75
125 119.57.74.210
48 124.74.214.214
180 182.140.131.133
6 192.168.0.111
6 192.168.0.172
6 211.103.156.225
3 221.122.124.34
57 24.119.52.72
10 41.211.145.137
237 72.52.119.24

赶快试试看下自己的服务器!

分类: safe 标签: ,

linux入侵检测系统构建-chkrootkit

2011年3月25日 没有评论

chkrootkit安装

前言

  所谓 rootkit ,是一类入侵者经常使用的工具。这类工具通常非常的隐秘、令用户不易察觉,通过这类工具,入侵者建立了一条能够常时入侵系统,或者说对系统进行实时控制的途径。所以,我们用自由软件 chkrootkit 来建立入侵监测系统,来保证对系统是否被安装了 rootkit 进行监测。

  chkrootkit 在监测 rootkit 是否被安装的过程中,需要使用到一些操作系统本身的命令。但不排除一种情况,那就是入侵者有针对性的已经将 chkrootkit 使用的系统命令也做修改,使得 chkrootkit 无法监测 rootkit ,从而达到即使系统安装了 chkrootkit 也无法检测出 rootkit 的存在,从而依然对系统有着控制的途径,而达到入侵的目的。那样的话,用 chkrootkit 构建入侵监测系统将失去任何意义。对此,我 们在操作系统刚被安装之后,或者说服务器开放之前,让 chkrootkit 就开始工作。而且,在服务器开放之前,备份 chkrootkit 使用的系统命 令,在一些必要的时候(怀疑系统命令已被修改的情况等等),让 chkrootkit 使用初始备份的系统命令进行工作。

安装chkrootkit

  首先来下载和安装 chkrootkit 工具。

[root@sample ~]# wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz ← 下载chkrootkit

–03:05:31– ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
=> chkrootkit.tar.gz'
Resolving ftp.pangeia.com.br... 200.239.53.35
Connecting to ftp.pangeia.com.br|200.239.53.35|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD /pub/seg/pac ... done.
==> PASV ... done. ==> RETR chkrootkit.tar.gz ... done.
Length: 37,140 (36K) (unauthoritative)

100%[====================================>] 37,140 5.67K/s ETA 00:00

03:05:46 (5.30 KB/s) - chkrootkit.tar.gz’ saved [37140]

[root@sample ~]# tar zxvf chkrootkit.tar.gz  ← 展开被压缩的源代码

[root@sample ~]# cd chkrootkit*  ← 进入chkrootkit源代码的目录

[root@sample chkrootkit-0.46a]# make sense  ← 编译

[root@sample chkrootkit-0.46a]# cd ..  ← 返回上层目录

[root@sample ~]# cp -r chkrootkit-* /usr/local/chkrootkit  ← 复制编译后文件所在的目录到指定位置

[root@sample ~]# rm -rf chkrootkit*  ← 删除遗留的源代码目录及相关文件

 

测试chkrootkit

  然后测试 chkrootkit 是否能够正常运行。

[root@sample ~]# cd /usr/local/chkrootkit  ← 进入chkrootkit的目录

[root@sample chkrootkit]# ./chkrootkit | grep INFECTED  ← 测试运行chkrootkit
稍等片刻…如果没有显示“INFECTED”字样,而直接出现命令行提示符,说明一切OK!

[root@sample chkrootkit]# cd   ← 回到root用户目录

 

让 chkrootkit 的监测自动化

  用Shell Script编写一段脚本,通过这个脚本让chkrootkit的监测自动化。如有rootkit被发现的时候,发送邮件通知root用户,并且将运行结果保存在/var/log/messages文件中。

[root@sample ~]# vi chkrootkit  ← 建立chkrootkit自动运行脚本

#!/bin/bash

PATH=/usr/bin:/bin

TMPLOG=mktemp

# Run the chkrootkit
/usr/local/chkrootkit/chkrootkit > $TMPLOG

# Output the log
cat $TMPLOG | logger -t chkrootkit

# bindshe of SMTPSllHow to do some wrongs
if [ ! -z “$(grep 465 $TMPLOG)” ] && \
[ -z $(/usr/sbin/lsof -i:465|grep bindshell) ]; then
sed -i ‘/465/d’ $TMPLOG
fi

# If the rootkit have been found,mail root
[ ! -z “$(grep INFECTED $TMPLOG)” ] && \
grep INFECTED $TMPLOG | mail -s “chkrootkit report in hostname” root

rm -f $TMPLOG

[root@sample ~]# chmod 700 chkrootkit  ← 赋予脚本可被执行的权限

[root@sample ~]# mv chkrootkit /etc/cron.daily/  ← 将脚本移动到每天自动运行的目录中

 

 chkrootkit 相关的系统命令的备份

  如前言所述,当chkrootkit使用的系统命令被入侵者更改后,chkrootkit对 rootkit的监测将失效。所以,我们事前将chkrootkit使用的系统命令进行备份,在需要的时候使用备份的原始命令,让chkrootkit对 rootkit进行检测。

[root@sample ~]# mkdir /root/commands/  ← 建立暂时容纳命令备份的目录

[root@sample ~]# cp which --skip-alias awk cut echo egrep find head id ls netstat ps strings sed uname /root/commands/  ← (连续输入无换行)备份系统命令到建立好的目录

[root@sample ~]# /usr/local/chkrootkit/chkrootkit -p /root/commands|grep INFECTED  ← 用备份的命令运行chkrootkit

[root@sample ~]# tar cvf /root/commands.tar /root/commands/ ← 将命令打包

[root@sample ~]# gzip /root/commands.tar  ← 将打包的文件压缩
然后将压缩后的commands.tar.gz用SCP软件下载到安全的地方

[root@sample ~]# rm -rf commands*   ← 为安全起见,删除服务器端备份的系统命令及相关文件

  如果以后想通过备份的原始系统命令来运行chkrootkit的时候,只需用SCP软件将备份的命令打包压缩文件上传至服务器端已知位置并解压缩,然后运行在chkrootkit的时候指定相应的目录即可。例如,假设已经将备份上传至root用户目录的情况如下:

[root@sample ~]# tar zxvf /root/commands.tar.gz  ← 解开压缩的命令备份

[root@sample ~]# /usr/local/chkrootkit/chkrootkit -p /root/commands|grep INFECTED ← 用备份的命令运行chkrootkit

  然后在运行后删除相应遗留文件即可。

分类: safe 标签:

mysql安装-配置-优化-备份-主从

2011年3月25日 没有评论

mysql安装详解 

     

第1章       安装… 4

1.1.     LINUX安装… 4

1.2.     复制(Replication)设置… 4

第2章       维护管理… 7

2.1.     常用系统命令… 7

2.2.     常用MySQL命令… 7

2.3.     密码和权限… 8

2.4.     修改连接方式… 8

2.5.     连接管理… 9

2.6.     备份恢复… 9

2.7.     导入导出… 10

2.8.     日志… 11

2.9.     管理MyISAM数据表… 11

2.10.       管理InnoDB数据表… 12

2.11.       索引… 12

2.12.       存储过程… 12

2.13.       优化… 13

第3章       FAQ.. 14

3.1.     连接错误… 14

3.2.     读写优化… 14

 第1章     安装

1.1.   LINUX安装

       从http://dev.mysql.com/downloads/mysql/5.0.html 下载5.0.x最新版本,可以选择专用于RHEL AS 4的RPM包:

# rpm -ivh MySQL-server-community-5.0.51a-0.rhel4.i386.rpm  (自动设置自启动,service mysqld start)# rpm -ivh MySQL-client-community-5.0.51a-0.rhel4.i386.rpm# rpm -ivh MySQL-devel-community-5.0.51a-0.rhel4.i386.rpm (安装开发头文件等,第三方程序需要,比如要编译PHP支持MYSQL就需要)

# MySQL-shared-compat-5.0.51a-0.rhel4.i386.rpm (选择安装,不一定必须)

# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf    (拷贝配置文件样本)

 

       有时候安装时会遇到包依赖的问题,比如安装server可能会提示需要依赖perl-DBI-1.40-5.i386.rpm包,这时可以使用参数不理会依赖性:

# rpm -ivh –nodeps MySQL-server-community-5.0.51a-0.rhel4.i386.rpm

 

1.2.   复制(Replication)设置

Mysql的Replication复制有两个模式:主从(Master->Slave)和双机互相备份。

主从(Master->Slave)模式安装,SrvA为主SrvB为辅,两者MYSQL版本最好一致或者Slave版本比Master新:

SrvA MYSQL> create database shopdb;SrvA MYSQL> GRANT FILE ON *.* TO repuser@’192.168.1.11′ IDENTIFIED BY ‘reppass’;添加Slave连接Master的MYSQL帐号)SrvA MYSQL> GRANT REPLICATION SLAVE ON *.* TO repuser@’192.168.1.11′ IDENTIFIED BY ‘reppass’;更加严格更小权限的一种设置 

SrvA MYSQL> flush privileges;

SrvA # vi /etc/my.cnf

server-id = 1

log-bin=xxx(这里最好指定文件名,否则会自动使用主机名,而将来主机名如果被修改,将导致复制错误

binlog-do-db=shopdb(指定具体需要binlog的数据库名称

#binlog-ignore-db=mysql

…….重启SrvA MYSQL………

SrvA MYSQL> show master status;查看是否运行在Master模式

SrvA MYSQL> flush tables with read lock;锁住表禁止写入后拷贝数据,也可以停止MYSQL再拷贝数据

SrvA # cp -r shopdb shopdbbackup拷贝MYSQL的shopdb库的数据文件

SrvA MYSQL> unlock tables;拷贝数据完成后解除表锁定

SrvB # cp -r shopdbbackup shopdb将SrvA上的shopdb库数据文件覆盖到SrvB 

SrvB # chown -Rf mysql.mysql shopdb设置数据文件正确的宿主属性 

SrvB # vi /etc/my.cnf

server-id = 2

master-host = 192.168.1.10

master-user = repuser

master-password = reppass

master-port = 3306

master-connect-retry = 10

replicate-do-db = shopdb

…….重启SrvB MYSQL………

SrvB MYSQL> show slave status;查看是否运行在Slave模式

       主从(Master->Slave)模式中,Slave可多个。整个复制过程由三个进程控制,分别是Master上的IO进程、Slave上的IO进程和Slave上的SQL进程。Slave上的IO进程连接上Master请求日志文件指定位置(或最开始)之后的日志内容;Master上的IO进程返回给Slave的IO进程包括bin-log文件名称、本次读取到bin-log的最后位置、bin-log的内容;Slave的IO进程接收数据后依次添加到Slave端的relay-log文件最末端,并将取到的Master端bin-log文件名和最后位置记录到master-info文件中;Slave上的SQL进程检测到relay-log新增内容后,解析执行。

       双机互备模式,比如SrvC既是SrvA的Slave,又作为SrvD的Master,异地两套应用系统备份可以使用这种模式:

SrvC # vi /etc/my.cnfserver-id = 3master-host = 192.168.1.10

master-user = repuser

master-password = reppass

master-port = 3306

master-connect-retry = 10

replicate-do-db = shopdb

log-bin

log-slave-updates(将作为Slave时更新的数据写入到bin-log中,否则SrvD将丢失数据

slave-skip-errors=all

       复制Replicate可能会发生同步错误,如下:

ERROR: 1062  Duplicate entry ‘1’ for key 1091125  9:52:03 Slave: Error ‘Duplicate entry ‘1’ for key 1′ on query. Default database: ‘yyyy’. Query: ‘INSERT INTO xxxxdetail_20090801 VALUES(1, ‘Îߺþ’, ‘г¿Íø°É’, ‘aaaaa’, ‘7777’, ‘212.102.27.210’)’, Error_code: 1062091125  9:52:03 Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with “SLAVE START”. We stopped at log ‘mysql-bin.008’ position 78361623

       两种方法解决以上报错:

# vi /etc/my.cnf   Slave上,需要重启MYSQL)slave-skip-errors=1062(忽略此报错,跳过后继续同步,不会因为此错误使同步停下来)MYSQL > set global sql_slave_skip_counter=1; (忽略这一句同步语句,可执行多次,好处是不像上面方法一需要重启MYSQL

      

第2章     维护管理

2.1.   常用系统命令

# mysql -uroot   (空密码本地连接)# mysql -uroot -p   (交互方式输入密码) # mysql -uroot –password=xxx  (命令行中输入密码)

# mysql -uroot -S /var/lib/mysql/mysql.sock  (指定套接字,不在默认/tmp/mysql.sock或者mysql_multi情况下)

# mysqladmin ping   (数据库的PING)

mysqld is alive

# mysql -e ‘show processlist’   (-e无交互执行SQL语句)

+——+——-+—————–+———+———+——+——-+——————+

| Id   | User  | Host            | db      | Command | Time | State | Info             |

+——+——-+—————–+———+———+——+——-+——————+

|    2 | green | localhost:43789 | greendb | Sleep   |    7 | NULL  | NULL             |

| 7141 | root  | localhost       | NULL    | Query   |    0 | NULL  | show processlist |

+——+——-+—————–+———+———+——+——-+——————+

# mysql -e ‘show full processlist’   (更详细?)

# mysqladmin processlist   (与上面命令效果相同)

2.2.   常用MySQL命令

mysql> show variables like version; (版本信息)mysql> select @@version; (版本信息)mysql> show variables like ‘have%’; (支持哪些功能)

mysql> status; (查询MySQL状态)

mysql> show processlist; (查询MySQL的连接状态)

mysql> tee /tmp/mysql.log; (将屏幕输出到文件中)

mysql> notee; (关闭上面的功能)

mysql> source /tmp/x.sql; (执行文件中的SQL语句)

# mysql dbname < /tmp/x.sql (跟上面这句同义)

mysql> show warnings(显示最后一次的报警信息)

mysql> show databases(显示本用户可访问的所有数据库清单)

mysql> show tables(显示本用户可访问的所有数据表清单)

mysql> show columns from mysql.user(显示本用户可访问的所有数据列清单)

mysql> show index from mysql.user(显示本用户可访问的所有索引清单)

2.3.   密码和权限

# mysql -urootmysql> use mysqlmysql> delete from user where user=”;   (把空用户名的删除)

mysql> update user set password=password(‘1234!@#$’) where user=’root’;   (把root默认空口令修改掉)

mysql> GRANT ALL ON dbname.* TO dbuser@localhost IDENTIFIED BY ‘1234!@#$’;   (新建用户并赋予权限,ALL是指GRANT之外的所有权限)

mysql> GRANT USAGE ON dbname.* TO(拒绝所有权限) 

mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON dbname.* TO

mysql> GRANT LOCK TABLES,CREATE TEMPORARY TABLES,EXECUTE ON dbname.* TO(更细分的一些权限) 

mysql> GRANT FILE ON dbname.* TO(INTO OUTFILE,LOAD DATA等需要) 

mysql> GRANT PROCESS ON dbname.* TO(show processlist时可以看到其他用户的进程,否则只能对自己) 

mysql> GRANT SUPER ON dbname.* TO(可以KILL其他用户的进程,否则只能对自己) 

mysql> flush privileges;

# mysqladmin -uroot password ‘1234!@#$’

 

[mysqld]

old-passwords(4.1版本之后采用了新的加密算法,此选项沿用老的算法)

C:\> mysqld-nt.exe –skip-grant-tables  (通过此参数运行mysql无需认证即可登录,通过此方法找回root的密码)

[mysqld]

skip-grant-tables

2.4.   修改连接方式

可以将MYSQL的监听IP修改为LOCALHOST,修改my.ini或者/etc/my.cnf文件:

[mysqld]port = 3306bind = 127.0.0.1(仅监听本地TCP 3306端口

#skip-networking(禁用TCP/IP 3306

socket = /var/lib/mysql/mysql.sock(LINUX下可通过套接字文件连接

#enable-named-pipes(WINDOWS下可用命名管道连接

#socket = MySQL(WINDOWS下命名管道的名字

#shared_memory(WINDOWS下可用共享内存连接

#shared_memory_base_name = MYSQL(WINDOWS下共享内存的名字

2.5.   连接管理

查看当前的MYSQL Session连接,然后kill断开连接:

mysql> SELECT concat(‘KILL ‘,id,’;’) FROM information_schema.processlist WHERE user=’root’;+————————+| concat(‘KILL ‘,id,’;’) |

+————————+

| KILL 3101;             |

| KILL 2946;             |

+————————+

2 rows IN SET (0.00 sec)

mysql> SELECT concat(‘KILL ‘,id,’;’) FROM information_schema.processlist WHERE user=’root’ INTO OUTFILE ‘/tmp/a.txt’;

Query OK, 2 rows affected (0.00 sec)

mysql> source /tmp/a.txt;

Query OK, 0 rows affected (0.00 sec)

2.6.   备份恢复

# mysqldump dbname > backupfile.sql# mysqldump dbname tablesname > backupfile.sql# mysqldump –all-databases > backupfile.sql备份所有数据库 

# mysqldump –lock-all-tables dbname > backupfile.sql针对MyISAM,由于mysqldump备份前对表逐个读操作锁定,表A与表B备份时间不同而导致其中一条关联数据被修改,最好的方法是备份前锁定所有的表

# mysqldump –single-transaction dbname > backupfile.sql针对InnoDB,LOCK表解决不了任何问题,必须使用事务

# mysqldump mysql proc > backupproc.sqlmysqldump无法对指定的单个数据库备份其存储过程,要么就备份所有数据库的存储过程

# mysqldump “–where=db=’dbname'” –no-create-info mysql proc > backupproc.sql可以用where细分出来,必须禁用CREATE TABLES命令,否则会导致恢复是破坏

# myback.pl

调用mysqldump的PERL脚本http://www.mswanson.com/跟mysqlhotcopy类似

# mysql dbname < backupfile.sql恢复数据库

mysql> use dbname

mysql> source /tmp/backupfile.sql;这种方式需要权限,并事先指定DBNAME

# mysql –default-character-set=gbk dbname < backupfile.sql

新版本mysqldump使用UTF-8字符集来生成备份文件,如果是老版本mysqldump生成的备份文件,在迁移到新系统中需要明确指定字符集

# mysqlhotcopy dbname1 dbname2 dbname3 /backup 工作原理是先给数据库加一个读操作锁,再FLUSH TABLES把内存中的修改写入硬盘,再把数据库文件复制;仅适用于MyISAM不适用于InnoDB

# mysqlhotcopy –noindices dbname1 dbname2 dbname3 /backup只复制MyISAM的数据文件,索引文件只复制前2KB内容,恢复时myisamchk -r通过这2KB内容可以把索引文件重新修复出来;备份加快了,恢复变慢了

2.7.   导入导出

mysql> load data infile ‘/tmp/x.txt’ into table tablename fields terminated by ‘\t’ enclosed by ‘\”‘ lines terminated by ‘\r\n’;分别为字段间隔符、数据前缀后缀符、换行符)mysql> load data local infile ‘/tmp/x.txt’ into table tablename;

远程连接,需要导入的文件在本地

mysql> load data local infile ‘/tmp/x.txt’ replace into table tablename;

用新导入的记录替换掉数据表里的现有数据记录

# mysqlimport dbanme tablename /tmp/x.txt效果跟上面一样

# mysqlimport –local dbanme tablename /tmp/x.txt

# mysqlimport –local “–fields-enclosed-by=\”” “–lines-terminated-by=’\r\n'” dbanme tablename /tmp/x.txt

 

mysql> select * into outfile ‘/tmp/y.txt’ from tablename;

mysql> select * into outfile ‘/tmp/y.txt’ fields terminated by ‘;’ enclosed by ‘\”‘ from tablename;效果跟上面一样 

 

# mysqldump –tab=/tmp “–fields-enclosed-by=\”” dbanme tablename

生成两个文件tablename.txt和tablename.sql,前者是数据跟select …into outfile一样,后者是CREATE TABLE命令

# mysqldump –xml mylibrary > /tmp/mylibrary.xml导出XML格式

# mysql -e ‘select * from mysql.user’ >/tmp/log.txt

# mysql –html -e ‘select * from mysql.user’ >/tmp/log.html

# mysql –xml -e ‘select * from mysql.user’ >/tmp/log.xml

2.8.   日志

MySQL日志包括变更日志(update log)、出错日志(error log)、常规查询日志(general query log)、慢查询日志(slow query log),默认仅启用出错日志:

[mysqld]log-bin=xxx(不指定的话自动用主机名代替,记录每次修改时间、客户线程ID、修改内容等,不记录SELECT命令和没有改变任何数据的UPDATE命令;另外还可以指定目录防止磁盘满;官方文档称对MySQL性能影响仅%1;默认文件名hostname-bin.log)#max_binlog_size(日志文件超过此阀值就会新建一个,默认1G

log=/tmp/yyy.txt(常规查询日志记录所有登录和操作日志,log-bin中的客户线程ID只有配合本日志才能查询对应哪位用户;默认文件名hostname.log

log-error=/backup/logs/mysqlerrorlog(出错日志无法禁用,但可以移位置

log-slow-queries(默认文件名hostname-slow.log;用于数据库优化

long_query_time=15(执行超过15秒,默认10秒

#log-queries-not-using-indexes

 

# mysqlbinlog hostname-bin.002 | less查看二进制变更日志文件

mysql> flush logs;运行此命令、MYSQL重启、超过阀值都会导致新生成BIN日志

mysql> set sql_log_bin=0(实时禁用log-bin

mysql> set sql_log_bin=1(实时启用log-bin

# mysqlbinlog name-bin.001 | mysql -u root -p

# mysqlbinlog name-bin.002 | mysql -u root –p

按照时间顺序,利用某次完整备份之后的bin日志恢复数据 

2.9.   管理MyISAM数据表

MyISAM数据表对应着三个硬盘文件*.frm(定义)、*.MYD(存放数据)、*.MYI(存放索引)。有两种管理方法, myisamchk命令和SQL命令,前者可直接对MYI(命令参数中只能使用MYI但实际也对MYD进行操作)文件进行操作,也可以自动连接到MySQL执行SQL命令;后者只能在MySQL服务运行时有效。

# mysqlcheck -Aa -uroot 检查所有数据库的数据表)# mysqladmin flush-tables下面的myisamchk是直接对MYI文件进行操作,所以在那之前需要先FLUSH TABLES一下)# myisamchk /var/lib/mysql/efront/*.MYI检查所有数据库的数据表

MySQL> LOCK TABLE;下面的myisamchk将修改MYI文件,所以在那之前需要先LOCK TABLE)

# myisamchk –recover –check-only-changed –sort-index –analyze /var/lib/mysql/efront/*.MYI按照存取速度最快的要求对索引文件进行优化

# myisamchk –recover /var/lib/mysql/efront/*.MYI修复受损的MyISAM数据表

# myisamchk –recover –quick /var/lib/mysql/efront/*.MYI只修复索引文件

# myisamchk –safe-recover /var/lib/mysql/efront/*.MYI比–recover更长时间的修复

MySQL> UNLOCK TABLE;解锁

# myisamchk -O key_buffer_size=64M -O sort_buffer_size=64M -O read_buffer_size=2M -O write_buffer_size=2M ……设置内存变量,对大数据表很有效

# myisampack /var/lib/mysql/efront/*.MYI压缩数据表后读取速度更快,体积庞大但仅用于查询不需要再修改的数据表

# mysqlcheck -u root -p –auto-repair –check –optimize –all-databases检查分析优化一条龙

2.10.       管理InnoDB数据表

2.11.       索引

索引可以加快数据检索操作,但会使数据修改操作变慢,因为每修改一条数据记录,索引就必须刷新一次。如果有大量新数据需要插入,建议在每条SQL语句后面设置DELAY_KEY_WRITE,对索引的刷新等到全部记录插入完毕后再进行,这将大大提升修改操作的效率。

唯一(Unique)索引和主(Primary)索引基本相同,唯一区别是定义时使用的关键字一个是PRIMARY一个是UNIQUE。

2.12.       存储过程

mysql> show procedure status;过程清单)mysql> show function status;函数清单)mysql> show create procedure spname;查看过程的代码

mysql> show create function spname;查看函数的代码

# mysqladmin -uroot -p mysql proc >backupsp.sql备份所有SP

2.13.       优化

[mysqld]key_buffer_size = 1024M(索引缓冲区,默认8M,建议为物理内存的四分之一)table_cache = 512 (同时打开数据表个数,show status like ‘open_tables’可查看当前打开的个数,建议在高峰时查看此值后进行调整,打开的数据表需占用内存的

sort_buffer_size = 2M(排序缓冲区,没有索引可用时ORDER BY就用到它

read_buffer_size = 2M(每个线程需要的排序缓冲区,不必太大因每个线程都独自拥有

read_rnd_buffer_size =

bulk_insert_buffer_size =

join_buffer_size =

tmp_table_size =

max­_connections = 2048

同时打开的数据库连接的最大个数,show status like ‘max_used_connections’查看当前值,对永久性连接比较有效减少刚关闭一条连接就不得不再次打开一条同样的连接的现象,但也不必太大,因为每个连接都消耗内存和文件描述符

max_allowed_packet = 16M(影响客户端和服务器最大BLOB块的长度

query_cache_size = 128M

query_cache_type = 1(默认为ON

query_cache_limit = 500K(避免少数大数据量的查询结果把其他查询“排挤”出缓冲区

skip-name-resolve(不解析IP的主机名,mysql.users里必须设置IP而非主机名

skip-innodb(不启用innodb

      

第3章     FAQ

3.1.   连接错误

MySQL客户端(常见如PHP)报以下连接错误:

MySQL server has gone awayLost connection to server during query

       可以从以下方面进行调查:

  1. MySQL对永久性连接也是有timeout的,默认是8小时。比如php的mysql_pconnect()或者其他连接池创建的长连接超时了。可通过增加MySQL的wait_timeout变量的值来解决;
  2. 客户端多线程共享某个连接时,在断开的连接上做查询也会报以上错误;
  3. 客户端达到timeout值了,PHP可以通过修改默认timeout解决mysql_options(…, MYSQL_OPT_READ_TIMEOUT,…)和mysql_options(…, MYSQL_OPT_WRITE_TIMEOUT,…);
  4. 客户端传送给服务端的BLOB超过1M了,修改MySQL的max_allowed_packet为更大值;

3.2.   读写优化

MySQL服务器有读有写,在低负载LOAD情况下CPU使用率达100%, 估计下来可能是:在一个读站主体的数据库中,忽然发生大量的读写并发,由于INSERT和UPDATE优先级比SELECT高,而MyISAM数据表在INSERT和UPDATE时必须LOCK表,导致SELECT必须等待INSERT和UPDATE执行完毕才能操作,如果这个时候SELECT等待累积过大,会造成MySQL瓶颈,通过以下三个方法修复:

max_write_lock_count = 1(一个写后就执行读,相当于增加了读的优先级)low-priority-updates=1(降低写的优先级,让读先执行)concurrent_insert=2(并发查询插入的一个设置,会产生大量碎片,定期使用OPTIMIZE TABLE语法优化
分类: safe 标签:

linux ssh-key 公钥私钥安装图文全解

2011年3月3日 没有评论

概述:
从表面上简单的理解一下登录的过程,
首先 ssh-keygen -t rsa 命令生成了一个密钥和一个公钥, 而且密钥可以设置自己的密码,可以把密钥理解成一把钥匙, 公钥理解成这把钥匙对应的锁头,把锁头(公钥)放到想要控制的server上, 锁住server, 只有拥有钥匙(密钥)的人, 才能打开锁头, 进入server并控制,而对于拥有这把钥匙的人, 必需得知道钥匙本身的密码,才能使用这把钥匙 (除非这把钥匙没设置密码), 这样就可以防止钥匙被人配了(私钥被人复制)

当然, 这种例子只是方便理解罢了,
拥有root密码的人当然是不会被锁住的, 而且不一定只有一把锁(公钥), 但如果任何一把锁, 被人用其对应的钥匙(私钥)打开了, server就可以被那个人控制了
所以说, 只要你曾经知道server的root密码, 并将有root身份的公钥放到上面, 就可以用这个公钥对应的私钥”打开” server, 再以root的身分登录, 即使现在root密码已经更改!

配置过程

ssh-key公钥私钥配置ssh-key公钥私钥配置

分类: linux, safe 标签: ,

DOS和DDOS攻击区别和介绍

2011年3月2日 没有评论

  DOS和DDOS攻击
                 拒绝服务攻击(Deny of Service)攻击的基本目标是阻止受攻击者访问特定的资源。DoS攻击的明显企图就是阻止合法用户使用网络服务。DoS是最常见的网络攻击之一,也是很多更加复杂的大型攻击的一部分。- 拒绝服务攻击有多种方式,可以针对多种服务,基本分为2种。
1. 消耗计算机或网络中匮乏的、有限的或不可再生的资源,这是最常见的一种。
2. 破坏或改变计算机或网络中配置信息。

              拒绝服务攻击最常见的就是攻击者通过产生大量导向受害网络的包,消耗该网络所有的可用带宽。典型的攻击包是ICMP echo包,当然也可以是其他类型的包。例如在“smurf”攻击中,攻击者从远端节点向某网络的广播地址发送ICMP echo请求包,网络上所有节点响应这一请求,产生大量包,使得网络阻塞或瘫痪。在攻击中,攻击者通常采用假冒源地址的方式,使得被假冒者也成为受害者。又如,在一种UDP 端口DoS攻击中,攻击者通过伪造的UDP包,在两台机器的两种UDP服务之间建立连接,例如在chargen服务和echo服务端口之间建立连接,两者均产生到对方的大量输出,消耗节点间的网络带宽,最终导致提供服务的机器所在的网络拒绝服务。
除了网络带宽,攻击者还可以消耗其他的网络资源。如针对网络连接,阻止受害主机或网络和其他网络进行通信。TCP SYN 洪流就是这样一种攻击方式,攻击者与受害节点建立连接,但是不最终完成。由于受害节点需要保持数据结构用于等待完成这些半连接,结果导致合法的连接因为缺乏数据结构资源而无法正常建立连接。在这种攻击中,攻击者消耗的是核心数据结构,而不是网络带宽。这意味着攻击者可以通过一个慢的网络,如拨号网络来攻击一个高速网络上的机器,这是一种典型的“非对称攻击”。另外还有很多系统中保持进程信息的数据结构,如进程描述符、进程表项和进程时隙等,都是有限的。攻击者可以写一个简单的程序或脚本,通过不断地自我复制,来消耗这些资源,占用CPU时间。攻击者也可能消耗受害节点的磁盘空间,如发送大量的E-mail信息,或产生大量需要日志的错误信息。总之,任何允许向磁盘上写信息的机制,如果没有对所写数据的数量限制,都可被用来实施DoS攻击。

          此外,攻击者通过破坏或改变配置信息,如改变网络路由信息、改变Windows NT的注册表信息等,也可以阻止计算机或网络的使用;甚至通过破坏计算机或网络中的物理组件导致服务拒绝。

                 分布式拒绝服务攻击(Distributed Deny of Service)是一种更加高级的拒绝服务攻击技术, 分布式拒绝服务攻击的理论和技术可能性很早就为网络界所认识,而最近分布式拒绝服务开始被攻击者采用并有泛滥趋势。在分布式拒绝服务攻击中,攻击者利用成百上千个被“控制”节点向受害节点发动大规模的协同攻击,如同时泛洪(flood)受害节点。由于攻击来自很多节点,使得受害程度更加严重,涉及范围更广,也更难发现攻击者。在这类攻击工具中比较有名的有Trin00、TFN(Tribe Flood Network)、TFN2k以及stacheldraht(德文铁丝网的意思)等。

               1999年6月,Trin00最先被发现用来进行网络攻击。1999年8月,焦点转向TFN。TFN据称是Mixter在分析Trin00时编写的,TFN后来升级到TFN2k。1999年9月底,类似TFN的称为stacheldraht的攻击出现在欧洲和美国网络上。分布攻击系统基于Server/Client模型体系。典型的分布攻击系统中,一般由一个攻击者控制一个或几个Master , 再由其控制大量分布的Daemon,Daemon 直接向受害节点泛洪包或实施其他攻击

分类: safe 标签: ,

Linux下硬盘格式化的相关命令Partprobe

2011年2月18日 没有评论

这几天格式化硬盘,记录一下用到的命令:

此时,分区里看不到新建的磁盘分区,提示通过重启才可以重用分区表,此时可以通过partprobe探测硬盘:

分区容量:

此时可以正常使用该磁盘分区了。

分类: safe 标签: ,