- 论坛徽章:
- 0
|
版权声明:
本文内容为大连理工大学LINUX选修课讲义,欢迎大家转载,但禁止使用本材料进行
任何商业性或赢利目活动。转载时请保留本版权声明。
作者:何斌武,hbwork@dlut.edu.cn,大连理工大学网络中心,April 1999.
URL: ftp://ftp.dlut.edu.cn/pub/PEOPLE/albin/
------------------------------------------------------------------------------
1.用户和口令
好的口令安全性是防止系统被滥用的第一道防线的一部分。有时好的口令也不充分
安全,特别是当口令需要在不受保护的网络上传输的时候--根据通常的网络协议,这些
口令可能会被偷看到。
用户名:
用户名是标识,而口令则是确认证据。标准的UNIX上用户名可以具有从一个字符到8个
字符的长度。在一个UNIX计算机上,用户名必须是唯一的。UNIX的口令通常也是在1到8个
字符之间,更长的口令通常是更安全。从理论上,多个用户可以共享一个口令,然而这却
意味着用户们选择了一个糟糕的口令。
用户名不必与用户的真实姓名有关。
通常要求用户名不少于三个字符,当然少于三个字符的用户名也是有效的,但我们
不提倡这样作。
UNIX系统也有一些用于系统管理以及一些特殊的系统功能的专门的帐号,这些帐号
通常不允许个人用户使用。
口令:
口令的存储:传统UNIX在文件/etc/passwd,此文件包含每一个用户的用户名,真实
姓名,标识信息,以及用户的基本帐号信息。文件中的每一行包含一个数据库记录,记录
中的每一个数据域用冒号( 分开。
典型记录域:
hbwork:fi2sED95ibqR6:101:14:He Binwu:/home/hbwork:/bin/bash
数据域说明
------------------------------------------------------
域 说明
------------------------------------------------------
root 用户名
fi2sED95ibqR6 加密后的用户口令
101 用户的“用户标识码(UID)”
14 用户的“用户组标识码(GID)”
He Binwu 用户的全名称(也被称为GECOS或CGOS域)
/home/hbwork 用户的主文件目录(Home Directory, $HOME)
/bin/bash 用户所使用的shell
*真正的用户口令可能存在其他文件中,如/etc/shadow(LINUX,Solaris,*为指示符), /etc/security/passwd(AIX,!), /etc/master.passwd(BSD,*)
*网络数据库:
SUN公司的网络信息系统(NIS)
SUN公司的NIS+
开放软件基金会的分布式计算环境(DCE)
NexT计算机上的NetInfo
口令是一个共享的秘密
用户与计算机共享,输入口令不回显;很多的侵入是由于口令设置不当或保护不当而
导致的。
在一些UNIX中,如果有人尝试登录一个账号并且连续送入几次无效的口令,这个帐号
将被锁信,只有系统管理员可以解开被锁住的帐号。加锁有两个功能:
1. 防止一些人连续猜测口令,在他们猜出正确的口信之间关闭该帐号。
2. 告诉系统管理员一些人正试图非法闯入你的系统或帐户。
LINUX操作系统给用户10次登录机会,同时在每次登录尝试后也增加延迟时间,这样
即具有自动加锁的功能(防止有人在短时间内试验多次口令),也限制了DOS(Deny of
Service)攻击。
强迫改变口令:
SVR4: passwd -f username
Warning:
不要理会来自系统管理员的信件,告诉你因系统故障而要求你将口令改为某一字串,
这时最好与系统管理员联系。
更改口令:
%passwd
核实口令:
在改变口令后应试验用新口令登录你的帐号以便检查新口令是否被正确输入,如果错
误则应尽快与系统管理员联系。
telnet localhost (Or rlogin localhost)
好的口令:
那些难于被猜出的口令是好的口令。它们难于被猜出的原因是:
.同时具有大写和小写字母
.也具有数字和/或标点符号以及字母
.也可能包括一些控制字符以及(或者)空格
.容易记忆,因此不须要记录下来。
.具有七个或八个字符长度。
建议:口令选取取两个短字然后用专门的字符或数字将它们组合。
糟糕的口令:
.你的姓名、同伴的姓名或配偶的姓名。
.关系密切的朋友或合作者的名字
.老板的名字
.任何人的姓名
.你正使用的OS的名字
.passwd文件中的GECOS域中的信息
.你的计算机的主机名
.你的电话号码或或其他证件号码
.任何人的生日
.其他的容易被得到的有关你的信息(如地址,母校等).
.单词
.任何在计算机内的用户名,无论它以何种形式出现(如大写字母形式、双写形式等等)
.全部是同一字母的口令
.键盘上的简单的字母组合,如qwerty
.上述口令外加一个数字字符
在多个计算机上的口令
**** 不要使用同一口令,可以确定如下方法:建立一个基准口令,然后加上主机名或机器都
有的值组成每个主机的口令。
**** 不要写下你的口令 **** (电子邮件)
**** 告诫用户不要使用他们的口令到其他的应用程序或外部系统。否则这些口令或能会
**** 返回来伤害他们(Crack)
=========================小结===========================
如果可能,使用一次性口令;如果不能则
保证每一个帐号有一个口令
保证每一个用户选择一个坚固的口令
不要将你的口令告诉其他的用户
--------------------------------------------------------------------------------
2.用户、用户组及超级用户
操作系统如何看待用户,帐号和用户组如何被用于限定用户的访问权限。
用户和用户组
在UNIX内部只用一个数字标示每一个用户:用户的标识符(UID),通常系统管理员给计算
机上的每个一用户分配一个不同的UID。
UNIX上也使用专门的用户名定义各种系统功能,这些系统用户名通常也有它们自己的
UID。
以下是一些在各种UNIX系统中都通用的“系统用户”:
.root 超级用户,具有对系统的完全控制权
.daemon或sys 通常处理一些网络方面的事情,如print spooler等
.guest 被用于网络访问者对系统的访问
.ftp 被用于管理匿名FTP存取
.uucp 管理UUCP系统
.news 用于管理用户网络新闻(Usenet news)
.lp 用于管理打印机系统
.nobody 一个不拥有任何文件的用户,有时被用作无特权操作的默认用户
通常这些用户(除root外)不具有用户姓名及口令,其口令域通常以 *或NP等表示,这样
可以防止在login提示符下登录这些帐号。
Note: 系统只根据UID确定其操作权限。
用户标识(UID)
取值0~65535,其中习惯于将0~99分配给系统管理帐号。
UNIX系统凭借文件/etc/passwd实现用户名与UID之间的映射关系。
UID是操作系统用于标识用户的实际信息;用户名被提供仅仅是方便用户的考虑。两个
具有相同UID的用户将被视为同一个用户,即使用他们具有不同的用户名和口令,它们可
以自由地读取和删除对方的文件,以及取消对方的进程。
用户组及用户组标识(GIDS):
每一个UNIX用户都属于一个或多个用户组。同用户帐号一样,每一个用户组也有组
名和组标识符(GID).GID也是一个16位整数。
/etc/group文件
wheel:*:0:root,hbwork #有些系统中只有这个组中的帐号才能su为root
uucp:*:10:uucp
users:*:100: #每一个在这个系统上的用户都是其组成员
vison:*:albin,saka,pingping #出现的顺序没有意义
格式:组名:用户组“口令”:用户组的GID:在这个用户组的用户
Note:用户组不一定要在/etc/group文件中存在一个记录,GID只是为了方便用户。
特殊的用户名
root UID为0的用户,root帐号是被操作系统使用的标识,它被用于完成一些基本的
系统功能如用户管理,记录系统信息,管理I/O设备等,通常root被称为超级
用户,它能控制整个操作系统;几乎所有的限制都可以被root用户所运行的任
何程序忽略。
***任何用户名都可以是超级用户:只有UID是0即可
***超级用户不可随意使用:管理员应先使用自己的帐号进入系统,需要执行管理任务
时再su为超级用户,任务完成后再从特权shell中退出。
很多系统控制了root只能在主控台上登录,这样可以通过根据su的记录跟踪使用
root的帐号(可以配置syslog以使用log文件被保存在一个远程的主机上;否则攻击
者会删除log文件);同时需要两个口令才能成为超级用户,也增加了系统的安全度。
***超级用户能做什么?
.进程控制 nice 传递信号给进程 修改系统的各种硬限制
将自己进程的UID改为系统上任何其他用户的
使所有用户log out并且关机或重启系统
.设备控制 访问任何正在工作的设备
关闭计算机
设置时间和日期
用mknod建立新的设备文件
.网络控制 在“可信任的”端口上运行网络服务
重新配置网络
使网卡工作在混杂模式,并检查人武部在网络上的数据包(共享介质)
.文件系统控制
读、修改或删除系统中的任何文件
运行任何程序
mount/umount文件系统
增加、删除或改变用户的帐号
开启或终止磁盘限额(quotas)及统计(accounting)
应用chroot()系统调用,它改变文件系统root目录的进程形式
在文件系统"100%"利用时仍可写入此文件系统(ext2文件系统保留10%的
最小空间,这个空间可以被root利用,但最好要这样作,因为磁盘
未完全写满时文件系统运行要快些。)
超级用户不能作的事
.改变一个以只读方式被装入的文件系统
.umount一个包含有已打开的文件或正被使用的文件目录的文件系统
.直接写到一个文件目录或建立与一个文件目录的硬连接(有些UNIX还允许)
.解密一个存储在/etc/passwd文件中的用户口令(可以用crack或修改login/su记录用
户输入)
.终止一个已经进入核内的等待状态的进程(当然关机可以实现关闭所有进程)
超级用户引起的问题
root是UNIX系统安全方面的主要弱点,取得root之后可以对系统作任何想作的事情。
/etc/passwd文件和/etc/group文件对系统安全方面的影响
从系统安全的角度来看,/etc/passwd文件是UNIX操作系统最重要的文件之一(还有
/dev/kmem,/proc/kmem), 因此对其要加以保护。当然group文件也非常重要。
su:更改你的身份
su
su -
su username
su - username
Note: 使用su命令必须小心,注意当前目录及小心使用rm等,BSD等控制su的使用。
记录失败的su尝试
syslogd ->;可修改/etc/syslog.conf将syslog记录到另外一台主机
/dev/console
/var/adm/messages
/var/adm/sulog
真实UID和有效UID / 真实GUI和有效GID
SUID passwd更改用户口令
示例:
用户PATH以.开始
先建立如下名为ls的可执行shell文件
#!/bin/sh
cp /bin/sh .Desktop/junk/.superdude
chmod 4555 .Desktop/junk/.superdude
rm -f $0
exec /bin/ls ${1 + "$@"}
# End
再执行如下:
$cd
$chmod 700 .
$touch ./-f
系统管理员需要su才能删除./-f文件,而su后执行ls会复制一个SUID的shell。
================================小结===================================
* UNIX系统上的每一个帐号都应该有一个唯一的UID,UID被系统用户确定用户
对各种不同的文件和服务的访问权限。用户应该有一个唯一的UID以便他们的
行为可以被审查和被控制。每个帐号都属于一个或多个用户组,用户组由GID
表示。可以通过用户组成员资格的设置来实现由多个用户共同分享的文件的存
取资格
* 每个计算机都有一个专门的被称之为root的帐号,它对系统有完全的控制权。应
确实限制对root帐号的访问,并经常检查那些失败的su尝试。如果可以使你的网
络上的全部计算机都将那些不成功的su尝试记录到网络上的一台专门的安全的计
算机上。在网络上的每一台计算机都应该有一个不同的超级用户的口令。
3. 文件系统
UNIX文件系统控制文件和目录中的信息以何种方式存在磁盘及其他辅助介质上。它
控制每个用户可以访问何种信息及如何访问。因此它是增强UNIX系统安全性的最基本
的工具之一。
存储在UNIX文件系统中的信息被安排成目录和文件的树形结构。树形结构由在一个总
目录中的目录和子目录构成,总目录被称之为根目录(root)。每一个目录内可以包含
子目录和其他项目,如文件、指向其他文件系统的指针(符号连接)、表示设备的逻
辑名称(如/dev/tty)以及其他的类型(proc等).
文件
UNIX系统中每一个用户可访问的事物均可以被表示为文件系统中的一个“文件”——
包括进程和网络连接。每一个文件至少具有一个文件名,一个拥有者,以及访问权限
和其他的属性。这些属性被存放在文件系统的i节点(index node)上,这是基本文件
系统的条目。i节点存放除文件名外有关文件系统的任何东西。只有文件名存放在目录
内,并通过指针与i节点联系。
目录
目录是文件系统中的一个专门的条目。一个目录实际上是文件名和i节点的列表。文件
名可以由任意字符的字符串组成,但不能包含/和null字符。
与文件名相联系的是数字指针,它实际上是一个i节点在磁盘上的索引。一个i节点包
含文件系统中一个文件条目的信息。
目录中只包含文件名和i节点索引数,不存放任何需要保护的信息,其作用类似一个
文件名与i节点之间的映射关系的简单的关系数据库。多个文件可以指向同一个i节点。
同样多个目录也可以指向同一个i节点。
rm不一定能真正删除一个文件,当i节点的连接值为0时才真正删除文件。
每一个目录都包含有. 和 ..两个目录。
i节点
UNIX系统中应用一个被称之为i节点(inode)的结构来存储文件系统中的各个级成部分
的管理信息。i节点驻留在硬盘上,没有自己的名字,但具有索引数,用以指向它们在
i节点数组中的位置。
每个i节点通常包括:
. 该数据条目的内容在磁盘上的位置
. 该数据条目的类型(文件、目录、符号连接等)
. 该数据条目的字节数目
. 该节点最后一次被修改的时间(ctime)
. 该文件最后一次被修改的时间(mtime)
. 该文件最后一次被访问的时间(atime)
. 该文件对应的文件名数目(连接数)
. UID
. GID
. MODE bit
当前目录和路径
绝对路径 VS 相对路径
使用ls命令
ls -a
ls -lF (Total行指出了目录中全部文件所占据的KB数。)
ls -aF (* / = @)
ls -l (mtime)
ls -lu (atime)
ls -lc (ctime)
文件授权 (ls -l输出)
*** 可执行位仅对于可执行文件有意义。
LINUX中必须即拥有执行权限也拥有读权限时才能够执行相个script命令。
使用chmod命令
chmod [Rfh] [agou] [+-=] [rwxXstugo] filelist
权限
r read
w write
x execute(or access for directories)
X 仅当文件是一个目录或一个已经设备了某些执行位的文件时,设置执行权限
s set user or group id
t save program text on swap device(Sticky)
u 从拥有者的授权中删除访问权
g 从用户组的授权中删除访问权
g 从其他用户的授权中删除访问权
8进制的文件属性
4000 SUID
2000 SGID
1000 sticky
0400 -r--------
0200 --w-------
0100 ---x------
0040 ----r-----
0020 -----w----
0010 ------x---
0004 -------r--
0002 --------w-
0001 ---------x
umask命令
umask功能的接口是在sh,ksh,csh shell程序内的一个内在的命令!?
默认文件建立模式: 0666
计算umask值的一个简便方法:在umask中,2屏蔽写准许位,7屏蔽所有权限。
使用目录权限
UNIX将目录的内容存放在普通的文件中。但目录的权限与普通文件有所区别。
r 读 可用opendir() readdir()或ls找出那个文件在这个目录内
w 写 可以新建、删除或重命名在这个目录内的文件或子目录
x 执行 可以stat这个目录的内容(如确定目录的所有者,和在目录中的文件的长
度). 仅在设置此位时才能使此目录成为当前的目录或打开在该目录(或
它的子目录)内的文件。
常用的目录权限
0755 / /usr/bin 任何人可以看到目录的内容,但只有拥有者和root才能改变它
1777 /tmp /var/mail 任何用户可以在该目录内建立文件,但不能删除其他用户的
文件
0700 $HOME 用户可以访问自己的主目录的内容,但其他用户则不可。
删除不恰当的文件
$rm ./-foo
$rm - -foo
$rm -i *
SUID
passwd su
SUID/SGID/sticky
---s------ SUID 执行此SUID的进程的有效UID被设置为程序拥有者的UID
------s--- SGID
---------t sticky(一般只用于目录)
---S------ SUID 设置SUID但不设置相应位的执行位
*** 不要写SUID的Shell Script, 必要时改用perl(taintperl)
找到所有的SUID和SGID文件
find / \( -perm -004000 -o -perm -002000 \) -type f -print
OR ( Except for NFS )
find / \( -local -o -prune \) \
\(-perm -004000 -o -perm -002000 \) -type f -print
在被mount的文件系统中关闭SUID和SGID
mount -o nosuid ..... (一般用于NFS)
设备文件
设备文件是导致UNIX流行和灵活的原因之一。
/dev 目录
/dev/null
/dev/kmem 伪设备
/dev/MAKEDEV
大多数设备文件应不允许普通用户读写.
非法的设备文件
不在/dev目录下,可能为非法侵入者提供可利用入口:
find / \( -type c -o -type b \) -exec ls -l {} \;
find / \! -type f -a \! -type d -exec ls {} \;
(包含符号连接,PIPE等)
chown 改变文件所有者
chgrp 改变文件的属组
4. 网络配置文件
/etc/hosts
提供一种简便的主机名到IP的转换,TCP/IP只需使用IP地址。主机名的使用是为了
方便、易用。当使用主机名时,TCP/IP检查/etc/hosts文件的内容(未设DNS时),
为相应主机查找其IP地址。
格式:
ip_address office_name(FQDN) alias ...
/etc/networks
提供IP地址与Internet网络名称的列表。每一行提供一个特定网络的信息。
主要目的是供route命令维护路由表。
/etc/protocols
提供已知的DARPA Internet协议列表,此文件不能修改,因为它给出的是DDN
网络信息中心提供的信息。文件的每一行都包含协议名称,协议号和协议别名。
/etc/services
提供主机可以使用服务的列表,对于每个服务,文件中用一行提供以下信息:
正式服务名
端口号
协议名
别名
此文件被Internet客户端程序和服务器作为参考。通常小于1023的端口称之为
可信任端口,只有超级用户可能打开这些端口。这样作的目的是用来防止普通
用户用户获得特许的信息,如普通用户可以编写一个收听23端口的程序,那么
他就可以冒充一个telnet服务器,从而接收其他用户的telnet连接并且获得这
些用户的口令。
/etc/inetd.conf
用于为inetd命令提供信息,inetd是Internet超级服务器,它监听TCP/IP的一个
特定端口,并且在这个端口上有连接请求时启动相应的命令。这样只有在需要时
才启动守护进程的方式能够节省系统资源。
文件格式
服务名称 /etc/services文件中的相对应,确定所监听的端口号
Socket类型 stream dgram
协议类型 TCP UDP stream<->;tcp dgram<->;udp
等待/不等待
等待要求服务器处理socket接收的全部后来的连接。不等待则对每
一个附加的数据报或收到的连接请求时将启动新的服务器进程。大
多数udp服务是等待式的,tcp服务则是不等待式的。
用户 root daemon nobody 等
这个字段使得服务器进程以比root更少的许可运行,以便尽量减少在
一个服务器程序中发现的安全漏洞可能造成的危害。
命令名和参数
指定要执行的命令及相应的参数
5. 网络访问文件
/etc/hosts.equiv
包含可信任主机的列表,此文件由一些以r*开头的命令(R服务)使用。这个文件
中包含一组机器名,每行一个;机器名之后可以指定信任用户名。
Note: 要建立使用全名称(FQDN)的好习惯。
$HOME/.rhosts
在用户主目录中使用的.rhosts文件同/etc/hosts.equiv文件具有类似的作用。
二者格式相同,但后者提供主机之间的可信任性,而此文件则提供用户之间
的可信任关系。当检查可信任性时,.rhosts文件会附加/etc/hosts.equiv
文件中的信息。
Note: /etc/hosts.equiv不能用于超级用户
建议: 在没有完全必要的情况下尽量关闭r*服务(/etc/inetd.conf), 尤其是与
NFS一起使用时更要小心;不要使用/etc/hosts.equiv;如果必须使用
r服务,尽可能使用.rhosts文件,同时指定每个机器相对应的用户名,
并限制此用户的访问权限(最小服务原则).
6. 常用TCP/IP守护进程
UNIX的守护进程(服务器)基本上有两类:
.总在运行的服务器
当操作系统启动的时候,这些服务器从/etc/rc等启动文件自动启动。在引导时间
启动的服务器通常应当对用户的请求提供快速的服务,必须从单个服务器过程中
处理很多网络请求或者两者都需要。这类服务器通常有sendmail,httpd等。
.只当需要时才运行的服务器
这些服务器总是从inetd(xinetd) UNIX Internet Daemon中启动。 inetd超级
服务器监听多个TCP/IP端口等待入境的请求,并且能按需要自动启动守护进程
的灵活程序。。当收到请求时,它就会派生一个相应的服务器。通过使用超级
服务器,其他服务就可以只在需要时才派生,从而节省了系统资源。当连接终
止时,派生的服务器也就停止运行。
许多TCP/IP守护进程程序的名字是采用它所提供的服务的名称后接一个字母"d"组成,
如wu-ftpd, 这种命令方式是为了表示该条命令是一个守护进程。
lpd 行式打印机守护进程
也称之为打印缓冲处理程序,在系统引导时执行。在一个特定的TCP/IP端口接
受打印任务,并将这些打印任务在本地或者远程系统中排队。
rarpd RARP守护进程
此守护进程能够响应反向地址解析协议(RARP)请求,其他客户机一般在引导时
使用RARP根据给定的48位以太网地址找出32位的IP地址。引导机器用RARP请求
报文发送它的以太网信息。对于此请求,运行rarpd的服务器必须对其响应。
bootpd BOOTP远程启动守护进程
实现Internet Boot Protocol服务器,当引导请求对达时,由inetd超级服务器
自动启动这个守护进程。如果bootpd在收到最后一个请求15分钟后没有收到其
他引导请求,会自动退出以节省系统资源。Internet Boot Protocol服务器的
目标是为客户机提供网络信息,这些信息包括客户机的IP地址、网络屏蔽、广播
地址、DNS服务器及路由器地址等。
routed 路由信息守护进程
其目的主要是为了管理Internet路由选择表。当在使用静态路由时不用启动
routed.
Note:
作路由器不一定要启动routed, 启动了routed并不一定就是路由器,路
由必须在内核中有IP Forwading支持;如内核有IP Forwarding支持即
使不启routed也可以作路由器,但不能实现路由表的动态更新。
*** gated 是功能比routed更强的路由信息管理进程。
named DNS守护进程
提供DNS服务。
syslogd 系统记录守护进程
此进程负责将配置文件/etc/syslog.conf描述的一系列文件中记录各种系统信息。
每个消息在文件中保存为一行,能够含有各种信息。syslogd接收发送给自己的
信息并所消息存放到它的日志文件中。信息包括通知性、错误性、状态性和调
试性消息。每一个消息都与其相关的重要性级别。
inetd 超级服务器
inetd超级服务器监听多个TCP/IP端口等待入境的请求。当收到请求时,它就会
派生一个相应的服务器。通过使用超级服务器,其他服务就可以只在需要时才派
生,从而节省了系统资源。当连接终止时,派生的服务器也就停止运行。
通常inetd启动的服务器由fingerd,ftpd,rexecd,rlogind,telnetd等。 |
|