标签: linux

Linux的计划任务

嗯,很强的功能。比较简单实用。
淡水先说明一下,本文说的计划任务是指linux的Cronjob。
语法
下面是个简单的计划任务:

10 * * * * /usr/bin/php /www/virtual/username/cron.php > /dev/null 2>&1
它主要有两部分组成:
1.”10 * * * *” ,这是定时器。
2.其他部分是命令,它们会在命令行运行。

这个例子中,命令本身又有三个部分:
1.”/usr/bin/php”。PHP脚本通常不会自己执行,它需要通过PHP解析器来执行。
2.”/www/virtual/username/cron.php”。这个是需要执行的脚本的路径。
3.”> /dev/null 2>&1″。这部分是处理脚本的输出的。稍后我们详细说它。

定时器语法
就是上面计划任务的第一部分。它决定了何时执行计划任务。
它包含5部分:
1.分钟(0-59)
2.小时(0-23)
3.一个月的哪一天(1-31)
4.一年中的哪个月(1-12)
5.星期几(0是星期天)

星号
如果某个部分出现的是星号而不是数字,就是说明这个部分表示的时间全部会执行。
不太容易说清楚,看例子吧。

示例:
下面的计划任务会一直运行

* * * * * [command]
下面的计划任务会在每个小时的0分时运行(就是每小时执行一次)

0 * * * * [command]
下面依旧是一个每小时运行一次的计划任务。不过是在每个小时的一刻钟时运行的(1:15,2:15.。。)

15 * * * * [command]
下面的计划任务每天执行一次,在2:30分

30 2 * * * [command]
下面的计划任务是在每个月2号的午夜执行(比如:2010年2月2日00:00)

0 0 2 * * [command]
下面的计划任务会在每周一的每个小时0分钟时执行一次

0 * * * 1 [command]
下面的会每小时运行3次,在0分,10分,和20分时

0,10,20 * * * * [command]
下面是用除号“/”表示每多少运行一次。本例是每5分钟运行一次

*/5 * * * * [command]
还可以用“-”表示一个范围,如下表示5到10点的每个整点运行一次

0 5-10 * * * [command]
另外还有一个特殊的时间关键字“@reboot”,就是每次重启服务器时运行计划任务

@reboot [command]
设定和管理计划任务
编辑Crontab,来设定计划任务。使用下面的命令,会在vi里打开crontab的内容以供编辑:

crontab -e
如果你只想看看,不需要编辑,可以使用以下的命令

crontab -l
要删除crontab的内容,就是删除所有的计划任务,可以这样:

crontab -r
系统会询问“remove crontab for 用户名?”你敲下y,就删除了用户的crontab了

通过载入文件来设立计划任务

crontab cron.txt
这个要谨慎,因为这将会覆盖掉原本的计划任务的内容。

注释
注释使用#字符。例如:

# This cron job does something very important
10 * * * * /usr/bin/php /www/virtual/username/cron.php > /dev/null 2>&1
设定E-mail
默认情况下,计划任务的输出会发送到email,除非你取消他,或是定向到一个文件。这样设定MAILTO:

MAILTO=”username@example.com”
# This cron job does something very important
10 * * * * /usr/bin/php /www/virtual/username/cron.php > /dev/null 2>&1
使用PHP解析器
CGI脚本默认是可以执行的,但是php脚本不行。他们需要用php解析器来运行。这就是我们要把php解析器的路径放到php脚本前的原因。

* * * * * /usr/bin/php [path to php script]
有时候php解析器可能在这里”/usr/local/bin/php”。我们可以用下面的命令找到正确的路径:
输入:which php
系统反馈:/usr/local/bin/php

ok,我们就知道php解析器的路径了。

处理输出
如果你不处理输出,它们会发送mail到你的服务器账号里。

如果你在命令行尾添加”> /dev/null 2>&1″,输出将会丢弃。(其他命令后面接它也会丢弃输出)。

