电信运营商系统安全

Unix高级安全设置

第一部分 Unix历史与发展1.1 UNIX简介UNIX 已有数十年的历史,在这期间,它的改变即使没有上亿次,也有数百万次了,有成千上万的个人和公司实现了上千种不同的版本,有上百万系统管理员在从微型嵌入式系统到超级计算机上都安装过它。无可争论,没有两个实际的UNIX操作系统是完全相同...显示全部
第一部分 Unix历史与发展
1.1 UNIX简介
UNIX 已有数十年的历史,在这期间,它的改变即使没有上亿次,也有数百万次了,有成千上
万的个人和公司实现了上千种不同的版本,有上百万系统管理员在从微型嵌入式系统到超级
计算机上都安装过它。无可争论,没有两个实际的UNIX操作系统是完全相同的。
  UNIX”一词是属于Open Group的一个商标,该组织是一个要求符号得到正确归属的国际
协会。在这数十年当中,该标识已经被冲淡到没有具体含义。虽然如此,Open Group仍发布
了“The Single UNIX Specification”,这可以在http://www.UNIX-systems.org/online.

html上看到。
  “Unix”是双关语,表示名字Multics,它最初被写作“Unics”,表示UNiplexed Info
rmation and Computing System。“Unix”和“UNIX”在如今都被广泛使用。曾经有一段时
间,Dennis Ritchie试图宣布用小写版本,因为“UNIX”不是开头字母组成。
  许多运行Linux等类似UNIX系统的人认为他们运行的是UNIX。正式UNIX系统和非正式UNI
X系统通常被认为属于一类----不论是书中、媒介、网上还是社会公认。
  按照UNIX FAQ的定义,UNIX是“一个用C语言编写的操作系统,它有层次文件系统并集成
