Archive for the ‘Linux&Unix’ Category

Linux系统防火墙防止DOS和DDOS攻击

星期三, 10月 31st, 2007

虚拟主机服务商在运营过程中可能会受到黑客攻击,常见的攻击方式有SYN,DDOS等。通过更换IP,查找被攻击的站点可能避开攻击,但是中断服务的时间比较长。比较彻底的解决方法是添置硬件防火墙。不过,硬件防火墙价格比较昂贵。可以考虑利用Linux系统本身提供的防火墙功能来防御。

1. 抵御SYN
SYN攻击是利用TCP/IP协议3次握手的原理,发送大量的建立连接的网络包,但不实际建立连接,最终导致被攻击服务器的网络队列被占满,无法被正常用户访问。
Linux内核提供了若干SYN相关的配置,用命令:
sysctl -a | grep syn
看到:
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syn_retries = 5

tcp_max_syn_backlog是SYN队列的长度,tcp_syncookies是一个开关,是否打开SYN Cookie功能,该功能可以防止部分SYN攻击。tcp_synack_retries和tcp_syn_retries定义SYN的重试次数。

加大SYN队列长度可以容纳更多等待连接的网络连接数,打开SYN Cookie功能可以阻止部分SYN攻击,降低重试次数也有一定效果。

调整上述设置的方法是:
增加SYN队列长度到2048:
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
打开SYN COOKIE功能:
sysctl -w net.ipv4.tcp_syncookies=1
降低重试次数:
sysctl -w net.ipv4.tcp_synack_retries=3
sysctl -w net.ipv4.tcp_syn_retries=3

为了系统重启动时保持上述配置,可将上述命令加入到/etc/rc.d/rc.local文件中。

2. 抵御DDOS
DDOS,分布式拒绝访问攻击,是指黑客组织来自不同来源的许多主机,向常见的端口,如80,25等发送大量连接,但这些客户端只建立连接,不是正常访问。由于一般Apache配置的接受连接数有限(通常为256),这些“假” 访问会把Apache占满,正常访问无法进行。

Linux提供了叫ipchains的防火墙工具,可以屏蔽来自特定IP或IP地址段的对特定端口的连接。使用ipchains抵御DDOS,就是首先通过netstat命令发现攻击来源地址,然后用ipchains命令阻断攻击。发现一个阻断一个。

*** 打开ipchains功能
首先查看ipchains服务是否设为自动启动:
chkconfig –list ipchains
输出一般为:
ipchains 0:off 1:off 2:on 3:on 4:on 5:on 6:off
如果345列为on,说明ipchains服务已经设为自动启动
如果没有,可以用命令:
chkconfig –add ipchains
将ipchains服务设为自动启动
其次,察看ipchains配置文件/etc/sysconfig/ipchains是否存在。如果这一文件不存在,ipchains
即使设为自动启动,也不会生效。缺省的ipchains配置文件内容如下:

# Firewall configuration written by lokkit
# Manual customization of this file is not recommended.
# Note: ifup-post will punch the current nameservers through the
# firewall; such entries will *not* be listed here.
:input ACCEPT
:forward ACCEPT
:output ACCEPT
-A input -s 0/0 -d 0/0 -i lo -j ACCEPT
# allow http,ftp,smtp,ssh,domain via tcp; domain via udp
-A input -p tcp -s 0/0 -d 0/0 pop3 -y -j ACCEPT
-A input -p tcp -s 0/0 -d 0/0 http -y -j ACCEPT
-A input -p tcp -s 0/0 -d 0/0 https -y -j ACCEPT
-A input -p tcp -s 0/0 -d 0/0 ftp -y -j ACCEPT
-A input -p tcp -s 0/0 -d 0/0 smtp -y -j ACCEPT
-A input -p tcp -s 0/0 -d 0/0 ssh -y -j ACCEPT
-A input -p tcp -s 0/0 -d 0/0 domain -y -j ACCEPT
-A input -p udp -s 0/0 -d 0/0 domain -j ACCEPT
# deny icmp packet
#-A input -p icmp -s 0/0 -d 0/0 -j DENY
# default rules
-A input -p tcp -s 0/0 -d 0/0 0:1023 -y -j REJECT
-A input -p tcp -s 0/0 -d 0/0 2049 -y -j REJECT
-A input -p udp -s 0/0 -d 0/0 0:1023 -j REJECT
-A input -p udp -s 0/0 -d 0/0 2049 -j REJECT
-A input -p tcp -s 0/0 -d 0/0 6000:6009 -y -j REJECT
-A input -p tcp -s 0/0 -d 0/0 7100 -y -j REJECT