$ /usr/local/bin/php hello.php
Hello world
$ /usr/local/bin/php hello.php > /dev/null 2>&1
$
大于号(>)用于重定向输出。”/dev/null”是个空设备,输出到那里就会忽略掉。
“2>&1″是标准错误输出,定向到标准输出。也是到”/dev/null”.

输出到文件
输出到文件也是用的大于号“>”.

10 * * * * /usr/bin/php /www/virtual/username/cron.php > /var/log/cron.log
这将会每次都覆盖原来的输出。如果你想要的是追加到以前的输出后面,可以用两个大于号”>>”来处理。

10 * * * * /usr/bin/php /www/virtual/username/cron.php >> /var/log/cron.log
可执行脚本
你可以把php脚本当成CGI一样的来运行。只需要在开头的地方加上一行php解析器的路径(hello.php):

#!/usr/local/bin/php

再设置一下权限,使之可执行,比如chmod到755.
比如上面的hello.php,再 “chmod 755 hello.php”
直接运行:

$ ./hello.php
Hello world
$
这时,你的计划任务就可以这样写了

10 * * * * /www/virtual/username/hello.php
防止定时任务撞车
比如,你有一个每分钟都运行的计划任务,但是这个任务这分钟没有运行完成,下一分钟的计划任务也已经开始了。。这样也许会崩溃我们的服务器的。
我们可以通过文件锁来解决:

$fp = fopen(‘/tmp/lock.txt’, ‘r+’);
if(!flock($fp, LOCK_EX | LOCK_NB)) {
echo ‘Unable to obtain lock’;
exit(-1);
}
/* … */
fclose($fp);
过程:打开文件,判断文件是否锁定,锁定了就退出。这样第一个计划任务没运行结束时,文件不会关闭,也就没有解锁。
下一个时间触发的计划任务,也尝试打开文件,发现已被锁定,于是退出。这样就不会撞车了。

组织web访问计划任务
如果你用php写了计划任务,那你要保证其他人不可以从web访问到它。简单的方法是把这些脚本放到web目录外。
如果无法放到web目录外,可以在计划任务要执行的脚本的目录下,用.htaccess 文件控制:

deny from all

你也可以在php脚本里限制:

if (isset($_SERVER[‘REMOTE_ADDR’])) die(‘Permission denied.’);
这将保证,如果是从网络来的,会立即停止php脚本的执行。

By 淡水河边 in PHP, Work
http://www.tsingfeng.com/?p=456

[转]部署nginx反向代理及缓存

#tar xvf prce-8.00.tar.gz

#cd prce-8.00

#./configure

#make && make install

#useradd -s /sbin/nologin www

#cd ../

#tar –xvf ngx_cache_purge-1.2.tar.gz

#tar nginx-0.8.53.tar.gz

#cd nginx-0.8.53

#./configure –user=www –group=www –add-module=../ngx_cache_purge-1.2 –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_ssl_module

#make && make install

第四,修改并配置nginx

#cd /usr/local/nginx/conf

#vim nginx.conf

#nginx 运行的用户 user nobody;

#开启的进程数

worker_processes 1;

#定义错误日志的路径及其日志级别

error_log /usr/local/nginx/logs/error.log crit;

#nginx 的进程

pid logs/nginx.pid;

#specifiles the value for maximum file descriptors that can be opened by this process

#文件句柄数,和系统单进程打开的文件数相同,不必理会进程个数

worker_rlimit_nofile 65535;

events {

use epoll;

worker_connections 1024; #定义的是单个进程的连接数,该值受系统进程打开文件数限制,需要修改打开的文件句柄数,但是max_client = worker_proxesses X work_connextions,

}

