Posts Tagged Linux

把sftp用户限制在自己的家目录中

  SSH最初是由程序员Tatu Yloenen开发,包括SSH协议和服务软件,英文全称为Secure Shell(即安全外壳)。它实现了密钥交换协议及主机和客户端认证协议,在传送数据时把所有数据都加密传输,在接收方再进行解密,以防止网络窃听的发生。
SSH已经有了很多商品化版本,而且还有多种Unix/Linux系统平台上的免费版本。本文将主要以Linux操作系统为服务器(在其它的Unix或 Unix的派生操作系统上的操作也一样),Windows操作系统为客户端,介绍免费的商业SSH版本的安装及其实现。其重点是Linux服务器的配置。

软件的获得和安装

软件的获得可从http://www.openssh.org下载OpenSSH,当前最新版本为3.6.1,或者从http://www.ssh.com/ 下载针对Linux的非商业版本,当前最新版本为3.2,具体地址为:
SSH服务器地址 http://www.ssh.com/support/downloads/secureshellserver/non-commercial.html
SSH客户端地址 http://www.ssh.com/support/downloads/secureshellwks/non-commercial.html(这是一个For Windows的版本)。
不管是OpenSSh还是SSH Communications Security公司的SSH版本,在使用功能上基本一样,只是前者完全免费,而后者使用时要注意许可协议。从使用角度上可考虑,笔者认为后者更好用一些。本文着重介绍后者的安装和使用。
从SSH Communications Security公司下载的SSH服务器是源代码方式,文件名为ssh-3.2.3.tar.gz,必须对其进行编译和安装之后才能够使用。
我们假设软件的下载目录为root用户的宿主目录,即“/root”目录。解压缩完成后会生成一个“ssh-3.2.3”的源代码目录,然后切换到源代码代码目录,进行软件安装前的配置,编译和安装。
安装成功后,在“/etc/”目录下会增加一个“ssh2”目录,这个目录是用来存放SSH服务器的所有配置文件;在“/usr/local/”目录下会生成“ssh3.2.3”子目录,它是SSH程序文件和其它文件的存放位置。

基本配置和应用

默认安装,每次重新启动系统后都要重复上述操作才能启动SSH服务器。为了保证SSH服务器每次开机时自动启动,还要在“/etc/rc.d/rc.local”文件(此文件类似于DOS下的autoexec.bat文件令)的最后加入以下内容:
#start ssh3.2
/usr/local/ssh2/sbin/sshd &
其中第一行为注释内容,第二行为启动SSH服务器并作为后台守护进程运行。
接下来要做的是配置SSH服务器,所有的配置都是通过修改“/etc/ssh2/sshd2_config”文件实现的。文件的默认配置已经能满足一般的要求。下面介绍几种比较常见的应用:

使超级用户root能够直接登录服务器
使用Telnet时root用户默认情况下不能直接从远程登录系统,一般要先以普通用户登录,然后,使用su切换到root身份,这也是出于安全性的考 虑。由于SSH使用了加密方式传输数据,所以可以放心地直接使用root登录服务器,那么我们需要将sshd2_config文件中的
#PermitRootLogin  yes
取消注释,然后,重新启动SSH服务器,即可通过SSH以root身份登录Linux服务器。当然,如果您要禁止超级用户登录的话,可将“yes”改为“no”即可。

允许或禁止某些用户或组用户使用SSH登录
要实现禁止用户或组使用SSH登录服务器,只需要修改sshd2_config文件中的以下几行内容:
#AllowUsers sj.*,s[[:digit:]]*,s(jl|amza)
#DenyUsers skuuppa,warezdude,31373
#DenyUsers don@untrusted.org
#AllowGroups staff,users
#DenyGroups guest,anonymou
可以根据自己的实际需要,取消注释符“#”,加入实际的用户名或者组名,然后重新启动SSH服务器即可禁止(或允许)某些用户或者组使用SSH,具体操作这里不再详述。

使用SFTP代替FTP传输文件
FTP(文件传输协议)是一种使用非常广泛的在网络中传输文件的方式,但是,它也同样存在被网络窃听的危险,因为它也是以明文传送用户认证信息。 其实在SSH软件包中,已经包含了一个叫作SFTP(Secure FTP)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义 上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但 是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。若要开启 SFTP功能可以修改sshd2_config文件的下列内容:
#   subsystem-sftp  sftp-server
去掉行首的“#”,然后重新启动SSH服务器,这样在进行SSH连接时就可以同时使用SFTP传输文件。

关于客户端设置
以上是对服务器的设置,其实在SSH服务器中已经包含了一些客户端工具(如SSH,SFTP工具)。但是,更多的客户端用户使用Windows系统,下面就对Windows上的客户端系统设置加以说明。
首先从上文给出的网址下载“SSHSecureShellClient-3.2.3.exe”文件并安装。安装完成后,在桌面上会产成两个快捷方 式,一个是“SSH Secure Shell Client”,用于远程管理,另一个是“SSH Secure File Transfer Client”,用于和服务器进行文件传输。在工具栏中点击“quick connnect”,输入正确的主机名和用户名,然后在弹出的对话框中输入密码完成登录,即可开始执行命令或者传输文件。在使用SFTP时,默认只能显示 用户的宿主目录的内容和非隐藏文件。但是,有时候您可能还要查看其它目录或者隐藏文件,这时只需要在菜单“eidt->setting-> file transfer”的选项中选中“show root directory”和“show hidden file”两个选项即可。