如果/etc/sysconfig/ipchains文件不存在,可以用上述内容创建之。创建之后,启动ipchains服:
/etc/init.d/ipchains start

*** 用netstat命令发现攻击来源
假如说黑客攻击的是Web 80端口,察看连接80端口的客户端IP和端口,命令如下:
netstat -an -t tcp | grep “:80″ | grep ESTABLISHED | awk ‘{printf “%s %s\n”,$5,$6}’ | sort
输出:
161.2.8.9:123 FIN_WAIT2
161.2.8.9:124 FIN_WAIT2
61.233.85.253:23656 FIN_WAIT2

第一栏是客户机IP和端口,第二栏是连接状态
如果来自同一IP的连接很多(超过50个),而且都是连续端口,就很可能是攻击。
如果只希望察看建立的连接,用命令:
netstat -an -t tcp | grep “:80″ | grep ESTABLISHED | awk ‘{printf “%s %s\n”,$5,$6}’ | sort

*** 用ipchains阻断攻击来源
用ipchains阻断攻击来源,有两种方法。一种是加入到/etc/sysconfig/ipchains里,然后重启动ipchains服务。另一种是直接用ipchains命令加。屏蔽之后,可能还需要重新启动被攻击的服务,是已经建立的攻击连接失效

* 加入/etc/sysconfig/ipchains
假定要阻止的是218.202.8.151到80的连接,编辑/etc/sysconfig/ipchains文件,在:output ACCEPT
行下面加入:
-A input -s 218.202.8.151 -d 0/0 http -y -j REJECT
保存修改,重新启动ipchains:
/etc/init.d/ipchains restart
如果要阻止的是218.202.8的整个网段,加入:
-A input -s 218.202.8.0/255.255.255.0 -d 0/0 http -y -j REJECT

* 直接用命令行
加入/etc/sysconfig/ipchains文件并重起ipchains的方法,比较慢,而且在ipchains重起的瞬间,可能会有部分连接钻进来。最方便的方法是直接用ipchains命令。
假定要阻止的是218.202.8.151到80的连接,命令:
ipchains -I input 1 -p tcp -s 218.202.8.151 -d 0/0 http -y -j REJECT
如果要阻止的是218.202.8的整个网段,命令:
ipchains -I input 1 -p tcp -s 218.202.8.0/255.255.255.0 -d 0/0 http -y -j REJECT
其中,-I的意思是插入,input是规则连,1是指加入到第一个。

您可以编辑一个shell脚本,更方便地做这件事,命令:
vi blockit
内容:
#!/bin/sh
if [ ! -z "$1" ] ; then
echo “Blocking: $1″
ipchains -I input 1 -p tcp -s “$1″ -d 0/0 http -y -j REJECT
else
echo “which ip to block?”
fi
保存,然后:
chmod 700 blockit
使用方法:
./blockit 218.202.8.151
./blockit 218.202.8.0/255.255.255.0

上述命令行方法所建立的规则,在重起之后会失效,您可以用ipchains-save命令打印规则:
ipchains-save
输出:
:input ACCEPT
:forward ACCEPT
:output ACCEPT
Saving `input’.
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -i lo -j ACCEPT
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 110:110 -p 6 -j ACCEPT -y
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 80:80 -p 6 -j ACCEPT -y
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 22:22 -p 6 -j ACCEPT -y
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 88:88 -p 6 -j ACCEPT -y
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 89:89 -p 6 -j ACCEPT -y
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 90:90 -p 6 -j ACCEPT -y
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 91:91 -p 6 -j ACCEPT -y
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 8180:8180 -p 6 -j ACCEPT -y
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 443:443 -p 6 -j ACCEPT -y
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 21:21 -p 6 -j ACCEPT -y
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 25:25 -p 6 -j ACCEPT -y
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 22:22 -p 6 -j ACCEPT -y
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 53:53 -p 6 -j ACCEPT -y
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 9095:9095 -p 6 -j ACCEPT -y
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 8007:8007 -p 6 -j ACCEPT -y
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 53:53 -p 17 -j ACCEPT
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 0:1023 -p 6 -j REJECT -y
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 2049:2049 -p 6 -j REJECT -y
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 0:1023 -p 17 -j REJECT
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 2049:2049 -p 17 -j REJECT
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 6000:6009 -p 6 -j REJECT -y
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 7100:7100 -p 6 -j REJECT -y
您需要把其中的”Saving `input’.”去掉,然后把其他内容保存到/etc/sysconfig/ipchains文件,这样,下次重起之后,建立的规则能够重新生效。