http {

include mime.types;

default_type application/octet-stream;

#日志的格式

log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘

‘$status $body_bytes_sent “$http_referer” ‘

‘”request_method $scheme://$host$request_uri $server_protocol” $status $body_bytes_sent’

‘”$http_user_agent” “$http_x_forwarded_for”‘;

# 指定服务器名称哈希的大小,hash bucket size 等于一路处理器缓存大小,与server_names_hash_max_size 共同控制保存服务器名的HASH表

server_names_hash_bucket_size 128;

# 以下两项是设定客户端请求Header头缓存去的大小,4 为个数。128k 为大小。申请4个128k。当http 的uri太长或者request header 过大时会报414 Request URI too large 或者400 bad request

client_header_buffer_size 32k;

large_client_header_buffers 4 128k;

#HTTP请求的BODY 最大限制,若超出此值,报413 Request Entity Too Lager

client_max_body_size 8m;

#缓冲去代理用户请求的最大字节数,可以理解为先保存本地,然后在传给用户

client_body_buffer_size 32k;

#不允许客户端主动关闭连接,如果该项为设置在nginx的日志中可能出现499 错误

proxy_ignore_client_abort on;

#nginx 和后端服务器连接超时时间 发起握手等候响应时间

proxy_connect_timeout 5;

#连接成功后等候后端服务器响应时间,其实已经进入后端的排队等候处理

proxy_read_timeout 60;

#后端服务器数据回传时间,就是在规定的时间内后端服务器必须传完所有的数据

proxy_send_timeout 5;

#代理请求缓存去,该缓存去间保存用户的头信息,以供nginx进行规则处理一般只要保能保存下头信息即可

proxy_buffer_size 32k;

#告诉nginx保存单个用的几个buffer 最大用多少空间

proxy_buffers 4 64k;

#高负载下缓冲大小(proxy_buffers*2)

proxy_busy_buffers_size 128k;,

#设置缓存文件夹大小,如果大于该值,将从upstream 服务器传递请求,而不缓冲到磁盘上

proxy_temp_file_write_size 1024m;

#这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。

open_file_cache max=102400 inactive=20s;

#这个是指多长时间检查一次缓存的有效信息。

open_file_cache_valid 30s;

#open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除。

open_file_cache_min_uses 1;

#shutdown error display nginx version

# 关闭错误时的nginx 的版本显示

server_tokens off;

#open os function sendfile

# 打开高效的文件传输模式

sendfile on;

#tcp_nopush on;

tcp_nopush on; # 打开linux TCP_CORK,只有sendfile 打开时,该项才有效,用来发送系统HTTP response headers 设置选项的目的是告诉TCP协议不要仅仅为清空发送的缓存而发送报文段。通常三个设置TCPNOPUSH 插口选项。当请求长度超过报文段最大长度时,协议就好可能发出满长度的报文段,这样可以减少报文段的数量,减少的程度取决于每次发送的数量

keepalive_timeout 60;

tcp_nodelay on; #打开TCP_NODELAY 在包含了keepalived 才有效,上面的四项有效的提高了文件传输性能,用sendfile() 函数来转移大量的数据,协议会需要预先解决数据包包头部分,正常情况下包头很小,而且套接字上设置了TCP_NODELAY 。有包头的包将被立即传输,在一些情况下,因为包成功的被对方收到后需要请求对方确认,这样,大量的数据传输就会被延迟而且产生大量不必要的网络流量交换,但是在socket上是指了TCP_CORK ,就像个管道塞住塞子把带有包头的包填满数据,所有的数据根据大小进行填充,自动通过数据包发送出去,但是在数据传送完成是,需要把塞子打开

#开启gzip 的设置

#gzip on;

gzip on;

#设置允许压缩的页面的最小字节数,页面字节数从Header 头中的Content-Length中获取建议设置成大于1k的字节数,小于1k可能越压越大

gzip_min_length 1k;

#设置以16k为单位4倍申请内存做压缩结果缓存,默认值是申请跟原始数据相同大小的内存空间存储gzip压缩结果

gzip_buffers 4 16k;

#默认1.1 ,大部分浏览器支持gzip 压缩

gzip_http_version 1.1;

#设置压缩级别 压缩比率1-9,压缩比率越大,越消耗系统资源

gzip_comp_level 2;

#设置压缩列席

gzip_types text/plain application/x-javascript text/css application/xml;

#设置前端的缓存服务,如squid缓存经过nginx压缩的数据,该选项在做反向代理是设定压缩,后面参数为验证的header头信息,在做相应的压缩处理,

gzip_vary on;

#proxy_cache

# 该处设置的是缓存的目录及其设置的大小

proxy_cache_path /usr/local/nginx/proxy_temp levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;

#设置负载池

upstream backend_server {

server 192.168.2.194:80 ;

# 注weight设置的权重 max_fails 设置的是健康监测失败次数,timeout 设置超时时间 当然此处主要是设置nginx的反向代理及其缓存,对于nginx 的负载均衡,在以后的文章中再详细介绍

# server 192.168.2.107:80 weight=1 max_fails=2 fail_timeout=30s;

}

server {

#注:监听的端口号

listen 80;

#server_name localhost;

#设置监听的主机名

server_name freehat.blog.51cto.com;

if ($host !~ ‘freehat.blog.51cto.com’) {

return 403;

}

#charset koi8-r;

#access_log logs/host.access.log main;

location / {

root html;

index index.html index.htm;

}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html

#

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

#设置扩展名以gif .jpg .css 等结尾的静态文件缓存

location ~.*\.(gif|jpg|jpeg|png|bmp|sqf|js|css)$

{

#设置防盗链

valid_referers none blocked freehat.blog.51cto.com;

if ($invalid_referer) {

return 404

#如果后端的服务器返回502 504 执行超时等错误,自动将请求转发到upstream 负责均衡池中的另外一台服务器,实现故障转移

proxy_next_upstream http_502 http_504 error timeout invalid_header;

#进行缓存,使用web缓存去cache_one

proxy_cache cache_one;

#以域名,URI,参数组合成web缓存的Key值,Nginx根据Key值哈希,储存缓存内容到二级缓存目录内

#对不同的HTTP 状态码设置不同的缓存时间

proxy_cache_valid 200 304 12h;

proxy_cache_valid any 1m;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

#设定proxy_set_header Accept-Encoding 或者是后台服务器关闭gzip,该台机器才不会缓存被压缩的文件,造成乱码

proxy_set_header Accept-Encoding “none”;

# proxy_set_header Accept-Encoding “”; 同上面一项相同

#设置proxy_cache 支持后台设定的expires , 即使支持HTTP头信息定义的缓存规则

proxy_ignore_headers “Cache-Control” “Expires”;

if ( !-e $request_filename )

{

proxy_pass http://backend_server;

}注: 该项是如果client 请求的文件在cache 中保存,nginx 直接从cache中把对应的文件返还给client ,不会在去后端的Server 去取对应的文件

expires 1h; 设置过去的时间

}

#set don’t php jsp cgi in cache 设置php jsp cgi 不保存在cache中

location ~.*\.(php|jsp|cgi)?$

{

proxy_set_header Host $host;

proxy_set_header X-Forwarded-For $remote_addr;

proxy_pass http://backend_server;

}

#set js and css cache expire time 设置js|css 在浏览器中过期的时间

location ~ .*\.(js|css)

{

expires 1h;

}

#clean all cache 设置清除所有的cache

location ~/purge(/.*)

{

allow 127.0.0.1;

allow 192.168.2.0/24;

deny all;

proxy_cache_purge cache_one $host$1$is_args$args;

}

}

}

第五,启动机及其关闭nginx的命令

1 启动之前检查nginx的主配置文件是否有错误

# /usr/local/nginx/sbin/nginx -t

2 启动nginx的方式

# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

3 关闭nginx 的方式

# /usr/local/nginx/sbin/nginx -s stop

4 平滑启动nginx

#kill -HUP `cat /usr/local/nginx/logs/nginx.pid`

如何查看Nginx的运行状态:nginx_status

如何查看Nginx的运行状态信息?很简单,只要你在编译安装Nginx时添加了ngx_http_stub_status_module模块(一般都有的),然后
在配置文件里添加如下配置(高亮部分):

server {
listen 80;
server_name xxx;

location /status
{
stub_status on;
access_log off;
error_log off;
}

}
从浏览器中打开:http://www.yourdomain.com/status 可以看到类似以下的内容:
Active connections: 410
server accepts handled requests
30871298 30871298 105864919
Reading: 4 Writing: 8 Waiting: 398
active connections– 对后端发起的活动连接数
server accepts handled requests– nginx 总共处理了 30871298 个连接, 成功创建 30871298 次握手,总共处理了 105864919个请求
reading– nginx 读取到客户端的Header信息数
writing– nginx 返回给客户端的Header信息数
waiting– 开启 keep-alive 的情况下,这个值等于 active – (reading + writing),意思就是Nginx说已经处理完正在等候下一次请求指令的驻留连接
如果reading或writing的值很高,说明正在处理的数据量很大,可能是因为后端的php程序处理慢,拖了后腿,而一般来说,PHP之后以慢,是因为MYSQL,另一个原因很可能就是IO慢,或者客户端的网络慢(这种情况在国内常见些).因为CPU配置低的情况少见.

tar Removing leading from member names

tar: Removing leading `/’ from member names

备份打包时,默认为相对路径;而排除匹配式默认也是全路径匹配的所以,在打包时,会提示:“tar: Removing leading `/’ from member names”除非你使用-P参数或特定的参数指定。
它是tar命令为了避免不必要的错误而做的限制。如果用户在压缩文件时使用了绝对路径,那么tar会自动的剥离掉第一个‘/’。
例如,你想备份/etc的内容:
$tar -cvzf etc.gz /etc
生成了一个压缩包,那么在解压这个压缩包的时候,内容会被写入到/etc这个目录,可能潜在的造成风险。
经过tar剥离第一个’/’后,解压时压缩包的内容会被释放到当前目录,即:./etc。
如果非要使用绝对路径,那么请加-P参数。
如果想盖面解压缩目录,请加-C参数。

注意,如果出现tar: Exiting with failure status due to previous errors,是因为待压缩的文件夹是root权限创建的,而执行tar的时候未加sudo。

linux下出现You have new mail in

You have new mail in /var/spool/mail/root

在Linux的操作中,有的时候每敲一下回车,就出来You have new mail in /var/spool/mail/root的提示,究竟是为什么呢?

Linux 系统经常会自动发出一些邮件来提醒用户系统中出了哪些问题(收件箱位置:/var/mail/)。可是这些邮件都是发送给 root 用户的。出于系统安全考虑,通常不建议大家直接使用 root 帐户进行日常操作。所以要想点办法来让系统把发给 root 用户的邮件也给自己指定的外部邮箱发一份,或者是直接关闭此项服务。

1、关闭sendmail服务,这里介绍一种不用关闭sendmail服务的方法
echo “unset MAILCHECK” >> /etc/profile
source /etc/profile

关闭sendmail的功能:
chmod 0 /usr/sbin/sendmail
mv /usr/sbin/sendmail /usr/sbin/sendmail.bak
ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

清空 /var/spool/mail/root日志
cat /dev/null > /var/spool/mail/root
cat /dev/null>;/var/spool/mail/root

2、root邮件转发到自己的邮箱
方法一:
修改此文件
/etc/log.d/logwatch.conf
添加MailTo = root,xxx@xxx.com

方法二
/etc/aliases
添加root: xxx@xxx.com

注意:好像如果设置成和主机同域的,好像邮件就发不成,比如本机邮件就是moper.me,那么发这个就没法发,相应的发其他邮箱就可以成功。

关于“/etc/aliases”:

当sendmail收到一个要送给xxx的信时,它会依据/etc/aliases文件中的内容送给另一个使用者。这个功能可以创造一个只有在信件系统内才有效的使用者。例如mailing list就会用到这个功能,在 mailing list 中,我们可能会创造一个叫 redlinux@link.ece.uci.edu的 mailinglist,但实际上并没有一个叫redlinux的使用者。实际 aliases档的内容是将送给这个使用者的信都收给mailing list处理程式负责分送的工作。

/etc/aliases是一个文本文档,而sendmail需要一个二进位格式的 /etc/aliases.db。newaliases的功能传是将/etc/aliases转换成一个sendmail所能了解的db文件:

[root@centos ~]# newaliases

除root外的其它用的邮件可以通过在用户/home/下建立一个.forward文件实现转发:
//somebody
other1
other2
文件权限设为600,作用一样,但.forward可以由用户自行维护,而aliases则只有治理员才能修改。

设定~/.forward档案加入转寄目的即可。

linux命令-mutt

首先介绍一下mutt这个软件,它是一款基于文字界面的邮件客户端,非常小巧,但功能强大,可以用它来读写,回复保存和删除你的邮件,能在linux命令行模式下收发邮件附件。

我只讲它很小的一部分功能,因为我也是刚刚开始摸索这个软件。更多的用法请查阅官网:http://www.mutt.org

一、mutt的安装

yum -y install sendmail
#需要安装sendmail并开启防火墙的25端口,如果你需要收邮件110端口也要开
yum -y install mutt

二、配置信息

关于配置信息,有一点需要说明的,网上很多教程都说,编辑/root/.muttrc以修改配置文件,我想说的是,我在安装完成之后, /root目录下并没有 .muttrc 这个隐藏文件,你可以从其它地方复制过来,或者自己新建一个文件。这里我是复制的。

你可以通过find命令找到Muttrc这个文件,命令如下 find / -name Muttrc ,然后通过命令 cp /etc/Muttrc /root/.muttrc 复制到 /root 下后更名为 .muttrc ,然后你就可以编辑配置文件了。

#如果你收到的邮件乱码,设置以下信息

set charset=”utf-8″
set rfc2047_parameters=yes

#如果你想自定义发件人信息,需要进行如下设置

set envelope_from=yes
set use_from=yes
set from=root@itdhz.com
set realname=”itdhz”

安装完mutt后,在/usr/share/doc/mutt* 下有一份很好的手册,可以看一下。

三、邮件发送

语法:

mutt [-hnpRvxz][-a<文件>][-b<地址>][-c<地址>][-f<邮件文 件>][-F<配置文件>][-H<邮件草稿>][-i<文件>][-m<类型>] [-s<主题>][邮件地址]
参数:
 -a <文件> 在邮件中加上附加文件。
 -b <地址> 指定密件副本的收信人地址。
 -c <地址> 指定副本的收信人地址。
 -f <邮件文件> 指定要载入的邮件文件。
 -F <配置文件> 指定mutt程序的设置文件,而不读取预设的.muttrc文件。
 -h 显示帮助。
 -H <邮件草稿> 将指定的邮件草稿送出。
 -i <文件> 将指定文件插入邮件内文中。
 -m <类型> 指定预设的邮件信箱类型。
 -n 不要去读取程序培植文件(/etc/Muttrc)。
 -p 在mutt中编辑完邮件后,而不想将邮件立即送出,可将该邮件暂缓寄出。
 -R 以只读的方式开启邮件文件。
 -s <主题> 指定邮件的主题。
 -v 显示mutt的版本信息以及当初编译此文件时所给予的参数。
 -x 模拟mailx的编辑方式。
 -z 与-f参数一并使用时,若邮件文件中没有邮件即不启动mutt。

四、举例

这里我用自己备份网站的一段代码举例加以说明
echo “数据库备份,有问题可访问https://moper.me咨询” | mutt $MAIL_TO -s “数据库备份” -a /home/backup/$DataBakName

mutt $MAIL_TO -s “数据备份” -a /home/backup/moper.sql http://www.itdhz.com/post-179.html

linux重启命令init 6和reboot的区别

init命令用于改变操作系统的运行级别。
Init 6是重新启动机器。
reboot也是重新启动机器。
那么这两个命令到底有什么区别呢?

对这两个操作使用man命令看到的内容如下:

init 6 Stop the operating system and reboot to the state defined by the initdefault entry in /etc/inittab.
reboot – reboot performs a sync(1M) operation on the disks, and then a
multi- user reboot is initiated. See init(1M) for details.
“init 6″基于一系列/etc/inittab文件,并且每个应用都会有一个相应shutdown脚本。
“init 6″调用一系列shutdown脚本(/etc/rc0.d/K*)来使系统优雅关机;
“reboot”并不执行这些过程,reboot更是一个kernel级别的命令,不对应用使用shutdown脚本。
所以我们应该在通常情况下使用 init 6。
在出问题的状况下或强制重启时使用reboot。

reboot is a more aggresive command to use. init 6 is much graceful
use of `init 6` will give the cleanest and orderly reboot (init informs svc.startd of the runlevel change and will move to the appropriate milestone).
use of `shutdown -y -g0 -i6 **message**` will invoke init as well as give you grace period and messages to user (shutdown invoked the same as init above).
halt,reboot,poweroff will not run any of the shutdown scripts and should be last resort.

一些有用的iptables规则

iptables -I INPUT -p tcp –dport 80 -m connlimit –connlimit-above 30 -j REJECT
允许单个IP的最大连接数为 30

iptables -t filter -A INPUT -p tcp –dport 80 –tcp-flags FIN,SYN,RST,ACK SYN -m connlimit –connlimit-above 10 –connlimit-mask 32 -j REJECT
iptables限制单个地址的并发连接数量

iptables -t filter -A INPUT -p tcp –dport 80 –tcp-flags FIN,SYN,RST,ACK SYN -m connlimit –connlimit-above 10 –connlimit-mask 24 -j REJECT
使用iptables限制单个c类子网的并发链接数量

iptables -A INPUT -s 192.168.0.8|192.168.0.0/24 -p tcp –dport 22 -j ACCEPT
只允许某IP或某网段的机器进行SSH连接

iptables -A FORWARD -p TCP ! –syn -m state –state NEW -j DROP
丢弃坏的TCP包

iptables -A FORWARD -f -m limit –limit 100/s –limit-burst 100 -j ACCEPT
处理IP碎片数量,防止攻击,允许每秒100个

iptables -A FORWARD -p icmp -m limit –limit 1/s –limit-burst 10 -j ACCEPT
设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包

iptables -A FORWARD -m state –state INVALID -j DROP
iptables -A INPUT -m state –state INVALID -j DROP
iptables -A OUTPUT -m state –state INVALID -j DROP
禁止非法连接

iptables -N syn-flood
iptables -A INPUT -p tcp –syn -j syn-flood
iptables -A syn-flood -p tcp -m limit –limit 3/s –limit-burst 6 -j RETURN
iptables -A syn-flood -j REJECT
防止SYN攻击 轻量

iptables -A INPUT -p tcp –syn –dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp –syn –dport 22 -j ACCEPT
允许访问22端口

iptables -A INPUT -p tcp –syn –dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp –syn –dport 80 -j ACCEPT
允许访问80端口

iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT
禁止其他未允许的规则访问(注意:如果22端口未加入允许规则,SSH链接会直接断开。)

linux提高ssh安全性的方法

1. 修改sshd服务器的配置文件/etc/ssh/sshd_config,将部分参数参照如下修改,增强安全性。

# Port 5555
系统缺省使用22号端口,将监听端口更改为其他数值(最好是1024以上的高端口,以免和其他常规服务端口冲突),这样可以增加入侵者探测系统是否运行了 sshd守护进程的难度。

# ListenAddress 192.168.0.1
对于在服务器上安装了多个网卡或配置多个IP地址的情况,设定sshd只在其中一个指定的接口地址监听,这样可以减少sshd的入口,降低入侵的可能性。

# PermitRootLogin no
如果允许用户使用root用户登录,那么黑客们可以针对root用户尝试暴力破解密码,给系统安全带来风险。

# PermitEmptyPasswords no
允许使用空密码系统就像不设防的堡垒,任何安全措施都是一句空话。

# AllowUsers sshuser1 sshuser2
只允许指定的某些用户通过ssh访问服务器,将ssh使用权限限定在最小的范围内。

# AllowGroups sshgroup
同上面的AllowUsers类似,限定指定的用户组通过ssh访问服务器,二者对于限定访问服务器有相同的效果。

# Protocol 2
禁止使用版本1协议,因为其存在设计缺陷,很容易使密码被黑掉。
禁止所有不需要的(或不安全的)授权认证方式。

# X11Forwarding no
关闭X11Forwarding,防止会话被劫持。

# MaxStartups 5
sshd服务运行时每一个连接都要使用一大块可观的内存,这也是ssh存在拒绝服务攻击的原因。一台服务器除非存在许多管理员同时管理服务器,否则上面这 个连接数设置是够用了。
注意:以上参数设置仅仅是一个示例,用户具体使用时应根据各自的环境做相应的更改。

2. 修改sshd服务器的配置文件/etc/ssh/sshd_config的读写权限,对所有非root用户设置只读权限,防止非授权用户修改sshd 服务的安全设置。

# chmod 644 /etc/ssh/sshd_config

3. 设置TCP Wrappers。服务器默认接受所有的请求连接,这是非常危险的。使用TCP Wrappers可以阻止或允许应用服务仅对某些主机开放,给系统在增加一道安全屏障。这部分设置共涉计到两个文件:hosts.allow和 hosts.deny。
将那些明确允许的请求添加到/etc/hosts.allow中。如系统仅允许IP地址为192.168.0.15和10.0.0.11的主机使用 sshd服务,则添加如下内容:

# sshd:192.168.0.15 10.0.0.11
将需要禁止使用的信息添加到/etc/hosts.deny中。如对除了在hosts.allow列表中明确允许使用sshd的用户外,所有其他用户都禁 止使用sshd服务,则添加如下内容到hosts.deny文件中:

# sshd:All
注意:系统对上述两个文件的判断顺序是先检查hosts.allow文件再查看hosts.deny文件,因此一个用户在hosts.allow允许使用 网络资源,而同时在hosts.deny中禁止使用该网络资源,在这种情况下系统优先选择使用hosts.allow配置,允许用户使用该网络资源。

4. 尽量关闭一些系统不需要的启动服务。系统默认情况下启动了许多与网络相关的服务,因此相对应的开放了许多端口进行LISTENING(监听)。我们知 道,开放的端口越多,系统从外部被入侵的可能也就越大,所以我们要尽量关闭一些不需要的启动服务,从而尽可能的关闭端口,提供系统的安全性。
通过以上步骤基本上将sshd服务设置上可能出现的漏洞堵上了,不需要投资,只要我们稍微花点时间调整一下配置,就可极大提高系统的安全环境,何乐而不为呢?

另一个用U盘安装linux的方法

1、格式化优盘,文件系统FAT32类型,打开Disk Genius软件。
3、将U盘制作为启动盘,点击工具–>制作为USB-ZIP启动盘,等待结束,结束完毕后可以看到U盘里面有了一些文件。
4、打开grub4dos软件,将grub.exe、grldr、menu.lst三个文件复制到U盘中,并且建立一个boot的文件夹
后,将ios镜像文件解压后,会生成很多目录和网页文件,进入images目录后再进入pxeboot目录,把initrd.img和vmlinuz两个文件拷贝至我们在U盘里面新建的boot目录下。
5、修改U盘里面的menu.lst文件,在文件最后面加入如下内容:
title Linux Install Setup
root (hd0,0)
kernel /boot/vmlinuz root=/dev/hda1
initrd /boot/initrd.img
6、最后将iso文件拷贝至U盘,至此制作过程完毕。
7、用U盘启动安装linux。