使普通用户仅使用SFTP而没有使用Shell的权限
默认情况下管理员给系统添加的账号将同时具有SFTP和SSH的权限。让普通用户使用shell执行命令也是有很大的安全隐患的,如果能够禁止用户使用shell执行命令而仅使用SFTP传输文件,就能消除这种安全隐患,完全实现FTP的功能,
正如上文所述,SFTP没有单独的守护进程,只能借助于sshd守护进程,所以我们仍然需要使用SSH服务器,要保证sshd守护进程处于运行状态。具体实现方法如下:
首先,在编译安装时,编译中一定要有“–enable-static” 选项。安装成功后,在安装目录下的bin目录中执行下面的命令:
[root@localhost bin]#  ls  -l  ssh-dummy-shell*  sftp-server2*
将看到下列输出内容:
-rwxr-xr-x    1 root root 1350417 Apr 28 16:30 sftp-server2
-rwxr-xr-x    1 root root 3566890 Apr 28 16:30 sftp-server2.static
-rwxr-xr-x    1 root root 72388 Apr 28 16:30 ssh-dummy-shell
-rwxr-xr-x    1 root root 1813412 Apr 28 16:30 ssh-dummy-shell.static
其中带“static”后缀名,且比较大的两个文件就是加上“–enable-static”选项后生成的,后面我们将用到这里两个文件。
下面以添加普通账号test为例讲述具体操作步骤。
1.在“/home”目录(或者将要存放普通用户宿主目录的目录)下创建“bin”子目录,并将两个static文件复制到此目录下(复制后改名去掉static后缀),执行如下命令:
[root@localhost bin]# cd /usr/local/ssh3.2/bin
[root@localhost bin]#cp ssh-dummy-shell.static  /home/bin/ssh-dummy-shell
[root@localhost bin]# cp sftp-server2.static /home/bin/sftp-server
[root@localhost bin]#chown  -R  root.root  /home/bin
[root@localhost bin]#chmod  -R  755  /home/bin
2.添加一个组,使以后所有禁止使用shell的用户都属于这个组,这样便于管理更多的用户:
[root@localhost bin]#groupadd  template
3.在添加系统账号时使用如下命令:
[root@localhost root]#useradd -s /bin/ssh-dummy-shell -g template test
[root@localhost root]#passwd test
[root@localhost root]#mkdir /home/test/bin
[root@localhost root]#cd /home/test/bin
[root@localhost bin]#ln /home/bin/ssh-dummy-shell ssh-dummy-shell
[root@localhost bin]#ln /home/bin/sftp-server sftp-server
[root@localhost bin]#chown  -R  root.root  /home/test/bin
[root@localhost bin]#chmod  -R  755  /home/test/bin
3.用户添加成功后,还需要修改/etc/ssh2/sshd2_config文件,将下列内容:
#ChRootGroups  sftp,guest
改为:
ChRootGroups  sftp,guest,template
修改上面这行内容,主要是为了禁止普通用户查看系统的其它目录,把其权限限制在自己的主目录下。重新启动SSH服务器程序,在客户端使用SSH Secure File Transfer Client登录,即使选择显示根目录,普通用户也看不到其它的任何目录,而是把自己的主目录当作根目录。注意,这里使用的是按用户所属组限制,这样可以 使包含在template组内的所有用户都可以实现此功能。若您只要限制个别用户的话,可以修改下面的内容:
#ChRootUsers  anonymous,ftp,guest

, ,

No Comments

活用Linux的后台任务

Linux作为一个多任务环境,允许用户同时执行多项任务,例如查看系统情况、备份资料、编辑文件和打印文件等。

对于耗时长的任务不应该让它在前台任务中执行,而应该交给后台任务去执行。这样前台任务可继续正常运作其它的操作,不用等待。示例如下:
# find / -name testing &
# fg

如果想要让上面例子中的任务转为后台执行,就使用"& "。不过,由于是后台执行的,所以该程序的输出并不会出现在屏幕上。当用户将数个任务放到后台任务执行时,要如何去管理这些后台任务?怎么知道后台任务的 执行情况?如何终止或暂时停止后台任务的执行?下面就来逐一说明。

控制管理

举例如下:

# du -a /user > user.data &[1] 237# find / -name core -type f -ls > core.data &[2] 238

如上通过"&"命令将三个任务放到后台中执行。用命令"jobs -l"显示后台任务的执行情况,举例如下:

#jobs -l[1] + 237 Running du -a /user > user.data[2] - 238 Running find / -name core -type f -ls > core.data

首先介绍一个任务控制特有的名词:当前任务。上面的当前任务是"du -a /user > user.data",因为后台任务号码是"[1]"。如果当第一个后台任务顺利执行完毕,第二个后台任务还在执行中时,当前任务便会自动变成后台任务号 码"[2]"的后台任务。所以可以得出一点,即当前任务是会变动的。当用户输入"fg"、"bg"和"stop"等命令时,如果不加任何引号,则所变动的 均是当前任务。

终止后台任务

命令总是有出错的时候。当出现这种情况时,用户可用Shell的内置命令"kill"来结束任务。假如想要结束后台任务"du -a /user > user.data",可以用下面的命令:
# kill 237
# kill %1

其中,237为第一个后台任务的PID号码。如果想终止第二个后台任务,以下两种方法均可:
方法一:#kill %2
方法二:# kill %-

执行暂停任务

Shell的内置命令"stop"可用来暂停后台任务。示例如下:
stop % (停止第一个后台任务的执行)
stop %n (停止第n个后台任务的执行)

了解命令"stop"的使用后,便可将想要停止的后台任务暂停执行。例如用户要将一个年度报表用 "nroff"命令整理,因为文件量十分庞大,所以将它放到后台中执行。命令如下:
#nroff -ms moonth[1-12].acct > year2003.acct &
[4] 240

当命令处理到一半的时候发觉moonth12.acct文件是旧的需要更新,这时用"jobs"命令查看到后台任务"[4]"还在执行中,但无法知道命令已经处理到哪一个月份。此时可输入下面的命令,将后台任务"[4]"先暂停执行:
#stop %4