3. 如果使用iptables
RH 8.0以上开始启用iptables替代ipchains,两者非常类似,也有差别的地方。
* 启用iptables
如果/etc/sysconfig/下没有iptables文件,可以创建:
# Firewall configuration written by lokkit
# Manual customization of this file is not recommended.
# Note: ifup-post will punch the current nameservers through the
# firewall; such entries will *not* be listed here.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Lokkit-0-50-INPUT - [0:0]
-A INPUT -j RH-Lokkit-0-50-INPUT
-A RH-Lokkit-0-50-INPUT -i lo -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp –dport ftp -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp –dport ssh -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp –dport http -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp –dport smtp -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp –dport pop3 -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp –dport mysql -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp –dport 2001 -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp –dport domain -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p udp -m udp –dport domain -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp –dport 0:1023 –syn -j REJECT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp –dport 2049 –syn -j REJECT
-A RH-Lokkit-0-50-INPUT -p udp -m udp –dport 0:1023 -j REJECT
-A RH-Lokkit-0-50-INPUT -p udp -m udp –dport 2049 -j REJECT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp –dport 6000:6009 –syn -j REJECT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp –dport 7100 –syn -j REJECT
COMMIT
以上配置允许了ftp, ssh, http, smtp, pop3, mysql, 2001(Prim@Hosting ACA端口),domain端口。

* 启动iptables
/etc/init.d/iptables start

* 设置iptables为自动启动
chkconfig –level 2345 iptables on

* 用iptables屏蔽IP
iptables -I RH-Lokkit-0-50-INPUT 1 -p tcp -m tcp -s 213.8.166.227 –dport 80 –syn -j REJECT
注意到,和ipchains的区别是:
-I 后面跟的规则名称的参数和ipchains不同,不是统一的input,而是在/etc/sysconfig/iptables里定义的那个
多了-m tcp
指定端口的参数是–dport 80
多了–syn参数,可以自动检测sync攻击

使用iptables禁止ping:-A INPUT -p icmp -m icmp –icmp-type 8 -m limit –limit 6/min –limit-burst 2 -j ACCEPT-A INPUT -p icmp -m icmp –icmp-type 8 -j REJECT –reject-with icmp-port-unreachable

让sshd只支持密匙连接

星期三, 10月 31st, 2007

编辑文件/etc/ssh/sshd_config
修改以下选项

Protocol 2
PermitRootLogin no
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

编辑后保存,重启ssh

service sshd restart

tomcat中的server.xml元素详解

星期五, 10月 26th, 2007

11111111111111111111111111111111111111111111111111111111111111111111

安装GD库

星期二, 10月 23rd, 2007

安装libpng
www.libpng.org/pub/png/libpng.html
./configure –prefix=/usr/local
make && make install

安装jpegv6b
http://www.ijg.org/files/
cp /usr/share/libtool/config.guess .
cp /usr/share/libtool/config.sub .
./configure –prefix=/usr/local –enable-shared –enable-static
make && make install

安装FreeType2
http://www.freetype.org/
./configure –prefix=/usr/local
make && make install

安装GD Library
http://www.libgd.org/Main_Page
./configure \
LDFLAGS=”-L/usr/lib64 -L/lib64″ \
–prefix=/usr/local/gd \
–with-jpeg=/usr/local \
–with-png=/usr/local \
–with-zlib=/usr/local \
–with-freetype=/usr/localmake && make install

配置基于直接路由(DR)的LVS

星期一, 10月 22nd, 2007

现有服务器3台

director:
RIP 192.168.10.1
VIP 192.168.10.100

 ifconfig eth0:0 192.168.10.100 netmask 255.255.255.255 broadcast 192.168.10.100 up
ipvsadm -C
ipvsadm -A -t 192.168.10.100:80 -s rr
ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.2 -g
ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.3 -g

======================================================================

realserver1:
RIP 192.168.10.2
VIP 192.168.10.100

ifconfig lo:0 192.168.10.100 netmask 255.255.255.255 broadcast 192.168.10.100 up
route add -host 192.168.10.100 dev lo:0

在/etc/sysctl.conf中加入
net.ipv4.ip_forward = 0
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