了文件和设备I/O,其系统调用接口包括fork ( )和pipe ( )等服务,用户界面包括cc、tro
ff、grep、awk等工具和一个被选择的shell”。可以再加一些,UNIX为多任务提供一致的方
式,并内置有创建、同步和终止进程的操作,它可在不同种类计算机间进行移植。
1.2 UNIX发展与历史
1969年,Ken Thompson、Dennis Ritchie和其他一些人在AT&T贝尔实验室开始进行一个“li
ttle-used PDP-7 in a corner”的工作,它后来成为UNIX。10年里,UNIX在AT&T的发展经历
了数个版本。V4(1974)用C语言重写,这成为系统间操作系统可移植性的一个里程碑。V6(
1975)第一次在贝尔实验室以外使用,成为加州大学伯克利分校开发的第一个UNIX版本的基
础。
贝尔实验室继续在UNIX上工作到80年代,有1983年的System V(“五”,不是字母)版本和
1989年的System V,Release 4(缩写为SVR4)版本。同时,加利福尼亚大学的程序员改动了
AT&T发布的源代码,引发了许多主要论题。Berkeley Standard Distribution(BSD)成为第
2个主要“UNIX”版本。1984年的BSD 4.2版在大学和公司计算部门中得到广泛应用,它的一
些特征被吸收到SVR4中。
从90年代开始,AT&T的源代码许可证创造了市场的繁荣,不同开发者开发了数百种UNIX版本
。AT&T在1993年把UNIX产业卖给了Novell, Novell两年后又把它卖给了Santa Cruz Operati
on。同时,UNIX商标被转让给X/Open协会,X/Open协会后来成为了Open Group。
当UNIX的经营从一个实体到另一个实体传递时,几个长期的开发开始收获果实。传统上,要
得到一个运行的BSD系统,用户需要从AT&T得到源代码许可证。但到90年代早期,伯克利的开
发者在BSD上做了许多工作,使原始的AT&T源代码大部分被改动了。后续的程序员,从Willi
am和Lynne Jolitz开始在网络分布环境中开发BSD,后来在1992年成为386BSD 0.1版。这个最
初的“免费源代码”BSD具有三个分支,即:Net BSD、Free BSD和Open BSD,都以BSD 4.4为
基础。
1984年,程序员Richard Stallman开始开发来源于UNIX的免费GNU(GNU Not UNIX)。到90年
代早期,GNU项目出现了几个编程里程碑,包括GNU C库和Bourne Again Shell (bash)的发行
。整个系统除了一个关键因素即工作内核外基本完成。
接下来是芬兰赫尔辛基大学的学生Linus Torvalds。Linus看到了一个叫作Minix的小型UNIX
系统,觉得自己能做得更好。1991年秋天,他发行了一个叫“Linux”的免费软件内核的源代
码—是他的姓和Minux的组合。到1994年,Linus和一个内核开发小组发行了Linux 1.0版。L
inus和朋友们有一个免费内核,Stallman和朋友们拥有一个免费的UNIX克隆系统的其余部分
。人们把Linux内核和GNU合在一起组成一个完整的免费系统,该系统被称为“Linux”,尽管
Stallman更愿意取名为“GNU/Linux System”[6]。有几种不同类别的GNU/Linux:一些可以
被公司用来支持商业使用,如Red Hat、Caldera Systems和S.U.S.E;其他如Debian GNU/Li
nux,更接近于最初的免费软件概念。
Linux现已发展到内核2.2版。Linux能在几种不同体系结构的芯片上运行,并已经被各界接纳
或支持。其支持者有惠普、硅谷图像和Sun等有较长历史的UNIX供应商,还有康柏和Dell等P
C供应商以及Oracle和IBM等主要软件供应商。或许最具讽刺的是,微软承认无所不在的免费
软件的竞争性威胁,但它不愿或不能公开自己的软件源代码。
后来微软开始推出Windows NT (Windows 2000)。到90年代末,许多供应商开始放弃UNIX服务
器平台而转向Windows NT。例如Silicon Graphics 公司已决定把Intel硬件和NT作为未来的
图形平台。
第二部分 Unix典型安全隐患
2.1 RPC守护进程程序的错误使入侵者可以直接获得root权限
对Unix威胁最大可以说就是rpc上面的漏洞,远程过程调用(Remote Procedure Call)允许
一台计算机上的程序去执行另一台计算机上的程序。它们广泛的应用在各种网络服务中,如
文件共享服务NFS。有很多漏洞是RPC本身的缺陷导致的,它们正不停的涌现出来。有很明显
的证据表明,1999年末2000年初大规模的分布式拒绝服务攻击中,很多被作为攻击跳板的牺
牲品就是因为存在RPC漏洞。在Solar Sunrise事件期间,对美国陆军广为人知的成功攻击就
是因为在数百台国防部的系统中找到了一个RPC漏洞。
2.2 一些应用的远程漏洞
远程漏洞可以使远程攻击者在只对开放了有漏洞服务的应用利用的情况下,就可以得到一些
权限或者root权限。
例如:BIND程序存在的问题,利用nxt,qinv,in.named可直接得到root权限
BIND(Berkeley Internet Name Domain)软件包是域名服务(DNS)的一个应用最广泛的实现
软件--我们所有人都通过它来定位Internet上的系统,只需知道域名(如www.cnns.net
而不用知道IP地址,由此可体会它的重要性--这使它成为最受欢迎的攻击目标。
2.3 本地漏洞
本地漏洞虽然没有上面两种漏洞那么严重,但是他也是评估系统安全与否的一个重要因素,
它可以使权限地的系统用户来提升自己的系统权限,或者使一个得到了一些权限的远程攻击
者,扩大自己的战果,提升权限。
例如,ff.core缓冲区溢出漏洞,一个普通用户只要执行一个简单的脚本,就可以令缓冲区溢
出从而的到一个root shell。
2.4 暴露系统信息
严格的说这不是漏洞,但是他核你的系统安全相关。举例子来说,finger暴露了系统合法用
户名,默认shell等等信息,这就可以被攻击者利用起来猜密码。再如某个软件的版本号暴露
,就会令攻击者,针对此版本来进行攻击,这就使攻击者更容易的入侵的系统。
第三部分 常见Unix安全设置方案
3.1 Solaris 系列
3.1.1 PROM OpenBoot 和物理安全
3.1.1.1 OpenBoot安全级别
none :不需要任何口令。所有OpenBoot设置都可以修改,任何人只要物理接触到主控台,就
可以完全控制。command:除了boot和go之外所有命令都需要口令。full:除了go命令之外所
有命令都需要口令。
3.1.1.2 改变OpenBoot安全级别
首先使用eeprom security-password 命令设置OpenBoot口令,然后在root登入状态使用eep
rom security-mode=command命令改变安全级别为command或在OK状态:ok setenv security
-mode=command的密码保护来实现。
3.1.2 文件系统的安全
3.1.2.1 基础知识
文件系统是unix系统安全的核心。在unix中,所有的事物都是文件。Unix中的基本文件类型
有正规文件、目录、特殊文件、链接、Sockets等等。这些不同类型的文件以一个分层的树结
构进行组织,以一个叫"root"的目录为起始位置("/")。整个就是一个文件系统。每个文件对
应一个"i节点","i节点"包括UID(文件拥有者)、GID(文件所在组)、模式(文件的权限)、文
件大小、文件类型、ctime("i节点"上次修改时间)、mtime(文件上次修改时间)、atime(文件
上次访问时间)、nlink(链接数)。它表示了文件的基本属性。
大家注意到,"/"下有很多的目录,那么这些目录是干什么的呢?下面简要介绍一下目录结构
。如下:
/bin 用户命令的可执行文件
/dev 特殊设备文件
/etc 系统执行文件、配置文件、管理文件,主要是配置文件
/home 用户起始目录
/lib 引导系统以及在root文件系统中运行命令所需的共享库文件
/lost+found 与特定文件系统断开连结的丢失文件
/mnt 临时安装的文件系统(如光驱、软驱)
/proc 一个伪文件系统,用来作为到内核数据结构或正在运行的进程的接口(用于调试)
/sbin 只有root使用的可执行文件和只需要引导或安装/usr的文件
/tmp 临时文件
/usr 为用户和系统命令使用的可执行文件、头文件、共享库、帮助文件、本地程序(在/usr
/local中)
/var 用于电子邮件、打印、cron等的文件,统计文件,日志文件
文件系统有多种类型,unix内核支持如下文件系统:
1) ext2 固定和可移动磁盘都支持的一种高性能文件系统,用于linux
2) msdos 由MS-DOS和Windows使用
3) umsdos Linux使用的一种扩充的DOS文件系统,支持长文件名、权限设置
4) iso9660 遵从ISO9660标准的CD-ROM文件系统
5) hpfs High Performance Filesystem,高性能文件系统,OS/2使用
6) minix 在Minux OS中使用,最早的Linux文件系统
7) nfs 用来访问远程计算机中磁盘的网络文件系统
8) swap 用作交换的磁盘分区
3.1.2.2 文件权限
文件权限是unix文件系统安全的关键。Unix中的每个用户有一个唯一的用户名和UID(用户ID
号),每个用户属于一个或多个组。基本分组成员在/etc/passwd中定义,附加的分组成员在
/etc/group中定义。例如,用户tiger的UID为225,分组为11(students),此外,他还是分组
185(postgraduates)的成员。每个文件和目录有三组权限,一组是文件的拥有者、一组是文
件所属组的成员、一组是其他所有用户。"r"表示可读,"w"表示可写,"x"表示可执行。一共
9位(每组3位),合起来称为模式位(mode bits)。
模式位通常由一列10个字符来表示,每个字符表示一个模式设置,第一个指明文件类型,如
(d表示目录,-表示普通文件,l表示链接文件等等)。例如,用ls -l 命令显示如下:
drwxr-xr-x 2 root root 1024 Aug 13 09:22 backup/
-rw-r--r-- 1 root root 1824 Apr 21 18:45 client.c
-rw------- 1 root root 65536 Apr 22 17:56 core
-rw-r----- 1 root root 2351 Apr 22 14:01 cry1.bak
-rwxr-xr-x 1 root root 27492 Apr 21 18:47 crypt*
-rw-r----- 1 tiger tiger 2450 Apr 22 15:16 cryption_server.c
-rw-r----- 1 tiger tiger 1544 Apr 22 15:02 myinclude.h
-rwxr-xr-x 1 root root 8280 May 3 10:35 test*
例如最后一行以"-"开始,表示test使一个普通文件,文件拥有者可以读写执行、本组其他成
员可以读执行、其他用户可以读执行。我们可以用chmod和umask命令来改变权限,这很简单
,察看相应的帮助就知道怎么修改权限。
3.1.2.3 SUID/SGID
为什么要单独把他们从文件权限中分出来讲呢?因为,这是网络入侵者非常爱用的入侵入口
。SUID表示"设置用户ID",SGID表示"设置组ID"。当用户执行一个SUID文件时,用户ID在程
序运行过程中被置为文件拥有者的用户ID。如果文件属于root,那用户就成为超级用户。同
样,当一个用户执行SGID文件时,用户的组被置为文件的组。例如,PS命令以SUID root运行
,他从系统内存中读取,这是一般用户不能做的。SUID程序代表了重要的安全漏洞,特别是
SUID设为root的程序。
Unix实际上有两种类型的用户ID。"real user ID"是在登录过程中建立的用户ID。 "effect
ive user ID"是在登录后的会话过程中通过SUID和SGID位来修改。当一个用户运行一条命令
时,进程继承了用户登录Shell的权限,这时"real user ID"和"effective user ID"是相同
的。当SUID位被设置时,进程继承了命令拥有者的权限。例如普通用户运行passwd命令时,
他能够修改/etc/passwd文件,尽管文件是属于root的。这成为可能是因为passwd命令以roo
t的SUID权限运行。那么如何识别SUID程序呢?我们检查文件的权限模式,在它的第四位如果
不是"x",而是"s",就是一个SUID程序。例如,ls -l /bin/su命令显示:
-rwsr-xr-x 1 root root 14888 Aug 15 1999 /bin/su*
表明su是一个SUID程序。
Unix系统安全的一种典型攻击就是创建一个SUID是root的shell拷贝,然后把他隐藏。通过调
用后门,攻击者就获得了root的权利。例如,某个系统管理员忘了关闭某个root的Shell,一
个坏人经过运行如下命令:
cp /bin/bash /home/badman/.bash; chmod 4777 /home/badman/.bash
badman现在就有了一个bash的SUID root拷贝任其处理。他就有完整的root权限了。因此,系
统管理员应该定期察看系统中有哪些SUID和SGID文件。用下面的命令可以实现:find / -ty
pe f ( -perm -4000 -o -perm -2000 ) -ls
当然,攻击者可以通过修改find命令来逃避检测,所以要运行专门的检测软件(如Tripwire)
来进行检查。
3.1.2.4 加密与验证
Tripwire工具提出了使用密码校验和来确定文件是否经过了未认证的修改,加密技术可以用
来保护机密文件甚至整个文件系统。加密是通过密钥将明文转化为一堆乱码的密文,从而起
到保护文件内容的作用。Unix常用的加密算法有crypt(最早的加密工具)、DES(目前最常用的
)、IDEA(国际数据加密算法)、RC4、Blowfish(简单高效的DES)、RSA等等。具体的加密算法
这里不再阐明,需要了解请阅读Bruce Schneier的《应用密码学》一书。注意单向hash函数
,他处理任意长度的信息并返回一个固定长度的hash值(128位)。常用的有MD5、SHA、HAVAL
、Snefru等等。单向hash函数经常和公开密钥算法一起来创建数字签名,提供身份证明。与
传统的签名相比,数字签名还可以指出文件是否被修改过。
PGP是unix下用来保护信息特别是电子邮件的工具。他使用IDEA算法为数据加密,使用RSA算
法来进行密钥管理和数字签名,使用MD5来作为一个单向hash函数。其特点在于安全:不仅内
容被伪装,连发送者的签名也加密。PGP还可以用来加密本地文件。现在常用的Linux下的PG
P工具为:pgpe(加密)、pgps(签名)、pgpv(确认/解密)、pgpk(管理密钥)。请参考相应的帮
助来使用。
"特洛伊木马"的故事不知道大家听说过没有。古希腊人久攻特洛伊城不下,于是假装求和,
送了一个巨大的木马作为礼物,向城主Minerva表示和解。特洛伊人将木马拉入城内,到了夜
晚,藏在木马中的希腊士兵钻出来,里应外合,攻破特洛伊城。在计算机安全领域,这种欺
骗技巧成为攻击计算机安全的一种标准方式。他藏在你的计算机里,随时可能爆发,如果攻
击者需要的话。因此,一旦一个系统被装了特洛伊木马,他就不能在信任了,必须从新安装
。怎么避免呢,要养成良好的习惯,例如:限制下载,只从有声望的站点下载东西;检验下
载的文件;避免运行已编译好的二进制代码,从源代码开始编译;不执行不信任的电子邮件
发送的程序;不执行从非信任的Web站点得到的Java applets和Java Script。
MD5校验和有时与软件一起发行,用户可以用他来检验一个软件包。用户可以运行Red Hat L
inux中包含的md5sum工具,例如:md5sum cops.1.04.tar.gz
结果:lfa416872934e5bee99068f9989cb8b0 cops.1.04.tar.gz
和软件包自带的校验和文件比较,如果不符,则说明文件在传输过程中出了问题,最好从新
下载,本文件不可靠。md5sum还可以用来检验系统文件,在第一次安装系统之后对重要的li
lo系统二进制文件进行一下校验:md5sum lilo,其结果应该一直保持不变,除非升级。
3.1.2.5 完整性检查
完整性是安全系统的核心属性。用户需要知道昨天写的文件和今天打开的文件没有被改动。
攻击者可以用很多方法破坏文件系统,从依靠错误配置的权限获益到放置特洛伊木马和病毒
。Linux中用cksum命令对一个特定文件执行16位校验和的计算,上面的md5sum也是一个检验
的命令。
RPM(Red Hat Package manager)是由Red Hat Software开发并包含在其Linux产品之中的多功
能软件安装管理器。他可以用来建立、安装、查询、检验、升级和卸载独立的软件包。
3.1.2.6 加密文件系统
加密文件系统是文件系统安全的一个更引人注目的方法。他根据一个简单的推断:如果一个
系统保存机密数据,那么就应该以加密形式保存。加密文件系统(CFS)的核心思想是: CFS为
目录和文件提供一个透明的接口,并自动使用用户的密钥加密。一条单独的命令把一个密钥
和一个目录关联起来,从这时起,目录的内容在写时自动加密,在打开时自动解密。
一个由意大利人开发的透明加密文件系统(TCFS),用户甚至不知道他们的文件倍加密了。从
下面的地址下载:http://tcfs.dia.unisa.it/
3.1.2.7 备份
备份的重要性我想不需要多说了,那么备份有那些策略呢?常见的有:系统初装时的备份、
定期备份、增量式备份(只备份改动的)、特别备份(为某些文件备份)等等。Linux系统提供了
以下备份工具:
1) cp:拷贝,例如把dir1中的所有内容拷贝到dir2:cp -R dir1 dir2
2) tar:可以创建、把文件添加到或从一个tar档案中解开文件。档案本身也是一个文件,它
包含其他的许多文件和有关信息。Tar最初用于磁带机。
3) cpio:把文件拷贝进或拷贝出一个cpio档案或tar档案,与tar类似
4) dump:得到整个文件系统并把他拷贝到备份介质上,一个确保完整备份的正规方式是跟随
定期增量备份运行一个0级或完全备份,dump支持10个级别并能把上次备份后改动的所有文件
以更低的级别备份。缺省情况dump将备份到磁盘介质。例如,把一个SCSI硬盘(/dev/rsd0a)
以0级备份到磁带(/dev/rst0)。dump 0f0 /dev/rst0 1500 /dev/sd0a
5) restore:用来恢复整个文件系统或提取单个文件。与dump相对。注意,restore命令特别
冒险,因为他运行SUID root,像任何SUID root程序一样,可以根据自己的风险来运行rest
ore。
3.1.2.8 其他常见系统安全工具导航
1)CRYPT BREAKERS WORKBENCH一个集成多种工具的平台,帮助一个加密人员读取BSD4.2加密
的文件。
ftp://coast.cs.purdue.edu/pub/tools/unix/cbw
2)HOBGOBLIN
ftp://coast.cs.purdue.edu/pub/tools/unix/hobgoblin/
3)TRIPWIRE,强烈推荐,是一个文件系统完整性检查工具。
http://www.tripwiresecurity.com/
4)TROJAN,一个可以被任何用户运行来检查特洛伊木马的perl程序。
ftp://coast.cs.purdue.edu/pub/tools/unix/trojan/trojan.pl
5)PGP,流行的邮件和文件加密程序。
http://rufus.w3.org/linux/RPM/pgp.html
6)LIBDES,建立一个DES加密库和一个DES加密程序的工具。包括一个crypt(3)的快速实现。