然后查看文件year2003.acct的尾部判断是否已经处理到12月。如果还没有执行到,那么可以将moonth12.acct文件 的资料更新,再用命令"bg"将已被暂时停止执行的后台任务"[4]"接着继续执行下去。这样不但可更正错误文件,而且不用将已处理完的任务重新再执行一 次。

方便之处

前台、后台任务确实可以给日常操作带来方便。因为,我们在日常操作中肯定会遇到同一时间要进行多个操作。这个时候如果不使用前台任务和后台任务,那么将要花费很多时间。熟练运用前台和后台任务能达到"时"半功倍。

No Comments

配置linux的防火墙

一般而言,防火墙的两个网络接口应分属两个不同的网络,根据系统管理员定义的访问规则 在两个接口之间转发数据包,或者拒绝、丢弃数据包。实际上,防火墙不单单是访问控制的功能,而且还充当了路由器的角色。当然,这并非有什么不妥当的地方, 但是当你企图把你配置好的linux防 火墙放入运行网络,来保护现有系统安全的时候,你不得不重新考虑和更改你的网络架构。另外一个可能的麻烦是,当防火 墙发生意外时,如果没有防火墙的硬件备份的话,那么你将面临巨大的心理压力,因为防火墙的故障,整个网络瘫痪了。假如你把防火墙配置成透明模式(可称为伪 网桥),就无需更改网络架构,即使是防火墙不能工作了,要做的仅仅是拔出网线,把网线直接插在路由器的内部接口就可以让网络正常工作,然后你就有时间慢慢 恢复发生故障的防火墙。

  好了,既然透明防火墙有那么多方便,我们赶快动手来配置吧!准备一台pc机,两块网 卡(建议用3com网卡),网线若干,redhat linux 9安装盘一套。打开机箱,把两块网卡插入计算机的pci插槽,用网线把计算机分别与网关和交换机相连(如前页图正常状态那样);盖上计算机的盖子,插 上电源,开机。在光驱里放上Linux 9安装光盘,由光盘引导计算机,从而安装Linux 系统。选择定制安装,不要保守,多花一点时间体验一下图形界面的安装乐趣,取消防火墙(no firewall),在安装快结束时选择以文本方式登录系统,完成安装。

  透明防火墙功能配置:

  1、设置网络地址。修改文件 /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1,使其具有相同的ip地址,相同的子网掩码。

  用vi 来编辑如下,保存文件,运行命令 service network restart 使修改生效。

DEVICE=eth0
BOOTPROTO=none
BROADCAST=192.168.1.255
IPADDR=192.168.1.254
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
USERCTL=no
PEERDNS=no
TYPE=Ethernet DEVICE=eth1
BOOTPROTO=none
BROADCAST=192.168.1.255
IPADDR=192.168.1.254
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
USERCTL=no
PEERDNS=no
TYPE=Ethernet

  这里需要注意两个地方,第一个是要区分清楚那一个网卡是eth0,那一个是 eth1.这个问题十分关键,如果搞混了就会导致防火墙不能连通网络。至于怎样区分eth0 eth1,我将在文章的末尾作简单的描述。在这里假定与路由器相连的网卡是eth0.

  2、设置默认路由。在文件 /etc/sysconfig/network-scripts/ifcfg-eth0 中加入一行 gateway=192.168.1.1 保存后运行命令 service network restart ,修改生效。找一个开放ICMP协议的公网IP,用命令ping 202.108.36.196 www.163.com 的主机)检测跟外网的连通状况,如果正常,表明Linux防火墙主机跟外网配置正确。再用命令ping 192.168.1.18 检测防火墙主机与内网主机的连通状况,如果正常则进行下一步操作。

  3、启用网络转发和proxy_arp 。这是透明防火墙的核心部分,我把它们写进文件/etc/rc.d/rc.local。用vi /etc/rc.d/rc.local 插入如下内容。

#Ip forward
/sbin/sysctl -w net.ipv4.conf.all.forwarding=1

#Enable proxy-arp
/sbin/sysctl -w net.ipv4.conf.eth0.proxy_arp=1
/sbin/sysctl -w net.ipv4.conf.eth1.proxy_arp=1

  在做这一步的时候,我曾经花费较多的时间,因为我做参考的那本书里的这一步没有参数 “–w” ,后来单独运行 sysctl net.ipv4.conf.eth0.proxy_arp=1 才发现red hat Linux 9 没有参数“-w”不能运行。

  4、 指定路由。由于两块网卡(eth0eth1)使用同样的ip ,如果不专门指定转发路径,一定会导致路由混乱,从而使防火墙以内的计算机没法访问 Internet 。还是用命令 vi 修改文件 /etc/rc.d/rc.local ,插入如下几行。

#Define route
/sbin/ip route del 192.168.1.0/24 dev eth0
/sbin/ip route add 192.168.1.1 dev eth0
/sbin/ip route add 192.168.1.0/24 dev eth1

  保存文件,重新启动计算机/Linux防火墙,如果不出意外,就可以从 192.168.1.18 这台主机访问Internet,当然内网的任何机器都是可以访问Internet 的。在这里对定义的路由(Define route)作些说明:/sbin/ip route del 192.168.1.0/24 dev eth0 表明所有到子网192.168.1.0/24的数据包都不从网卡eth0转发而从 eth1转发,即命令 /sbin/ip route add 192.168.1.0/24 dev eth1/sbin/ip route add 192.168.1.1 dev eth0 表明所有到192.168.1.1的数据包都由eth0转发,这其实可以理解为两个网卡数据转发的分工192.168.1.1 的数据包由eth0负责,其余的由eth1负责。到这一步,恭喜你!已经成功了一大半,如果安装Linux的时候,选择的防火墙规则为中等级别,那么这个 防火墙已经配置成功了。相信大家跟我一样,且肯就此罢休。

  定制防火墙策略

  都是2.4.20的内核版本,当然要用netfilter/iptables。由于安装Linux系统的时候,选择了无防火墙这个选项,那么在/etc/sysconfig 下将没有iptables这个文件存在。还是让我们随心所欲的来定制防火墙访问策略吧。

  在目录 /etc/rc.d 下创建脚本文件 myfirewall.sh,用命令 touch /etc/rc.d/myfirewall.sh并给文件执行权限 chmod 711 myfirewall。然后用 vi 编辑这个文件。