======================================================================

realserver2:
RIP 192.168.10.3
VIP 192.168.10.100

ifconfig lo:0 192.168.10.100 netmask 255.255.255.255 broadcast 192.168.10.100 up
route add -host 192.168.10.100 dev lo:0

在/etc/sysctl.conf中加入
net.ipv4.ip_forward = 0
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

 ======================================================================

在realserver1服务器上执行

echo “server1″ > /usr/local/httpd/htdocs/index.html

在realserver2服务器上执行

echo “server2″ > /usr/local/httpd/htdocs/index.html

打开IE访问http://192.168.10.100

不停刷新 如果分别看到2个结果server1和server2表示配置成功 

在director服务器上用命令ipvsadm -l可查看状态

在面的实例中ipvsadm用到的几个参数含义如下:
-A 增加一个虚拟服务,该服务由协议、IP地址和端口号组成,例如:
-A -t 202.99.59.110:80 (增加一格虚拟服务,其协议(-t表示tcp,-u表示udp)为TCP、IP为202.99.59.110、端口号为80。

-s 指定服务采用的算法,常用的算法参数如下:

rr   轮叫(Round Robin)
调度器通过”轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务 器,而不管服务器上实际的连接数和系统负载。

wrr   加权轮叫(Weighted Round Robin)
调度器通过”加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

lc   最少链接(Least Connections)
调度器通过”最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用”最小连接”调度算法可以较好地均衡负载。

wlc   加权最少链接(Weighted Least Connections)
在集群系统中的服务器性能差异较大的情况下,调度器采用”加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

lblc   基于局部性的最少链接(Locality-Based Least Connections)
“基于局部性的最少链接” 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用”最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。

lblcr   带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
“带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按”最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按”最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

dh   目标地址散列(Destination Hashing)
“目标地址散列”调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

sh   源地址散列(Source Hashing)
“源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
/sbin/ipvsadm -a -t 192.168.1.110:http -r 192.168.1.12 -g -w 1

-a 表示往一个服务内增加一个real server

-r 指定real server的IP地址

-w 表示权重

-g 表示使用DR方式,-m表示NAT方式,-i表示tunneling方式。

ipvsadm安装

星期一, 10月 22nd, 2007

系统平台CentOS5.0

下载安装包
http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24-6.src.rpm

使用命令rpmbuild –rebuild ipvsadm-1.24-6.src.rpm
会提示有警告和错误 忽略
到目录/usr/src/redhat/SPECS/下编辑文件ipvsadm.spec

将第7行Copyright修改为License   保存退出

建立软连接ln -s /usr/src/kernels/2.6.18-8.el5-i686/ /usr/src/linux

生成二进制安装包
rpmbuild -ba /usr/src/redhat/SPECS/ipvsadm.spec

安装ipvsadm
rpm -ivh /usr/src/redhat/RPMS/i386/ipvsadm-1.24-6.i386.rpm

wget 使用技巧

星期五, 10月 19th, 2007

wget 是一个命令行的下载工具。对于我们这些 Linux 用户来说,几乎每天都在使用它。下面为大家介绍几个有用的 wget 小技巧,可以让你更加高效而灵活的使用 wget。

$ wget -r -np -nd http://example.com/packages/
这条命令可以下载 http://example.com 网站上 packages 目录中的所有文件。其中,-np 的作用是不遍历父目录,-nd 表示不在本机重新创建目录结构。

$ wget -r -np -nd –accept=iso http://example.com/centos-5/i386/
与上一条命令相似,但多加了一个 –accept=iso 选项,这指示 wget 仅下载 i386 目录中所有扩展名为 iso 的文件。你也可以指定多个扩展名,只需用逗号分隔即可。

$ wget -i filename.txt
此命令常用于批量下载的情形,把所有需要下载文件的地址放到 filename.txt 中,然后 wget 就会自动为你下载所有文件了。

$ wget -c http://example.com/really-big-file.iso
这里所指定的 -c 选项的作用为断点续传。

$ wget -m -k (-H) http://www.example.com/
该命令可用来镜像一个网站,wget 将对链接进行转换。如果网站中的图像是放在另外的站点,那么可以使用 -H 选项。

配置 vim 自动语法加亮

星期四, 10月 18th, 2007

1:找到 vim 的目录,如:/usr/share/vim/vim70
2:复制 vimrc_example.vim 到自己的 home 目录下:cp /usr/share/vim/vim70/vimrc_example.vim ~/.vimrc
3:重新打开 vim,现在就可自动对语法进行加亮了,在 /usr/share/vim/vim70/syntax/ 目录下有各种文件的定义

linux下挂载(mount)光盘镜像文件、移动硬盘、U盘、Windows和NFS网络共享

星期三, 10月 17th, 2007

linux是一个优秀的开放源码的操作系统,可以运行在大到巨型小到掌上型各类计算机系统上,随着 linux系统的日渐成熟和稳定以及它开放源代码特有的优越性,linux在全世界得到了越来越广泛的应用。现在许多企业的计算机系统都是由UNIX系统、Linux系统和Windows系统组成的混合系统,不同系统之间经常需要进行数据交换。下面我根据自己的实际工作经验介绍一下如何在linux系统下挂接(mount)光盘镜像文件、移动硬盘、U盘以及Windows网络共享和UNIX NFS网络共享。   挂接命令(mount)   首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的。   命令格式:   mount [-t vfstype] [-o options] device dir   其中:   1.-t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有:   光盘或光盘镜像:iso9660   DOS fat16文件系统:msdos   Windows 9x fat32文件系统:vfat   Windows NT ntfs文件系统:ntfs   Mount Windows文件网络共享:smbfs   UNIX(LINUX) 文件网络共享:nfs   2.-o options 主要用来描述设备或档案的挂接方式。常用的参数有:   loop:用来把一个文件当成硬盘分区挂接上系统   ro:采用只读方式挂接设备   rw:采用读写方式挂接设备   iocharset:指定访问文件系统所用字符集   3.device 要挂接(mount)的设备。   4.dir设备在系统上的挂接点(mount point)。   挂接光盘镜像文件   由于近年来磁盘技术的巨大进步,新的电脑系统都配备了大容量的磁盘系统,在Windows下许多人都习惯把软件和资料做成光盘镜像文件通过虚拟光驱来使用。这样做有许多好处:一、减轻了光驱的磨损;二、现在硬盘容量巨大存放几十个光盘镜像文件不成问题,随用随调十分方便;三、硬盘的读取速度要远远高于光盘的读取速度,CPU占用率大大降低。其实linux系统下制作和使用光盘镜像比Windows系统更方便,不必借用任何第三方软件包。   1、从光盘制作光盘镜像文件。将光盘放入光驱,执行下面的命令。    #cp /dev/cdrom /home/sunky/mydisk.iso 或    #dd if=/dev/cdrom of=/home/sunky/mydisk.iso    注:执行上面的任何一条命令都可将当前光驱里的光盘制作成光盘镜像文件/home/sunky/mydisk.iso   2、将文件和目录制作成光盘镜像文件,执行下面的命令。    #mkisofs -r -J -V mydisk -o /home/sunky/mydisk.iso /home/sunky/ mydir    注:这条命令将/home/sunky/mydir目录下所有的目录和文件制作成光盘镜像文件/home/sunky/mydisk.iso,光盘卷标为:mydisk   3、光盘镜像文件的挂接(mount)    #mkdir /mnt/vcdrom    注:建立一个目录用来作挂接点(mount point)    #mount -o loop -t iso9660 /home/sunky/mydisk.iso /mnt/vcdrom    注:使用/mnt/vcdrom就可以访问盘镜像文件mydisk.iso里的所有文件了。       挂接移动硬盘   对linux系统而言,USB接口的移动硬盘是当作SCSI设备对待的。插入移动硬盘之前,应先用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。   [root at pldyrouter /]# fdisk -l   Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes   255 heads, 63 sectors/track, 8924 cylinders   Units = cylinders of 16065 * 512 = 8225280 bytes   Device Boot Start End Blocks Id System   /dev/sda1 1 4 32098+ de Dell Utility   /dev/sda2 * 5 2554 20482875 7 HPFS/NTFS   /dev/sda3 2555 7904 42973875 83 Linux   /dev/sda4 7905 8924 8193150 f Win95 Ext’d (LBA)   /dev/sda5 7905 8924 8193118+ 82 Linux swap   在这里可以清楚地看到系统有一块SCSI硬盘/dev/sda和它的四个磁盘分区/dev/sda1 — /dev/sda4, /dev/sda5是分区/dev/sda4的逻辑分区。接好移动硬盘后,再用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况   [root at pldyrouter /]# fdisk -l   Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes   255 heads, 63 sectors/track, 8924 cylinders   Units = cylinders of 16065 * 512 = 8225280 bytes   Device Boot Start End Blocks Id System   /dev/sda1 1 4 32098+ de Dell Utility   /dev/sda2 * 5 2554 20482875 7 HPFS/NTFS   /dev/sda3 2555 7904 42973875 83 Linux   /dev/sda4 7905 8924 8193150 f Win95 Ext’d (LBA)   /dev/sda5 7905 8924 8193118+ 82 Linux swap   Disk /dev/sdc: 40.0 GB, 40007761920 bytes   255 heads, 63 sectors/track, 4864 cylinders   Units = cylinders of 16065 * 512 = 8225280 bytes   Device Boot Start End Blocks Id System   /dev/sdc1 1 510 4096543+ 7 HPFS/NTFS   /dev/sdc2 511 4864 34973505 f Win95 Ext’d (LBA)   /dev/sdc5 511 4864 34973473+ b Win95 FAT32   大家应该可以发现多了一个SCSI硬盘/dev/sdc和它的两个磁盘分区/dev/sdc1?、/dev/sdc2,其中/dev/sdc5是/dev/sdc2分区的逻辑分区。我们可以使用下面的命令挂接/dev/sdc1和/dev/sdc5。    #mkdir -p /mnt/usbhd1    #mkdir -p /mnt/usbhd2    注:建立目录用来作挂接点(mount point)    #mount -t ntfs /dev/sdc1 /mnt/usbhd1    #mount -t vfat /dev/sdc5 /mnt/usbhd2    注:对ntfs格式的磁盘分区应使用-t ntfs 参数,对fat32格式的磁盘分区应使用-t vfat参数。若汉字文件名显示为乱码或不显示,可以使用下面的命令格式。    #mount -t ntfs -o iocharset=cp936 /dev/sdc1 /mnt/usbhd1    #mount -t vfat -o iocharset=cp936 /dev/sdc5 /mnt/usbhd2   linux系统下使用fdisk分区命令和mkfs文件系统创建命令可以将移动硬盘的分区制作成linux系统所特有的ext2、ext3格式。这样,在linux下使用就更方便了。使用下面的命令直接挂接即可。    #mount /dev/sdc1 /mnt/usbhd1       挂接U盘   和USB接口的移动硬盘一样对linux系统而言U盘也是当作SCSI设备对待的。使用方法和移动硬盘完全一样。插入U盘之前,应先用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。   [root at pldyrouter root]# fdisk -l   Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes   255 heads, 63 sectors/track, 8924 cylinders   Units = cylinders of 16065 * 512 = 8225280 bytes   Device Boot Start End Blocks Id System   /dev/sda1 1 4 32098+ de Dell Utility   /dev/sda2 * 5 2554 20482875 7 HPFS/NTFS   /dev/sda3 2555 7904 42973875 83 Linux   /dev/sda4 7905 8924 8193150 f Win95 Ext’d (LBA)   /dev/sda5 7905 8924 8193118+ 82 Linux swap   插入U盘后,再用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。   [root at pldyrouter root]# fdisk -l   Disk /dev/sda: 73 dot 4 GB, 73407820800 bytes   255 heads, 63 sectors/track, 8924 cylinders   Units = cylinders of 16065 * 512 = 8225280 bytes   Device Boot Start End Blocks Id System   /dev/sda1 1 4 32098+ de Dell Utility   /dev/sda2 * 5 2554 20482875 7 HPFS/NTFS   /dev/sda3 2555 7904 42973875 83 Linux   /dev/sda4 7905 8924 8193150 f Win95 Ext’d (LBA)   /dev/sda5 7905 8924 8193118+ 82 Linux swap   Disk /dev/sdd: 131 MB, 131072000 bytes   9 heads, 32 sectors/track, 888 cylinders   Units = cylinders of 288 * 512 = 147456 bytes   Device Boot Start End Blocks Id System   /dev/sdd1 * 1 889 127983+ b Win95 FAT32   Partition 1 has different physical/logical endings:   phys=(1000, 8, 32) logical=(888, 7, 31)   系统多了一个SCSI硬盘/dev/sdd和一个磁盘分区/dev/sdd1,/dev/sdd1就是我们要挂接的U盘。   #mkdir -p /mnt/usb   注:建立一个目录用来作挂接点(mount point)   #mount -t vfat /dev/sdd1 /mnt/usb   注:现在可以通过/mnt/usb来访问U盘了, 若汉字文件名显示为乱码或不显示,可以使用下面的命令。   #mount -t vfat -o iocharset=cp936 /dev/sdd1 /mnt/usb   挂接Windows文件共享   Windows网络共享的核心是SMB/CIFS,在linux下要挂接(mount)windows的磁盘共享,就必须安装和使用samba 软件包。现在流行的linux发行版绝大多数已经包含了samba软件包,如果安装linux系统时未安装samba请首先安装samba。当然也可以到 www.samba.org网站下载……新的版本是3.0.10版。   当windows系统共享设置好以后,就可以在linux客户端挂接(mount)了,具体操作如下:   # mkdir –p /mnt/samba   注:建立一个目录用来作挂接点(mount point)   # mount -t smbfs -o username=administrator,password=pldy123 //10.140.133.23/c$ /mnt/samba   注:administrator 和 pldy123 是ip地址为10.140.133.23 windows计算机的一个用户名和密码,c$是这台计算机的一个磁盘共享   如此就可以在linux系统上通过/mnt/samba来访问windows系统磁盘上的文件了。以上操作在redhat as server 3、redflag server 4.1、suse server 9以及windows NT 4.0、windows 2000、windows xp、windows 2003环境下测试通过。   挂接UNIX系统NFS文件共享   类似于windows的网络共享,UNIX(Linux)系统也有自己的网络共享,那就是NFS(网络文件系统),下面我们就以SUN Solaris2.8和REDHAT as server 3 为例简单介绍一下在linux下如何mount nfs网络共享。   在linux客户端挂接(mount)NFS磁盘共享之前,必须先配置好NFS服务端。   1、Solaris系统NFS服务端配置方法如下:    (1)修改 /etc/dfs/dfstab, 增加共享目录       share -F nfs -o rw /export/home/sunky    (2)启动nfs服务       # /etc/init.d/nfs.server start    (3)NFS服务启动以后,也可以使用下面的命令增加新的共享       # share /export/home/sunky1       # share /export/home/sunky2    注:/export/home/sunky和/export/home/sunky1是准备共享的目录   2、linux系统NFS服务端配置方法如下:    (1)修改 /etc/exports,增加共享目录   /export/home/sunky 10.140.133.23(rw)   /export/home/sunky1 *(rw)   /export/home/sunky2 linux-client(rw)    注:/export/home/目录下的sunky、sunky1、sunky2是准备共享的目录,10.140.133.23、*、 linux-client是被允许挂接此共享linux客户机的IP地址或主机名。如果要使用主机名linux-client必须在服务端主机 /etc/hosts文件里增加linux-client主机ip定义。格式如下:    10.140.133.23 linux-client    (2)启动与停止NFS服务    /etc/rc.d/init.d/portmap start (在REDHAT中PORTMAP是默认启动的)    /etc/rc.d/init.d/nfs start 启动NFS服务    /etc/rc.d/init.d/nfs stop 停止NFS服务    注:若修改/etc/export文件增加新的共享,应先停止NFS服务,再启动NFS服务方能使新增加的共享起作用。使用命令exportfs -rv也可以达到同样的效果。   3、linux客户端挂接(mount)其他linux系统或UNIX系统的NFS共享    # mkdir –p /mnt/nfs    注:建立一个目录用来作挂接点(mount point)    #mount -t nfs -o rw 10.140.133.9:/export/home/sunky /mnt/nfs    注:这里我们假设10.140.133.9是NFS服务端的主机IP地址,当然这里也可以使用主机名,但必须在本机/etc/hosts文件里增加服务端ip定义。/export/home/sunky为服务端共享的目录。   如此就可以在linux客户端通过/mnt/nfs来访问其它linux系统或UNIX系统以NFS方式共享出来的文件了。以上操作在 redhat as server 3、redflag server4.1、suse server 9以及Solaris 7、Solaris 8、Solaris 9 for x86&sparc环境下测试通过。 权限问题: 假設 server 端的使用者 jack, user id 為 1818, gid 為 1818, client 端也有一個使用者 jack,但是 uid 及 gid 是 1818。client 端的 jack 希望能完全讀寫 server 端的 /home/jack 這個目錄。server 端的 /etc/exports 是 這樣寫的: /home/jack *(rw,all_squash,anonuid=1818,anongid=1818) 這個的設定檔的意思是,所有 client 端的使用者存取 server 端 /home/jack 這 目錄時,都會 map 成 server 端的 jack (uid,gid=1818)。我 mount 的結果是 1. client 端的 root 可以完全存取該目錄, 包括讀、寫、殺……等 2. client 端的 jack (uid,gid=1818) 我可以做: rm -rf server_jack/* cp something server_jack/ mkdir server_jack/a

PureFTPD+MySQL安装

星期三, 10月 10th, 2007

PureFTPD+MySQL安装
=============================================
echo “/usr/local/mysql/lib/mysql/” >> /etc/ld.so.conf
ldconfig

./configure –prefix=/usr/local/pureftpd \
–with-boring \
–with-paranoidmsg \
–with-sysquotas \
–with-altlog \
–with-puredb \
–with-extauth \
–with-pam \
–with-cookie \
–with-throttling \
–with-ratios \
–with-quotas \
–with-ftpwho \
–with-largefile \
–with-welcomemsg \
–with-uploadscript \
–with-virtualhosts \
–with-virtualchroot \
–with-diraliases \
–with-peruserlimits \
–with-language=simplified-chinese \
–with-ldap \
–with-mysql \
–with-privsep \
–with-tls \
–with-shadow \

make
make check
make install
chmod 755 configuration-file/pure-config.pl
cp configuration-file/pure-config.pl /usr/local/pureftpd/sbin/
cp configuration-file/pure-ftpd.conf /usr/local/etc/
cp contrib/redhat.init /etc/init.d/pureftpd
chmod 755 /etc/init.d/pureftpd
chown root:root /etc/init.d/pureftpd
chkconfig –add pureftpd
chkconfig pureftpd on

vi /etc/init.d/pureftpd
Path to the pure-ftp binaries.
prog=pure-config.pl
fullpath=/usr/local/pureftpd/sbin/$prog
pureftpwho=/usr/local/pureftpd/sbin/pure-ftpwho

=============================================
# MYSQLServer     127.0.0.1
# MYSQLPort       3306

MYSQLSocket             /tmp/mysql.sock
MYSQLUser               pureftpd
MYSQLPassword           b1ea2e6a18
MYSQLDatabase           srv_pureftpd
MYSQLCrypt              cleartext
MYSQLGetPW              SELECT Password FROM users WHERE User=”\L”
MYSQLGetUID             SELECT Uid FROM users WHERE User=”\L”
MYSQLGetGID             SELECT Gid FROM users WHERE User=”\L”
MYSQLGetDir             SELECT Dir FROM users WHERE User=”\L”

MySQLGetQTASZ           SELECT QuotaSize FROM users WHERE User=”\L”
MySQLGetQTAFS           SELECT QuotaFiles FROM users WHERE User=”\L”
MySQLGetRatioUL         SELECT ULRatio FROM users WHERE User=”\L”
MySQLGetRatioDL         SELECT DLRatio FROM users WHERE User=”\L”
MySQLGetBandwidthUL     SELECT ULBandwidth FROM users WHERE User=”\L”
MySQLGetBandwidthDL     SELECT DLBandwidth FROM users WHERE User=”\L”
=============================================

grant select,insert,update,delete on srv_pureftpd.* to pureftpd@localhost identified by “pureftpd”

CREATE DATABASE srv_pureftpd;

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(32) unsigned NOT NULL auto_increment,
  `User` varchar(16) NOT NULL default ”,
  `Password` varchar(64) NOT NULL default ”,
  `Uid` varchar(11) NOT NULL default ‘3000′,
  `Gid` varchar(11) NOT NULL default ‘3000′,
  `Dir` varchar(128) NOT NULL default ‘/usr/local/httpd/www/’,
  `QuotaSize` smallint(5) NOT NULL,
  `QuotaFiles` int(11) NOT NULL default ‘0′,
  `ULBandwidth` smallint(5) NOT NULL default ‘0′,
  `DLBandwidth` smallint(5) NOT NULL default ‘0′,
  `ULRatio` smallint(6) NOT NULL default ‘0′,
  `DLRatio` smallint(6) NOT NULL default ‘0′,
  `ipaccess` varchar(15) NOT NULL default ‘*’,
  `status` enum(’0′,’1′) NOT NULL default ‘0′,
  `create_date` datetime NOT NULL default ‘0000-00-00 00:00:00′,
  `modify_date` datetime NOT NULL default ‘0000-00-00 00:00:00′,
  `comment` tinytext NOT NULL,
  PRIMARY KEY  (`id`,`User`),
  UNIQUE KEY `User` (`User`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=16 ;