服务器配置linux 适合Linux的电脑
各位老铁们好,相信很多人对服务器配置linux都不是特别的了解,因此呢,今天就来为大家分享下关于服务器配置linux以及适合Linux的电脑的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!
Linux系统的机子作服务器怎么配置啊源文件在哪儿存的啊
这里比较多.
案例一:
用LINUX架设FTP服务器
作者:level发表于:2004-02-27 13:35:50
以前自己弄的东西,现在帖出来,希望对大家有点用:)
1.1什么是FTP:文件传输协议原理
1.1.1命令选择
1.1.2命令格式
1.2 wu-Ftpd的安装
1.3让FTP服务器运转起来
1.4配置文件的设置
1.4.1/etc/ftpaccess的设置
1.4.2/etc/ftpusers和/etc/ftphosts的设置
1.4.3/etc/ftpconversions设置
1.4.1 wu-ftp的相关程序
1.5开设只能FTP的帐户
1.6设置虚拟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来等待控制连接建立请求。而数据连接端口号的选择依赖于控制连接上命令。通常是客户发送一个控制消息来指定客户监听并等待服务器端发送数据连接建立请求的端口号。
对数据传输和控制命令传输来使用不同的独立连接有如下优点:两个连接可以选择不同的合适服务质量,如:对控制连接来说高需要更小的延迟时间,对数据连接来说需要更大的数据吞吐量;而且可以避免实现数据流中的命令的通明性及逃逸。
当传输建立时,总是由客户端首先发起。然而客户和服务器都可能是数据发送者。除了传输用户请求下载文件,数据传输过程同样在客户端请求列服务器端目录结构时建立。
1.1.1命令选择
当一个传输建立时,一般通常需要指定四个方面的属性:
文件类型
该属性指定如何将文件的数据匹配成适于传输的格式,一共有四种可能的选择:
ASCII文件类型
在发送端,文件从本地文本文件格式转换为 NVT ASCII格式,每行结束有一个CR/LF对来标识。在接收端,再被转换为本地的文本格式。
这说明了为什么Unix主机之间传输文本文件为何传输的数据量要大于文件的实际大小。若传输一段端或传输两端都不使用ASCII文本编码,则是应该由数据传输过程来实现本地编码和NVT ASCII编码之间的转换。
EBCDIC文件类型
类似于ASCII,区别仅仅上使用EBCDIC字符编码
图象(或二进制)文件类型
文件以本地传输内容传输,在远端以同本地完全相同的内容存储。
本地文件系统
用在字节大小不是8位的环境下。没字节位数由发送者指定。
在实际应用中,只有ASCII和图象格式使用的较多。
格式控制
该属性是和将文本文件最后传送到打印设备相关的,其中有多种方式来实现将垂直格式信息编码到文件中,包括指示一个新页开始的方式。有如下方式可供选择:
无须打印格式控制,这是缺省值
Telnet打印控制,在telnet协议中定义的控制字符包含在数据流中。.
Fortran打印控制,
该属性在实际中很少使用。
结构
文件可以拥有内部结构,在传输中该结构被保留。由数据传输过程来负责在传输中的结构及本地结构之间相互匹配,有三种可能性:
文件结构
这实际上意味着文件被看作没有内部结构的连续的字节流。
记录结构
文件是有一系列记录组成的结构。这只适用于文本文件。
页面结构
也可以称做块结构。每一页都伴随一个页号来传输,从而以顺序的方式来完成传输。
页面结构很少在实际中遇到。记录结构也不是很常见。对于文本文件使用ASCII文件类型可以获得相同的效果。
传输模式
该属性可以取三个不同的值:
流模式
文件的以字节流的方式传输。
块模式
文件以一个块连接一个块的方式传输,每个块的开头都有一个头。
压缩模式
一个简单的运程长度压缩编码被应用,来压缩连续的相同的字节。
实际中,一般只有流模式被使用。而压缩一般通过使用各种其他的工具程序来获得。
当一次传输被建立,客户端一般指定一个或多个前面说明的属性。若服务器端不能支持某个选项,服务器将用一个错误信息来响应客户端,并不具有协商机制。
FTP提供了充足的命令来使用户和远程建立连接并访问远程文件系统。
1.1.2命令格式
命令以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的官方权威站点地址是:。
1.2 wu-Ftpd的安装
当前,Linux环境下有许多ftp服务器软件可供选择,但是目前最常见的仍然是wu-Ftpd服务器。这里主要讨论该软件的安装和配置。
一般来说,在安装了linux时,缺省都会自动安装wu-ftpd服务器,但是有时候为了某种需要也需要自己亲自重新安装该服务器软件。安装wu-Ftpd有两方式,一种是安装rpm形式的发布包;一种是自己动手去编译生成Ftp服务器。
rpm包可以在处下载得到,以rpm包方式安装非常简单,只需要在按下面的简单的几个步骤就可以完成,假设下载得到的rpm包存放在/tmp目录下:
#cd/tmp
#rpm-ivh wu-ftpd-1.6.0-9.i386.rpm
压缩的源代码可以在出得到。这里我们以最新的1.6.0为例说明如何编译安装wu-ftpd。
1、解开源代码
1)将压缩的源代码拷贝到/usr/src下
#cp wu-ftpd.1.6.0.tar.gz/usr/src
2)对压缩文档进行解压缩:
#tar xvfz wu-ftpd.1.6.0.tar.gz
#cd wu-ftpd-1.6.0
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 3.X
du4: DEC Unix 4.X or later
dyn: Dynix
fbs: FreeBSD 1.0 or later
hiu: Hitachi Unix
hpx: HP-UX
lnx: Linux(tested on 1.0.30)
nbs: NetBSD 1.X
nx2: NeXTstep 1.x
nx3: NeXTstep 3.x
osf: OSF/1
osx: Mac OS X
ptx:???
sco: SCO Unix 3.2v4.2/SCO OpenServer 5
sgi: SGI Irix 4.0.5a
sny: Sony NewsOS
sol: SunOS 5.x/ Solaris 1.x
s41: SunOS 4.1.x
ult: Ultrix 4.x
uxw: UnixWare 1.1 or later
clean: Clean up object files and such to reduce disk space after building.
install: Install ftpd
Copying Makefiles.
Linking src/config.h
Making support library.
gcc-O3-fomit-frame-pointer-fno-strength-reduce-pipe-c strcasestr.c
gcc-O3-fomit-frame-pointer-fno-strength-reduce-pipe-c authuser.c
gcc-O3-fomit-frame-pointer-fno-strength-reduce-pipe-c snprintf.c
rm-f libsupport.a
ar cq libsupport.a strcasestr.o authuser.o snprintf.o
ranlib libsupport.a
:::
:::
:::
编译成功以后将生成如下几个可执行文件:
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/in.ftpd
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/ftpcount.1/usr/man/man1/ftpcount.1
install-c-o bin-g bin-m 444 doc/ftpwho.1/usr/man/man1/ftpwho.1
install-c-o bin-g bin-m 444 doc/ftpaccess.5/usr/man/man5/ftpaccess.5
install-c-o bin-g bin-m 444 doc/ftpconversions.5/usr/man/man5/ftpconversio5
install-c-o bin-g bin-m 444 doc/ftphosts.5/usr/man/man5/ftphosts.5
install-c-o bin-g bin-m 444 doc/xferlog.5/usr/man/man5/xferlog.5
install-c-o bin-g bin-m 444 doc/ftpd.8/usr/man/man8/ftpd.8
5、编辑"/etc/inetd.conf"文件,指向新的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"是一个可执行程序,确保修复该程序检测到的任何问题。
1.3让FTP服务器运转起来
一般来说,只要正确地编译安装了wu-ftpd,该服务器就可以正常运行。用户可以通过FTP命令从各种系统上连接该服务器。
1.4配置文件的设置
1.4.1/etc/ftpaccess的设置
这个配置文件是FTP服务器最重要的配置文件,这个文件的设置决定了FTP是否可以正常工作及许多访问权限的设置。如下面的例子所示:
class all real,guest,anonymous*
limit all 10 Any/etc/msgs/msg.dead
readme README* login
readme README* cwd=*
message/welcome.msg 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*.linuxaid.com.cn 201.101.13.*
指定义一个friend类,该类从*.linuxaid.com.cn及201.101.13.*访问FTP服务器时有特定的权限设定。
指示: limit类别人数时间文件名
该指示设定在某个类在某个时间内允许连接FTP服务器的人数的限制,并指定当连接人数超过限制,后面的用户连接时显示给用户的消息信息。
举例说明:
limit local 20 Any/tmp/message/msg.toomany
上面的例子限定local这个类中的拥护同一时间只能有20人同时上网连接这台FTP服务器,若超过20人则显示/tmp/message/msg.toomany的文件的内容
limit outworld 100 MoTu|Any 2200-0800/tmp/message/msg.limit
这个例子限制outworld这个类的用户只能在周一周二或每天的晚上10点到第二天早上的8点之间访问该FTP服务器,而且同时连线的人数不可以超过100人,若超过100人,则显示/tmp/message/msg.limit的文件的内容
/tmp/message/msg.limit的内容为:
对不起!本服务器只允许匿名用户在周一周二全天及其他每天晚上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/msg.welcome login
指定当用户登录时,将自动显示/tmp/message/msg.welcome的内容给用户,注意这里的/msg.welcome指ftp根目录下的msg.welcome文件,即/home/ftp/msg.welcome。
message/welcome cwd=*
指定当用户切换另一个目录时,只要目录中有msg.welcome文件,就显示给用户
指示: 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@linuxaid.com.cn
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就如同匿名用
如何查看linux服务器的配置
Linux大部分操作是通过命令实现的,并不像windows那么直观。linux查看硬件信息也是需要通过linux查看硬件信息命令查询的
系统
# uname-a#查看内核/操作系统/CPU信息
# head-n 1/etc/issue#查看操作系统版本
# cat/proc/cpuinfo#查看CPU信息
# hostname#查看计算机名
# lspci-tv#列出所有PCI设备
# lsusb-tv#列出所有USB设备
# lsmod#列出加载的内核模块
# env#查看环境变量
资源
# free-m#查看内存使用量和交换区使用量
# df-h#查看各分区使用情况
# du-sh<目录名>#查看指定目录的大小
# grep MemTotal/proc/meminfo#查看内存总量
# grep MemFree/proc/meminfo#查看空闲内存量
# uptime#查看系统运行时间、用户数、负载
# cat/proc/loadavg#查看系统负载
磁盘和分区
# mount| column-t#查看挂接的分区状态
# fdisk-l#查看所有分区
# swapon-s#查看所有交换分区
# hdparm-i/dev/hda#查看磁盘参数(仅适用于IDE设备)
# dmesg| grep IDE#查看启动时IDE设备检测状况
网络
# ifconfig#查看所有网络接口的属性
# iptables-L#查看防火墙设置
# route-n#查看路由表
# netstat-lntp#查看所有监听端口
# netstat-antp#查看所有已经建立的连接
# netstat-s#查看网络统计信息
进程
# ps-ef#查看所有进程
# top#实时显示进程状态
用户
# w#查看活动用户
# id<用户名>#查看指定用户信息
# last#查看用户登录日志
# cut-d:-f1/etc/passwd#查看系统所有用户
# cut-d:-f1/etc/group#查看系统所有组
# crontab-l#查看当前用户的计划任务
服务
# chkconfig--list#列出所有系统服务
# chkconfig--list| grep on#列出所有启动的系统服务
程序
# rpm-qa#查看所有安装的包
其他常用命令整理如下:
查看主板的: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]
查看硬件信息,包括bios、cpu、内存等信息:dmidecode
测定当前的显示器刷新频率:/usr/sbin/ffbconfig–rev?
查看系统配置:/usr/platform/sun4u/sbin/prtdiag–v
查看当前系统中已经应用的补丁:showrev–p
显示当前的运行级别:who–rH
查看当前的bind版本信息:nslookup–class=chaos–q=txt version.bind
查看硬件信息:dmesg| more
显示外设信息,如usb,网卡等信息:lspci
查看已加载的驱动:
lsnod
lshw
查看当前处理器的类型和速度(主频):psrinfo-v
打印当前的OBP版本号:prtconf-v
查看硬盘物理信息(vendor, RPM, Capacity):iostat–E
查看磁盘的几何参数和分区信息:prtvtoc/dev/rdsk/c0t0d0s
显示已经使用和未使用的i-node数目:
df–F ufs–o i
isalist–v
对于“/proc”中文件可使用文件查看命令浏览其内容,文件中包含系统特定信息:
主机CPU信息:Cpuinfo
主机DMA通道信息:Dma
文件系统信息:Filesystems
主机中断信息:Interrupts
主机I/O端口号信息:Ioprots
主机内存信息:Meninfo
Linux内存版本信息:Version
备注: proc– process information pseudo-filesystem进程信息伪装文件系统
Linux如何配置网络游戏服务器
要建立一个安全Linux服务器就首先要了解Linux环境下和网络服务相关的配置文件的含义及如何进行安全的配置。在Linux系统中,TCP/IP网络是通过若干个文本文件进行配置的,也许你需要编辑这些文件来完成联网工作,但是这些配置文件大都可以通过配置命令linuxconf(其中网络部分的配置可以通过netconf命令来实现)命令来实现。下面介绍基本的TCP/IP网络配置文件。
*/etc/conf.modules文件
该配置文件定义了各种需要在启动时加载的模块的参数信息。这里主要着重讨论关于网卡的配置。在使用Linux做网关的情况下,Linux服务器至少需要配置两块网卡。为了减少启动时可能出现的问题,Linux内核不会自动检测多个网卡。对于没有将网卡的驱动编译到内核而是作为模块动态载入的系统若需要安装多块网卡,应该在“conf.modules”文件中进行相应的配置。
若设备驱动被编译为模块(内核的模块):对于PCI设备,模块将自动检测到所有已经安装到系统上的设备;对于ISA卡,则需要向模块提供IO地址,以使模块知道在何处寻找该卡,这些信息在“/etc/conf.modules”中提供。
例如,我们有两块ISA总线的3c509卡,一个IO地址是0x300,另一个是0x320。编辑“conf.modules”文件如下:
aliaseth03c509
aliaseth13c509
options3c509io=0x300,0x320
这是说明3c509的驱动程序应当分别以eth0或eth1的名称被加载(aliaseth0,eth1),并且它们应该以参数io=0x300,0x320被装载,来通知驱动程序到哪里去寻找网卡,其中0x是不可缺少的。
对于PCI卡,仅仅需要alias命令来使ethN和适当的驱动模块名关联,PCI卡的IO地址将会被自动的检测到。对于PCI卡,编辑“conf.modules”文件如下:
aliaseth03c905
aliaseth13c905
若驱动已经被编译进了内核:系统启动时的PCI检测程序将会自动找到所有相关的网卡。ISA卡一般也能够被自动检测到,但是在某些情况下,ISA卡仍然需要做下面的配置工作:
在“/etc/lilo.conf”中增加配置信息,其方法是通过LILO程序将启动参数信息传递给内核。对于ISA卡,编辑“lilo.conf”文件,增加如下内容:
append="ether="0,0,eth0ether="0,0,eth1"
注:先不要在“lilo.conf”中加入启动参数,测试一下你的ISA卡,若失败再使用启动参数。
如果用传递启动参数的方法,eth0和eth1将按照启动时被发现的顺序来设置。
*/etc/HOSTNAME文件
该文件包含了系统的主机名称,包括完全的域名,如:deep.openarch.com。
*/etc/sysconfig/network-scripts/ifcfg-ethN文件
在RedHat中,系统网络设备的配置文件保存在“/etc/sysconfig/network-scripts”目录下,ifcfg-eth0包含第一块网卡的配置信息,ifcfg-eth1包含第二块网卡的配置信息。
下面是“/etc/sysconfig/network-scripts/ifcfg-eth0”文件的示例:
DEVICE=eth0
IPADDR=208.164.186.1
NETMASK=255.255.255.0
NETWORK=208.164.186.0
BROADCAST=208.164.186.255
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
若希望手工修改网络地址或在新的接口上增加新的网络界面,可以通过修改对应的文件(ifcfg-ethN)或创建新的文件来实现。
DEVICE=name name表示物理设备的名字
IPADDR=addr addr表示赋给该卡的IP地址
NETMASK=mask mask表示网络掩码
NETWORK=addr addr表示网络地址
BROADCAST=addr addr表示广播地址
ONBOOT=yes/no启动时是否激活该卡
none:无须启动协议
bootp:使用bootp协议
dhcp:使用dhcp协议
USERCTL=yes/no是否允许非root用户控制该设备
*/etc/resolv.conf文件
该文件是由域名解析器(resolver,一个根据主机名解析IP地址的库)使用的配置文件,示例如下:
searchopenarch.com
nameserver208.164.186.1
nameserver208.164.186.2
“searchdomainname.com”表示当提供了一个不包括完全域名的主机名时,在该主机名后添加domainname.com的后缀;“nameserver”表示解析域名时使用该地址指定的主机为域名服务器。其中域名服务器是按照文件中出现的顺序来查询的。
*/etc/host.conf文件
该文件指定如何解析主机名。Linux通过解析器库来获得主机名对应的IP地址。下面是一个“/etc/host.conf”的示例:
orderbind,hosts
multion
ospoofon
“orderbind,hosts”指定主机名查询顺序,这里规定先使用DNS来解析域名,然后再查询“/etc/hosts”文件(也可以相反)。
“multion”指定是否“/etc/hosts”文件中指定的主机可以有多个地址,拥有多个IP地址的主机一般称为多穴主机。
“nospoofon”指不允许对该服务器进行IP地址欺骗。IP欺骗是一种攻击系统安全的手段,通过把IP地址伪装成别的计算机,来取得其它计算机的信任。
*/etc/sysconfig/network文件
该文件用来指定服务器上的网络配置信息,下面是一个示例:
NETWORK=yes
RORWARD_IPV4=yes
HOSTNAME=deep.openarch.com
GAREWAY=0.0.0.0
GATEWAYDEV=
NETWORK=yes/no网络是否被配置;
FORWARD_IPV4=yes/no是否开启IP转发功能
HOSTNAME=hostnamehostname表示服务器的主机名
GAREWAY=gw-ip gw-ip表示网络网关的IP地址
GAREWAYDEV=gw-dev gw-dw表示网关的设备名,如:etho等
注意:为了和老的软件相兼容,“/etc/HOSTNAME”文件应该用和HOSTNAME=hostname相同的主机名。
*/etc/hosts文件
当机器启动时,在可以查询DNS以前,机器需要查询一些主机名到IP地址的匹配。这些匹配信息存放在/etc/hosts文件中。在没有域名服务器情况下,系统上的所有网络程序都通过查询该文件来解析对应于某个主机名的IP地址。
下面是一个“/etc/hosts”文件的示例:
IPAddress Hostname Alias
127.0.0.1 Localhost Gate.openarch.com
208.164.186.1 gate.openarch.comGate
……………………………
最左边一列是主机IP信息,中间一列是主机名。任何后面的列都是该主机的别名。一旦配置完机器的网络配置文件,应该重新启动网络以使修改生效。使用下面的命令来重新启动网络:/etc/rc.d/init.d/networkrestart
*/etc/inetd.conf文件
众所周知,作为服务器来说,服务端口开放越多,系统安全稳定性越难以保证。所以提供特定服务的服务器应该尽可能开放提供服务必不可少的端口,而将与服务器服务无关的服务关闭,比如:一台作为www和ftp服务器的机器,应该只开放80和25端口,而将其他无关的服务如:fingerauth等服务关掉,以减少系统漏洞。
而inetd,也叫作“超级服务器”,就是监视一些网络请求的守护进程,其根据网络请求来调用相应的服务进程来处理连接请求。inetd.conf则是inetd的配置文件。inetd.conf文件告诉inetd监听哪些网络端口,为每个端口启动哪个服务。在任何的网络环境中使用Linux系统,第一件要做的事就是了解一下服务器到底要提供哪些服务。不需要的那些服务应该被禁止掉,最好卸载掉,这样黑客就少了一些攻击系统的机会。查看“/etc/inetd.conf”文件,了解一下inetd提供哪些服务。用加上注释的方法(在一行的开头加上#号),禁止任何不需要的服务,再给inetd进程发一个SIGHUP信号。
第一步:把文件的许可权限改成600。
[root@deep]#chmod600/etc/inetd.conf
第二步:确信文件的所有者是root。
[root@deep]#stat/etc/inetd.conf
第三步:编辑“inetd.conf”文件(vi/etc/inetd.conf),禁止所有不需要的服务,如:ftp、telnet、shell、login、exec、talk、ntalk、imap、pop-2、pop-3、finger、auth,等等。如果你觉得某些服务有用,可以不禁止这些服务。但是,把这些服务禁止掉,系统受攻击的可能性就会小很多。改变后的“inetd.conf”文件的内容如下面所示:
#Tore-readthisfileafterchanges,justdoa'killall-HUPinetd'
#
#echostreamtcpnowaitrootinternal
#echodgramudpwaitrootinternal
#discardstreamtcpnowaitrootinternal
#discarddgramudpwaitrootinternal
#daytimestreamtcpnowaitrootinternal
#daytimedgramudpwaitrootinternal
#chargenstreamtcpnowaitrootinternal
#chargendgramudpwaitrootinternal
#timestreamtcpnowaitrootinternal
#timedgramudpwaitrootinternal
#
#Thesearestandardservices.
#
#ftpstreamtcpnowaitroot/usr/sbin/tcpdin.ftpd-l-a
#telnetstreamtcpnowaitroot/usr/sbin/tcpdin.telnetd
#
#Shell,login,exec,comsatandtalkareBSDprotocols.
#
#shellstreamtcpnowaitroot/usr/sbin/tcpdin.rshd
#loginstreamtcpnowaitroot/usr/sbin/tcpdin.rlogind
#execstreamtcpnowaitroot/usr/sbin/tcpdin.rexecd
#comsatdgramudpwaitroot/usr/sbin/tcpdin.comsat
#talkdgramudpwaitroot/usr/sbin/tcpdin.talkd
#ntalkdgramudpwaitroot/usr/sbin/tcpdin.ntalkd
#dtalkstreamtcpwaitnobody/usr/sbin/tcpdin.dtalkd
#
#Popandimapmailservicesetal
#
#pop-2streamtcpnowaitroot/usr/sbin/tcpdipop2d
#pop-3streamtcpnowaitroot/usr/sbin/tcpdipop3d
#imapstreamtcpnowaitroot/usr/sbin/tcpdimapd
#
#TheInternetUUCPservice.
#
#uucpstreamtcpnowaituucp/usr/sbin/tcpd/usr/lib/uucp/uucico-l
#
#Tftpserviceisprovidedprimarilyforbooting.Mostsites
#runthisonlyonmachinesactingas"bootservers."Donotuncomment
#thisunlessyou*need*it.
#
#tftpdgramudpwaitroot/usr/sbin/tcpdin.tftpd
#bootpsdgramudpwaitroot/usr/sbin/tcpdbootpd
#
#Finger,systatandnetstatgiveoutuserinformationwhichmaybe
#valuabletopotential"systemcrackers."Manysiteschoosetodisable
#someoralloftheseservicestoimprovesecurity.
#
#fingerstreamtcpnowaitroot/usr/sbin/tcpdin.fingerd
#cfingerstreamtcpnowaitroot/usr/sbin/tcpdin.cfingerd
#systatstreamtcpnowaitguest/usr/sbin/tcpd/bin/ps-auwwx
#netstatstreamtcpnowaitguest/usr/sbin/tcpd/bin/netstat-finet
#
#Authentication
#
#authstreamtcpnowaitnobody/usr/sbin/in.identdin.identd-l-e-o
#
#Endofinetd.conf
注意:改变了“inetd.conf”文件之后,别忘了给inetd进程发一个SIGHUP信号(killall–HUPinetd)。
[root@deep/root]#killall-HUPinetd
第四步:
为了保证“inetd.conf”文件的安全,可以用chattr命令把它设成不可改变。把文件设成不可改变的只要用下面的命令:
[root@deep]#chattr+i/etc/inetd.conf
这样可以避免“inetd.conf”文件的任何改变(意外或是别的原因)。一个有“i”属性的文件是不能被改动的:不能删除或重命名,不能创建这个文件的链接,不能往这个文件里写数据。只有系统管理员才能设置和清除这个属性。如果要改变inetd.conf文件,你必须先清除这个不允许改变的标志:
[root@deep]#chattr-i/etc/inetd.conf
但是对于诸如sendmail,named,www等服务,由于它们不象finger,telnet等服务,在请求到来时由inet守护进程启动相应的进程提供服务,而是在系统启动时,作为守护进程运行的。而对于redhatlinux,提供了一个linuxconfig命令,可以通过它在图形界面下交互式地设置是否在启动时运行相关服务。也可以通过命令来设置是否启动时启动某个服务,如:[root@deep]#chkconfig–level35namedoff
具体命令可以参考manchkconfig的说明。
*/etc/hosts.allow文件
但是对于telnet、ftp等服务,如果将其一同关闭,那么对于管理员需要远程管理时,将非常不方便。Linux提供另外一种更为灵活和有效的方法来实现对服务请求用户的限制,从而可以在保证安全性的基础上,使可信任用户使用各种服务。Linux提供了一个叫TCPwrapper的程序。在大多数发布版本中该程序往往是缺省地被安装。利用TCPwrapper你可以限制访问前面提到的某些服务。而且TCPwrapper的记录文件记录了所有的企图访问你的系统的行为。通过last命令查看该程序的log,管理员可以获知谁曾经或者企图连接你的系统。
在/etc目录下,有两个文件:hosts.denyhosts.allow通过配置这两个文件,你可以指定哪些机器可以使用这些服务,哪些不可以使用这些服务。
当服务请求到达服务器时,TCPwrapper就按照下列顺序查询这两个文件,直到遇到一个匹配为止:
1.当在/etc/hosts.allow里面有一项与请求服务的主机地址项匹配,那么就允许该主机获取该服务
2.否则,如果在/etc/hosts.deny里面有一项与请求服务的主机地址项匹配,就禁止该主机使用该项服务。
3.如果相应的配置文件不存在,访问控制软件就认为是一个空文件,所以可以通过删除或者移走配置文件实现对清除所有设置。在文件中,空白行或者以#开头的行被忽略,你可以通过在行前加#实现注释功能。
配置这两个文件是通过一种简单的访问控制语言来实现的,访问控制语句的基本格式为:
程序名列表:主机名/IP地址列表。
程序名列表指定一个或者多个提供相应服务的程序的名字,名字之间用逗号或者空格分割,可以在inetd.conf文件里查看提供相应服务的程序名:如上面的文件示例中,telent所在行的最后一项就是所需的程序名:in.telnetd。
主机名/IP地址列表指定允许或者禁止使用该服务的一个或者多个主机的标识,主机名之间用逗号或空格分隔。程序名和主机地址都可以使用通配符,实现方便的指定多项服务和多个主机。
Linux提供了下面灵活的方式指定进程或者主机列表:
1.一个以"."起始的域名串,如.amms.ac.cn那么www.amms.ac.cn就和这一项匹配
2.以"."结尾的IP串如202.37.152.那么IP地址包括202.37.152.的主机都与这一项匹配。
3.格式为n.n.n.n/m.m.m.m表示网络/掩码,如果请求服务的主机的IP地址与掩码的位与的结果等于n.n.n.n那么该主机与该项匹配。
4.ALL表示匹配所有可能性
5.EXPECT表示除去后面所定义的主机。如:list_1EXCEPTlist_2表示list_1主机列表中除去List_2所列出的主机
6.LOCAL表示匹配所有主机名中不包含"."的主机
上面的几种方式只是Linux提供的方式中的几种,但是对于我们的一般应用来说是足够了。我们通过举几个例子来说明这个问题:
例一:我们只希望允许同一个局域网的机器使用服务器的ftp功能,而禁止广域网上面的ftp服务请求,本地局域网由202.39.154.、202.39.153.和202.39.152.三个网段组成。
在hosts.deny文件中,我们定义禁止所有机器请求所有服务:
ALL:ALL
在hosts.allow文件中,我们定义只允许局域网访问ftp功能:
in.ftpd-l–a:202.39.154202.39.153.202.39.152.
这样,当非局域网的机器请求ftp服务时,就会被拒绝。而局域网的机器可以使用ftp服务。此外,应该定期检查/var/log目录下的纪录文件,发现对系统安全有威胁的登录事件。last命令可以有效的查看系统登录事件,发现问题所在。
最后tcpdchk是检查TCP_WAPPERS配置的程序。它检查TCP_WAPPERS的配置,并报告它可以发现的问题或潜在的问题。在所有的配置都完成了之后,请运行tcpdchk程序:
[root@deep]#tcpdchk
*/etc/services文件
端口号和标准服务之间的对应关系在RFC1700“AssignedNumbers”中有详细的定义。“/etc/services”文件使得服务器和客户端的程序能够把服务的名字转成端口号,这张表在每一台主机上都存在,其文件名是“/etc/services”。只有“root”用户才有权限修改这个文件,而且在通常情况下这个文件是没有必要修改的,因为这个文件中已经包含了常用的服务所对应的端口号。为了提高安全性,我们可以给这个文件加上保护以避免没有经过授权的删除和改变。为了保护这个文件可以用下面的命令:
[root@deep]#chattr+i/etc/services
*/etc/securetty文件
“/etc/securetty”文件允许你规定“root”用户可以从那个TTY设备登录。登录程序(通常是“/bin/login”)需要读取“/etc/securetty”文件。它的格式是:列出来的tty设备都是允许登录的,注释掉或是在这个文件中不存在的都是不允许root登录的。
注释掉(在这一行的开头加上#号)所有你想不让root登录的tty设备。
编辑securetty文件(vi/etc/securetty)象下面一样,注释掉一些行:
tty1
#tty2
#tty3
#tty4
#tty5
#tty6
#tty7
#tty8
*使Control-Alt-Delete关机键无效
把“/etc/inittab”文件中的一行注释掉可以禁止用Control-Alt-Delete关闭计算机。如果服务器不是放在一个安全的地方,这非常重要。
编辑inittab文件(vi/etc/inittab)把这一行:
ca::ctrlaltdel:/sbin/shutdown-t3-rnow
改为:
#ca::ctrlaltdel:/sbin/shutdown-t3-rnow
用下面的命令使改变生效:
[root@deep]#/sbin/initq
*改变“/etc/rc.d/init.d/”目录下的脚本文件的访问许可
/etc/rc.d/init.d/下的脚本主要包含了启动服务的脚本程序。一般用户没有什么必要知道脚本文件的内容。所以应该改变这些脚本文件的权限。
[root@deep]#chmod-R700/etc/rc.d/init.d/*
这样只有root可以读、写和执行这个目录下的脚本。
*/etc/rc.d/rc.local文件
在默认情况下,当登录装有Linux系统的计算机时,系统会告诉你Linux发行版的名字、版本号、内核版本和服务器名称。这泄露了太多的系统信息。最好只显示一个“Login:”的提示信息。
第一步:
编辑“/ect/rc.d/rc.local”文件,在下面这些行的前面加上“#”:
--
#Thiswilloverwrite/etc/issueateveryboot.So,makeanychangesyou
#wanttomaketo/etc/issuehereoryouwilllosethemwhenyoureboot.
#echo"">/etc/issue
#echo"$R">>/etc/issue
#echo"Kernel$(uname-r)on$a$(uname-m)">>/etc/issue
#
#cp-f/etc/issue/etc/issue.net
#echo>>/etc/issue
--
第二步:
删除“/etc”目录下的“issue.net”和“issue”文件:
[root@deep]#rm-f/etc/issue
[root@deep]#rm-f/etc/issue.net
注意:“/etc/issue.net”文件是用户从网络登录计算机时(例如:telnet、SSH),看到的登录提示。同样在“”目录下还有一个“issue”文件,是用户从本地登录时看到的提示。这两个文件都是文本文件,可以根据需要改变。但是,如果想删掉这两个文件,必须向上面介绍的那样把“/etc/rc.d/rc.local”脚本中的那些行注释掉,否则每次重新启动的时候,系统又会重新创建这两个文件。