Linux中Web服务器的配置
你可以通过以下三种方法安装Apache服务器。
1.如果你安装的Linux版本中带用Apache的话,就在选择所要安装的服务
器的时候,将httpd这个服务选上,Linux安装程序将自动完成Apache的安装工
作,并做好基本的配置。
2.使用可执行文件软件包,这比较适合那些对编译工作不是太熟悉的初级
用户,因为它相对比较简单。
下载软件包apache_124etargz
tar xvzf apache_124etargz
这就完成了安装工作,简单吧!
如果你使用的是RedHat Linux的话,你也可以下载apache_124rpm软件
安装包,然后使用rpm -ivh apache_124rpm命令安装。
3.如果你想把Apache服务器充分利用起来的话,就一定要自己编译
Apache定制其功能。
下载包含Apache源代码的软件包apache_124targz; 然后用tar命令将它解
开; 将当前目录改变为Apache源代码发行版的src目录; 将配置样本文件
(Configurationtmpl)复制为Configuration文件;
编辑Configuration文件中的配置选项:
Makefile配置选项:一些编译选项:
"CC="一行指定用什么编译软件编译,一般为"CC=gcc";
如果需要将额外的标志(参数)指定给C编译软件,可以使用:
EXTRA_CFLAGS=
EXTRA_LFLAGS=
如果系统需要特殊的库和包含文件,可以在这里指定它们:
EXTRA_LIBS=
EXTRA_INCLUDES=
如果你要改变代码优化设置的话,你须将下面一句去掉注释,然
后改成你所需要的值:
#OPTIM=-O2
Rule配置选项:用来决定需要什么功能,一般情况下无需改变。
模块配置:模块是Apache的组成部分,它为Apache内核增加新功能。通过使用
模块配置,可以自定义在Apache服务器中需要什么功能,这个部分也是Apache
灵活性的表现。模块配置行如下所示:
AddModule modules/standard/mod_envo
如果你需要Apache服务器具备什么功能,就将那个模块用AddModule语句加到配
置文件Configuration中去。
下表列出了Apache的模块功能:
模块名 功能 缺省
mod_access 提供基于主机的访问控制命令 y
mod_actions 能够运行基于MIME类型的CGI脚本或HTTP请求方法 y
mod_alias 能执行URL重定向服务 y
mod_asis 使文档能在没有HTTP头标的情况下被发送到客户端 y
mod_auth 支持使用存储在文本文件中的用户名、口令实现认证 y
mod_auth_dbm 支持使用DBM文件存储基本HTTP认证 n
mod_auth_mysql 支持使用MySQL数据库实现基本HTTP认证 n
mod_auth_anon 允许以匿名方式访问需要认证的区域 y
mod_auth_external支持使用第三方认证 n
mod_autoindex 当缺少索引文件时,自动生成动态目录列表 y
mod_cern_meta 提供对元信息的支持 n
mod_cgi 支持CGI y
mod_dir 能够重定向任何对不包括尾部斜杠字符命令的请求 y
mod_env 使你能够将环境变量传递给CGI或SSI脚本 n
mod_expires 让你确定Apache在服务器响应请求时如何处理Expires y
mod_headers 能够操作HTTP应答头标 y
mod_imap 提供图形映射支持 n
mod_include 使支持SSI n
mod_info 对服务器配置提供了全面的描述 y
mod_log_agent 允许在单独的日志文件中存储用户代理的信息 n
mod_log_config 支持记录日志 y
mod_log_referer 提供了将请求中的Referer头标写入日志的功能 n
mod_mime 用来向客户端提供有关文档的元信息 y
mod_negotiation 提供了对内容协商的支持 y
mod_setenvif 使你能够创建定制环境变量 y
mod_speling 使你能够处理含有拼写错误或大小写错误的URL请求 n
mod_status 允许管理员通过WEB管理Apache y
mod_unique_id 为每个请求提供在非常特殊的条件下保证是唯一的标识 n
在src目录下执行:" /configure";
编译Apache:执行命令"make";
根据机器性能的不同,经历一段5-30分钟的编译,就大功告成了。
将编译好的可执行文件httpd复制到/etc/httpd/bin目录下;
将Apache发行版的配置文件:accessconf、httpdconf、mimetypes、
srmconf文件复制到/etc/httpd/conf目录下。到此为止,安装完成。
1、首先,连接相应linux主机,进入到linux命令行状态下,等待输入shell指令。
2、在linux命令行下输入shell指令:cat /proc/cpuinfo,按回车,会看到cpu的信息。
3、输入shell指令:fdisk -l,按回车,会看到硬盘的信息。
RAID 10(又叫RAID 1+0或镜像条带)阵列结合了RAID 0和RAID 1两者的功能特性,从而提供了高性能、容错的磁盘输入/输出操作。在RAID 0中,读取/写入操作跨多个驱动器并路执行;在RAID 1中,一模一样的数据写入到两个或多个驱动器上。
在本教程中,我将介绍如何使用5只相同的8 GiB磁盘,构建一个软件RAID 10阵列。虽然用来构建RAID 10阵列的最大磁盘数量是4只(比如一组条带化的两个镜像),但我们将增添一只额外的备用驱动器,以防其中一个主驱动器出现故障。我们还将介绍一些工具,你以后可以用来分析RAID阵列的性能。
请注意:全面深入地介绍RAID 10及其他分区方案(以及不同尺寸的驱动器和文件系统)的所有优缺点不在本文的探讨范围之内。
RAID 10阵列是如何工作的?
如果你需要实施一种支持输入/输出密集型操作(比如数据库、电子邮件和网站服务器)的存储解决方案,RAID 10是正确的选择。下面会介绍其中原委。不妨先看一看下图。
镜像1和镜像2的条带
设想一下某个文件由上图中的数据块A、B、C、D和E组成。每个RAID 1镜像集(比如镜像1或镜像2)将数据块复制到两个设备中的每一个。由于这种配置,写入性能有所下降,因为每个数据块都要写入两次,每只磁盘各写入一次,而相比从单只读盘读取数据,读取性能依然没有变化。优点在于,这种方案提供了冗余性,因为除非每个镜像中的多只磁盘出现故障,否则可以维持正常的磁盘输入/输出操作。
RAID 0条带的工作原理是,把数据划分成多个数据块,并将数据块A写入到镜像1,同时将数据块B写入到镜像2,依次类推,因而提高了总体的读取和写入性能。另一方面,没有一个镜像含有向主集提交的任何一部分数据的完整信息。这意味着,如果其中一个镜像出现故障,整个RAID 0组件(以及因而RAID 10集)就无法操作,数据出现无法恢复的丢失。
构建RAID 10阵列
RAID 10阵列有两种可能的构建方案:复杂方案(只要一步就能构建),或嵌套方案(构建方法是,先构建两个或多个RAID 1阵列,然后把它们用作RAID 0中的组件设备)。在本教程中,我们将介绍构建复杂的RAID 10阵列,原因在于这种阵列让我们可以使用数量为奇数或偶数的磁盘,并且可以作为单一RAID设备来加以管理,而不是介绍嵌套方案(只允许数量为偶数的驱动器,必须作为嵌套设备来加以管理, RAID 1和RAID 0分开来处理)。
假设你已安装了mdadm,该后台程序在你的系统上运行。想了解详细内容,请参阅这篇教程:http://xmodulocom/create-software-raid1-array-mdadm-linuxhtml。另外假设已在每只磁盘上创建了主分区sd[bcdef]1。因而,ls -l /dev | grep sd[bcdef]的输出应该是这样:
接下来使用下面这个命令,构建一个RAID 10阵列:
# mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/sd[bcde]1 --spare-devices=1 /dev/sdf1
该阵列构建完毕后(构建过程应该用不了几分钟),# mdadm --detail /dev/md0的输出应该是这样:
在我们继续下一步之前有几点需要予以说明。
1 Used Dev Space表明了阵列所使用的每个成员设备的容量。
2 Array Size是指阵列的总大小。就RAID 10阵列而言,这相当于(NC)/M,其中N是指活动设备的数量,C是指活动设备的容量,M则指每个镜像中的设备数量。所以在这里,(NC)/M相当于(48GiB)/2 = 16GiB。
3 Layout指数据布局的具体细节。可能的布局值如下所示。
•n(默认选项):意味着 near拷贝。一个数据块的多个拷贝在不同的设备中处于相似的偏移(offset)。这种布局提供的读取和写入性能与RAID 0阵列的性能相似。
•o表明offset拷贝。不是数据段在条带里面复制,而是整个条带被复制,但由一个设备轮转,那样重复数据块分布在不同的设备上。因而,随后的数据块拷贝在下一个驱动器中,下移一个数据段。想让你的RAID 10阵列使用这种布局,将--layout=o2添加到用来构建阵列的命令。
•f 表明far拷贝(偏移全然不同的多个拷贝)。这种布局提供了较好的读取性能,却提供了较差的写入性能。因而,这种方案最适合需要支持的读取操作比写入操作多得多的系统。想让你的RAID 10阵列使用这种布局,将--layout=f2添加到用来构建阵列的命令。
--layout选项中n、f和o后面所跟的数字表明了所需的每个数据块的副本数量。默认值是2,但它可以是磁盘中设备数量的2倍数。通过提供数量足够的副本,你就能尽量减少单个驱动器的输入/输出影响。
4 Chunk Size,按照Linux RAID维基,数据段大小(chunk size)指写入到设备的最小单位的数据。最优化的数据段大小取决于输入/输出操作的速度以及相关文件的大小。如果写入大文件,只要确保数据段相当大,有望看到较低的开销,而主要存储小文件的阵列有望更加得益于较小的数据段。想为你的RAID 10阵列指定某个数据段大小,将--chunk=desired_chunk_size添加到用来构建阵列的命令。
遗憾的是,没有一应俱全的方法可以提升性能。下面是值得考虑的几个指导准则。
•文件系统:总的来说,XFS据说是最好的文件系统,而EXT4仍然是个不错的选择。
•最佳化布局:far布局提升了读取性能,但降低了写入性能。
•副本数量:更多的副本尽量减小了输入/输出影响,但需要更多的磁盘时也增加了成本。
•硬件:固态硬盘比传统的旋转磁盘更有可能显示性能提升的优点(在同一环境下)。
使用DD测试RAID性能
下列基准测试可以用来核查我们的RAID 10阵列(/dev/md0)的性能。
1 写入操作
256MB大小的单个文件被写入到设备上:
# dd if=/dev/zero of=/dev/md0 bs=256M count=1 oflag=dsync
512字节被写入1000次:
# dd if=/dev/zero of=/dev/md0 bs=512 count=1000 oflag=dsync
由于dsync标记,dd绕过系统文件缓存,执行同步写入到RAID阵列的操作。这个选项用来消除RAID性能测试期间的缓存效应。
2 读取操作
256KiB15000(39 GB)从阵列拷贝到/dev/null:
# dd if=/dev/md0 of=/dev/null bs=256K count=15000
使用Iozone测试RAID性能
Iozone(http://wwwiozoneorg)是一种文件系统基准测试工具,让我们可以测量的众多磁盘输入/输出操作,包括随机读取/写入、顺序读取/写入和重新读取/重新写入。它可以将结果导出到微软Excel或LibreOffice Calc文件。
将Iozone安装到CentOS/RHEL 7上
启用Repoforge软件库,然后执行下列命令:
# yum install iozone
将Iozone安装到Debian 7上
# aptitude install iozone3
下面这个iozone命令将在RAID-10阵列中执行所有测试:
# iozone -Ra /dev/md0 -b /tmp/md0xls
•-R:生成与Excel兼容的报告,并发送到标准输出设备。
•-a:在全自动模式下运行iozone,涵盖所有测试和可能的记录/文件大小。记录大小:4k至16M,文件大小:64k至512M。
•-b /tmp/md0xls:将测试结果存储在某个指定的文件。
但愿本文有所帮助。如果您对于提升RAID 10的性能方面有何想法或高招,欢迎交流。谢谢阅读,希望能帮到大家,请继续关注,我们会努力分享更多优秀的文章。
英文:http://xmodulocom/setup-raid10-linuxhtml
第一步:
进入 /etc/samba 目录,备份下smbconf,然后删除这个文件,自己重新建立一个,输入如下内容
代码如下:
[global]
workgroup = WORKGROUP
netbios name = wwwe2fsckorg # 这里重点中的重点,这个名字最好和机器名一样,远程访问的时候就用这个名字
server string = e2fsck is samba server
security = share
load printers = no #不加载打印机
disable spoolss = yes #隐藏打印机
cups options = raw #打印机类型
unix charset = utf8
dos charset =GBK
display charset = utf8
client lanman auth = yes
client plaintext auth = yes
hosts deny = 192168055 #阻止这个IP访问SMB
[wujie]
path = /var/wujie
writeable = yes
browseable = yes
guest ok = yes
简单解释下上面的内容 [global]全局配置,必须有。前3行都是显示说什么的,security 如果是share就是不用帐号密码,如果是user就是要验证的。
[wujie]这个是在客户端显示出来共享的目录,path 就是共享的路径了,guest ok 为yes就是不要身份验证。
第二步:
在 /var/目录建立个文件夹叫 wujie 用来做共享文件夹用
代码如下:
[root@localhost ~]# id nobody
uid=99(nobody) gid=99(nobody) groups=99(nobody)
[root@localhost ~]# chown -R nobody:nobody /var/wujie
OK,然后重启SMB服务器 service smb restart 和 service nmb start 一个简单不用验证的共享服务器就搞定了。
第三步: 做一个需要帐号密码的共享服务器
1 先用命令 useradd wujie -s /sbin/nologin(系统建立一个叫wujie的帐号且不能登陆系统)
2 然后再用命令 smbpasswd -a wujie (用这个命令来添加一个SMB的帐户叫wujie)
3 chown wujie:wujie /var/wujie (让wujie帐户可以有权限使用/var/wujie这个目录)
4 然后修改 /etc/samba/smbconf 中:
代码如下:
[global]
workgroup = WORKGROUP // 用来指定你的机器上网络上所述的NT域名
netbios name = wwwe2fsckorg //主机名,用来访问用的地址,重要
server string = e2fsck is samba server
guest account = wujie //如果希望建立一个账号,再次填入用户名,同时在 /etc/passwd 中加入这个账号,否则使用默认的’nobody’作为账号
security = user
// 这是samba服务器的安全等级。默认为user等级。samba 一共有4种安全等级。
1 share级,共享安全级,用户不需要输入账号和密码就可以登陆
2 user级, 用户安全级,用户需要账号和密码才能登陆
3 server级, 服务器安全级, 检查密码的工作可以指定另一台samba服务器完成
4 domain域安全级, 需要指定一台XP等服务器验证用户密码
代码如下:
unix charset = utf8
dos charset = GBK
display charset = utf8
client lanman auth = yes
client plaintext auth = yes
代码如下:
[wujie]
path = /var/wujie
writeable = yes
browseable = yes
guest ok = no //用户需要密码,yes为不需要密码(需要配合上面的 security等级)
comment = wujie
valid users = wujie //可访问的用户
public = no //匿名用户看不到
create mask = 0777
主要就是把security改成user guest ok改成no
5 最后 service smb restart 和 service nmb start 这样就做了个带命令访问的共享文件服务器了
6 如果开了防火墙打开
代码如下:
[root@s ~]# iptables -A INPUT -p tcp –dport 139 -j ACCEPT
[root@s ~]# iptables -A INPUT -p tcp –dport 445 -j ACCEPT
[root@s ~]# iptables -A INPUT -p udp –dport 137 -j ACCEPT
[root@s ~]# iptables -A INPUT -p udp –dport 138 -j ACCEPT
[root@s ~]# iptables -A INPUT -i lo -j ACCEPT
1samba服务器目录:
企业数据目录:/companydata
公共目录:/companydata/share
销售部目录:/companydata/sales
技术部:/companydata/tech
2企业员工情况:
总经理:gm
销售部:销售部经理 redking、员工 sky、员工 jane
技术部:技术部经理 michael、员工 bill、员工 joy
3搭建samba文件服务器,建立公共共享目录,允许所有人访问,权限为只读,为销售部和技术部分别建立单独的目录,只可以总经理和相应部门员工访问,并且公司员工禁止访问非本部门的共享目录。
案例解析:
1需求分析
对于建立公共目录public字段就可以实现匿名访问,员工只能访问本部门的共享目录,禁止访问非本部门的共享目录,可以通过设置目录共享字段“browseable = no”及字段“valid users”来实现其隐藏功能和相应的访问权限。这样设置不能很好得解决同一目录多种需求的权限设置,所以需要建立独立配置文件,为每个部门建立一个组后并为每个组建立配置文件来实现隔离用户权限会比较灵活。
2 解决方案
1)建立各部门专用共享目录
使用mkdir建立需求的共享目录以便分门别类的存储相应资料。
[root@RHEL ~]#mkdir /companydata
[root@RHEL ~]#mkdir /companydata/share
[root@RHEL ~]#mkdir /companydata/sales
[root@RHEL ~]#mkdir /companydata/tech
同时设置/companydata共享目录的用户权限
[root@RHEL ~]#chmod –R 777 /companydata
2)添加samba服务器描述及设置smbpasswd文件
默认/etc/samba/目录下没有smbpasswd文件,要先关闭samba的tdbsam验证。
解决方法:在smbconf文件中注释掉passdb backend = tdbsam 一行,为了指定samba用户的验证我们加上这一条smb passwd file = /etc/samba/smbpasswd,然后保存退出。
3)添加用户和组
先建立销售部组sales,技术部组tech,然后使用useradd命令添加总经理帐号gm及各个员工的帐号并加入相应的用户组。
[root@RHEL ~]#groupadd sales
[root@RHEL ~]#groupadd tech
[root@RHEL ~]#useradd gm
[root@RHEL ~]#useradd –g sales redking
[root@RHEL ~]#useradd –g sales sky
[root@RHEL ~]#useradd –g sales jane
[root@RHEL ~]#useradd –g tech michael
[root@RHEL ~]#useradd –g tech bill
[root@RHEL ~]#useradd –g tech joy
接着使用smbpasswd命令添加samba用户:
[root@RHEL ~]#smbpasswd –a gm
New SMB password:
Retype new SMB password:
Added user gm
[root@RHEL ~]#smbpasswd –a redking
New SMB password:
Retype new SMB password:
Added user reding
[root@RHEL ~]#smbpasswd –a sky
New SMB password:
Retype new SMB password:
Added user syk
[root@RHEL ~]#smbpasswd –a jane
New SMB password:
Retype new SMB password:
Added user jane
[root@RHEL ~]#smbpasswd –a michael
New SMB password:
Retype new SMB password:
Added user michael
[root@RHEL ~]#smbpasswd –a bill
New SMB password:
Retype new SMB password:
Added user bill
[root@RHEL ~]#smbpasswd –a joy
New SMB password:
Retype new SMB password:
Added user joy
4)配置smbconf文件
(1)建立单独配置文件
用户配置文件使用用户名命令,组配置文件使用组名命令。
[root@RHEL ~]#cp /etc/samba/smbconf /etc/samba/gmsmbconf
[root@RHEL ~]#cp /etc/samba/smbconf /etc/samba/salessmbconf
[root@RHEL ~]#cp /etc/samba/smbconf /etc/samba/techsmbconf
(2)设置主配置文件smbconf
配置smbconf主配置文件,在global节点中添加相应字段,确保samba服务器的主配置文件可以调用独立的用户配置文件和组配置文件。
include = /etc/samba/%Usmbconf表示使samba服务器加载/etc/samba目录下格式为“用户名smbconf”的配置文件。
include = /etc/samba/%Gsmbconf表示使samba服务器加载/etc/samba目录下格式为“组名smbconf”的配置文件。
设置共享目录/companydata/share
添加如下内容:
[public]
comment=public data
path=/companydata/share
public=yes
5)设置总经理gm配置文件
[root@RHEL ~]#vim /etc/samba/gmsmbconf
添加如下内容:
[sales]
comment=sales data
path=/companydata/sales
writable=yes
valid users=gm
[tech]
comment=tech data
path=/companydata/tech
writable=yes
valid users=gm
6)设置销售部组sales配置文件
[root@RHEL ~]#vim /etc/samba/salessmbconf
添加如下内容:
[sales]
comment=sales data
path=/companydata/sales
writable=yes
valid users=@sales,gm
7)设置技术部组tech配置文件
[root@RHEL ~]#vim /etc/samba/techsmbconf
添加如下内容:
[tech]
comment=tech data
path=/companydata/tech
writable=yes
valid users=@tech,gm
8)开启samba服务
[root@RHEL ~]#service smb start
9)测试
分别用所设置账号进行测试。
Linux命令行下可以使用一系列命令查看各种硬件信息,从而得知服务器配置。
参考命令如下:
查看主板的序列号: dmidecode | grep -i ’serial number’
用硬件检测程序kuduz探测新硬件:service kudzu start ( or restart)
查看CPU信息:cat /proc/cpuinfo [dmesg | grep -i 'cpu'][dmidecode -t processor]
查看内存信息:cat /proc/meminfo [free -m][vmstat]
查看板卡信息:cat /proc/pci
查看显卡/声卡信息:lspci |grep -i ‘VGA’[dmesg | grep -i 'VGA']
查看网卡信息:dmesg | grep -i ‘eth’[cat /etc/sysconfig/hwconf | grep -i eth][lspci | grep -i 'eth']
查看PCI信息:lspci (相比cat /proc/pci更直观)
查看USB设备:cat /proc/bus/usb/devices
查看键盘和鼠标:cat /proc/bus/input/devices
查看系统硬盘信息和使用情况:fdisk & disk – l & df
查看各设备的中断请求(IRQ):cat /proc/interrupts
查看系统体系结构:uname -a
查看及启动系统的32位或64位内核模式:isalist –v [isainfo –v][isainfo –b]
dmidecode查看硬件信息,包括bios、cpu、内存等信息
测定当前的显示器刷新频率:/usr/sbin/ffbconfig –rev \
查看系统配置:/usr/platform/sun4u/sbin/prtdiag –v
查看当前系统中已经应用的补丁:showrev –p
显示当前的运行级别:who –rH
查看当前的bind版本信息:nslookup –class=chaos –q=txt versionbind
dmesg | more 查看硬件信息
lspci 显示外设信息, 如usb,网卡等信息
lsnod 查看已加载的驱动
lshw
psrinfo -v 查看当前处理器的类型和速度(主频)
prtconf -v 打印当前的OBP版本号
iostat –E 查看硬盘物理信息(vendor, RPM, Capacity)
prtvtoc /dev/rdsk/c0t0d0s 查看磁盘的几何参数和分区信息
df –F ufs –o i 显示已经使用和未使用的i-node数目
isalist –v
对于“/proc”中文件可使用文件查看命令浏览其内容,文件中包含系统特定信息:
Cpuinfo 主机CPU信息
Dma 主机DMA通道信息
Filesystems 文件系统信息
Interrupts 主机中断信息
Ioprots 主机I/O端口号信息
Meninfo 主机内存信息
Version Linux内存版本信息
备注: proc – process information pseudo-filesystem 进程信息伪装文件系统
http://wwwchinaunixnet/
这里比较多
案例一:
用LINUX架设FTP服务器
http://wwwchinaunixnet 作者:level 发表于:2004-02-27 13:35:50
以前自己弄的东西,现在帖出来,希望对大家有点用:)
11 什么是FTP:文件传输协议原理
111 命令选择
112 命令格式
12 wu-Ftpd的安装
13 让FTP服务器运转起来
14 配置文件的设置
141 /etc/ftpaccess的设置
142 /etc/ftpusers和/etc/ftphosts的设置
143 /etc/ftpconversions设置
141 wu-ftp的相关程序
15 开设只能FTP的帐户
16 设置虚拟FTP主机
什么是FTP:文件传输协议原理
互联网文件传输协议(File Transfer Protocol ,FTP) 标准是在RFC959说明的。该协议定义了一个从远程计算机系统和本地计算机系统之间传输文件的一个标准。一般来说,传输文件的用户需要先经过认证以后才能登录网站,然后方能访问在远程服务器的文件。而大多数的FTP服务器往往提供一个GUEST的公共帐户来允许没有远程服务器的用户可以访问该FTP服务器。
一个FTP会话通常包括五个软件元素的交互。
用户接口 提供了一个用户接口并使用客户端协议解释器的服务
客户 PI 客户协议解释器,其项远程服务器协议机发送命令并且驱动客户数据传输过程
服务器PI 服务器协议解释器,响应客户协议机发出的命令并驱动服务器端数据传输过程
客户 DTP 客户数据传输过程,其负责完成和服务器数据传输过程及客户端本地文件系统的通信
服务DTP 服务器数据传输过程,其负责完成和客户数据传输过程及服务器端文件系统的通信
在RFC 959中,一般使用用户这个名词来指代客户。RFC 959定义了客户PI和服务器PI交互的方式和规范。用户接口与PI和DTP交互的机理都并不是协议标准的一部分。PI和DTP往往通常是在同一个程序模块中实现的。
在FTP会话中,一共会存在有两个独立的网络连接,一个是由两端的PI使用的,另一个是由两端的DTP使用的。PI之间的连接一般被称作控制连接(control connection),DTP之间的连接被称做数据连接(data connection)
使用TCP服务的控制和数据连接
通常情况下,FTO服务器监听端口号21来等待控制连接建立请求。而数据连接端口号的选择依赖于控制连接上命令。通常是客户发送一个控制消息来指定客户监听并等待服务器端发送数据连接建立请求的端口号。
对数据传输和控制命令传输来使用不同的独立连接有如下优点:两个连接可以选择不同的合适服务质量,如:对控制连接来说高需要更小的延迟时间,对数据连接来说需要更大的数据吞吐量;而且可以避免实现数据流中的命令的通明性及逃逸。
当传输建立时,总是由客户端首先发起。然而客户和服务器都可能是数据发送者。除了传输用户请求下载文件,数据传输过程同样在客户端请求列服务器端目录结构时建立。
111 命令选择
当一个传输建立时,一般通常需要指定四个方面的属性:
文件类型
该属性指定如何将文件的数据匹配成适于传输的格式,一共有四种可能的选择:
ASCII文件类型
在发送端,文件从本地文本文件格式转换为 NVT ASCII格式,每行结束有一个CR/LF对来标识。 在接收端,再被转换为本地的文本格式。
这说明了为什么Unix主机之间传输文本文件为何传输的数据量要大于文件的实际大小。若传输一段端或传输两端都不使用ASCII文本编码,则是应该由数据传输过程来实现本地编码和NVT ASCII 编码之间的转换。
EBCDIC文件类型
类似于ASCII,区别仅仅上使用EBCDIC字符编码
图象 (或二进制)文件类型
文件以本地传输内容传输,在远端以同本地完全相同的内容存储。
本地文件系统
用在字节大小不是8位的环境下。没字节位数由发送者指定。
在实际应用中,只有ASCII和图象格式使用的较多。
格式控制
该属性是和将文本文件最后传送到打印设备相关的,其中有多种方式来实现将垂直格式信息编码到文件中,包括指示一个新页开始的方式。有如下方式可供选择:
无须打印格式控制,这是缺省值
Telnet打印控制,在telnet协议中定义的控制字符包含在数据流中。
Fortran打印控制,
该属性在实际中很少使用。
结构
文件可以拥有内部结构,在传输中该结构被保留。由数据传输过程来负责在传输中的结构及本地结构之间相互匹配,有三种可能性:
文件结构
这实际上意味着文件被看作没有内部结构的连续的字节流。
记录结构
文件是有一系列记录组成的结构。这只适用于文本文件。
页面结构
也可以称做块结构。每一页都伴随一个页号来传输,从而以顺序的方式来完成传输。
页面结构很少在实际中遇到。记录结构也不是很常见。对于文本文件使用ASCII文件类型可以获得相同的效果。
传输模式
该属性可以取三个不同的值:
流模式
文件的以字节流的方式传输。
块模式
文件以一个块连接一个块的方式传输,每个块的开头都有一个头。
压缩模式
一个简单的运程长度压缩编码被应用,来压缩连续的相同的字节。
实际中,一般只有流模式被使用。而压缩一般通过使用各种其他的工具程序来获得。
当一次传输被建立,客户端一般指定一个或多个前面说明的属性。若服务器端不能支持某个选项,服务器将用一个错误信息来响应客户端,并不具有协商机制。
FTP提供了充足的命令来使用户和远程建立连接并访问远程文件系统。
112 命令格式
命令以NVT ASCII串的格式被传输。每个命令以三个或四个大写的NVT ASCII字符开始,后面带有选项参数和一个CR/LF对来标识命令结束
应答由三个NVT ASCII数字及一个选项消息组成。
一个长的应答也许会有多个消息组成,第一个消息的三个数字后带有一个破折号,最后的消息不带有破折号。中间的消息无须携带三个数字,但是如果带了三个数字,则也需要破折号。
下面是所有的命令的列表。带有星号的命令一般很少使用,所以往往在具体实现中不支持。
String Meaning
ABOR 放弃传输
ACCT 某些系统将帐号和用户与文件系统相关联
ALLO 为即将传送的文件分配空间。后面携带的参数来确定字节数
APPE 将文件附加到已经存在的文件后面
CDUP 在远程系统上将当前目录切换到上级父目录
CWD 改变远程系统的工作目录
DELE 删除远程系统的文件
HELP 读取服务器的帮助信息,如:支持的命令的列表
LIST 在一个新建立的数据连接上发送当前工作目录下的文件名列表
MKD 创建目录
MODE 指定传输模式,可携带的参数是:S、B或 C
NLST 在一个新建立的数据连接上发送一个当前目录下的“完全”的目录列表
NOOP 空操作,防止连接断掉
PASS 提供一个用户登录密码,必须立即跟随在USER命令后
PASV 指定服务器数据传输过程监听等待客户端的数据连接连接建立请求
PORT 指定客户端监听等待服务器端建立的连接的端口号
PWD 显示服务器端的当前工作目录名
QUIT 退出登录并终止连接
REIN 重新初始化,退出登录但是并不断开连接,后面必须随后发出一个新的USER命令
REST 从服务器的一个标识处重新开始传输
RETR 从远程系统取回一个文件
RMD 删除一个目录
RNFR 指定要被命名的文件的老的路径名,随后必须是一个RNTO命令
RNTO 指定要被命名的文件的新的路径名
SITE 站点特有的服务器提供的服务
SMNT 结构加载,提供一个文件系统结构的远程系统路径名
STAT 状态信息
STOR 上载一个文件到服务器上,若文件已经存在则覆盖
STOU 上载一个文件到服务器上,不覆盖已经存在的文件
STRU 指定文件结构,参数可以是F、R或P
SYST 报告远程系统的操作系统类型
TYPE 指定文件类型,参数可以是A、E、I、L只有TYPE A和TYPE I常用
控制连接命令应答有如下形式:
Type Description
1yz 主动初步应答,在发送另一个命令以前等待另一个应答
2yz 主动最后应答,最后一个命令成功结束
3yz 主动中间应答,必须再发送一个命令
4yz 暂时被动应答,要求的动作当时不能完成,但可以重试
5yz 永久被动应答,要求的动作不能完成,不应该重试
"y"数字编码进一步的信息
Digit Meaning
0 语法错误
1 信息
2 连接状态
3 认证和记帐
4 保留
5 File s文件系统状态
下面是一些典型的消息:
Number Meaning
125 数据连接打开,传输开始
200 命令OK
331 用户名OK 需要输入密码
425 不能打开数据连接
452 错误写文件
500 语法错误-不可识别的命
具体的详细情况可以参见RFC
wu-Ftpd的官方权威站点地址是:http://wwwwu-ftpdorg/。
12 wu-Ftpd的安装
当前,Linux环境下有许多ftp服务器软件可供选择,但是目前最常见的仍然是wu-Ftpd服务器。这里主要讨论该软件的安装和配置。
一般来说,在安装了linux时,缺省都会自动安装wu-ftpd服务器,但是有时候为了某种需要也需要自己亲自重新安装该服务器软件。安装wu-Ftpd有两方式,一种是安装rpm形式的发布包;一种是自己动手去编译生成Ftp服务器。
rpm包可以在http://rpmfindnet/linux/RPM/WByNamehtml处下载得到,以rpm包方式安装非常简单,只需要在按下面的简单的几个步骤就可以完成,假设下载得到的rpm包存放在/tmp目录下:
#cd /tmp
#rpm -ivh wu-ftpd-160-9i386rpm
压缩的源代码可以在ftp://ftpwu-ftpdorg/pub/wu-ftpd/出得到。这里我们以最新的160为例说明如何编译安装wu-ftpd。
1、解开源代码
1) 将压缩的源代码拷贝到/usr/src下
#cp wu-ftpd160targz /usr/src
2) 对压缩文档进行解压缩:
#tar xvfz wu-ftpd160targz
#cd wu-ftpd-160
2、敲入命令 "/build xxx" ,可以在这里指定一个C语言编译器:"/build CC=yyy xxx" yyy 指用来替代 "cc" 的其他的编译器。对于linux环境下的gcc编译器,命令应该为:"/build CC=gcc xxx"
#build CC=gcc lnx
xxx可以取下面的值:
gen : 通用make(当移植到心得系统时需要拷贝它)
aix : IBM AIX
aux : AU/X
bdi : BSD/OS
bsd : BSD
dec : DEC Unix 3X
du4 : DEC Unix 4X or later
dyn : Dynix
fbs : FreeBSD 10 or later
hiu : Hitachi Unix
hpx : HP-UX
lnx : Linux (tested on 1030)
nbs : NetBSD 1X
nx2 : NeXTstep 1x
nx3 : NeXTstep 3x
osf : OSF/1
osx : Mac OS X
ptx :
sco : SCO Unix 32v42/SCO OpenServer 5
sgi : SGI Irix 405a
sny : Sony NewsOS
sol : SunOS 5x / Solaris 1x
s41 : SunOS 41x
ult : Ultrix 4x
uxw : UnixWare 11 or later
clean : Clean up object files and such to reduce disk space after building
install: Install ftpd
Copying Makefiles
Linking src/configh
Making support library
gcc -O3 -fomit-frame-pointer -fno-strength-reduce -pipe -c strcasestrc
gcc -O3 -fomit-frame-pointer -fno-strength-reduce -pipe -c authuserc
gcc -O3 -fomit-frame-pointer -fno-strength-reduce -pipe -c snprintfc
rm -f libsupporta
ar cq libsupporta strcasestro authusero snprintfo
ranlib libsupporta
: : :
: : :
: : :
编译成功以后将生成如下几个可执行文件:
ftpd FTP服务器程序
ftpshut 用于关闭FTP守护进程的程序
ftpcount 记数程序,显示目前ftp登录的人数
ftpwho 查看当前FTP服务器的连线情况,类似与系统的who命令,只不过是查看ftp登录的用户
ckconfig 检查FTP的设置是否正确
ftprestart 重新启动ftp服务器
privatepw 改变wu_ftpd组访问文件信息
3、若只是升级到一个新的版本,应该首先备份系统所有的旧的配置文件。否则这些配置文件将被覆盖。为了适应自己的需求,应当编辑样本配置文件来满足自己的要求,具体配置文件的需求参见后面的内容。
4、以超级用户身份敲入命令"/build install"
#build install
installing binaries
install -c -o bin -g bin -m 110 bin/ftpd /usr/sbin/inftpd
install -c -o bin -g bin -m 111 bin/ftpshut /usr/bin/ftpshut
install -c -o bin -g bin -m 111 bin/ftprestart /usr/bin/ftprestart
install -c -o bin -g bin -m 111 bin/ftpcount /usr/bin/ftpcount
install -c -o bin -g bin -m 111 bin/ftpwho /usr/bin/ftpwho
install -c -o bin -g bin -m 111 bin/privatepw /usr/bin/privatepw
installing manpages
install -c -o bin -g bin -m 444 doc/ftpcount1 /usr/man/man1/ftpcount1
install -c -o bin -g bin -m 444 doc/ftpwho1 /usr/man/man1/ftpwho1
install -c -o bin -g bin -m 444 doc/ftpaccess5 /usr/man/man5/ftpaccess5
install -c -o bin -g bin -m 444 doc/ftpconversions5 /usr/man/man5/ftpconversio5
install -c -o bin -g bin -m 444 doc/ftphosts5 /usr/man/man5/ftphosts5
install -c -o bin -g bin -m 444 doc/xferlog5 /usr/man/man5/xferlog5
install -c -o bin -g bin -m 444 doc/ftpd8 /usr/man/man8/ftpd8
5、编辑 "/etc/inetdconf" 文件,指向新的ftpd守护进程,大多数情况下,这一步是不必的,因为在build install时,会将新的守护进程拷贝覆盖老的守护进程。若希望使用ftpd的增强的扩展功能,应该在这行最后加上"-a"选项。
ftpd守护进程一般可以携带如下参数,也可以不带任何参数:
-d debug参数,当ftpd守护进程出现错误时,会将错误信息写入到系统记录文件/usr/adm/syslog中
-l 记录每次ftp会话信息到/usr/adm/messages中
-t 设置当FTP客户端多久无操作就自动断线,这个参数后面指定等待的时间,如 -t 600 表示若客户
端若连续10分钟没有动作就自动断线,缺省值是15分钟
-a 使用ftpaccess配置文件内容对ftpd进行更详细复杂的设置
-A 不使用ftpaccess配置文件的设置,缺省值是-A
-i 当客户端有上载文件的动作时,就记录在文件xferlog中
-L 使用户连接ftp服务器期间使用的所有命令都被记录到/usr/adm/messages中
6、拷贝tar、gzip、gunzip、compress、uncompress等文件到 "~ftp/bin"中,拷贝"ls"为"~ftp/bin/ls"。
7、若是第一次安装,使用"ckconfig"程序查找ftpd的各种配置文件存放目录:ftpconversions、ftpusers、 和ftpgroups。在"doc/examples"目录下有样本文件。"ckconfig"是一个可执行程序,确保修复该程序检测到的任何问题。
13 让FTP服务器运转起来
一般来说,只要正确地编译安装了wu-ftpd,该服务器就可以正常运行。用户可以通过FTP命令从各种系统上连接该服务器。
14 配置文件的设置
141 /etc/ftpaccess的设置
这个配置文件是FTP服务器最重要的配置文件,这个文件的设置决定了FTP是否可以正常工作及许多访问权限的设置。如下面的例子所示:
class all real,guest,anonymous
limit all 10 Any /etc/msgs/msgdead
readme README login
readme README cwd=
message /welcomemsg login
message message cwd=
compress yes all
tar yes all
log commands real
log transfers anonymous,real inbound,outbound
shutdown /etc/shutmsg
email user@hostname
下面是设置文件各个指示(directive)的详细说明:
指示: loginfails n
密码输入n次就自动断开连接
指示:autogroup 组名 类别 [ ]
若一个匿名用户属于任何一个参数类别的类,则FTP服务器将实施setegid()调用使其属于这个组名定义的组,这样做是为了实现某些特定类别的匿名用户可以访问一些只允许本组及拥有者可以访问的文件。组名必须是/etc/group内定义的有效组。
指示: class 类名 类别(real、guest、anonumous) IP地址
这个指示是设定FTP服务器用户的类别。
FTP服务器的用户可以分为以下三种类别:
real 在该FTP服务器上拥有合法帐户的用户;
guest 另外定义某些特定组的用户;
anonymous 匿名用户;
举例说明:
class outworld real,guest,anonymous
定义一个名为outworld的类,该类包含三种类型的用户:real,guest,anonymous。该类在后面的指示中使用。其中""是类定义中的IP地址部分,表示网络上的所用主机。也就是说明允许任何主机连接FTP服务器。若希望对访问FTP的主机进行一定的权限设置,可以这样做:
class friend real,guest,anonymous linuxaidcomcn 20110113
指定义一个friend类,该类从linuxaidcomcn 及20110113访问FTP服务器时有特定的权限设定。
指示: limit 类别 人数 时间 文件名
该指示设定在某个类在某个时间内允许连接FTP服务器的人数的限制,并指定当连接人数超过限制,后面的用户连接时显示给用户的消息信息。
举例说明:
limit local 20 Any /tmp/message/msgtoomany
上面的例子限定local这个类中的拥护同一时间只能有20人同时上网连接这台FTP服务器,若超过20人则显示/tmp/message/msgtoomany的文件的内容
limit outworld 100 MoTu|Any 2200-0800 /tmp/message/msglimit
这个例子限制outworld这个类的用户只能在周一周二或每天的晚上10点到第二天早上的8点之间访问该FTP服务器,而且同时连线的人数不可以超过100人,若超过100人,则显示/tmp/message/msglimit的文件的内容
/tmp/message/msglimit的内容为:
对不起!本服务器只允许匿名用户在周一周二全天及其他每天晚上10点到第二天早上的8点之间访问,当前时间为%T;而且只允许同时有%M个匿名用户访问,当前有%N个用户在访问该服务器。请在合适的时间访问本FTP服务器,谢谢!
这里的%M是一个变量,代表同时允许连接的人数的上限,FTP服务器可以用前面设置的值自动替代该变量,其他允许的变量包括:
%T 本地当前时间;
%F CWD所在分区剩余空间,以KB为单位。但该变量不是所有系统都支持。
%C 当前工作目录;
%E 定义在/etc/ftpaccess文件中的系统管理员的E-mail地址;
%R 远端主机名;
%L 本地主机名;
%U 登录时所给的用户名;
%N 这个类别当前连接的用户数目;
利用这些参数,可以编辑一个详细的说明文件,这样可以让用户清楚当前服务器资源使用情况。
指示: readme 说明文件 指令
当用户执行指定的"指令"时,系统就会自动显示所设置的说明文件;
举例说明:
readme README login
当用户执行登录动作时,只要以README开头的文件内容就会显示给用户。
readme README cwd=
表示用户切换目录时(cwd),只要以README开头的文件内容就会显示给用户。
通常README应该是该目录下文件的说明,让登录的用户可以清楚地知道目录中存放了那些文件;
指示: message 文件名 指令
使当用户执行特定的"指令"时,系统就将指定的文件内容显示给用户;
举例说明:
message /msgwelcome login
指定当用户登录时,将自动显示/tmp/message/msgwelcome的内容给用户,注意这里的/msgwelcome指ftp根目录下的msgwelcome文件,即/home/ftp/msgwelcome。
message /welcome cwd=
指定当用户切换另一个目录时,只要目录中有msgwelcome文件,就显示给用户
指示: compress (yes/no) 类别
设置哪个类别的用户可以使用压缩功能;
举例: compress yes local outworld
允许local 和outworld两个类别的 用户使用压缩功能
指示: tar (yes/no) 类别
指定哪个类别的用户可以使用tar功能;
指示: passwd-check (none/trivial/rfc822) (enforce/warn)
设定当用户以匿名方式登录服务器时密码的方式:
none 表示不对密码进行验证,任何密码都可以登录;
trival 表示只要密码中包含@就可以登录;
rfc822 表示密码一定要符合rfc822中规定的E-mail格式才能登录。如:webmaster@linuxaidcomcn
enforce 表示输入的密码不符合指定格式就不允许登录;
warn 表示输入的密码不符合指定格式显示警告信息,但仍然允许登录;
指示: log commands 类别(read/guest/anonumous)
设定那些用户登录时,所使用的操作会被记录在文件/usr/adm/xferlog中。
指示: log transfer 类别(read/guest/anonumous) (inbound/outbound)
设定指定的用户类别在上载还是下载时的相关信息被记录到/usr/adm/xferlog中。
举例说明:
log transfer anonymous,real inbound,outbound
当anonymous或real用户登录后,上载和下载的操作会被记录在文件/usr/adm/xferlog中。
指示: shutdown 文件名
FTP服务器关闭的时间可以后面的文件名中指定的文件中指定,设定的时间一到,便无法登录FTP服务器了,只有将这个文件删除才能恢复FTP服务器。文件的格式可以由命令ftpshut来建立。
指示: delete (yes/no) 类别(real/anonymous/guest)
设定是否允许指定用户使用delete命令。
举例说明:
delete no guest,anonymous
设定大概内登录的用户为guest或anonymous上不允许执行delete命令。
指示: overwrite (yes/no) 类别(real/anonymous/guest)
设定是否允许指定用户使用overwrite指令。
指示: reame (yes/no) 类别(real/anonymous/guest)
设定是否允许指定用户使用readme指令。
指示: chmod (yes/no) 类别(real/anonymous/guest)
设定是否允许指定用户使用chmod指令。
指示: umask (yes/no) 类别(real/anonymous/guest)
设定是否允许指定用户使用umask指令。
指示: upload [absolute|relative] [class=] [-]
["dirs"|"nodirs"] []
定义允许用来上载的目录。若允许上载,所有新上载的文件的所有者及组由和定义 ,访问权限将为。对于覆盖老文件的上载文件将保持原来的所有者及访问权限信息。文件上载的权限信息由最大匹配目录项定义,如:
upload /var/ftp no
upload /var/ftp /incoming yes ftp daemon 0666
upload /var/ftp /incoming/gifs yes jlc guest 0600 nodirs
would only allow uploads into /incoming and /incom-
:
将只允许/incoming和/incom-ing/gifs目录上载。上载到/incoming目录下的文件将属于ftp/daemon,访问权限为0666;而上载到/incoming/gifs下的文件将属于jlc/guest,访问权限为0600。应该注意的是 必须匹配"ftp"用户的passwd文件中的主目录。
"dirs"和"nodirs"选项用来设定是否允许在该目录下创建新的子目录。但是缺省是允许创建子目录的。
设定新创建的目录的访问权限,缺省为0777。
上载指示只能施用于用户主目录(chroot()的参数)等同于的用户,可以为来表示匹配任何主目录。
和也可能指定为,在这种情况下,任何上载的文件或创建的目录的所有者都等于起父目录的所有者。
选项[absolute|relative]指定是是绝对路径还是相对于chroot()参数指定的目录的相对路径。缺省是绝对路径。也可以指定任意多个class='来进行进一步限定。若指定了任何目录,则该上载指示只影响这些组的用户。
指示: alias 目录别名 目录路径
给指定目录设置一个别名,当切换目录时可以使用别名。
举例说明:
alias xwin /pub/linux/xwindows
为/pub/linux/xwindows设置别名xwin,登录以后只要输入命令cd xwin就可以进入该目录。
指示: cdpath 目录
该功能和系统的PATH环境变量设置类似,当cd /etc时,FTP首先查看当前目录下是否有etc子目录,无则看是否有别名,若没有则根据该指示设定的路径查询。
举例说明:
cdpath /pub/linux
cdpath /pub
cdpath /
搜索顺序为:/pub/linux /pub /
指示: path-filter 类别(real/anonymous/guest) 目录
设定上载文件名限制。
举例说明:
path-filter anonymous /etc/pathmsg^[-A-Za-z0-9_\]$^\^-
path-filter guest /etc/pathmsg^[-A-Za-z0-9_\]$^\^-
设置限制anonymous和guest用户上载的文件名只能包含A-Z、a-z、0-9和_-,名字以""和"-"开头的文件不能上载到服务器上。
指示: guestgroup [ ]
guestuser [ ]
realgroup [ ]
realuser [ ]
对于guestgroup指示,若一个真实(real)用户属于任何一个所指定的组,则其FTP会话都被FTP服务器以匿名的方式进行处理。也就是说,chroot()被调用,用户不再允许发出USER和 PASS 命令。必须是有效的组。
这里用户的home目录必须被争取的设置,要确实和匿名用户一致,/etc/passwd中的相关项的home目录被分割为两个部分,第一部分是chroot()调用的根目录参数,第二个是用户相对于根目录的主目录,两部分之间以"//分隔",如:
guest1::100:92:Guest Account:/ftp//incoming:/etc/ftponly
当guest1成功登录进入,FTP服务器将调用chroot("/ftp")然后调用chdir("/incoming")。则guest1就如同匿名用
0条评论