ftp://ftp.psy.uq.oz.au/pub/Crypto/DES/
3.1.3 用户账号和环境的安全
3.1.3.1 口令管理增强方法
可以使用如下命令及其参数来增强对用户密码的管理:
1)passwd -n 30 user #强迫用户每30天修改一次密码;
2)passwd -f user #强迫用户在下一次登录时修改口令;
3)passwd -n 2 -x 1 user #禁止用户修改口令;
4)passwd -l user #封锁用户账号,禁止登录。
3.1.3.2 CRACK
Crack可以找出/etc/shadow中那些容易猜测的口令,虽然运行crack将会使CPU的负载加重,
但它在第一次运行时就可以给出10%系统帐号的口令。
URL:ftp://sable.ox.ac.uk/pub/comp/security/software/crackers/
3.1.3.3 取消ROOT的远程登陆
默认在/etc/default/login里加上 "CONSOLE"行,在/etc/ftpusers里加上root。
3.1.3.4 配置ROOT的环境
1)将umask设为077或者027.
2)查看你的环境中路径设置情况,不要有./
3.1.3.5 删除不必要的帐号
移去或者锁定那些不是必须的帐号,比如sysuucpnuucplisten等等,简单的办法是在/et
c/shadow的password域中放上NP字符。
3.1.3.6 NIS的安全问题
NIS从来就不是一个安全的服务,如果配置得当的话NIS+会更好些,就象暴力破解密码一样,
NIS域名如果被猜出来,就会给入侵者提供相当丰富的信息,要关闭这个漏洞,可以将信任主
机的地址放在/var/yp/securenets中。并且考虑使用NIS+或者secure RPC。
3.1.3.7 取消rlogin/rsh服务
移去/etc/hosts.equiv和/.rhosts以及各home目录下的.rhosts,并且在/etc/inetd.conf中
把r系列服务都杀掉,然后找出inetd的进程号,重启它。
3.1.3.8 限制通过网络进入系统
Telnet和ftp守护进程是从inetd进程启动的,inetd的配置文件是/etc/inetd.conf,还包含了
其它的各种服务,所以你可以干脆移去这个文件,新建一个只包括以下两行的文件:
ftp stream tcp nowait root /usr/local/bin/tcpd /usr/local/bin/wu-ftpd
telnet stream tcp nowait root /usr/local/bin/tcpd /usr/sbin/in.telnetd
当然这是基于你需要telnet及ftp的基础上的,如果你连这两个服务都不用的话,你就可以将
它注释掉或者删除,这样在系统启动的时候inetd就不需要启动了。
Tcpd的访问控制是由/etc/hosts.allow和/etc/hosts.deny文件控制的,tcpd先查找/etc/ho
sts.allow,如果你在这里面允许了某几台主机的telnet或ftp访问的话,那么deny访问就是
对其它所有机器的了。这是"默认拒绝"的访问控制策略,下面是一个hosts.allow文件的样本

