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毫秒