vi /etc/rc.d/myfirewall.sh
#!/bin/bash
#Define string
IPT=/sbin/iptables

#Refresh rules
$IPT -F FORWARD
$IPT -F INPUT
$IPT -F OUTPUT

#Default policy
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT

#Enable loopback
$IPT -A INPUT -i lo -p all -j ACCEPT

#Enable icmp
$IPT -A INPUT -p icmp –j ACCEPT

#Interface forward
$IPT -A FORWARD -s 192.168.1.0/24 -j ACCEPT
$IPT -A FORWARD -d 192.168.1.0/24 -j ACCEPT

#Enable ssh
$IPT -A INPUT -p tcp –dport 22 -j ACCEPT

#Add other access rule //可根据实际情况添加或减少规则
$IPT -A INPUT -p tcp –dport 20 -j ACCEPT
$IPT -A INPUT -p tcp –dport 21 -j ACCEPT
$IPT -A INPUT -p tcp –dport 80 -j ACCEPT
$IPT -A INPUT -p tcp –dport 53 -j ACCEPT
$$IPT -A INPUT -p udp –dport 53 -j ACCEPT
$IPT -A INPUT -p tcp –dport 23 -j ACCEPT
$IPT -A INPUT -p tcp –dport 110 -j ACCEPT
$IPT -A INPUT -p tcp –dport 25 -j ACCEPT
$IPT -A INPUT -p tcp –dport 443 -j ACCEPT

  我写的这个规则只开放了较少的允许访问的策略(可以ping ,收发邮件,浏览网页,sshhttpstelnetftp,其它的访问则全部丢弃)。$IPT –A OUTPUT ACCEPT 没有设置成DROP的原因是由于大部分网络服务所使用的协议是tcp协议,众所周知,tcp协议是面向连接的,如果设置 $IPT –A OUTPUT DROP, 那么任何协议为tcp的连接就要写两条了。况且防火墙对外的访问总是允许的,因此这样做是为了简化规则。

  修改完成后保存,然后在当前目录运行命令 ./myfirewall.sh,在上述脚本没有书写错误的情况下,规则生效,但它仅仅在内存里,用命令 service iptables save 将自动生成文件 /etc/sysconfig/iptables,前面设定的访问策略就被保存到硬盘,系统重启时,系统将自动地从文件 /etc/sysconfig/iptables 获得定制的访问策略。

  到这里,一个透明的linux 防火墙就架设好了。更改计算机的BIOS设置,使它可以在没有键盘的情况下启动系统。启用ftp,以便可以在需要时可以向防火墙主机拷贝文件。把键盘和显示器拿掉,剩下的操作只是摁一下电源开关。

  防火墙的管理

  可能有时候我们需要更改防火墙的某些规则,或者做些别的管理,既然我们是系统管理 员,再插上键盘和接上显示器坐在防火墙面前可能会被人耻笑,因此这些管理工作当然通过网络来进行。Sshwebmin是我的偏好,ssh的协议端口是 22webmin的默认协议端口是10000。其中sshlinux系统的默认服务 ,只要安装客户端就可以(windows下的程序securecrt 是个不错的选择,据说ssh连接速度没有vnc 快)对防火墙进行所有的管理(和直接操作防火墙主机一样);webmin是基于web的图形界面管理方式,非常的方便和直观,尽管它不能象ssh那样对系 统进行完全的管理,但是对于我们的工作需求还是可以满足,建议在防火墙系统安装webmin服务器程序。Sshwebmin两者结合使用,可以帮助我们 较快较深入地掌握Linux

  Ssh客户端安装较为简单,而webmin不需要安装客户端。这里介绍webmin 服务器的安装:把webmin-1.110. tar.gz 下载到另外一台windows的硬盘里,然后用ftp把它复制到防火墙主机的ftp目录(如果你是linux高手,并不需要如此,只须以ssh方式登录防 火墙,用get/wget指令取得该文件),解开文件webmin-1.110.tar.gz tar –zxvf webmin-1.110.gz.tzr cd webmin-1.110 安装webmin ./setup.sh ,一路回车,创建一个webmin管理账户,安装完毕;在任何一台运行浏览器的地址栏输入防火墙的ip加上端口号10000就可以管理防火墙(http: //192.168.1.254:10000)

  以这种方式管理linux 网络的防火墙十分直观,并且选项十分详尽,就算不懂iptable语法的人也能容易的配置防火墙的访问规则。这里有一个技巧,假如你更改了某条访问规则导 致网络不能向外访问,不要慌,到防火墙跟前重启一下系统即可。万一更改规则发生不测并且规则已经写入硬盘,那么请你直接删除文件 /etc/sysconfig/iptables,然后再运行脚本 sh /etc/rc.d/myfirewall 再次重写文件/etc/sysconfig/iptables service iptables save 。有的系统管理员倾向于直接编辑/etc/sysconfig/iptables 文件,但是这需要更多的耐心和勇气。如果你是新手,建议你跟我一样,先写脚本,再生成iptables

  特别关注:

  最好把除路由器而外的整个网络放在防火墙的保护之中。如果象下图那样有同一

  网段的主机放在防火墙的前面,将导致严重的网络故障。实践表明,这台windows 主机的ip地址丢失了(网络属性的ip值还在,但用命令 ipconfig /all 则是 0.0.0.0),重启windows后提示ip地址冲突,更换同一网段内的任何一个未用的ip地址还是提示冲突。搞的我的两台邮件服务器和两台web服 务器停火,我还以为是中了邪门的病毒,直到后来我把tcp/ip协议卸载再安装才解决问题。经分析,是防火墙的路由导致这样的故障。强烈建议把所有的主机 放在防火墙的保护之下,以减少网络的复杂程度。另外,我们应该养成这样一种习惯在系统正常的情况下,如果更改了配置,请一定要用笔记录所作的更改,以便 在改出问题时我们能够快速准确的恢复,这种习惯更可运用到所有的IT管理工作,它是我的不传之密。

  附:区分eth0eth1的小技巧。把防火墙的一块网卡跟交换机相连,另外一块不 做任何连接,即另外一块网卡的网络连接是断开的;使用命令 ifconfig eth0 down 关闭网络接口eth0;用网络中的另一台计算机 ping 192.168.1.254 ,如果ping 通了则表明连接交换机的网络接口为eth1,另一块为eth0,还可以把网线交换一下另一网络接口,确认判断的正确性。

,

No Comments

在2.6内核下不编译内核给iptables添加模块

虽然是个不错的方法,而且进行的非常成功,但总觉得有点绕道的感觉,毕竟编译新的内核花费不了太多的时间。主要供不能重启的服务器作参考。

1,安装kernel源码
[root@jiecho]# yum install kernel-source

2,下载iptables-1.3.3.tar.bz2和patch-o-matic-ng-20050810.tar.bz2并解包,为了方便,我们都放在/usr/src下,
并把kernel和iptables做符号链接.
[root@jiecho]# cd /usr/src
[root@jiecho]# wget ftp://ftp.be.netfilter.org/pub/netfilter/iptables/iptables-1.3.3.tar.bz2
[root@jiecho]# wget ftp://ftp.be.netfilter.org/pub/netfilter/patch-o-matic-ng/snapshot/
patch-o-matic-ng-20050810.tar.bz2
[root@jiecho]# tar -jxvf iptables-1.3.3.tar.bz2
[root@jiecho]# tar -jxvf patch-o-matic-ng-20050810.tar.bz2
[root@jiecho]# ln -s linux-2.6.5-1.358 linux
[root@jiecho]# ln -s iptables-1.3.3 iptables

3,给netfilter打补丁,选择你要的模块,为了测试我就选择了ipp2p和time
[root@jiecho]# cd /usr/src/linux
[root@jiecho]# make mrproper
[root@jiecho]# make menuconfig
什么不做,保存退出,然后把Makefile改一下
[root@jiecho]# vi Makefile
把EXTRAVERSION = -1.358custom更改为EXTRAVERSION = -1.358
保持跟uname -a 的版本一致(可详细参考platinum兄弟的文章)
[root@jiecho]# cd /usr/src/patch-o-matic-ng-20050810
[root@jiecho]# ./runme ipp2p
[root@jiecho]# ./runme time
因为事先做好了符号链接,等问你kernel和iptables的位置的时候直接回车就行,
提示你是否添加ipp2p和time模块是就y确定,至此,netfilter的补丁打完了,如果你需要别的模块可以根据需要加上.

4,编译kernel的modules
[root@jiecho]# cd /usr/src/linux
[root@jiecho]# make menuconfig
在Device Drivers->Networking support->Networking options->Network packet filtering (replaces ipchains)
->IP: Netfilter Configuration中把下面的两项M选中.
TIME match support
IPP2P match support
然后保存退出
4,编译安装模块
下面就是最重要的步骤了,因为我们的原则是节省时间,不重新编译内核,而只编译其中的模块,
这点2.4的内核跟2.6的内核有所不同,郁闷了我一整天,2.4内核的模块是以*.o形式的,而2.6内核是以*.ko形式的,
这有个改变的方法,参考:http://blog.chinaunix.net/article.php?articleId=40742&blogId=2662
[root@jiecho]# make modules
HOSTCC scripts/basic/fixdep
HOSTCC scripts/basic/split-include
HOSTCC scripts/basic/docproc
HOSTCC scripts/conmakehash
HOSTCC scripts/kallsyms
CC scripts/empty.o
HOSTCC scripts/mk_elfconfig
MKELF scripts/elfconfig.h
HOSTCC scripts/file2alias.o
HOSTCC scripts/modpost.o
HOSTCC scripts/sumversion.o
HOSTLD scripts/modpost
HOSTCC scripts/pnmtologo
HOSTCC scripts/bin2c
到这里就可以ctrl+c中止了,因为我们不是要编译所有的模块,这样太浪费时间,而仅仅是netfilter的模块,
但是如果你直接执行make modules SUBDIRS=net/ipv4/netfilter就会出错,这就是2.4和2.6的区别,
我们先生成了scripts目录下的一系列需要的文件后就可以make modules SUBDIRS=net/ipv4/netfilter,
并用modpost等等把*.o文件生成为*.ko文件.
[root@jiecho]# make modules SUBDIRS=net/ipv4/netfilter
编译完成netfilter的模块后拷贝编译完成的模块
[root@jiecho]# cp /usr/src/linux/net/ipv4/netfilter/ipt_ipp2p.ko /lib/modules/2.6.5-1.358/kernel/net/ipv4/netfilter/
[root@jiecho]# cp /usr/src/linux/net/ipv4/netfilter/ipt_time.ko /lib/modules/2.6.5-1.358/kernel/net/ipv4/netfilter/
[root@jiecho]# chmod +x /lib/modules/2.6.5-1.358/kernel/net/ipv4/netfilter/ipt_ipp2p.ko
[root@jiecho]# chmod +x /lib/modules/2.6.5-1.358/kernel/net/ipv4/netfilter/ipt_time.ko
[root@jiecho]# depmod -a
5,编译iptables
[root@jiecho]# cd /usr/src/iptables
参照INSTALL文件我们进行编译安装
[root@jiecho]# make KERNEL_DIR=/usr/src/linux
会有错误编译不过
/usr/src/linux/include/linux/config.h:6:2: [root@jiecho]#error including kernel header in userspace; use the glibc headers instead!
我google了半天也没有找到是什么原因,就自己动手解决
[root@jiecho]# vi /usr/src/linux/include/linux/config.h把下面的三行注释掉
//#ifndef __KERNEL__
//#error including kernel header in userspace; use the glibc headers instead!
//#endif

然后重新编译安装
make KERNEL_DIR=/usr/src/linux
make install KERNEL_DIR=/usr/src/linux
完成安装以后测试一下
[root@jiecho]# iptables -V
[root@jiecho]# modprobe ipt_time
[root@jiecho]# modprobe ipt_ipp2p
[root@jiecho]# lsmod
ipt_time 2432 0
ipt_ipp2p 7552 0
ipt_REJECT 4736 1
ipt_state 1536 1
ip_conntrack 24968 1 ipt_state
iptable_filter 2048 1
ip_tables 13440 5 ipt_time,ipt_ipp2p,ipt_REJECT,ipt_state,iptable_filter
battery 6924 0
ipv6 184288 10
3c59x 30376 0
binfmt_misc 7176 1
nls_utf8 1536 4
ntfs 81516 4
dm_mod 33184 0
uhci_hcd 23708 0
button 4504 0
asus_acpi 8472 0
ac 3340 0
ext3 102376 4
jbd 40216 1 ext3
测试iptables
[root@jiecho]# iptables -A FORWARD -m ipp2p –edk –kazaa –bit -j DROP
[root@jiecho]# iptables -A INPUT -m time –timestart 8:00 –timestop 18:00 –days Mon,Tue,Wed,Thu,Fri
[root@jiecho]# iptalbes -L

,

No Comments

THINKPAD选购注意事项

一,对照IBM的装箱单核对包装箱内附件,这是验机器的第一步

  IBM随包装箱会放一张装箱单,这个东西现在一般机器都不带。

  单子上会列出包装箱内的所有附件。

  1、机器一台

  2、电池一块注:按行货的装相方法,电池和机器是分开的,因为香港人拿到机器要先验屏有无坏点, 所以电池就装在机器上了。

  3、适配器一套3头为英制,香港货和新加坡货都是这种。2头为美制,美国货是这样的。

  4、电话线一根,接猫上网的,现在很少人用了。

  5、说明书一套。多数均为T40版的,猜测是IBM为了节约成本,所以T40,T41,T42都用同一套说明书。

  6、小红帽两个。为将来原配的脏了更换的。

  7、固定螺丝一颗用来固定互换光区的,防止别人插拔。

  大概就是这些了!

  二,接下来就要看外观了,有没有划伤,毕竟外观也是很重要的

  三,开机先进BIOS,验证SN号

  开机进BIOS,先查看机器大概的配置,主频,内存,还有关键的两个号码,SN号和UUID号码

  SN号是机器唯一的序列号,没有重复的,从BIOS里查到的SN号要和包装箱的,机器背面的,还有用测试软件测出来的都对上,才算完整。

  UUID号码是主板序列号。只显示在BIOS里和包装箱上,这两处也要对上。另外要和用测试软件测出的UUID号也对上。如果机器主板被动过,那UUID号是会改变的。

  四,开始进入系统,测试屏幕

  这一步可以用专业的测试软件,网上有很多,我这里也备了一些,供大家测试。

  五,查看电池充电次数

  一般来说,不超过两次。如果是旧电池的,这一步是逃不过去的,而且以目前的技术,还没有哪个高手可以刷新充电次数

  六,上网查询保修期限和核对附件的编号

  网址为http://www-3.ibm.com/pc/support/site.wss/warranty/warranty.vm演示图片见图

  在TYPE一栏中输入机器型号,如2373在Serial#一栏中输入机器SN号,然后点Continue,或者点击开会出现保修信息。

  有本机器的保修期限和销售地。

  特别说明:因为过海关是机器和包装箱分开过的,然后到深圳再一对一的装箱,难免适配器和电话线装错,有可能造成这两个部件的号码和网站显示号码难以对上。除此之外,机器的硬盘编号,电池编号等等都是能对上的。

  另外,此编号是IBM为自己的配件所做的出厂编号,很多测试软件是测不出来的。

  七,检查是否带有COA标

如果还是不放心的话,最后一招:送到蓝快去检验。

,

No Comments

从“让人变懒的命令”谈各linux发行版本的哲学

Windows :

  • 命令:Ctrl+C Ctrl+V

  • 解释:windows放在一帮linux发行版中似乎有点格格不入,但谁让他是最流行的操作系统呢?的确这个命令体现了windows的哲学,互通性与简便性。呵呵!这也是互联网发展到今天出现了这么多雷同信息的缘故。本想写ctrl+alt+del的,可这不是批判大会。

  • 网站:www.microsoft.com

Redhat:

  • 命令:rpm (redhat progrem mangerment)

  • 解释:现在看起来rpm几乎成了所有linux发行必备的命令,设置成了一个标准,可见Redhat的号召力。起初linux的每一个软件都需要复杂的安装方式,也正是rpm包的出现,逐渐的将linux推向了桌面应用。方便、易用也就是redhat( 包括现在的fedora)的哲学,他们的目标就是将linux “傻瓜化”。

  • 网站:www.redhat.com

yellowdog:

  • 命令:yum (yellowdog update mangerment)

  • 解释:powerPC平台的用户也许还有所耳闻,i386的用户现在已经几乎看不到“黄狗”的影子了,但是从最新的redhat fedora上还能怀念这条经典的命令,更新的很快,但是更新离不开网络的支持。

  • 网站:www.yellowdoglinux.com

debian:

  • 命令:apt-get

  • 解释:一句apt-get命令就涵盖了几乎全部开源软件的安装,可见debian 就是GPL的确实体现。也是较早的采用了与rpm类似的deb安装包的模式对一个系统的定制,同时也体现出了“操作系统就是工具箱”这个来自unnix的理念。

  • 网站:www.debian.org

Gentoo:

  • 命令:emerge

  • 解释:类似于FreeBSD的哲学,但也许是linux的特殊性决定了它没有FreeBSDcvsup来的那么深入人心,也显得更加的专业化和精细化。其实光是其安装的过程就足以阻挡了绝大多数的“非专业人士”。

  • 网站:www.gentoo.org

FreeBSD:

  • 命令:cvsup ; make install clean

  • 解释:FreeBSD不是linux的发行版,但与其有许多相似之处。cvsup命令保证了FreeBSD的血统纯正;make install clean在保证其简洁之外也体现出了其高度的“洁癖”,对于软件包设置、发行版代码的种种近乎苛刻的限制,让人害怕是不是在使用一段时间后使用者也会出现不好的心理问题。

  • 网站:www.freebsd.org

汉澳:

  • 口号:气吞万里如虎
  • 解释:口气很大,非常的风趣幽默,开胃良药,无须多说,一看便知
  • 网站:www.shouji88.com

No Comments

合成SuSE10的DVD版本

本站提供了Open Suse10的本地下载

在很多论坛上看到有人说Suse的5张CD刻录太浪费(其实我一直用cd-rw刻录),于是想起了原先制作9.3的方法,依葫芦画瓢拿来一试,不错,成功!

  1. 下载光盘镜像,如果只有光盘而没有镜像,可以使用dd来制作,方法为:dd if=/dev/cdrom of=disk1.iso
  2. 建立文件夹:mkdir disk1 disk2 disk3 disk4 disk5
  3. 挂装镜像文件:
    • mount disk1.iso disk1 -o loop
    • mount disk2.iso disk2 -o loop
    • mount disk3.iso disk3 -o loop
    • mount disk4.iso disk4 -o loop
    • mount disk5.iso disk5 -o loop
  4. cp -rf disk1/boot .  #将disk下的文件复制到DVD的 /boot

    mkdir i586 i686 noarch #创建目录结构

  5. cat disk/suse/i586/MD5SUMS disk2/suse/i586/MD5SUMS disk3/suse/i586/MD5SUMS disk4/suse/i586/MD5SUMS disk5/suse/i586/MD5SUMS > i586/MD5SUMS  #合并校验文件,防止校验出错

    cat disk1/suse/i686/MD5SUMS disk2/suse/i686/MD5SUMS > i686/MD5SUMS

    cat disk1/suse/noarch/MD5SUMS disk2/suse/noarch/MD5SUMS disk3/suse/noarch/MD5SUMS disk4/suse/noarch/MD5SUMS disk5/suse/noarch/MD5SUMS > noarch/MD5SUMS

  6. mkisofs -o SuSE10_dvd.iso -b boot/loader/isolinux.bin -c boot/loader/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -l -P SuSE -r -T -V OpenSuSE_10 -x disk1/boot -x disk1/suse/i586/MD5SUMS -x disk1/suse/noarch/MD5SUMS -x disk1/suse/i686/MD5SUMS -x disk2/suse/i686/MD5SUMS -x disk2/suse/i586/MD5SUMS -x disk2/suse/noarch/MD5SUMS -x disk3/suse/i586/MD5SUMS -x disk3/suse/noarch/MD5SUMS -x disk4/suse/i586/MD5SUMS -x disk4/suse/noarch/MD5SUMS -x disk5/suse/i586/MD5SUMS -x disk5/suse/noarch/MD5SUMS -graft-points disk1 boot/=boot suse/i586/MD5SUMS=i586/MD5SUMS suse/noarch/MD5SUMS=noarch/MD5SUMS suse/i686/MD5SUMS=i686/MD5SUMS suse/=disk2/suse suse/=disk3/suse suse/=disk4/suse suse/=disk5/suse media.2/=disk2/media.2 media.3/=disk3/media.3 media.4/=disk4/media.4 media.5/=disk5/media.5  #漫长的制作过程
  7. 制作完成,生成SuSE10_dvd.iso镜像文件
    mount ./SuSE10_dvd.iso /mnt/cdrom -o loop
    ls /mnt/cdrom
  8. 如果全都正确说明你自己的DVD镜像已经制作完成了,剩下的任务就是刻盘安装了。


,

No Comments

精打细算用Linux

按:不知是从什么地方翻出的老文档(至少在RH7.3之前)老的有点落后,仅供参考。有部分命令是8.0后没有了的,而且核心还是2.4.*的。


所有的操作系统都要求"给我更多!"– 它们要求更多的磁盘空间,更多的内存,很高的cpu工作频率–令人欣慰的是拯救我们这些没有最新硬件的人的救世主出现了,是的,我说的是Linux。
 
虽然Linux作为网络操作系统很出色,但实际上,作为单用户的操作系统,工作在未连网的家庭PC上,它也是非常不错的。考虑到这种情况,你有很多方法可以从你的系统中挤出更多的资源,甚至在一台象仅有8M内存的486这样的老机器上也可以。
 
现在请记住你需要以 root 身份登录到系统来做下面的所有事情,我们的目的将有两个分支:使内存的使用量最小,和节省磁盘空间。
 
节省内存!
重新编译内核
内 核在没有安装到你的机器里以前就已经被编译好了,但是它是一个带有所有功能的内核,把每样东西都编译了进去。这就意味着它比你要专用的大。如果你从内核源 代码编译一个你自己的内核的话,它会比缺省的vmlinuz的内核小100kB以上。此外,这还有助于你了解如何编译内核。实际上,这十分简单。你要首先 设置,就是说你的内核里都需要什么功能。然后编译它就行了。Linux已经发展到了一个很高的阶段,以至于它内核的设置可以是图形化的。内核的源代码通常 在这里:/usr/src/linux。要运行图形界面的设置程序,执行这个命令 make menuconfig (这个是基于文本菜单的),或者执行 make xconfig (这个是在X中的图形界面),你将会看到一个很长的设置选项列表,在做选择以前,建议你仔细看看每一项所带的帮助提示。这些提示总是会给出合理的建议,你 应该遵循它。如此,你将会确切的得到那些你需要编译进你的内核的东西,而不包含其他。我也建议你读一读源码路径下的README文件。一旦你设置好了,退 出X(如果你运行了它),在文本模式下编译它,这样做没有笨重的X运行可以有更多的内存可用,编译起来快一些。执行 make dep ; make zImage ,然后去喝杯咖啡,做完这些,README文件会很通俗的解释你应如何使用这个新内核,我不再赘述。

停止某些服务!
当Linux 系统运行的时候,通常会有很多后台作业在运行,这些作业都是有特殊功能的,它们叫做deamon。例如 sendmail,是邮件的daemon,它处理所有邮件的发送和邮件递送安排。有许多这样的daemon在系统启动的时候开始运行,系统中有几个 runlevel,它们是一些启动和停止的服务的组合。例如,在通常的Linux系统的runlevel 1上,(这是单用户模式),就会明显地比多用户模式的runlevel 3需要较少的服务。缺省情况下,Linux 启动进入 runlevel 3。现在它会启动很多服务在这个runlevel上,它们中的一些对未连网的家庭PC来说没用。例如,你显然不想运行sendmail来浪费
宝 贵的内存。是的,它可以把邮件在root@localhost和someuser@localhost两个本地用户间发来发去,但是这会消耗系统资源,而 且没有丝毫用处。如何从一个runlevel里删去一项服务在RedHat里,这非常简单。系统管理是RedHat比其他发布强的地方。在以root登录 以后,启动X,然后在一个 xterm 里启动 tksysv ,这是一个图形界面的runlevel编辑器。你可以看到六个列,每个runlevel占一个。现在我们仅注意runlevel3就可以了,就是系统通常 启动进入的那个runlevel。每个列都有两部分,上面的是系统启动时开始执行的服务,下面的是在系统shutdown时停止的服务。你要做的就是选择 你想删去的项,然后按del,就是这样,另外记得在你退出以前保存你的修改。
哪些服务要留下,哪些要删去事实上,告诉你留哪些很简单。记住,所有的这些办法都是在runlevel 3上有效。这是几条要点:
kerneld – 如果没有它的话,那什么都工作不起来了!
syslog – 必须保留,来记录log信息。这些log在万一系统出现错误的时候,可以帮助你看看系统哪里出错了(实际上,在Linux系统里什么错误都不会出现)
keytable – 如果你还想使用键盘的话就得留下这个!
rc.local – 这是那些日常的工作启动的地方,在所有其他的服务都启动以后执行你仅仅需要上面的4项服务,没有它们,就象有人说的," 一切都歇菜了"
你可能想保留的服务
下面是一些要不要两可的服务,一些你可能想要保留的无关紧要的服务。你可能需要它们,或者喜欢它们。
crond – 它周期性的运行一些日常的作业,最重要的事情就是确保你的log文件不会太大。你可以在你需要的时候来运行它。
atd – 如果你想要使用 at ,你就需要这个deamon,也就是说,作业按你指定的时间来执行,在一个多用户的24小时都不停机的大系统中,人们通常使用它来指定在晚上运行一些非常 繁重的计算任务。但是在简单的家用机器上,一般不怎么使用,毕竟你是使用它的唯一的人。
gpm – 它可以让你在文本模式下使用鼠标,它仅在你工作在文本模式下的时候才有用, 而当你工作在X下的时候就是一种浪费。

节省磁盘空间
事实上,这里你没有什么可做的,除了删掉一些你不想要的包。RedHat有一个极好的,很容易使用的包管理系统,它会记录你硬盘上的几乎所有的非用户文件。每个安装到你的系统里的文件都是这些包的一部分,这些包能够被反安装。
如何删除一个包
在x中以命令行来运行 " glint ",这是一个图形界面的RedHat包管理系统,你会得到一个图形界面显示你的系统中安装的所有的包。这些包被分类,并以目录列表的形式显示出来。要删掉一个包,选择它,然后按一下右面的"uninstall"按钮就可以了。
我应该删掉哪些包?
请 注意,有一些要紧的包是不应该被删除的。在glint里,通常比较可取的做法是不要动 base 和 library 的包,除非你确切的知道你到底在做什么。其他的,看看它们的描述(点 query 按钮)。如果你很久都没有使用一个包的话, 或者预计以后也不会用它,那么删掉它通常是安全的。万一删掉一个包会影响其他的包 的话,glint会告诉你。它很安全。如果你误删了一个一个包,你总能从光盘上重新安装 它的。

结尾
这些仅是你可以试试的建议。Linux你用的越多,尝试的越多,你就会从你的系统中
挤出更多的资源。

No Comments