Linux 版 (精华区)
发信人: netiscpu (网中自由鸟), 信区: Linux
标 题: Linux实用教程(部分)(11)
发信站: 哈工大紫丁香 (Thu May 20 18:22:42 1999), 转信
第十八章
安 全 性
在网络世界中,系统安全性日益受到重视。本章描述在 Linux 系统中如何管理用户帐
号,如何保护重要数据不受侵害。
18.1 用户帐号及其配置
18.1.1 用户帐号
当许多人共用某台计算机,或在网络中,许多用户可以共享同一资源时,通常需要利用
某种机制区别不同的用户。因此,在许多操作系统中,每个用户具有自己唯一的用户名
,而用户名则用来登录系统。但是,系统中为某个用户所专有的信息却不只有用户名。
帐号就是指专属于某个用户的全部文件、资源以及其他数据。
在 Linux 中,内核以纯粹的整数,即用户标识符或 uid,作为区分不同用户的“身份
号”。内核之外,用户数据库定义用户标识符和文字用户名之间的映射关系。要建立用
户,需要在用户数据库中添加用户信息,并为该用户建立主目录,有时还需要为用户建
立初始的运行环境。
用户的建立可以以 root 身份手工进行,也可以利用 Linux 系统提供的各种工具完成
。不同的 Linux 系统提供的工具名称(adduser 或 useradd 等)或功能不太一样,但
它们都完成相同的工作。本章 18.1.4 小节将讲述用户帐号的手工建立过程。
18.1.2 用户组
利用用户组可在很大程度上简化管理工作。用户可通过 groups 程序查看自己所属的用
户组,例如:
$ groups
users
用户组信息保存在 /etc/group 文件中,该文件的格式和 /etc/passwd 类似,如下所
示:
group:passwd:GroupID:list of users
其中,第一个字段是用户组名称;第二个字段是组密码,一般的 Linux 系统忽略该字
段;第三个字段为组标识符,一般而言,root 组的标识符为 0,其他 0~100 的组标识
符属于系统组,而用户定义的组应当取大于 100 的组标识符;第四个字段是属于该组
的用户清单,各用户名之间用空格分隔。
系统管理员可以通过编辑该文件而添加用户组,也可以利用 groupadd 等系统程序添加
用户组;利用 groupmod 命令,可修改用户组的组名称或编号;利用 groupdel 命令,
可删除用户组。
18.1.3 /etc/passwd 以及其他信息文件
在上一章中提到,基本的用户数据库是文本文件 /etc/passwd(密码文件),其中列出
了所有的用户及其相关信息。该文件中每一行定义一个用户,其中包含 7 个字段,字
段之间由分号隔开。这 7 个字段的用途如下:
1. 用户名;
2. 密码,加密形式;
3. 数字的用户标识符;
4. 数字的组标识符;
5. 帐号的全名或其他说明信息;
6. 主目录;
7. 登录 shell,即登录时要运行的程序路径名称。
系统中的任何用户均可以读取该文件的内容,因此,所有人均可以读取任意一个用户的
密码字段,即第二个字段。密码是加密保存的,但是,所有密码均是可以破译的,尤其
是简单的密码,更可以不花大量时间就可以破译。所以,在密码文件中保存密码是不太
明智的做法。
许多 Linux 系统利用影象密码以避免在密码文件中保存加密的密码,它们将密码保存
在单独的 /etc/shadow 文件中,只有 root 才能读取该文件,而 /etc/passwd 文件只
在第二个字段中包含特殊的标记。
大多数系统并不关心数字的用户标识符以及组标识符,但是如果要使用网络文件系统
(NFS),则必须在所有的系统中,让同一用户帐号具备相同的用户标识符和组标识符
,这是因为 NFS 也以数字的用户标识符标识用户。
当新用户的主目录建立之后,系统会以 /etc/skel 目录中的文件初始化主目录。/etc
/skel 目录实际作为用户主目录结构的模板或“骨架”,系统管理员可以利用 /etc/s
kel 目录中的文件为新用户建立相当好的初始环境。
系统管理员也可以利用 /etc/profile 等文件为所有用户建立全局配置。
18.1.4 手工建立用户帐号
要手工建立用户帐号,可按如下步骤:
1. 利用 vipw 程序编辑 /etc/passwd 文件,为新的帐号添加新行。这里使用 vipw
进行编辑的原因是它可以在编辑文件时锁定被编辑的文件,而其他编辑器可让多个用户
同时更新相同的文件。添加的新行应当保持正确的语法,应将密码字段设置为“*”,
以避免用户登录。
2. 如果要添加新的用户组,则需要利用 vigr 程序编辑 /etc/group 文件。
3. 利用 mkdir 为用户建立主目录。
4. 从 /etc/skel 目录中复制文件到新用户的主目录。
5. 利用 chown 和 chmod 命令修改主目录的所有权和许可,可利用 R 选项。
6. 利用 passwd 命令设置用户密码。
在最后一步设置用户密码之后,该帐号就可以被用户使用了。
18.1.5 修改用户属性
利用表 18-1 所示的命令,可修改用户帐号的不同属性。
表 18-1 修改用户属性的常用命令
chfn
修改帐号的全名字段。
chsh
修改帐号的登录 shell。
passwd
修改帐号密码。
chgrp
修改用户所属用户组,只有 root 可用该命令。
超级用户可利用表 18-1 中的命令修改任何帐号的属性,而通常的用户只能修改自己帐
号的属性。
18.1.6 删除用户或暂时禁止用户
要删除用户,必须首先删除属于该用户的所有文件,以及邮箱、打印任务、cron 和 a
t 任务等等。然后,在 /etc/passwd 和 /etc/group 文件中删除相关行。另外,某些
用户文件可包含在用户主目录之外,利用 find 命令可搜索这些文件:
find / -user username
某些 Linux 系统提供特殊工具用来删除用户帐号,通常名称为 deluser 或 userdel。
有时需要暂时禁止某帐号的使用,例如,使用该帐号的用户临时长期外出。禁止某用户
帐号的最好办法是修改其登录 shell。可将登录 shell 修改为特殊程序,而该程序只
输出一些说明性的信息,这样,用户可清楚了解发生了什么事,如果采用修改用户名或
密码的方法,则会让用户不知所措。
18.2 文件的访问许可
UNIX 系统中,文件和目录的访问许可有三种,即读、写和执行,分别用 r、w 和 x 表
示。文件和目录均有其所有者,所有者可能是文件或目录的初始创建者,也可能是经命
令 chown 指定的用户;类似地,也有文件的属主组的概念,文件初始建立时,文件的
属主组就是所有者所在的用户组,但也可以利用 chgrp 命令改变文件的属主组。文件
的访问许可分别赋予文件所有者、属主组中的用户以及除上述用户之外的其他用户,分
别简称用户、组和其他。通常,文件的访问许可由 8 进制的数字表示,表 18-2 给出
了 8 进制数字代表的含义。
表 18-2 8 进制表示的文件访问许可
用户 (u)
组 (g)
其他 (o)
r w x
r w x
r w x
rwx = 1 1 1 = 7
rw = 1 1 0 = 6
rx = 1 0 1 = 5
r = 1 0 0 = 4
wx = 0 1 1 = 3
w = 0 1 0 = 2
x = 0 0 1 = 1
无 = 0 0 0 = 0
rwx = 1 1 1 = 7
rw = 1 1 0 = 6
rx = 1 0 1 = 5
r = 1 0 0 = 4
wx = 0 1 1 = 3
w = 0 1 0 = 2
x = 0 0 1 = 1
无 = 0 0 0 = 0
rwx = 1 1 1 = 7
rw = 1 1 0 = 6
rx = 1 0 1 = 5
r = 1 0 0 = 4
wx = 0 1 1 = 3
w = 0 1 0 = 2
x = 0 0 1 = 1
无 = 0 0 0 = 0
从表中可以看出,文件对用户(所有者、属主组中的用户或其他用户)的许可由分别表
示读、写和执行的 8 进制位表示,这些位是否有值,即表明了是否拥有对应的访问许
可。例如,用户许可为 8 进制 7,表明所有者具有读、写和执行的权限。
如果要将某特定文件权限设置为用户可读取和执行(rx)、组用户可读取(r)而其他
用户不可访问,则该文件的访问许可可表示为 540。三个数字分别表示用户、组和其他
的访问许可。
利用 chmod 可修改文件的访问许可,例如:
# chmod 0700 test
则文件 test 的访问许可可描述为:所有者可读、写和执行,其他用户拒绝访问。
除此之外,文件访问属性中还有两个位,分别称为 SETUID 和 SETGID 位。任意用户在
执行已设定 SETUID 和 SETGID 位的程序时,用户的有效 uid 和有效 gid 将改变为程
序映象文件的所有者。我们在第十一章介绍进程时,提到过进程的有效 uid 和 gid 的
概念。超级用户可通过系统调用 setuid 将某个进程的有效 uid 以及实际 uid 设置为
其他用户,而普通用户只能通过运行已设定有 SETUID 和 SETGID 的程序而临时改变自
己的访问许可。利用这种特色,可以让普通用户执行通常情况下只能由超级用户才能实
现的功能程序。为了设定程序的 SETUID 和 SETGID 位,需要在上述 8 进制的 3 位数
字之前添加相应的数字:4 表示设定 SETUID 位,而 2 表示设定 SETGID 位。例如:
# chmod 4755 test
设定文件 test 的 SETUID 位。当利用数字表示文件的访问许可时,如果用不足 4 位
的8 进制数字表示,则默认在前面添加 0。因此,
# chmod 55 test
的效果和
# chmod 0055 test
的效果一致。
也可以利用符号方式定义文件的访问许可,u 代表文件的所有者,g 代表用户组,o 代
表其他;r 代表读取,w 代表写入,x 代表执行。例如:
# chmod u=rw test
将把所有者对文件 test 的访问许可设置为读取和写入。有关 chmod 命令的详细用法
可参见有关手册页。
对文件来说,用户拥有执行许可,则假定该文件是可执行文件或脚本文件,系统以可执
行文件或脚本文件处理该文件;对目录来说,如果拥有执行许可,则用户可利用 cd 目
录改变到该目录,但如果没有读取许可,则不能用读取目录中的内容列表(即不能利用
ls 命令列目录内容)。
利用 umask 命令可设置用户的默认文件许可,用户创建的文件,将具备 umask 所设定
的默认许可。需要注意的是,umask 使用的许可位定义了文件不具备的许可,另外,还
应当在 8 进制的 umask 许可位中移去用户的执行位信息,umask 只在目录上设置读写
许可,并不设置执行许可,因此,如果要将默认许可设置为 600,应利用如下的命令:
$ umask 077
再如,umask 011 将默认许可设置为 666,而 umask 022 将默认许可设置为 644。
利用 chown 可将文件的所有权赋予其他用户,例如:
# chown test user1
将文件 test 的所有者改变为 user1。
18.3 访问设备
因为通过系统中的设备特殊文件可直接访问硬件,因此,对这些文件的许可设置不当,
就有可能造成严重的安全问题。尤其要注意的是系统中属于磁盘驱动器和内存的特殊设
备文件,这些文件包括:
/dev/hda /dev/hda1 /dev/hda2 ...
/dev/hdb /dev/hdb1 /dev/hdb2 ...
...
/dev/sda /dev/sda1 /dev/sda2 ...
...
/dev/mem /dev/kmem
所有这些文件必须为 root 所拥有,而它们的访问许可应设置到最小的范围内。对磁盘
设备文件的直接读写,可绕过操作系统的文件系统而直接访问磁盘上的字节。有意的或
无意的修改可能造成系统的瘫痪,或重要数据的丢失。内存文件则直接映射到计算机的
内存区,因此对内存设备文件的读取,也可能导致同样的问题。
鉴于上述原因,这些特殊设备文件必须由 root 用户拥有,其他用户不能具有读写许可
。同时,应当避免以 root 登录完成一些非系统管理方面的任务,以免无意中直接访问
这些文件而导致不良后果。
18.4 root 帐号
由于 root 帐号所拥有的可控制一切的特权,因此应当慎重使用 root 帐号。使用 ro
ot 帐号的规则是:
1. 除非绝对必要,不以 root 身份登录;
2. 在系统中尽量少设属于 root 组的帐号,而应当以特殊用户代替 root 完成特定的
系统管理任务。
18.5 备份数据
虽然,硬件和软件的可靠性正在提高,但仍然有许多原因可能导致用户丢失数据,极端
的例子有,恶意的人为原因或者由于不可抗拒的自然灾难等。因此,不管你的 Linux
系统作为个人用途还是商业用途,对关键文件的备份是不能忽视的。但是,象其他的数
据一样,备份数据仍然有可能随时间的流失而受到物理的或其他原因的损害,因此,采
用正确的备份策略尤为重要。
18.5.1 选择备份介质
在进行备份之前,选择适当的备份介质是首要任务。在选择备份介质时,要考虑到成本
、可靠性、速度、可获得性以及可用性等。
备份的典型介质是磁盘和磁带。比较起来,磁盘具有非常便宜、相对可靠、速度不快、
易获得等特点,但不适合于大量数据的备份;而磁带则具有比较便宜、相对可靠、比较
快速、相对容易获得等特点,同时适合于进行大量数据的备份。
18.5.2 选择备份工具
传统的 UNIX 备份工具有 tar、cpio、dump(dd)等。有许多第三方的工具也可用来进
行备份。备份方式及介质的选择通常影响备份工具的选择,表 18-3 给出了上述三个备
份工具之间的比较(tar 和 cpio 工具非常相似)。
表 18-3 tar(cpio)和 dump(dd)之间的比较
备份工具
特点
优点
缺点
tar
通常用来进行文件的归档,可用于磁盘和磁带等任何介质。
可从归档文件中检索单个的文件。
效率较低,不支持直接的备份级。
dump
直接读取文件系统(原始方式),通常用于磁带备份。
直接的文件系统访问可不影响文件属性中的时间戳,也更加高效。
直接支持备份级。
备份程序专用于特定的文件系统类型。Linux 的 dump 命令只能识别 Ext2 文件系统
。
18.5.3 简单备份
简单备份方案指第一次备份全部数据,而以后的备份只包含自上次备份后发生变化的数
据。第一次的备份称为“完全备份”,其后的备份则称为“增量备份”。
如果有六盘磁带,则可利用这六盘磁带实现有效的简单备份方案:
每周末(周五)利用完全备份在 1 号磁带上备份完整的数据,2 号磁带到 5 号磁带则
用于下周一到下周四的增量备份。到周五时,利用 6 号磁带进行完全备份,注意,这
时不应当用 1 号磁带进行完全备份。其后的增量备份可先用 5 号磁带,然后用 4 号
,最后再用 2 号磁带,这样可以最大程度地保护数据。
完全备份可利用 tar 来实现:
# tar -create -file /dev/ftape /usr/src
tar: Removing leading / from absolute path names in the archive
#
Linux 使用的是 GNU 的 tar 版本,这一版本可使用长的选项名称,并且可以处理备份
不能放在单张磁盘或磁带中的情况,还可以处理非常长的路径名。如果不能放在单张磁
盘或磁带中,则必须使用多卷选项:-multi-volume (-M)。
备份完成之后,可利用比较选项来检验备份的正确性(-compare (-d))。
利用 tar 的 newer (-N) 选项可建立增量备份:
# tar -create -newer '3 Mar 1999' -file /dev/ftape /usr/src -verbose
tar: Removing leading / from absolute path names in the archive
usr/src/
usr/src/linux-2.0.36-includes/
usr/src/linux-2.0.36-includes/include/
usr/src/linux-2.0.36-includes/include/linux/
usr/src/linux-2.0.36-includes/include/linux/modules/
usr/src/linux-2.0.36-includes/include/asm-generic/
usr/src/linux-2.0.36-includes/include/asm-i386/
usr/src/linux-2.0.36-includes/include/asm-mips/
usr/src/linux-2.0.36-includes/include/asm-alpha/
usr/src/linux-2.0.36-includes/include/asm-m68k/
usr/src/linux-2.0.36-includes/include/asm-sparc/
#
应当注意,tar 不能自动察觉文件索引节点信息的变化,如果利用 find 命令,可以将
当前文件系统的状态和新近备份的文件清单相比较,从而找出文件系统的变化。具体的
脚本和程序可以在 Linux 的 ftp 站点中找到。
利用 tar 的 extract (-x) 选项可提取备份中的文件:
# tar -extract -same-permissions -verbose -file /dev/fd0H1440
usr/src/
usr/src/linux
usr/src/linux-2.0.36-includes/
usr/src/linux-2.0.36-includes/include/
usr/src/linux-2.0.36-includes/include/linux/
usr/src/linux-2.0.36-includes/include/linux/hdreg.h
usr/src/linux-2.0.36-includes/include/linux/kernel.h
...
#
通过指定文件名称,也可以提取特定的文件:
# tar xpvf /dev/fd0H1440 usr/src/linux-2.0.36-includes/include/linux/hdreg.
h usr/src/linux-2.0.36-includes/include/linux/hdreg.h
#
如果要查看某备份卷中的文件,可利用 list (-t) 选项。
tar 不能正确处理删除的文件。如果在完全备份和增量备份之间删除了某个文件,则恢
复备份之后,该文件会再次出现。
18.5.4 多级备份
上述的简单备份方案更加适合于个人用户或小型站点,而对于大型的商业站点来说,多
级备份则更为适合。
上面的简单备份例子中,增量备份以日为周期进行,如果我们以不同的周期进行多个系
列的简单备份,就形成了多级备份。
如图 18-1 所示,0 级备份使用两个磁带,1 号磁带和 2 号磁带,并以月为周期,每
月的第一个周一进行完全备份,轮流使用两个磁带;1 级备份使用四个磁带,以周为周
期形成每月的 1 级简单备份系列;而 7 号磁带到 10 号磁带以日为周期形成每周的
2 级简单备份系列。
图 18-1 多级备份示意图
利用如图 18-1 所示的多级备份方案,我们利用 10 盘磁带就可以将备份的可恢复时间
延续到 2 个月,而在上小节中的简单备份方案中,使用 6 盘磁带却只能达到 2 周的
可恢复备份。因此,多级备份是有效延长备份的可恢复时间的廉价方案。
利用表 18-4 所示的备份方案,还可以有效降低进行完整恢复时需要使用的增量备份磁
带的数目。该方案来自 dump 的手册页提供的建议,这个方案可将备份和恢复的时间同
时保持在较低的水平,在一次恢复中使用的磁带数量,依赖于两次完全备份之间的时间
长短。
表 18-4 有效的多备份级方案
磁带
备份级
备份日期
(假定从月初开始)
恢复用磁带
1
0
1
1
2
3
2
1, 2
3
2
4
1, 3
4
5
5
1, 2, 4
5
4
7
1, 2, 5
6
7
8
1, 2, 5, 6
7
6
10
1, 2, 5, 7
8
9
11
1, 2, 5, 7, 8
9
8
13
1, 2, 5, 7, 9
10
9
14
1, 2, 5, 7, 9, 10
11
9
15
1, 2, 5, 7, 9, 10, 11
...
9
16
1, 2, 5, 7, 9, 10, 11, ...
dump 具有内建的多级备份支持,而 tar 和 cpio 需要在第三方软件的帮助下才能支持
多级备份。有关 dump 的使用可参见相关的联机文档或手册页。
18.5.5 压缩备份
为了节省备份数据占用的空间,人们通常会想到进行压缩备份,也就是说,在备份之前
,首先进行压缩。GNU 的 tar 工具可利用 gzip (-z) 选项对整个备份进行压缩(利用
tar 和 gzip 压缩程序之间的管道通讯)。但是,压缩备份有时会造成不可挽回的数
据丢失,因为压缩文件中的每一位信息都有举足轻重的作用,如果某一位数据发生错误
,则会影响到其后所有的数据。为了避免这样的问题,可单独对每个文件进行压缩,而
不是对整个备份数据进行压缩,这样,就可以避免发生大面积的数据丢失。afio 命令
(cpio 命令的变种)可对文件进行单独压缩后备份。
最后,再说明一下哪些数据需要备份,而哪些数据不需要进行备份。明显需要进行备份
的数据:
用户数据 (/home);
系统配置文件 (/etc);
软件配置文件。
而如下内容通常不必进行备份:
非常容易安装的软件;
/proc 文件系统。
--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: bin@mtlab.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:206.988毫秒