系統連接狀態篇:
1.查看TCP連接狀態
netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
netstat -n | awk '/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}' 或
netstat -n | awk '/^tcp/ {++state[$NF]}; END {for(key in state) print key,"t",state[key]}'
netstat -n | awk '/^tcp/ {++arr[$NF]};END {for(k in arr) print k,"t",arr[k]}'
netstat -n |awk '/^tcp/ {print $NF}'|sort|uniq -c|sort -rn
netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c
2.查找請求數請20個IP(常用于查找攻來源):
netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20
netstat -ant |awk '/:80/{split($5,ip,":");++A[ip[1]]}END{for(i in A) print A[i],i}' |sort -rn|head -n20
3.用tcpdump嗅探80端口的訪問看看誰最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -20
4.查找較多time_wait連接
netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20
5.找查較多的SYN連接
netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more
6.根據端口列進程
netstat -ntlp | grep 80 | awk '{print $7}' | cut -d/ -f1
網站日志分析篇1(Apache):
1.獲得訪問前10位的ip地址
cat access.log|awk '{print $1}'|sort|uniq -c|sort -nr|head -10
cat access.log|awk '{counts[$(11)]+=1}; END {for(url in counts) print counts[url], url}'
2.訪問次數最多的文件或頁面,取前20
cat access.log|awk '{print $11}'|sort|uniq -c|sort -nr|head -20
3.列出傳輸最大的幾個exe文件(分析下載站的時候常用)
cat access.log |awk '($7~/.exe/){print $10 " " $1 " " $4 " " $7}'|sort -nr|head -20
4.列出輸出大于200000byte(約200kb)的exe文件以及對應文件發生次數
cat access.log |awk '($10 > 200000 && $7~/.exe/){print $7}'|sort -n|uniq -c|sort -nr|head -100
5.如果日志最后一列記錄的是頁面文件傳輸時間,則有列出到客戶端最耗時的頁面
cat access.log |awk '($7~/.php/){print $NF " " $1 " " $4 " " $7}'|sort -nr|head -100
6.列出最最耗時的頁面(超過60秒的)的以及對應頁面發生次數
cat access.log |awk '($NF > 60 && $7~/.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100
7.列出傳輸時間超過 30 秒的文件
cat access.log |awk '($NF > 30){print $7}'|sort -n|uniq -c|sort -nr|head -20
8.統計網站流量(G)
cat access.log |awk '{sum+=$10} END {print sum/1024/1024/1024}'
9.統計404的連接
awk '($9 ~/404/)' access.log | awk '{print $9,$7}' | sort
10. 統計http status
cat access.log |awk '{counts[$(9)]+=1}; END {for(code in counts) print code, counts[code]}'
cat access.log |awk '{print $9}'|sort|uniq -c|sort -rn
10.蜘蛛分析,查看是哪些蜘蛛在抓取內容。
/usr/sbin/tcpdump -i eth0 -l -s 0 -w - dst port 80 | strings | grep -i user-agent | grep -i -E 'bot|crawler|slurp|spider'
網站日分析2(Squid篇)按域統計流量
zcat squid_access.log.tar.gz| awk '{print $10,$7}' |awk 'BEGIN{FS="[ /]"}{trfc[$4]+=$1}END{for(domain in trfc){printf "%st%dn",domain,trfc[domain]}}'
數據庫篇
1.查看數據庫執行的sql
/usr/sbin/tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | egrep -i 'SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL'
系統Debug分析篇
1.調試命令
strace -p pid
2.跟蹤指定進程的PID
gdb -p pid
awk '{ip[$1]+=1} END{for(i in ip){print i," "ip[i]}}' access.log |wc -l
其中access.log就是apache的訪問日志。這個就可以統計獨立ip數據
1、把IP數量直接輸出顯示:
cat access_log_2011_06_26.log |awk '{print $1}'|uniq -c|wc -l
永久鏈接 : http://www.ha97.com/4392.html
posted @
2012-09-13 17:47 Alpha 閱讀(1299) |
評論 (0) |
編輯 收藏
經常使用CentOS的朋友,可能會遇到和我一樣的問題。開啟了防火墻導致80端口無法訪問,剛開始學習centos的朋友可以參考下。
經常使用CentOS的朋友,可能會遇到和我一樣的問題。最近在Linux CentOS防火墻下安裝配置 ORACLE 數據庫的時候,總顯示因為網絡端口而導致的EM安裝失敗,遂打算先關閉一下CentOS防火墻。偶然看到CentOS防火墻的配置操作說明,感覺不錯。執 行”setup”命令啟動文字模式配置實用程序,在”選擇一種工具”中選擇”防火墻配置”,然后選擇”運行工具”按鈕,出現CentOS防火墻配置界面, 將”安全級別”設為”禁用”,然后選擇”確定”即可.
這樣重啟計算機后,CentOS防火墻默認已經開放了80和22端口
簡介:CentOS是Linux家族的一個分支。
CentOS防火墻在虛擬機的CENTOS裝好APACHE不能用,郁悶,解決方法如下
/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 22 -j ACCEPT
然后保存:
/etc/rc.d/init.d/iptables save
centos 5.3,5.4以上的版本需要用
service iptables save
來實現保存到配置文件。
這樣重啟計算機后,CentOS防火墻默認已經開放了80和22端口。
這里應該也可以不重啟計算機:
/etc/init.d/iptables restart
CentOS防火墻的關閉,關閉其服務即可:
查看CentOS防火墻信息:/etc/init.d/iptables status
關閉CentOS防火墻服務:/etc/init.d/iptables stop
永久關閉?不知道怎么個永久法:
chkconfig –level 35 iptables off
上面的內容是針對老版本的centos,下面的內容是基于新版本。
iptables -P INPUT DROP
這樣就拒絕所有訪問 CentOS 5.3 本系統數據,除了 Chain RH-Firewall-1-INPUT (2 references) 的規則外 , 呵呵。
用命令配置了 iptables 一定還要 service iptables save 才能保存到配置文件。
cat /etc/sysconfig/iptables 可以查看 防火墻 iptables 配置文件內容
# Generated by iptables-save v1.3.5 on Sat Apr 14 07:51:07 2001
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1513:149055]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p esp -j ACCEPT
-A RH-Firewall-1-INPUT -p ah -j ACCEPT
-A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Sat Apr 14 07:51:07 2001
另外補充:
CentOS 防火墻配置 80端口
看了好幾個頁面內容都有錯,下面是正確方法:
#/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
#/sbin/iptables -I INPUT -p tcp --dport 22 -j ACCEPT
然后保存:
#/etc/rc.d/init.d/iptables save
再查看是否已經有了:
[root@vcentos ~]# /etc/init.d/iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:80
2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
3 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0
* 設置iptables為自動啟動
chkconfig --level 2345 iptables on
可能因為大家使用的版本不一,所有使用方法也略有不同。
posted @
2012-09-13 15:06 Alpha 閱讀(14546) |
評論 (0) |
編輯 收藏
1.關閉防火墻
[root@CentOS ~]# chkconfig iptables off
2.關閉selinux
vi /etc/sysconfig/selinux
//將SELINUX=enforcing修改為disabled然后重啟生效
3、配置CentOS 6.0 第三方yum源(CentOS默認的標準源里沒有nginx軟件包)
[root@CentOS ~]# yum install wget
//下載wget工具
[root@CentOS ~]# wget http://www.atomicorp.com/installers/atomic
//下載atomic yum源
[root@CentOS ~]# sh ./atomic
//安裝提示輸入時輸yes
[root@CentOS ~]# yum check-update
//更新yum軟件包
4.安裝開發包和庫文件
[root@CentOS ~]# yum -y install ntp make openssl openssl-devel pcre pcre-devel libpng
libpng-devel libjpeg-6b libjpeg-devel-6b freetype freetype-devel gd gd-devel zlib zlib-devel
gcc gcc-c++ libXpm libXpm-devel ncurses ncurses-devel libmcrypt libmcrypt-devel libxml2
libxml2-devel imake autoconf automake screen sysstat compat-libstdc++-33 curl curl-devel
5.卸載已安裝的apache、mysql、php
[root@CentOS ~]# yum remove httpd
[root@CentOS ~]# yum remove mysql
[root@CentOS ~]# yum remove php
6.安裝nginx
[root@CentOS ~]# yum install nginx
[root@CentOS ~]# service nginx start
[root@CentOS ~]# chkconfig --levels 235 nginx on
//設2、3、5級別開機啟動
7.安裝mysql
[root@CentOS ~]# yum install mysql mysql-server mysql-devel
[root@CentOS ~]# service mysqld start
[root@CentOS ~]# chkconfig --levels 235 mysqld on
[root@CentOS ~]# mysqladmin -u root password "123456"
//為root用戶設置密碼
[root@CentOS ~]# service mysqld restart
//重啟mysql
8.安裝php
[root@CentOS ~]# yum install php lighttpd-fastcgi php-cli php-mysql php-gd php-imap php-ldap
php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mssql php-snmp php-soap
php-tidy php-common php-devel php-fpm
//安裝php和所需組件使PHP支持MySQL、FastCGI模式
[root@CentOS ~]# service php-fpm start
[root@CentOS ~]# chkconfig --levels 235 php-fpm on
9.配置nginx支持php
[root@CentOS ~]# mv /etc/nginx/nginx.conf /etc/nginx/nginx.confbak
//將配置文件改為備份文件
[root@CentOS ~]# cp /etc/nginx/nginx.conf.default /etc/nginx/nginx.conf
//由于原配置文件要自己去寫因此可以使用默認的配置文件作為配置文件
//修改nginx配置文件,添加fastcgi支持
[root@CentOS ~]# vi /etc/nginx/nginx.conf
index index.php index.html index.htm;
//加入index.php
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
//將以上代碼注釋去掉,并修改成nginx默認路徑
10.配置php
//編輯文件php.ini,在文件末尾添加cgi.fix_pathinfo = 1
[root@CentOS ~]# vi /etc/php.ini
11.重啟nginx php-fpm
[root@CentOS ~]# service nginx restart
[root@CentOS ~]# service php-fpm restart
12.建立info.php文件
[root@CentOS ~]# vi /usr/share/nginx/html/info.php
<?php
phpinfo();
?>
13.測試nginx是否解析php
輸入:192.168.1.105/info.php
顯示php界面說明解析成功
posted @
2012-09-12 18:39 Alpha 閱讀(5437) |
評論 (1) |
編輯 收藏
本文主要講述如何使用Linux系統中的日志子系統及其命令,來更好地保護系統安全。
Linux系統中的日志子系統對于系統安全來說非常重要,它記錄了系統每天發生的各種各 樣的事情,包括那些用戶曾經或者正在使用系統,可以通過日志來檢查錯誤發生的原因,更重要的是在系統受到黑客攻擊后,日志可以記錄下攻擊者留下的痕跡,通 過查看這些痕跡,系統管理員可以發現黑客攻擊的某些手段以及特點,從而能夠進行處理工作,為抵御下一次攻擊做好準備。
在Linux系統中,有三類主要的日志子系統:
● 連接時間日志: 由多個程序執行,把記錄寫入到/var/log/wtmp和/var/run/utmp,login等程序會更新wtmp和utmp文件,使系統管理員能夠跟蹤誰在何時登錄到系統。
● 進程統計: 由系統內核執行,當一個進程終止時,為每個進程往進程統計文件(pacct或acct)中寫一個記錄。進程統計的目的是為系統中的基本服務提供命令使用統計。
● 錯誤日志: 由syslogd(8)守護程序執行,各種系統守護進程、用戶程序和內核通過syslogd(3)守護程序向文件/var/log/messages報告 值得注意的事件。另外有許多Unix程序創建日志。像HTTP和FTP這樣提供網絡服務的服務器也保持詳細的日志。
Linux下日志的使用
1.基本日志命令的使用
utmp、wtmp日志文件是多數Linux日志子系統的關鍵,它保存了用戶登錄進入和 退出的記錄。有關當前登錄用戶的信息記錄在文件utmp中; 登錄進入和退出記錄在文件wtmp中; 數據交換、關機以及重啟的機器信息也都記錄在wtmp文件中。所有的記錄都包含時間戳。時間戳對于日志來說非常重要,因為很多攻擊行為分析都是與時間有極 大關系的。這些文件在具有大量用戶的系統中增長十分迅速。例如wtmp文件可以無限增長,除非定期截取。許多系統以一天或者一周為單位把wtmp配置成循 環使用。它通常由cron運行的腳本來修改,這些腳本重新命名并循環使用wtmp文件。
utmp文件被各種命令文件使用,包括who、w、users和finger。而 wtmp文件被程序last 和ac使用。但它們都是二進制文件,不能被諸如tail命令剪貼或合并(使用cat命令)。用戶需要使用who、w、users、last和ac來使用這 兩個文件包含的信息。具體用法如下:
who命令: who命令查詢utmp文件并報告當前登錄的每個用戶。Who的缺省輸出包括用戶名、終端類型、登錄日期及遠程主機。使用該命令,系統管理員可以查看當前系統存在哪些不法用戶,從而對其進行審計和處理。例如: 運行who命令顯示如下:
[root@working]# who
root pts/0 May 9 21:11 (10.0.2.128)
root pts/1 May 9 21:16 (10.0.2.129)
lhwen pts/7 May 9 22:03 (10.0.2.27)
如果指明了wtmp文件名,則who命令查詢所有以前的記錄。例如命令who /var/log/wtmp將報告自從wtmp文件創建或刪改以來的每一次登錄。
日志使用注意事項
系統管理人員應該提高警惕,隨時注意各種可疑狀況,并且按時和隨機地檢查各種系統日志文件,包括一般信息日志、網絡連接日志、文件傳輸日志以及用戶登錄日志等。在檢查這些日志時,要注意是否有不合常理的時間記載。例如:
■ 用戶在非常規的時間登錄;
■ 不正常的日志記錄,比如日志的殘缺不全或者是諸如wtmp這樣的日志文件無故地缺少了中間的記錄文件;
■ 用戶登錄系統的IP地址和以往的不一樣;
■ 用戶登錄失敗的日志記錄,尤其是那些一再連續嘗試進入失敗的日志記錄;
■ 非法使用或不正當使用超級用戶權限su的指令;
■ 無故或者非法重新啟動各項網絡服務的記錄。
另外, 尤其提醒管理人員注意的是: 日志并不是完全可靠的。高明的黑客在入侵系統后,經常會打掃現場。所以需要綜合運用以上的系統命令,全面、綜合地進行審查和檢測,切忌斷章取義,否則很難發現入侵或者做出錯誤的判斷。
users命令: users用單獨的一行打印出當前登錄的用戶,每個顯示的用戶名對應一個登錄會話。如果一個用戶有不止一個登錄會話,那他的用戶名將顯示相同的次數。運行該命令將如下所示:
[root@working]# users
root root //只登錄了一個Root權限的用戶
last命令: last命令往回搜索wtmp來顯示自從文件第一次創建以來登錄過的用戶。系統管理員可以周期性地對這些用戶的登錄情況進行審計和考核,從而發現其中存在的問題,確定不法用戶,并進行處理。運行該命令,如下所示:
[root@working]# last
devin pts/1 10.0.2.221 Mon Jul 21 15:08-down (8+17:46)
devin pts/1 10.0.2.221 Mon Jul 21 14:42 - 14:53 (00:11)
changyi pts/2 10.0.2.141 Mon Jul 21 14:12 - 14:12 (00:00)
devin pts/1 10.0.2.221 Mon Jul 21 12:51 - 14:40 (01:49)
reboot system boot 2.4.18 Fri Jul 18 15:42 (11+17:13)
reboot system boot 2.4.18 Fri Jul 18 15:34 (00:04)
reboot system boot 2.4.18 Fri Jul 18 15:02 (00:36)
讀者可以看到,使用上述命令顯示的信息太多,區分度很小。所以,可以通過指明用戶來顯示其登錄信息即可。例如: 使用last devin來顯示devin的歷史登錄信息,則如下所示:
[root@working]# last devin
devin pts/1 10.0.2.221 Mon Jul 21 15:08 - down (8+17:46)
devin pts/1 10.0.2.221 Mon Jul 21 14:42 - 14:53 (00:11)
ac命令:ac命令根據當前的/var/log/wtmp文件中的登錄進入和退出來報告用戶連接的時間(小時),如果不使用標志,則報告總的時間。另外,可以加一些參數,例如,last -t 7表示顯示上一周的報告。
lastlog命令 lastlog文件在每次有用戶登錄時被查詢。可以使用lastlog命令檢查某特定用戶上次登錄的時間,并格式化輸出上次登錄日志 /var/log/lastlog的內容。它根據UID排序顯示登錄名、端口號(tty)和上次登錄時間。如果一個用戶從未登錄過,lastlog顯示 “**Never logged**”。注意需要以root身份運行該命令。運行該命令如下所示:
[root@working]# lastlog
Username Port From Latest
root pts/1 10.0.2.129 二 5月 10 10:13:26 +0800 2005
opal pts/1 10.0.2.129 二 5月 10 10:13:26 +0800 2005
2.使用Syslog設備
Syslog已被許多日志函數采納,被用在許多保護措施中,任何程序都可以通過syslog 記錄事件。Syslog可以記錄系統事件,可以寫到一個文件或設備中,或給用戶發送一個信息。它能記錄本地事件或通過網絡記錄另一個主機上的事件。
Syslog設備核心包括一個守護進程(/etc/syslogd守護進程)和一個配置 文件(/etc/syslog.conf配置文件)。通常情況下,多數syslog信息被寫到/var/adm或/var/log目錄下的信息文件中 (messages.*)。一個典型的syslog記錄包括生成程序的名字和一個文本信息。它還包括一個設備和一個優先級范圍。
系統管理員通過使用syslog.conf文件,可以對生成的日志的位置及其相關信息進行靈活配置,滿足應用的需要。例如,如果想把所有郵件消息記錄到一個文件中,則做如下操作:
#Log all the mail messages in one place
mail.* /var/log/maillog
其他設備也有自己的日志。UUCP和news設備能產生許多外部消息。它把這些消息存到自己的日志(/var/log/spooler)中并把級別限為\"err\"或更高。例如:
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
當一個緊急消息到來時,可能想讓所有的用戶都得到。也可能想讓自己的日志接收并保存。
#Everybody gets emergency messages, plus log them on anther machine
*.emerg *
*.emerg @linuxaid.com.cn
用戶可以在一行中指明所有的設備。下面的例子把info或更高級別的消息送到/var/log/messages,除了mail以外。級別\"none\"禁止一個設備:
#Log anything(except mail)of level info or higher
#Don\'t log private authentication messages!
*.info:mail.none;autHPriv.none /var/log/messages
在有些情況下,可以把日志送到打印機,這樣網絡入侵者怎么修改日志都不能清除入侵的痕跡。因此,syslog設備是一個攻擊者的顯著目標,破壞了它將會使用戶很難發現入侵以及入侵的痕跡,因此要特別注意保護其守護進程以及配置文件。
3.程序日志的使用
許多程序通過維護日志來反映系統的安全狀態。su命令允許用戶獲得另一個用戶的權限,所 以它的安全很重要,它的文件為sulog,同樣的還有sudolog。另外,諸如Apache等Http的服務器都有兩個日志: access_log(客戶端訪問日志)以及error_log(服務出錯日志)。 FTP服務的日志記錄在xferlog文件當中,Linux下郵件傳送服務(sendmail)的日志一般存放在maillog文件當中。
程序日志的創建和使用在很大程度上依賴于用戶的良好編程習慣。對于一個優秀的程序員來 說,任何與系統安全或者網絡安全相關的程序的編寫,都應該包含日志功能,這樣不但便于程序的調試和糾錯,而且更重要的是能夠給程序的使用方提供日志的分析 功能,從而使系統管理員能夠較好地掌握程序乃至系統的運行狀況和用戶的行為,及時采取行動,排除和阻斷意外以及惡意的入侵行為。
posted @
2012-03-22 14:12 Alpha 閱讀(1021) |
評論 (0) |
編輯 收藏
CentOS 5.5下FTP安裝及配置
一、FTP的安裝
1、檢測是否安裝了FTP :
[root@localhost ~]# rpm -q vsftpd
vsftpd-2.0.5-16.el5_5.1
否則顯示:[root@localhost ~]# package vsftpd is not installed
查看ftp運行狀態
service vsftpd status
2、如果沒安裝FTP,運行yum install vsftpd命令進行安裝
如果無法下載,需要設置好yum 如下
cd /etc/yum.repos.d
mv CentOS-Base.repo CentOS-Base.repo.save
wget http://centos.ustc.edu.cn/CentOS-Base.repo
3、完成ftp安裝后,將 /etc/vsftpd/user_list文件和/etc/vsftpd/ftpusers文件中的root這一行注釋掉
# root
4、執行 setsebool -P ftpd_disable_trans=1 修改SELinux 狀態
[root@localhost vsftpd]# setsebool -P ftpd_disable_trans=1
setsebool: SELinux is disabled.
5、修改/etc/vsftpd/vsftpd.conf,在最后一行處添加local_root=/
6、重啟ftp進程 #service vsftpd restart
注:每次修改過ftp相關的配置文件,都需要重啟ftp進程來生效。
安裝完成
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
vsftpd 文件布局
/etc/vsftpd/vsftpd.conf 主配置文件
/usr/sbin/vsftpd 主程序
/etc/rc.d/init.d/vsftpd 啟動腳本
/etc/pam.d/vsftpd PAM認證文件
/etc/vsftpd.ftpusers 禁止使用vsftpd的用戶列表文件
/etc/vsftpd.user_list 禁止或允許使用vsftpd用戶列表文件
/var/ftp 匿名用戶主目錄
/var/ftp/pub 匿名用戶下載目錄
/etc/logrotate.d/vsftpd.log 日志文件
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
二.系統帳戶
1.建立Vsftpd服務的宿主用戶:
[root@localhost]# adduser -d /data guest -s /sbin/nologin
默認的Vsftpd的服務宿主用戶是root,但是這不符合安全性的需要。www.linuxidc.com這里建立名字為vsftpd的用戶,用他來作為支持Vsftpd的
建立Vsftpd虛擬宿主用戶:
[root@linuxidc.com nowhere]# useradd virtusers -s /sbin/nologin
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
三 、vsftpd的配置
#anonymous_enable=YES
anonymous_enable=NO 設定不允許匿名訪問
local_enable=YES 設定本地用戶可以訪問。注意:如果該項目設定為NO那么所有虛擬用戶將無法訪問。
write_enable=YES 設定可以進行寫操作。
local_umask=022 設定上傳后文件的權限掩碼。
anon_upload_enable=NO 禁止匿名用戶上傳。
anon_mkdir_write_enable=NO 禁止匿名用戶建立目錄。
dirmessage_enable=YES 設定開啟目錄標語功能。
xferlog_enable=YES 設定開啟日志記錄功能。
connect_from_port_20=YES 設定端口20進行數據連接。
chown_uploads=NO 設定禁止上傳文件更改宿主。
chroot_local_user=YES 設定登陸后.只可以訪問自己的屬主目錄.不可訪問上一層目錄文件
xferlog_file=/var/log/vsftpd.log 設定Vsftpd的服務日志保存路徑。注意,該文件默認不存在。必須要手動touch出來,并且由于這里更改了Vsftpd的服務宿主
用戶為手動建立的Vsftpd。必須注意給與該用戶對日志的寫入權限,否則服務將啟動失敗。
xferlog_std_format=YES 設定日志使用標準的記錄格式
idle_session_timeout=600 設定空閑連接超時時間,這里使用默認。
data_connection_timeout=120 設定單次最大連續傳輸時間,這里使用默認
nopriv_user=vsftpd 設定支撐Vsftpd服務的宿主用戶為手動建立的Vsftpd用戶。注意,一旦做出更改宿主用戶后,必須注意一起與該服務相關的讀寫文件的讀寫賦權問題
比如日志文件就必須給與該用戶寫入權限等。
async_abor_enable=YES 設定支持異步傳輸功能。
ascii_upload_enable=YES
ascii_download_enable=YES 設定支持ASCII模式的上傳和下載功能。
ftpd_banner=Welcome to blah FTP service ^_^ 設定Vsftpd的登陸標語。
chroot_list_enable=NO 禁止用戶登出自己的FTP主目錄。
ls_recurse_enable=NO 禁止用戶登陸FTP后使用"ls -R"的命令。該命令會對服務器性能造成巨大開銷。如果該項被允許,那么擋多用戶同時使用該命
令時將會對該服務器造成威脅。
listen=YES 設定該Vsftpd服務工作在StandAlone模式下。
pam_service_name=vsftpd 設定PAM服務下Vsftpd的驗證配置文件名。
userlist_enable=YES 設定userlist_file中的用戶將不得使用FTP。
tcp_wrappers=YES 服務器使用tcp_wrappers作為主機的訪問控制方式。
以下這些是關于Vsftpd虛擬用戶支持的重要配置項目。默認Vsftpd.conf中不包含這些設定項目,需要自己手動添加配置。
guest_enable=YES 設定啟用虛擬用戶功能。
guest_username=virtusers 指定虛擬用戶的宿主用戶。
virtual_use_local_privs=YES 設定虛擬用戶的權限符合他們的宿主用戶。
user_config_dir=/etc/vsftpd/vconf 設定虛擬用戶個人Vsftp的配置文件存放路徑。也就是說,這個被指定的目錄里,將存放每個Vsftp虛擬用戶個性的配置文件,
一個需要注意的地方就是這些配置文件名必須和虛擬用戶名相同。保存退出。
max_clients= 99 服務器的最大并發數
max_per_ip=5 用戶最大線程數
anon_max_rate=1000000 設置本底賬號最大傳輸率為1Mbps
禁止某些IP段得主機匿名訪問服務器
tcp_wrappers=YES
編輯 /etc/hosts.allow
增加
vsftpd:192.168.110.11:DENY
查看ftp日志
xferlog_enable=YES 上傳和下載日志文件記錄 /var/log/vsftpd.log
xferlog_std_format=YES 傳輸日志文件將以標準xferlog的格式書寫 /var/log/xferlog
xferlog_file= /var/log/xferlog
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
通過本底數據文件實現虛擬用戶訪問
安裝db4-utils
yum install db4-utils
創建本地映射用戶,修改本底映射用戶目錄權限
useradd -d /data/ftp/temp -s /sbin/nologin game
chmod o=rwx /data/ftp/temp
修改 /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=zqgamexw
生成虛擬用戶文件
/etc/vsftpd/vsftpuser.txt
test001 虛擬user
123456 虛擬passwd
生成虛擬用戶數據文件
db_load -T -t hash -f /etc/vsftpd/vsftpuser.txt /etc/vsftpd/vsftpuser.db
修改生成的用戶數據文件權限
chmod 600 /etc/vsftpd/vsftpuser.db
修改PAM 認證文件 /etc/pam.d/vsftpd 注銷原有內容后添加
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpuser
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpuse
建立Vsftpd的日志文件,并更該屬主為Vsftpd的服務宿主用戶:
[root@localhost]# touch /var/log/vsftpd.log
[root@localhost]# chown vsftpd.vsftpd /var/log/vsftpd.log
建立虛擬用戶配置文件存放路徑:
[root@localhost]# mkdir /etc/vsftpd/vconf/
制作虛擬用戶數據庫文件
先建立虛擬用戶名單文件:
[root@localhost]# touch /etc/vsftpd/virtusers
建立了一個虛擬用戶名單文件,這個文件就是來記錄vsftpd虛擬用戶的用戶名和口令的數據文件,
這里給它命名為virtusers。為了避免文件的混亂,我把這個名單文件就放置在/etc/vsftpd/下。
編輯虛擬用戶名單文件:
[root@localhost]# vi /etc/vsftpd/virtusers
----------------------------
ftp001
123456
ftp002
123456
ftp003
123456
----------------------------
編輯這個虛擬用戶名單文件,在其中加入用戶的用戶名和口令信息。格式很簡單:“一行用戶名,一行口令”。3.生成虛擬用
戶數據文件:
[root@localhost]# db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
4.察看生成的虛擬用戶數據文件
[root@localhost]# ll /etc/vsftpd/virtusers.db
-rw-r--r-- 1 root root 12288 Sep 16 03:51 /etc/vsftpd/virtusers.db
需要特別注意的是,以后再要添加虛擬用戶的時候,只需要按照“一行用戶名,一行口令”的格式將新用戶名和口令添加進虛
擬用戶名單文件。但是光這樣做還不夠,不會生效的哦!還要再執行一遍“ db_load -T -t hash -f 虛擬用戶名單文件虛擬
用戶數據庫文件.db ”的命令使其生效才可以!
設定PAM驗證文件,并指定虛擬用戶數據庫文件進行讀取
1.察看原來的Vsftp的PAM驗證配置文件:
[root@localhost]# cat /etc/pam.d/vsftpd
----------------------------------------------------------------
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include system-auth
account include system-auth
session include system-auth
session required pam_loginuid.so
----------------------------------------------------------------
2.在編輯前做好備份:
[root@localhost]# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.backup
3.編輯Vsftpd的PAM驗證配置文件
[root@localhost]# vi /etc/pam.d/vsftpd
----------------------------------------------------------------
#%PAM-1.0
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/virtusers
account required /lib/security/pam_userdb.so db=/etc/vsftpd/virtusers
以上兩條是手動添加的,上面的全部加#注釋了.內容是對虛擬用戶的安全和帳戶權限進行驗證。
!!!!!!!這里有個要注意說明的:如果系統是64位系統在這里的所有lib后面要加入64!!!!!!
!!!!!!!如下這樣才可以:
#%PAM-1.0
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
五.虛擬用戶的配置
1.規劃好虛擬用戶的主路徑:
[root@localhost]# mkdir /opt/vsftp/
2.建立測試用戶的FTP用戶目錄:
[root@localhost]# mkdir /opt/vsftp/ftp001 /opt/vsftp/ftp002 /opt/vsftp/ftp003
3.建立虛擬用戶配置文件模版:
[root@localhost]# cp /etc/vsftpd/vsftpd.conf.backup /etc/vsftpd/vconf/vconf.tMP4.定制虛擬用戶模版配置文件:
[root@localhost]# vi /etc/vsftpd/vconf/vconf.tmp
--------------------------------
local_root=/opt/vsftp/virtuser
virtuser 這個就是以后要指定虛擬的具體主路徑。
anonymous_enable=NO
設定不允許匿名用戶訪問。
write_enable=YES
設定允許寫操作。
local_umask=022
設定上傳文件權限掩碼。
anon_upload_enable=NO
設定不允許匿名用戶上傳。
anon_mkdir_write_enable=NO
設定不允許匿名用戶建立目錄。
idle_session_timeout=600 (根據用戶要求.可選)
設定空閑連接超時時間。
data_connection_timeout=120
設定單次連續傳輸最大時間。
max_clients=10 (根據用戶要求.可選)
設定并發客戶端訪問個數。
max_per_ip=5 (根據用戶要求.可選)
設定單個客戶端的最大線程數,這個配置主要來照顧Flashget、迅雷等多線程下載軟件。
local_max_rate=50000 (根據用戶要求.可選)
設定該用戶的最大傳輸速率,單位b/s。
pam_service_name=vsftpd
chroot_local_user=YES
--------------------------------
這里將原vsftpd.conf配置文件經過簡化后保存作為虛擬用戶配置文件的模版。這里將并不需要指定太多的配置內容,主要的
框架和限制交由Vsftpd的主配置文件vsftpd.conf來定義,即虛擬用戶配置文件當中沒有提到的配置項目將參考主配置文件中
的設定。而在這里作為虛擬用戶的配置文件模版只需要留一些和用戶流量控制,訪問方式控制的配置項目就可以了。這里的關
鍵項是local_root這個配置,用來指定這個虛擬用戶的FTP主路徑。5.更改虛擬用戶的主目錄的屬主為虛擬宿主用戶:
[root@localhost]# chown -R virtusers.virtusers /opt/vsftp/
6.檢查權限:
[root@localhost]# ll /opt/vsftp/
total 24
drwxr-xr-x 2 overlord overlord 4096 Sep 16 05:14 ftp001
drwxr-xr-x 2 overlord overlord 4096 Sep 16 05:00 ftp002
drwxr-xr-x 2 overlord overlord 4096 Sep 16 05:00 ftp003
.給測試用戶定制:
1.從虛擬用戶模版配置文件復制:
[root@localhost]# cp /etc/vsftpd/vconf/vconf.tmp /etc/vsftpd/vconf/ftp001
2.針對具體用戶進行定制:
[root@localhost]# vi /etc/vsftpd/vconf/ftp001
---------------------------------
local_root=/opt/vsftp/ftp001 (FTP用戶ftp001 的登陸目錄文件)
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=300
data_connection_timeout=90
max_clients=1
max_per_ip=1
local_max_rate=25000
pam_service_name=vsftpd
chroot_local_user=YES
---------------------------------
七.啟動服務:
[root@localhost]# service vsftpd start
Starting vsftpd for vsftpd: [ OK ]
八.測試:
1.在虛擬用戶目錄中預先放入文件:
[root@localhost]# touch /opt/vsftp/ftp001/test.txt
2.從其他機器作為客戶端登陸FTP:
可以IE或FTP客戶端軟直接訪問
ie里輸入 ftp://127.0.0.1 (服務器IP)
彈出對話框后.輸入FTP用戶名和密碼
---------------------------------------------
注意:
在/etc/vsftpd/vsftpd.conf中,local_enable的選項必須打開為Yes,使得虛擬用戶的訪問成為可能,否則會出現以下現象:
----------------------------------
[root@localhost]# ftp
ftp> open 192.168.1.22
Connected to 192.168.1.22.
500 OOPS: vsftpd: both local and anonymous access disabled!
----------------------------------
原因:虛擬用戶再豐富,其實也是基于它們的宿主用戶virtusers的,如果virtusers這個虛擬用戶的宿主被限制住了,那么虛
擬用戶也將受到限制。
補充:
1.要查看服務器自帶的防火墻有無擋住FTP 21端口 導致不能訪問
2.查看 SELinux 禁用沒有.要禁用
3.500 OOPS:錯誤 有可能是你的vsftpd.con配置文件中有不能被實別的命令,還有一種可能是命令的YES 或 NO 后面有空格。
4.要仔細查看各個用到的文件夾權限,及用戶屬主權限等
1 如何新加FTP用戶
打開密碼文件里加入(一行是用戶.一是密碼.依次類推)
#vi /etc/vsftpd/virtusers
加入用戶后 保存退出
#db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db (然后生成新的虛擬用數據文件)
#cp /etc/vsftpd/vconf/vconf.tmp d (新建d用戶,用虛擬用戶模板vconf.tmp文件生成d虛擬用戶文件)
#vi /etc/vsftpd/vconf/d (打開D虛擬用戶文件.在第一行最后加入該用戶對應的FTP目錄)
#mkdir /opt/vsftp/WWW (新建WWW目錄為d FTP用戶登陸目錄)
#service vsftpd restart
-------------------------------------------------------
2 如何修改FTP 用戶登陸密碼
打開密碼文件里加入(第一行是用戶.第二是密碼.依次類推,只要改對應用戶下面的密碼即可)
#vi /etc/vsftpd/virtusers
#db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db (然后生成新的虛擬用數據文件)
#service vsftpd restart
posted @
2012-02-02 16:49 Alpha 閱讀(5286) |
評論 (0) |
編輯 收藏
MySQL + PHP的模式在大并發壓力下經常會導致MySQL中存在大量僵死進程,導致服務掛死。為了自動干掉這些進程,弄了個腳本,放在服務器后臺通過crontab自動執行。發現這樣做了以后,的確很好的緩解了這個問題。把這個腳本發出來和大家Share。
根據自己的實際需要,做了一些修改:
SHELL腳本:mysqld_kill_sleep.sh
#!/bin/sh
mysql_pwd="root的密碼"
mysqladmin_exec="/usr/local/bin/mysqladmin"
mysql_exec="/usr/local/bin/mysql"
"/tmp"
mysql_timeout_log="$mysql_timeout_dir/mysql_timeout.log"
mysql_kill_timeout_sh="$mysql_timeout_dir/mysql_kill_timeout.sh"
"$mysql_timeout_dir/mysql_kill_timeout.log"
$mysqladmin_exec -uroot -p"$mysql_pwd" processlist | awk '{ print $12 , $2 ,$4}' | grep -v Time | grep -v '|' | sort -rn > $mysql_timeout_log
awk '{if($1>30 && $3!="root") print "'""$mysql_exec""' -e " "/"" "kill",$2 "/"" " -uroot " "-p""/"""'""$mysql_pwd""'""/"" ";" }' $mysql_timeout_log > $mysql_kill_timeout_sh
echo "check start
." >> $mysql_kill_timeout_log
echo `date` >> $mysql_kill_timeout_log
cat $mysql_kill_timeout_sh 把這個寫到mysqld_kill_sleep.sh。然后chmod 0 mysqld_kill_sleep.sh,chmod u+rx mysqld_kill_sleep.sh,然后用root賬戶到cron里面運行即可,時間自己調整。執行之后顯示:
www# ./mysqld_kill_sleep.sh
/usr/local/bin/mysql -e "kill 27549" -uroot -p"mysql root的密碼";
/usr/local/bin/mysql -e "kill 27750" -uroot -p"mysql root的密碼";
/usr/local/bin/mysql -e "kill 27840" -uroot -p"mysql root的密碼";
/usr/local/bin/mysql -e "kill 27867" -uroot -p"mysql root的密碼";
/usr/local/bin/mysql -e "kill 27899" -uroot -p"mysql root的密碼";
/usr/local/bin/mysql -e "kill 27901" -uroot -p"mysql root的密碼";
/usr/local/bin/mysql -e "kill 27758" -uroot -p"mysql root的密碼";
/usr/local/bin/mysql -e "kill 27875" -uroot -p"mysql root的密碼";
/usr/local/bin/mysql -e "kill 27697" -uroot -p"mysql root的密碼";
"kill 27888" -uroot -p"mysql root的密碼";
/usr/local/bin/mysql -e "kill 27861" -uroot -p"mysql root的密碼";
如果確認沒有問題了,把最后的cat修改為sh即可。本人改寫了下上面的腳本:
#!/bin/bash
mysql_pwd="密碼"
mysql_exec="/usr/local/mysql/bin/mysql"
mysql_timeout_dir="/tmp"
mysql_kill_timeout_sh="$mysql_timeout_dir/mysql_kill_timeout.sh"
"$mysql_timeout_dir/mysql_kill_timeout.log"
$mysql_exec -uroot -p$mysql_pwd -e "show processlist" | grep -i "Locked" >> $mysql_kill_timeout_log
for line in `$mysql_kill_timeout_log | awk '{print $1}'`
do
echo "$mysql_exec -uroot -p$mysql_pwd -e /"kill $line/"" >> $mysql_kill_timeout_sh
done
cat $mysql_kill_timeout_sh
很多時候!一不小心就鎖表!這里講解決鎖表終極方法!
案例一
mysql>showprocesslist;
參看sql語句,一般少的話
mysql>killthread_id;
就可以解決了,kill掉第一個鎖表的進程, 依然沒有改善.既然不改善,咱們就想辦法將所有鎖表的進程kill掉吧,簡單的腳本如下:
#!/bin/bash
mysql-uroot-e"show processlist"|grep-i"Locked">>locked_log.txt
forlinein`cat locked_log.txt | awk '{print$1}'`
do
echo"kill$line;">>kill_thread_id.sql
done
現在kill_thread_id.sql的內容像這個樣子
kill66402982;
kill66402983;
kill66402986;
kill66402991;
.....
好了,我們在mysql的shell中執行,就可以把所有鎖表的進程殺死了。
mysql>sourcekill_thread_id.sql
當然了,也可以一行搞定。
foridin`mysqladmin processlist | grep -i locked | awk '{print$1}'`
do
mysqladminkill${id}
done
案例二
如果大批量的操作能夠通過一系列的select語句產生,那么理論上就能對這些結果批量處理。但是mysql并沒用提供eval這樣的對結果集進行分析操作的功能。所以只能現將select結果保存到臨時文件中,然后再執行臨時文件中的指令。具體過程如下:
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)
案例三
MySQL + PHP的模式在大并發壓力下經常會導致MySQL中存在大量僵死進程,導致服務掛死。為了自動干掉這些進程,弄了個腳本,放在服務器后臺通過crontab自動執行。發現這樣做了以后,的確很好的緩解了這個問題。把這個腳本發出來和大家Share。根據自己的實際需要,做了一些修改:
SHELL腳本:mysqld_kill_sleep.sh
#!/bin/sh
mysql_pwd="root的密碼"
mysqladmin_exec="/usr/local/bin/mysqladmin"
mysql_exec="/usr/local/bin/mysql"
mysql_timeout_dir="/tmp"
mysql_timeout_log="$mysql_timeout_dir/mysql_timeout.log"
mysql_kill_timeout_sh="$mysql_timeout_dir/mysql_kill_timeout.sh"
mysql_kill_timeout_log="$mysql_timeout_dir/mysql_kill_timeout.log"
$mysqladmin_exec -uroot -p"$mysql_pwd" processlist | awk '{ print $12 , $2 ,$4}' | grep -v Time | grep -v '|' | sort -rn > $mysql_timeout_log
awk '{if($1>30 && $3!="root") print "'""$mysql_exec""' -e " "\"" "kill",$2 "\"" " -uroot " "-p""\"""'""$mysql_pwd""'""\"" ";" }' $mysql_timeout_log > $mysql_kill_timeout_sh
echo "check start ...." >> $mysql_kill_timeout_log
echo `date` >> $mysql_kill_timeout_log
cat $mysql_kill_timeout_sh
把這個寫到mysqld_kill_sleep.sh。然后chmod 0 mysqld_kill_sleep.sh,chmod u+rx mysqld_kill_sleep.sh,然后用root賬戶到cron里面運行即可,時間自己調整。執行之后顯示:
www# ./mysqld_kill_sleep.sh
/usr/local/bin/mysql -e "kill 27549" -uroot -p"mysql root的密碼";
/usr/local/bin/mysql -e "kill 27750" -uroot -p"mysql root的密碼";
/usr/local/bin/mysql -e "kill 27840" -uroot -p"mysql root的密碼";
/usr/local/bin/mysql -e "kill 27867" -uroot -p"mysql root的密碼";
/usr/local/bin/mysql -e "kill 27899" -uroot -p"mysql root的密碼";
/usr/local/bin/mysql -e "kill 27901" -uroot -p"mysql root的密碼";
/usr/local/bin/mysql -e "kill 27758" -uroot -p"mysql root的密碼";
/usr/local/bin/mysql -e "kill 27875" -uroot -p"mysql root的密碼";
/usr/local/bin/mysql -e "kill 27697" -uroot -p"mysql root的密碼";
/usr/local/bin/mysql -e "kill 27888" -uroot -p"mysql root的密碼";
/usr/local/bin/mysql -e "kill 27861" -uroot -p"mysql root的密碼";
如果確認沒有問題了,把最后的cat修改為sh即可。本人改寫了下上面的腳本:
#!/bin/bash
mysql_pwd="密碼"
mysql_exec="/usr/local/mysql/bin/mysql"
mysql_timeout_dir="/tmp"
mysql_kill_timeout_sh="$mysql_timeout_dir/mysql_kill_timeout.sh"
mysql_kill_timeout_log="$mysql_timeout_dir/mysql_kill_timeout.log"
$mysql_exec -uroot -p$mysql_pwd -e "show processlist" | grep -i "Locked" >> $mysql_kill_timeout_log
chmod 777 $mysql_kill_timeout_log
for line in `$mysql_kill_timeout_log | awk '{print $1}'`
do
echo "$mysql_exec -uroot -p$mysql_pwd -e \"kill $line\"" >> $mysql_kill_timeout_sh
done
chmod 777 $mysql_kill_timeout_sh
cat $mysql_kill_timeout_sh
是不是很方便呢!processlist命令的輸出結果顯示了有哪些線程在運行,可以幫助識別出有問題的查詢語句,兩種方式使用這個命令。
1、進入mysql/bin目錄下輸入mysqladmin processlist;
2、啟動mysql,輸入show processlist;
如果有SUPER權限,則可以看到全部的線程,否則,只能看到自己發起的線程(這是指,當前對應的MySQL帳戶運行的線程)。得到數據形式如下(只截取了三條):
mysql> show processlist;
+-----+-------------+--------------------+-------+---------+-------+----------------------------------+----------
| Id | User | Host | db | Command | Time| State | Info
+-----+-------------+--------------------+-------+---------+-------+----------------------------------+----------
|207|root |192.168.0.20:51718 |mytest | Sleep | 5 | | NULL
|208|root |192.168.0.20:51719 |mytest | Sleep | 5 | | NULL
|220|root |192.168.0.20:51731 |mytest |Query | 84 | Locked |
select bookname,culture,value,type from book where id=001
先簡單說一下各列的含義和用途,第一列,id,不用說了吧,一個標識,你要kill一個語句的時候很有用。user列,顯示單前用戶,如果不是root,這個命令就只顯示你權限范圍內的sql語句。host列,顯示這個語句是從哪個ip的哪個端口上發出的。呵呵,可以用來追蹤出問題語句的用戶。db列,顯示這個進程目前連接的是哪個數據庫。command列,顯示當前連接的執行的命令,一般就是休眠(sleep),查詢(query),連接(connect)。time列,此這個狀態持續的時間,單位是秒。state列,顯示使用當前連接的sql語句的狀態,很重要的列,后續會有所有的狀態的描述,請注意,state只是語句執行中的某一個狀態,一個sql語句,已查詢為例,可能需要經過copying to tmp table,Sorting result,Sending data等狀態才可以完成,info列,顯示這個sql語句,因為長度有限,所以長的sql語句就顯示不全,但是一個判斷問題語句的重要依據。
這個命令中最關鍵的就是state列,mysql列出的狀態主要有以下幾種:
Checking table
正在檢查數據表(這是自動的)。
Closing tables
正在將表中修改的數據刷新到磁盤中,同時正在關閉已經用完的表。這是一個很快的操作,如果不是這樣的話,就應該確認磁盤空間是否已經滿了或者磁盤是否正處于重負中。
Connect Out
復制從服務器正在連接主服務器。
Copying to tmp table on disk
由于臨時結果集大于tmp_table_size,正在將臨時表從內存存儲轉為磁盤存儲以此節省內存。
Creating tmp table
正在創建臨時表以存放部分查詢結果。
deleting from main table
服務器正在執行多表刪除中的第一部分,剛刪除第一個表。
deleting from reference tables
服務器正在執行多表刪除中的第二部分,正在刪除其他表的記錄。
Flushing tables
正在執行FLUSH TABLES,等待其他線程關閉數據表。
Killed
發送了一個kill請求給某線程,那么這個線程將會檢查kill標志位,同時會放棄下一個kill請求。MySQL會在每次的主循環中檢查kill標志位,不過有些情況下該線程可能會過一小段才能死掉。如果該線程程被其他線程鎖住了,那么kill請求會在鎖釋放時馬上生效。
Locked
被其他查詢鎖住了。
Sending data
正在處理Select查詢的記錄,同時正在把結果發送給客戶端。
Sorting for group
正在為GROUP BY做排序。
Sorting for order
正在為ORDER BY做排序。
Opening tables
這個過程應該會很快,除非受到其他因素的干擾。例如,在執Alter TABLE或LOCK TABLE語句行完以前,數據表無法被其他線程打開。正嘗試打開一個表。
Removing duplicates
正在執行一個Select DISTINCT方式的查詢,但是MySQL無法在前一個階段優化掉那些重復的記錄。因此,MySQL需要再次去掉重復的記錄,然后再把結果發送給客戶端。
Reopen table
獲得了對一個表的鎖,但是必須在表結構修改之后才能獲得這個鎖。已經釋放鎖,關閉數據表,正嘗試重新打開數據表。
Repair by sorting
修復指令正在排序以創建索引。
Repair with keycache
修復指令正在利用索引緩存一個一個地創建新索引。它會比Repair by sorting慢些。
Searching rows for update
正在講符合條件的記錄找出來以備更新。它必須在Update要修改相關的記錄之前就完成了。
Sleeping
正在等待客戶端發送新請求.
System lock
正在等待取得一個外部的系統鎖。如果當前沒有運行多個mysqld服務器同時請求同一個表,那么可以通過增加--skip-external-locking參數來禁止外部系統鎖。
Upgrading lock
Insert DELAYED正在嘗試取得一個鎖表以插入新記錄。
Updating
正在搜索匹配的記錄,并且修改它們。
User Lock
正在等待GET_LOCK()。
Waiting for tables
該線程得到通知,數據表結構已經被修改了,需要重新打開數據表以取得新的結構。然后,為了能的重新打開數據表,必須等到所有其他線程關閉這個表。以下幾種情況下會產生這個通知:
FLUSH TABLES tbl_name, Alter TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE,或OPTIMIZE TABLE。
waiting for handler insert
Insert DELAYED已經處理完了所有待處理的插入操作,正在等待新的請求。大部分狀態對應很快的操作,只要有一個線程保持同一個狀態好幾秒鐘,那么可能是有問題發生了,需要檢查一下。
還有其他的狀態沒在上面中列出來,不過它們大部分只是在查看服務器是否有存在錯誤是才用得著。
posted @
2012-01-19 14:20 Alpha 閱讀(1939) |
評論 (0) |
編輯 收藏
MySql中添加用戶,新建數據庫,用戶授權,刪除用戶,修改密碼
1.新建用戶。
//登錄MYSQL
@>mysql -u root -p
@>密碼
//創建用戶
mysql> mysql> insert into mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_sub
ject) values("localhost","pppadmin",password("passwd"),'','','');
這樣就創建了一個名為:phplamp 密碼為:1234 的用戶。
然后登錄一下。
mysql>exit;
@>mysql -u phplamp -p
@>輸入密碼
mysql>登錄成功
2.為用戶授權。
//登錄MYSQL(有ROOT權限)。我里我以ROOT身份登錄.
@>mysql -u root -p
@>密碼
//首先為用戶創建一個數據庫(phplampDB)
mysql>create database phplampDB;
//授權phplamp用戶擁有phplamp數據庫的所有權限。
>grant all privileges on phplampDB.* to phplamp@localhost identified by '1234';
//刷新系統權限表
mysql>flush privileges;
mysql>其它操作
/*
如果想指定部分權限給一用戶,可以這樣來寫:
mysql>grant select,update on phplampDB.* to phplamp@localhost identified by '1234';
//刷新系統權限表。
mysql>flush privileges;
*/
3.刪除用戶。
@>mysql -u root -p
@>密碼
mysql>Delete FROM user Where User="phplamp" and Host="localhost";
mysql>flush privileges;
//刪除用戶的數據庫
mysql>drop database phplampDB;
4.修改指定用戶密碼。
@>mysql -u root -p
@>密碼
mysql>update mysql.user set password=password('新密碼') where User="phplamp" and Host="localhost";
mysql>flush privileges;
5.列出所有數據庫
mysql>show database;
6.切換數據庫
mysql>use '數據庫名';
7.列出所有表
mysql>show tables;
8.顯示數據表結構
mysql>describe 表名;
9.刪除數據庫和數據表
mysql>drop database 數據庫名;
mysql>drop table 數據表名;
posted @
2011-12-27 17:30 Alpha 閱讀(9841) |
評論 (0) |
編輯 收藏
搭建SVN服務,有效的管理代碼,以下三步可以快速搞定。
1、安裝
#yum install subversion
判斷是否安裝成功
#subversion -v
svnserve, version 1.6.11 (r934486)出現上面的提示,說明安裝成功。
有了SVN軟件后還需要建立SVN庫。
#mkdir /opt/svn/repos
#svnadmin create /opt/svn/repos
執行上面的命令后,自動在repos下建立多個文件, 分別是conf, db,format,hooks, locks, README.txt。
2、配置 上面的操作很簡單,幾個命令就搞定, 下面的操作也不難。
進入上面生成的文件夾conf下,進行配置, 有以下幾個文件authz, passwd, svnserve.conf
其中authz 是權限控制,可以設置哪些用戶可以訪問哪些目錄, passwd是設置用戶和密碼的, svnserve是設置svn相關的操作。
2.1先設置passwd
[users]
# harry = harryssecret
# sally = sallyssecret
hello=123
用戶名=密碼
這樣我們就建立了hello用戶, 123密碼
2.2 再設置權限authz
[/]
hello= rw
意思是hello用戶對所有的目錄有讀寫權限,當然也可以限定。
如果是自己用,就直接是讀寫吧。
2.3最后設定snvserv.conf
anon-access = none # 使非授權用戶無法訪問
auth-access = write # 使授權用戶有寫權限
password-db = password
authz-db = authz # 訪問控制文件
realm = /opt/svn/repos # 認證命名空間,subversion會在認證提示里顯示,并且作為憑證緩存的關鍵字。
采用默認配置. 以上語句都必須頂格寫, 左側不能留空格, 否則會出錯.
好了,通過以上配置,你的svn就可以了。
3、連接
啟動svn: svnserve -d -r /opt/svn/repos
svn默認端口是3690
如果已經有svn在運行,可以換一個端口運行
svnserve -d -r /opt/svn/repos --listen-port 3391
這樣同一臺服務器可以運行多個svnserver
好了,啟動成功后,就可以使用了。
建議采用TortoiseSVN, 連接地址為: svn://your server address (如果指定端口需要添加端口 :端口號)
連接后可以上傳本地的文件,有效的管理你的代碼。
svn 端口和常用命令
有效選項:
-d [--daemon] : 后臺模式
--listen-port 參數 : 監聽端口(后臺模式)
--listen-host 參數 : 監聽主機名或IP地址(后臺模式)
--foreground : 在前臺運行(調試時有用)
-h [--help] : 顯示這個幫助
--version : 顯示程序版本信息
-i [--inetd] : inetd 模式
-r [--root] 參數 : 服務根目錄
-R [--read-only] : 強制只讀成;優先于倉庫配置文件
-t [--tunnel] : 隧道模式
--tunnel-user 參數 : 隧道用戶名(模式是當前用戶UID的名字)
-X [--listen-once] : 監聽一次(調試時有用)
--pid-file 參數 : 將服務進程ID寫入文件ARG中
--service : 作為windows服務運行(僅SCM)[/quote]
你可以用--listen-port 指定端口
在httpd.conf中,查找Listen 80,將80修改為你想要的端口,svn默認端口是3690
為svnserve 加上--listen-port參數,比如svnserve -d -r d:\svn --listen-port 81
你可以采用svn+apache組合搭建,既可以設置你想要的端口,還可以以WEB形式訪問代碼庫
通過以上三步,可以快速的搭建起svn
SVN數據庫遷移方法
版本庫數據的移植:svnadmin dump、svnadmin load 導出:
$svnadmin dump repos > dumpfile //將指定的版本庫導出成文件dumpfile
新建:
$svnadmin create newrepos
導入:
$svnadmin load newrepos < dumpfile
posted @
2011-12-19 11:44 Alpha 閱讀(3903) |
評論 (0) |
編輯 收藏
DNS是域名系統(Domain Name System)的縮寫,它的作用是將主機名解析成IP(正向解析),從IP地址查詢其主機名(反向解析)。
DNS的工作原理
(1)客戶機發出查詢請求
當被詢問到有關本域中的主機名稱的時候,DNS服務器會直接做出回答。如果所查詢的主機名稱屬于其它域的話,則會檢查緩存中有沒有相關資料,如果沒有發現則會轉向root服務器查詢,然后root服務器會將該域名的授權(authoritative)服務器(可能會超過一臺)的地址告知本地服務器,然后會向其中的一臺服務器查詢,并將這些服務器名單存到緩存中以備將來之需(省去再向root查詢的步驟)。
(2)遠方服務器回應查詢
將查詢結果回應給客戶,并同時將結果存儲一個備份在自己的緩存里面,如果在存放時間尚未過時之前再接到相同的查詢,則以存放于緩存里面的資料來做回應。
DNS服務器分類
1.主域名服務器(master)
主域名服務器是一個域或區域的管理權威。這個服務器的主要責任就是解析域或區域內的所有主機的名稱??梢允褂靡粋€或多個輔域名服務器作為主域名服務器的備份。
2.輔域名服務器(slave)
輔域名服務器是備份服務器。它們不是域區源數據存放的地方,但它們也授權響應域名的查詢。輔域名服務器通常從域的主域名服務器獲得域區數據。輔服務器也被稱為從屬服務器。
3.唯高速緩存服務器(hint)
緩存服務器負責臨時存儲主域名服務器己解析過域名記錄。
打算用兩個vps,一個做主域名服務器,一個做輔助域名服務器。系統用的是CentOS5.6(32bit)。
Linux上常用的是bind,包括以下軟件包:
bind bind-libs bind-utils bind-chroot caching-nameserver
bind是DNS服務器軟件
bind-libs是bind使用的庫
bind-utils是bind查詢工具
caching-nameserver唯高速緩存服務器
一、安裝DNS服務器
1.開始安裝DNS服務器:
yum install bind bind-libs bind-utils bind-chroot
這里更新源上的版本是bind 9.3.6-16.P1.el5,DNS的配置文件放在/var/named/chroot目錄下。
2.復制配置規范文件:
cp /usr/share/doc/bind-9.3.6/sample/etc/* /var/named/chroot/etc
cp -a /usr/share/doc/bind-9.3.6/sample/var/named/* /var/named/chroot/var/named
相關配置文件說明:
主配置文件:/var/named/chroot/etc/named.conf 設置一般的named參數,指向該服務器使用的域數據庫的信息源。
根域名服務器指向文件:/var/named/chroot/var/named/named.root 指向根域名服務器,用于唯高速緩存服務器的初始配置。
正向解析文件:/var/named/chroot/var/named/localhost.zone localhost區文件,用于將名字localhost轉換為本地回送IP地址(127.0.0.1),正向解析。
反向解析文件:/var/named/chroot/var/named/named.local localhost區文件,用于將本地回送IP地址(127.0.0.1)轉換成名字localhost,反向解析。
3.嘗試啟動DNS服務器:
service named restart
顯示:
Stopping named: [ OK ]
Starting named: [FAILED]
查看系統日志:
cat /var/log/messages |grep named
發現錯誤:
my named[1384]: /etc/named.conf:100 configuring key ‘ddns_key’: bad base64 encoding
是沒有ddns_key造成的,執行/usr/sbin/dns-keygen來生成TSIG keys。然后替換named.conf中
secret “use /usr/sbin/dns-keygen to generate TSIG keys”;引號內的內容。
/usr/sbin/dns-keygen
5L6JQccNVZ53CHA3iW4VnPgDZXdcX3U3pnhL2txKUsaPqwBRddE58LpA7uiI
編輯/var/named/chroot/etc/named.conf文件,添加ddns_key:
vim /var/named/chroot/etc/named.conf
修改如下:
key ddns_key
{
algorithm hmac-md5;
secret “5L6JQccNVZ53CHA3iW4VnPgDZXdcX3U3pnhL2txKUsaPqwBRddE58LpA7uiI”;
};
添加好ddns_key后,重啟named服務成功,但是DNS服務器還不能使用,需要進行其他配置。
4.我們看到在named.conf文件中有這樣幾個區塊:
options //設置data相關文件,對data/目錄要有寫的權限
logging //debug log
view “localhost_resolver” //本地解析,caching only nameserver
view “internal” //限定同一個局域網的內部用戶使用
key ddns_key //設置ddns key
view “external” //限制外部用戶請求這個DNS服務器
5.首先設置/var/named/chroot/var/named/data目錄的用戶和組為named:named:
cd /var/named/chroot/var/named
chown named:named data
6.為/var/named/chroot/var/named目錄添加寫權限:
cd /var/named/chroot/var
chmod g+w named
如果這個目錄沒有寫權限的話,named服務可以啟動,但是系統日志里會有,”the working directory is not writable”錯誤。
7.修改name.conf中view “external”區域內設置:
vim /var/named/chroot/etc/named.conf
recursion yes; //打開遞歸
allow-query-cache { any; }; //允許查詢緩存
8.再重啟DNS服務器:
service named restart
Stopping named: [ OK ]
Starting named: [ OK ]
啟動成功。
此時查看日志:
tail -30 /var/log/messages |grep named
沒有報錯即可。
9.設置開機自啟動:
chkconfig –level named 345 on
此時這個DNS服務器就可以使用了。
windows系統下修改網絡連接里的DNS服務器地址用ping、nslookup命令測試。
linux系統修改/etc/resolv.conf里的nameserver地址,使用host、dig、nslookup命令測試。
二、配置區域主域名服務器
以test.com域為例子:
www.test.com 192.168.1.100 //web服務
ns.test.com 192.168.1.101 //域名服務
work.test.com 192.168.1.100
mail.test.com 192.168.1.103 //郵件服務
ftp.test.com 192.168.1.104 //文件服務
1.編輯/var/named/chroot/etc/named.rfc1912.zones文件:
vim /var/named/chroot/etc/named.rfc1912.zones
在最后添加正向解析區域test.com:
zone “test.com” IN {
type master;
file “test.com.zone”;
allow-update { none; };
};
然后添加反向解析區域1.168.192.in-addr.arpa:
zone “1.168.192.in-addr.arpa” IN {
type master;
file “test.com.resv”;
allow-update { none; };
};
2.創建正向解析數據文件/var/named/chroot/var/named/test.com.zone:
cd /var/named/chroot/var/named
cp localhost.zone test.com.zone
3.編輯test.com.zone文件:
vim test.com.zone
修改如下
$TTL 86400
@ IN SOA @ root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS ns.test.com.
www IN A 192.168.1.100
ns IN A 192.168.1.101
work IN CNAME www
mail IN A 192.168.1.103
@ IN MX 10 mail.test.com.
ftp IN A 192.168.1.104
4.創建反向解析數據文件/var/named/chroot/var/named/test.com.resv:
cp named.local test.com.resv
5.編輯test.com.resv文件:
vim test.com.resv
修改如下
$TTL 86400
@ IN SOA localhost. root.localhost. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns.test.com.
100 IN PTR www.test.com.
101 IN PTR ns.test.com.
103 IN PTR mail.test.com.
104 IN PTR ftp.test.com.
6.編輯named.conf,將test.com區域加入到view “external”中:
vim /var/named/chroot/etc/named.conf
由于zone “test.com”是寫在named.rfc1912.zones文件中的,在view “external”中添加:
include “/etc/named.rfc1912.zones”;
7.重啟服務:
service named restart
此時客戶端請求解析test.com域會直接使用設置的參數,不會向根去詢問。
三、配置輔域名服務器
配置輔域名服務器相對來說簡單不少,只要主配置文件中加入一個區域,然后指定可以更新信息的主域名服務器就可以了,無需配置區域數據庫文件。
1.編輯/var/named/chroot/etc/named.rfc1912.zones文件:
vim /var/named/chroot/etc/named.rfc1912.zones
在最后添加正向解析區域test.com:
zone “test.com” IN {
type slave;
file “slaves/test.com.hosts”;
masters { 1.1.1.1; }; //這里填主DNS服務器IP
};
然后添加反向解析區域1.168.192.in-addr.arpa:
zone “1.168.192.in-addr.arpa” IN {
type slave;
file “slaves/test.com.resv”;
masters { 1.1.1.1; }; //這里填主DNS服務器IP
};
2.編輯named.conf,將named.rfc1912.zones文件加入到view “external”中:
vim /var/named/chroot/etc/named.conf
在view “external”中添加:
include “/etc/named.rfc1912.zones”;
3.設置/var/named/chroot/var/named/slaves目錄用戶和組為root:named:
cd /var/named/chroot/var/named
chown root:named slaves
為/var/named/chroot/var/named/slaves添加寫權限:
chmod g+w slaves
named用戶對slaves目錄沒有寫權限會同步不了主域名服務器上的解析數據文件。
4.重啟DNS服務:
service named restart
5.查看/var/named/chroot/var/named/slaves目錄:
產生test.com.hosts test.com.resv文件,說明更新成功。
需要注意:
1)主從服務器中正/反向zone名稱必須一致。
2)從服務器中file可指定相對路徑,也可指定絕對路徑。
3)需將輔助DNS服務器的首選DNS服務器指向為主DNS服務器。
參考資料:
http://www.cnblogs.com/cabin/archive/2010/10/18/1848168.html
http://www.linux.gov.cn/netweb/
http://blog.iuhux.com/2011/08/11/%E5%9C%A8centos%E7%9A%84vps%E4%B8%8A%E5%AE%89%E8%A3%85dns%E6%9C%8D%E5%8A%A1%E5%99%A8/
posted @
2011-11-21 16:25 Alpha 閱讀(3635) |
評論 (1) |
編輯 收藏
http://www.w3school.com.cn/wap/
posted @
2011-11-18 10:51 Alpha 閱讀(451) |
評論 (0) |
編輯 收藏