ALL: 172.16.3.0/255.255.255.0
这将允许172.16.3.0网络的主机上任何用户访问你的telnet及ftp服务,记住在这里要放置I
P地址,因为域名比较容易受到欺骗攻击……
现在我们准备拒绝其余所有人的连接了,将下面的语句放在/etc/hosts.deny中:
ALL: /usr/bin/mailx -s "%d: connection attempt from %c" root@mydomain.com
这条指令不仅拒绝了其它所有的连接,而且能够让tcpd发送email给root--一旦有不允许的连
接尝试发生时。
现在你可能希望用syslog记录下所有的访问记录,那么在/etc/syslog.conf放进如下语句:
auth.auth.notice;auth.info /var/log/authlog
注意两段语句间的空白是tab键,否则syslog可能会不能正常工作。
3.1.3.9 配置S/Key
S/Key是一个用于实现安全的一次性口令方案的软件,它根据一系列信息(包括一个秘密口令
)通过MD5处理而形成的初始钥匙,该初始钥匙再交给MD4进行处理,资助将128位的数字签名
缩成64位,该64位信息再次传给MD5函数,这个过程一直持续直到达到期望值……
开始使用S/Key时,要建立一个以/usr/local/bin/keysh为shell的帐号:
在/etc/passwd中加入
access:x:100:100:Access Account:/tmp:/usr/local/bin/keysh
并且在/etc/shadow中加入
access:NP:6445::::::
然后使用passwd access命令来设定用户的访问密码。
由于/usr/local/bin/keysh不是一个标准的shell,所以你的/etc/shells文件中内容如下:
/sbin/sh
/usr/local/bin/keysh收起
参与23

查看其它 20 个回答skyzqq的回答

skyzqqskyzqq系统运维工程师中国联通河南省分公司
11)增加私有端口
一般的情况下,1-1024端口被称为私有端口,只允许具有根权限的进程连接。但是有些大于1
024的端口,即使需要这样的限制,却无法定义,如NFS的服务器端口2049,当然还有一些其
他定义的高于1024的私有端口。
在solairs2.5.1/2.6/7下使用如下方式,可以自定义最小的非私有端口
ndd -set /dev/tcp tcp_smallest_nonpriv_port 205
这样以来,0-2049都被定义为私有端口。在solaris 2.6/7下,还能使用另一个参数单独指
定私有端口。
#ndd /dev/tcp tcp_extra_priv_ports
2049
4045
用来显示已经定义的扩展私有端口
#ndd -set /dev/tcp tcp_extra_priv_ports_add 6112
来增加新的私有端口定义。
使用 ndd -set /dev/tcp tcp_extra_priv_ports_del 来删除定义。
要注意的是,不要随便定义私有端口,因为有些非根权限的进程会使用这些端口。特别是改
变最小非私有端口这个参数,经常会引起问题。应仔细分析你的需求再用扩展私有端口定义
的方式单独增加。
3.2 Linux 系列
3.2.1物理安全
3.2.1.1 BIOS安全,设定引导口令
禁止从软盘启动,并且给BIOS加上密码。每次启动的时候都手工检查一下BIOS,这样可以提
高系统的安全性。禁止从软盘启动,可以阻止别人用特殊的软盘启动你的计算机;给BIOS加
上密码,可以防止有人改变BIOS的参数,比如:允许从软盘启动或不用输入口令就可以引导
计算机。
3.2.1.2 安全策略
有一点很重要而且必须指出的是:如果你不知道要保护什么,那么更本没有办法保证系统的
安全。所以必须要有一个安全策略,基于这样的一个策略才可以决定哪些东西允许别人访问
,哪些不允许。如何制定一个安全策略完全依赖于你对于安全的定义。下面的这些问题提供
一些一般性的指导方针:
1)如何定义保密的和敏感的信息?
2)重点防范
3)远程用户有必要访问你的系统吗?
4)系统中有保密的或敏感的信息吗?
5)如果这些信息被泄露给你的竞争者和外面的人有什么后果?
6)口令和加密能够提供足够的保护吗?
7)你想访问Internet吗?
8)你允许系统在Internet上有多大的访问量?
8) 如果发现系统被黑客入侵了,下一步该怎么做?
这个列表很短,真正的安全策略可能包含比这多得多的内容。可能你要做的第一件是:评估
一下自己的偏执程度。任何一个安全策略多少都有一定程度的“偏执”:确定到底在多大程
度上相信别人,包括内部的人和外部的人。安全策略必须在允许用户合理地使用可以完成工
作所必须的信息和完全禁止用户使用信息之间找到平衡点。这个平衡点就是由系统策略决定
的。
3.2.1.3 口令
这章的Linux安全概要就从口令的安全开始讲起。许多人都把所有的东西保存在计算机上,防
止别人查看这些信息的方法就是用口令把计算机保护起来。没有什么东西是绝对安全的。与
常识相反的是:无法破解的口令是不存在的。只要给足时间和资源,所有的口令都能用社会
工程(译者注:原文是social engineering,找不出更好的翻译,大致的意思是用社会和心理
学的知识,而不是用纯粹的技术手段)或强行计算的方法猜出来。
通过社会工程或其它方法获得服务器的口令是最简单和最流行的入侵服务器的方法。决大多
数的技术支持人员很容易获得其他用户的口令,因为用户的安全意识很差而且很轻易就相信
自己的同事,特别是帮助自己解决问题的人。有很多登记在案的成功入侵就是因为一些别有
用心的人利用安全管理上的松懈而获得成功的。有时候,在特定的时间在特定的地点,上级
或老板对员工喊话就有可能泄露机密,导致可怕的后果。
因为破解口令是一项很耗时间和资源的工作,所以应该使得口令文件难于破解,这样即使黑
客获取了口令文件也不能轻易破解。作为一个系统管理员,自己在每个周末运行一下口令破
解程序,是保证系统安全的好方法。这有利于尽早地发现和替换那些很容易被猜出来的口令
。而且,还要有一个好的口令检查机制,在用户选择新口令或改变旧口令的时候,来排除那
些有安全隐患的口令。那些字典里的单词、或者全是大写或全是小写的以及没有包含数字或
特殊字符的字符串是不能用来做口令的。我建议用下面的规则选择有效的口令:
口令至少要有6个字符,最好包含一个以上的数字或特殊字符。
口令不能太简单,所谓的简单就是很容易猜出来,也就是用自己的名字,电话号码、生日、
职业或者其它个人信息作为口令。
口令必须是有有效期的,在一段时间之后就要更换口令。
口令在这种情况下必须作废或者重新设定:如果发现有人试图猜测你的口令,而且已经试过
很多次了。
安装完Linux系统之后默认的最小口令长度为5。这就是说一个新的用户可以访问服务器,那
么他的口令必须多于5字符。但是这样是不够安全的,最好口令的长度能够大于8。可以强制
用户使用8个字符以上的口令。编辑“/etc/login.defs”文件,把最小口令长度由5改成8。
找到PASS_MIN_LEN 5 这一行,改为:PASS_MIN_LEN 8 。“login.defs”是很重要的配置文
件。可以在这个文件中设定一些其它的安全策略,比如:口令的有效期。
3.2.1.4 root帐号
“root”帐号是Unix系统中享有特权的帐号。“root”帐号是不受任何限制和制约的。因为
系统认为root知道自己在做些什么,而且会按root说的做,不问任何问题。因此,可能会因
为敲错了一个命令,导致重要的系统文件被删除。用root帐号的时候,要非常非常小心。因
为安全原因,在不是绝对必要的情况下,不要用root帐号登录。特别要注意的是:不在自己
的服务器上的时候,千万不要在别的计算机上用“root”登录自己的服务器。这是非常非常
非常糟糕的一件事。
3.2.1.5 加密
加密时要用到密匙,密匙是一个特殊的数字,把密匙和需要加密的信息经过加密算法加密之
后,只有知道密匙的人才能把信息读出来。如果所有的计算机主机都在你的控制下,加密当
然是一个好方法,但是,如果其中一台“被信任的”主机被黑客控制了,你马上就有危险了
。这就不仅仅是用户的帐号和口令有危险了。在通常情况下,加密是用来保证机密信息在系
统中传送的安全。如果一台计算机被控制了,那么这些加密信息就会让人知道或是泄密了。
有一个好的安全策略,这种危险的可能性会降到最低,但是如果某台主机的密匙被泄露出去
,那么危险始终存在。
3.2.2 安全配置
3.2.2.1 “/etc/exports”文件
如果通过NFS把文件共享出来,那么一定要配置“/etc/exports”文件,使得访问限制尽可能
的严。这就是说,不要用通配符,不允许对根目录有写权限,而且尽可能只给只读权限。编
辑exports文件(vi /etc/exports)加入。例如:
/dir/to/export host1.mydomain.com(ro,root_squash)
/dir/to/export host2.mydomain.com(ro,root_squash)
“/dir/to/export”是你想共享出来的目录,host.mydomain.com是允许访问这个目录的计算
机。代表只读,代表不允许对根目录进行写操作。使这些改变生效,你还
要运行“/usr/sbin/exportfs -a”命令。
注意:在服务器上装NFS服务是会有安全隐患的,就我个人而言,不建议你使用NFS。
3.2.2.2 “/etc/inetd.conf”文件
Inetd,也叫作“超级服务器”,根据网络请求装入网络程序。“inetd.conf”文件告诉ine
td监听哪些网络端口,为每个端口启动哪个服务。把Linux系统放在任何的网络环境中,第一
件要做的事就是了解一下服务器到底要提供哪些服务。不需要的那些服务应该被禁止掉,最
好卸载掉,这样黑客就少了一些攻击系统的机会。查看“/etc/inetd.conf”文件,了解一下
inetd提供哪些服务。用加上注释的方法(在一行的开头加上#号),禁止任何不需要的服务,
再给inetd进程发一个SIGHUP信号。
第一步:把文件的许可权限改成600。
[root@cnns]# chmod 600 /etc/inetd.conf
第二步:确信文件的所有者是root。
[root@cnns]# stat /etc/inetd.conf
这个命令显示出来的信息应该是:
File: "/etc/inetd.conf"
Size: 2869 Filetype: Regular File
Mode: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Device: 8,6 Inode: 18219 Links: 1
Access: Wed Sep 22 16:24:16 1999(00000.00:10:44)
Modify: Mon Sep 20 10:22:44 1999(00002.06:12:16)
Change: Mon Sep 20 10:22:44 1999(00002.06:12:16)
第三步:编辑“inetd.conf”文件(vi /etc/inetd.conf),禁止所有不需要的服务,如:ft
p、 telnet、 shell、 login、 exec、talk、ntalk、 imap、 pop-2、pop-3、finger、au
th,等等。如果你觉得某些服务有用,可以不禁止这些服务。但是,把这些服务禁止掉,系
统受攻击的可能性就会小很多。改变后的“inetd.conf”文件的内容如下面所示:
# To re-read this file after changes, just do a 'killall -HUP inetd'
#
#echo stream tcp nowait root internal
#echo dgram udp wait root internal
#discard stream tcp nowait root internal
#discard dgram udp wait root internal
#daytime stream tcp nowait root internal
#daytime dgram udp wait root internal
#chargen stream tcp nowait root internal
#chargen dgram udp wait root internal
#time stream tcp nowait root internal
#time dgram udp wait root internal
#
# These are standard services.
#
#ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
#telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
#
# Shell, login, exec, comsat and talk are BSD protocols.
#
#shell stream tcp nowait root /usr/sbin/tcpd in.rshd
#login stream tcp nowait root /usr/sbin/tcpd in.rlogind
#exec stream tcp nowait root /usr/sbin/tcpd in.rexecd
#comsat dgram udp wait root /usr/sbin/tcpd in.comsat
#talk dgram udp wait root /usr/sbin/tcpd in.talkd
#ntalk dgram udp wait root /usr/sbin/tcpd in.ntalkd
#dtalk stream tcp wait nobody /usr/sbin/tcpd in.dtalkd
#
# Pop and imap mail services et al
#
#pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d
#pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d
#imap stream tcp nowait root /usr/sbin/tcpd imapd
#
# The Internet UUCP service.
#
#uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/lib/uucp/uucico -l
#
# Tftp service is provided primarily for booting. Most sites
# run this only on machines acting as "boot servers." Do not uncomment
# this unless you *need* it.
#
#tftp dgram udp wait root /usr/sbin/tcpd in.tftpd
#bootps dgram udp wait root /usr/sbin/tcpd bootpd
#
# Finger, systat and netstat give out user information which may be
# valuable to potential "system crackers." Many sites choose to disable
# some or all of these services to improve security.
#
电信运营商 · 2009-05-11
浏览5823

回答者

skyzqq
系统运维工程师中国联通河南省分公司
擅长领域: 服务器网络Unix

skyzqq 最近回答过的问题

回答状态

  • 发布时间:2009-05-11
  • 关注会员:2 人
  • 回答浏览:5823
  • X社区推广