扫一扫
关注微信公众号

Linux系统管理简介
2008-08-04   

每个Linux系统都至少有一个人负责系统的维护和操作,这就是系统管理员。对于PC机用户来说,可以身兼数职,既是用户,又是系统管理员。系统管理员的职责就是保证系统平稳的操作和执行各种需要特权的任务。具体说来,系统管理员要做以下几方面的工作:

 

设置整个计算机系统,包括硬件和软件,如安装硬件设备、安装操作系统和软件包、为用户建立账户等。

 

做适当的备份(系统中常规文件拷贝)和需要时的恢复。

 

处理由于计算机有限资源的使用(如磁盘空间、进程数目等)而遇到的问题。

 

排除由于连接问题而造成的系统通信(网络)阻塞。

 

进行操作系统的升级和维护。

 

为用户提供常规支持。

 

依据系统的规模和用户数目的多少,系统管理的工作可多可少,可以是日常随时要做的工作,也可能是每天一次甚至每月一次的维护工作。如果系统较小,则维护工作就可以不断地进行。系统管理员必须认真负责地工作,他手中握有控制系统运行的特权,若粗心应付,必然影响系统的性能,甚至使系统崩溃。

 

用户和工作组管理

 

所有新用户要想进入Linux系统,必须由系统管理员预先在该系统中建立一个账户。用户账户可帮助系统管理员记载使用系统的人们,并控制他们对系统资源的存取。账户管理也有助于组织用户文件和控制其它用户对它们的访问。这样,管理和维护用户的账号、口令及权限也就成为系统管理员日常工作的一个重要组成部分。

 

用户账号

 

用户在使用Linux时,必须确保自己是系统授权的合法用户。对于用户的账号、口令、访问权限的管理是Linux系统管理员日常工作中的一个重要组成部分。

 

在Unix/Linux系统中,用户账号的概念具有多种意义,其中最主要的是基于身份鉴别和安全的原因。系统必须对使用机器的人加以区别,账号概念给系统提供了一种区别用户的方法。系统中每个用户有一个个人账号,每个账号有着不同的用户名和口令。用户可以为自己的文件设置保护,允许或限制别人访问它们。

 

除了一般个人账号之外,系统上还必须存在能够管理系统的高级用户,如root账号就是系统管理员用于维护系统的缺省账号。另外,系统中还存在一些不能与人交互的特殊账号,如bin、sync等。

 

1.passwd文件)

 

通常在Linux系统中,用户的关键信息被存放在系统的/etc/passwd文件中,系统的每一个合法用户账号对应于该文件中的一行记录。这行记录定义了每个用户账号的属性。下面是一个passwd文件的示例(部分摘录):

 

 

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

......

desktop:x:80:80:desktop:/var/lib/menu/kde:/sbin/nologin

mengqc:x:500:500:mengqc:/home/mengqc:/bin/bash

 

 

在该文件中,每一行用户记录的各个数据段用“:”分隔,分别定义了用户的各方面属性。各个字段的顺序和含义如下:

 

注册名:口令:用户标识号:组标识号:用户名:用户主目录:命令解释程序

 

(1)注册名(login_name):用于区分不同的用户。在同一系统中注册名是惟一的。在很多系统上,该字段被限制在8个字符(字母或数字)的长度之内;并且要注意,通常在Linux系统中对字母大小写是敏感的。这与MS DOS/Windows是不一样的。

 

(2)口令(passwd):系统用口令来验证用户的合法性。超级用户root或某些高级用户可以使用系统命令passwd来更改系统中所有用户的口令,普通用户也可以在登录系统后使用passwd命令来更改自己的口令。

 

现在的Unix/Linux系统中,口令不再直接保存在passwd文件中,通常将passwd文件中的口令字段使用一个“x”来代替,将 /etc/shadow作为真正的口令文件,用于保存包括个人口令在内的数据。当然shadow文件是不能被普通用户读取的,只有超级用户才有权读取。

 

此外,需要注意的是,如果passwd字段中的第一个字符是“*”的话,那么,就表示该账号被查封了,系统不允许持有该账号的用户登录。

 

(3)用户标识号(UID):UID是一个数值,是Linux系统中惟一的用户标识,用于区别不同的用户。在系统内部管理进程和文件保护时使用UID字段。在Linux系统中,注册名和UID都可以用于标识用户,只不过对于系统来说UID更为重要;而对于用户来说注册名使用起来更方便。在某些特定目的下,系统中可以存在多个拥有不同注册名、但UID相同的用户,事实上,这些使用不同注册名的用户实际上是同一个用户。

 

(4)组标识号(GID):这是当前用户的缺省工作组标识。具有相似属性的多个用户可以被分配到同一个组内,每个组都有自己的组名,且以自己的组标识号相区分。像UID一样,用户的组标识号也存放在passwd文件中。在现代的Unix/Linux中,每个用户可以同时属于多个组。除了在passwd文件中指定其归属的基本组之外,还在/etc/group文件中指明一个组所包含用户。

 

(5)用户名(user_name):包含有关用户的一些信息,如用户的真实姓名、办公室地址、联系电话等。在Linux系统中,mail和finger等程序利用这些信息来标识系统的用户。

 

(6)用户主目录(home_directory):该字段定义了个人用户的主目录,当用户登录后,他的Shell将把该目录作为用户的工作目录。在 Unix/Linux系统中,超级用户root的工作目录为/root;而其它个人用户在/home目录下均有自己独立的工作环境,系统在该目录下为每个用户配置了自己的主目录。个人用户的文件都放置在各自的主目录下。

 

(7)命令解释程序(Shell):Shell是当用户登录系统时运行的程序名称,通常是一个Shell程序的全路径名,如/bin/bash。

 

当用户登录后,将启动这个程序来接收用户的输入,并执行相应的命令。从Linux核心的角度看来,Shell就是用户和核心交流的一种中间层面,用于将用户输入的命令串解释为核心所能理解的系统调用或中断子例程,同时又将核心的工作结果解释为用户能理解的可视化输出结果。所以,对用户而言,Shell被称为命令解释程序;而对于核心而言,Shell又被称为外壳程序。

 

需要注意的是,系统管理员通常没有必要直接修改passwd文件,Linux提供一些账号管理工具帮助系统管理员来创建和维护用户账号。

 

2.shadow文件

 

目前,在大多数Unix/Linux系统中,利用/etc/shadow文件存放用户账号的加密口令信息和口令的有效期信息。下面示例是shadow文件中的几条记录(与上面的passwd文件相对应):

 

 

root:$1$Vfcp2rdI$R0bDID/CvD3FfTeTtnk7u.:12489:0:99999:7:::

bin:*:12489:0:99999:7:::

daemon:*:12489:0:99999:7:::

......

desktop:!!:12489:0:99999:7:::

mengqc:$1$pNPtXOsd$gk5mQEfx5hJfPzpmgQ78k/:12489:0:99999:7:::

 

 

在Linux系统的shadow文件中,为每个用户提供一条记录,各个字段用“:”隔开,这9个字段按先后顺序分别是:

 

◆注册名;

 

◆密文口令;

 

◆上次更改口令时间距1970年1月1日的天数;

 

◆口令更改后,不可以更改的天数;

 

◆口令更改后,必须再次更改的天数(即口令的有效期);

 

◆口令失效前警告用户的天数;

 

◆口令失效后距账号被查封的天数;

 

◆账号被查封时间距1970年1月1日的天数;

 

◆保留字段。

 

Unix/Linux修改口令的机制很简单:用户修改口令时使用passwd命令,该命令通常位于/usr/bin。普通用户只能修改自己的口令,而且必须回答老的口令;root可以修改系统中任何用户的口令,并且此时系统不会询问老的用户口令。

 

建立和删除账号

 

对系统而言,创建一个用户账号需要完成以下几个步骤:

 

第一步,添加一个记录到/etc/passwd文件;第二步,创建用户的主目录;第三步,在用户的主目录中设置用户的默认配置文件(如.bashrc)。

 

在几乎所有的Linux系统中都提供了useradd或adduser命令,它们能完成以上这一系列工作。通常这两个命令没有区别。另外,root用户可以使用KDE桌面系统为新用户建立账号和口令。其过程是“控制面板”→“用户和组群”→“添加新用户”,按照屏幕上的提示要求输入相应的参数,包括用户名、描述信息(可选)、密码及确认,然后设置用户-组的关系。

 

要删除已经存在的用户账号,必须从/etc/passwd文件中删除此用户的记录项,从/etc/group文件中删除提及的此用户,并且删除用户的主目录及其它由该用户创建或属于此用户的文件。这些工作可以使用userdel命令来完成,也可以使用桌面系统“控制面板”→“用户和组群”,在“本地用户和组”的窗口中选定要删除的用户,然后单击“删除”小图标,并予以“确定”。

 

某些时候,需要临时使某个账号失效,例如用户没有付费,或者是系统管理员怀疑黑客得到了某个账户的口令,解除限制后,该账号仍旧可以登录,这就是所谓的查封账号。当需要查封某个账号时,可以将用户记录从/etc/passwd文件中去掉,但是保留该用户的主目录和其它文件;或者在/etc/passwd (或/etc/shadow)文件中,在相关用户记录的passwd字段的首字符前加上符号“*”,例如,希望查封前面提到过的用户账号mengqc,则在/etc/shadow文件中将该用户记录修改如下:

 

mengqc:*$1$pNPtXOsd$gk5mQEfx5hJfPzpmgQ78k/:12489:0:99999:7:::

 

 

这样,就限制了该用户账号的登录。

 

但是要注意,这样做会使得用户弄不清发生了什么事情。为了避免引起不必要的误会,管理员还可以使用另一种方法来查封用户:将用户账号的Shell设置成一个特定的、只打印出一条信息的程序。用这种方法,任何想登录此账号的人将无法登录,并能得知具体原因。该信息还可以告诉用户应与系统管理员联系,以处理相关问题。

 

下面就是这样一个用于取代用户Shell程序的“tail scripts”示例程序:

 

 

#!/usr/bin/tail +2

This account has been closed due to a security breach.

Please call 36 and wait for the men in black to arrive.

 

 

上面代码中前2个字符(#!)告诉核心,本行的其它部分是解释本文件要运行的命令。这样,tail命令将在屏幕上显示除第一行外的所有东西。通常这种tail scripts被存放在独立于用户目录的路径中,以免和用户命令产生混淆。

 

工作组管理

 

利用工作组可以方便地把相关用户账号逻辑地组织在一起。在组的支持下,允许用户在组内共享文件。Linux系统中每一个文件都有一个用户和一个组的属主,也就是说系统中任何一个文件都归属于某个组中的一个用户。使用“ls -l”的命令可以看到文件所属的用户和组,例如/home/mengqc目录下存在文件ex1,运行“ls -l”将输出如下结果:

 

 

$ ls -l ex1

-rwxr-x--- 1 mengqc mengqc 31 3月27 09:18 ex1

 

 

每个用户至少属于一个组,这种从属关系对应于系统/etc/group文件中的GID字段,但是一个用户可以从属于多个组。类似于/etc/passwd文件,系统中的每个组都对应/etc/group文件中一行记录。记录的各字段属性依次定义如下:

 

组名:口令:组标识号:用户列表

 

其中,各个字段的含义如下:

 

◆组名(group_name):顾名思义,组名就是工作组的名字。

 

◆口令(passwd):组的口令,但口令字段不常用,允许不在这个组中的其它用户用newgrp命令来访问属于这个组的资源。

 

◆组标识号(GID):GID是系统用来区分不同组的标识号,它在系统中是惟一的。在/etc/passwd文件中,用户的组标识号字段就是用这个数字来指定用户的缺省组。

 

◆用户列表(user_list):用户列表是用“,”分隔的用户注册名集合,列出了这个组的所有成员。但是需要注意的是,这些被列出的用户在 /etc/passwd文件中对应的GID字段(即用户的缺省组)与当前/etc/group文件中相应的GID字段是不同的。也就是说,组的默认用户不必列在该字段中。

 

下面是从一个/etc/group文件中摘录的部分记录项:

 

 

root:x:0:root

bin:x:1:root,bin,daemon

daemon:x:2:root,bin,daemon

......

desktop:x:80:

mengqc:x:500:

 

 

在Linux系统中,root和bin都是管理组。系统中很多文件都属于这两个组。mengqc是一个普通的用户组。

 

在实际的应用中,口令字段是完全没有必要的。事实上,很多系统没有提供设置组口令的工具。这是因为要使一个用户成为多个组的成员,只需要把用户注册名加入到这些组的用户列表字段中。

 

用户可以使用groups命令列出当前用户所属的所有组的名称。

 

当用户登录时,被自动赋予/etc/passwd文件中的GID属性,也自动成为/etc/group文件中列出该用户组的成员。

 

对于工作组的设置主要包括以下几项工作:

 

◆创建和删除工作组;

 

◆修改组的属性;

 

◆调整用户所属组;

 

◆组权限的设定。

 

添加组的命令是groupadd,删除组的命令是groupdel,修改组属性的命令是groupmod,也可以利用桌面系统实现上述功能。#p#副标题#e#

设置用户登录环境

 

 

以上是用户基本属性的设置。但是,用户在使用Linux系统的时候,还需要相关的工作环境。为此,管理员应为用户设置登录环境。

 

当用户登录Linux系统后,通常接触的第一个软件环境就是bash命令解释程序,这是除了系统核心之外最重要的软件环境。在Linux系统中,软件环境的配置信息通常都存放在一些配置文件中。

 

以下是一些较为重要的Shell环境配置文件:

 

◆/etc/bashrc 包含系统定义的命令别名和bash的环境变量定义。

 

◆/etc/profile 包含系统的环境定义,并指定启动时必须运行的程序。

 

◆/etc/inputrc 包含系统的键盘设定,以及针对不同终端程序的键位配置信息。

 

◆$HOME/.bashrc 包含为用户定义的命令别名和bash的环境变量定义。

 

◆$HOME/bash_profile 包含为用户定义的环境变量,并指定用户登录时需要启动的程序。

 

◆$HOME/.inputrc 包含用户的键盘设定,以及针对用户终端的键位配置信息。

 

这些文件都是采用Shell语言编写的系统脚本文件,通常用户目录下的配置文件与/etc目录中相对应的文件大致相同。

 

用户磁盘空间限制

 

在Linux系统中,系统管理员可以控制用户对硬盘的使用。也就是说,能够限定用户使用的硬盘空间的大小,其好处是可以将整个硬盘资源公平合理地进行分配,从而不会出现某个用户或某些用户占用过多的硬盘空间,而导致其它用户工作不便的现象。

 

Linux系统是通过quota(磁盘限额)机制来实现对用户使用硬盘资源的控制。quota可以从两个方面来限制用户使用硬盘资源:

 

◆用户所能够支配的索引节点数;

 

◆用户可以存取的硬盘分区数。

 

quota机制的功能是强制用户在大部分时间内保持在各自的硬盘使用限制下,取消用户在系统上无限制地使用硬盘空间的权力。

 

该机制是以用户和文件系统为基础的。如果用户在一个以上的文件系统上创建文件,那么必须在每个文件系统上分别设置quota。

 

通常quota的配置过程如下:

 

(1)首先应该确保在Linux核心中提供对quota的支持。也就是说在配置核心时,对于以下核心开关选项:

 

 

quota support(CONFIG_QUOTA)

 

 

应该设置为“Y”,使核心提供对quota机制的支持。

 

(2)安装与quota相关的软件包。通常的Linux系统(例如,红旗Linux 服务器版)在系统安装时会缺省地安装相关的软件包,包的命名方式一般为quota-x.xx-x.i386.rpm。如果系统没有安装过该软件包,可以使用以下命令将该包安装上:

 

 

rpm -ivh quota*.rpm

 

 

(3)修改用户的系统初启脚本文件,使之能够检查quota并在系统初启时开启quota功能。以下是一个初启脚本文件示例:

 

 

#检查quota程序并且开启quota磁盘限额功能

if [ -x /sbin/quotacheck ]

then

echo "Cheching quotas......"

/sbin/quotacheck -avug

echo "[Done]"

fi

if [ -x /sbin/quotaon ]

then

echo "Turning on quota......"

/sbin/quotaon -avug

fi

 

 

上面这段脚本可以添加到文件/etc/rc.d/rc.sysinit或/etc/rc.d/rc.local中。但是需要注意,必须在加载用户 /etc/fstab中指定的文件系统后,才能启动quota;否则quota将不会运行。这是因为quota是依赖于文件系统的,只有为用户加载文件系统后,才能为用户设置quota。

 

(4)修改初启时文件系统的支持

 

前面介绍对quota初启脚本的编写时曾提到过,在使用脚本文件开启quota功能之前,必须在加载/etc/fstab文件中指定了文件系统。这是因为为了在系统每次初启时使文件系统上的硬盘限额是有效的,/etc/fstab文件也需要进行相应的修改。

 

在/etc/fstab文件中,没有启用quota的分区一般如下所示:

 

 

/dev/hda1 / ext2 defaults 1 1

/dev/hdb2 /work ext2 defaults 1 2

 

 

如果要在文件系统中加入用户quota功能,则应在包含“defaults”选项的后面加上“usrquota”。例如,我们要为/dev/hdb2上的文件系统设置quota,则修改如下:

 

 

/dev/hdb2 /work ext2 defaults,usrquota 1 2

 

 

如果用户需要启动文件系统中对用户组quota的支持,则需要在包含“defaults”选项的后面加上“grpquota”:

 

 

/dev/hdb2 /work ext2 defaults,grpquota 1 2

 

 

如果需要同时支持用户quota与组quota,则修改如下:

 

 

/dev/hdb2 /work ext2 defaults,usrquota,grpquota 1 2

 

 

(5)建立quota.user和quota.group文件

 

在上面(3)所述脚本中,命令“quotacheck -avug”的作用是检查需要打开磁盘限额的目录下的所有子目录,并建立quota.user和quota.group配置文件。这两个文件用于记录 quota的配置信息,以及当前quota目录下硬盘的使用情况。第一次执行这样的检查过程可能会比较慢。

 

如果是第一次安装quota,则必须先定位到要设定quota的目录中,上面的示例目录是/work,在该目录中执行“quotacheck-avug” 命令,让系统自动生成quota.user和quota.group文件。这两个文件的内容相对较为简单,读者可一目了然。

 

文件系统及其维护

 

Linux系统对于它能够识别的所有文件系统类型提供了一个通用界面,所以对用户来说,文件存储的精确格式和方式并不重要。Linux可以支持的主要文件系统类型有ext2和ext3文件系统,用于存储Linux文件;MS DOS文件系统,允许Linux访问MS DOS/Win9x分区和软盘上的文件;其它文件系统包括CD ROM使用的ISO 9660文件系统等。

 

作为系统管理员,应该掌握以下这样一些知识和技能:

 

◆清楚Linux上文件系统的组织方式,以及文件的存储原理;

 

◆熟悉关于分区和文件系统的配置文件;

 

◆在软盘上创建文件系统,以及在硬盘上添加新的文件系统;

 

◆使用各种工具检查和修复文件系统;

 

◆此外还应该熟悉访问文件系统上文件的各种命令。

 

如前所述,文件系统是操作系统用于在磁盘上组织文件的机制,其载体是软盘或硬盘分区。一个软盘或硬盘分区在作为文件系统使用时必须要初始化,并将如何组织文件的数据结构写到这些介质上,这个过程就是建立文件系统过程。通常一个操作系统的大部分程序都是基于该操作系统环境下文件系统的,当转移到别的文件系统上就不能正常工作。

 

在Linux中,每个文件系统占据硬盘的一个独立分区。Linux系统可以拥有多个文件系统。因此,在安装Linux系统之前,至少需要准备好一个文件系统,用来存放Linux本身。一般来说,建议在安装Linux系统时,最好为其提供多个文件系统,因为这样能够提供较好的系统安全性。

 

也就是说,当系统某个分区上的文件系统被损坏了,Linux其它分区上的文件系统不会受到影响。相反,如果把所有文件都存放在根文件系统下,那么,当该文件系统损坏时,所有的Linux文件都将丢失。

 

此外,使用多文件系统的另一个原因是,需要在多个硬盘上分配存储空间。就是说,可以将多个硬盘上的空间划分为多个分区供Linux使用,以便充分利用系统的硬盘空间。

 

建立文件系统

 

当硬盘完成分区后,应该在该分区上建立文件系统。这一步工作是通过mkfs工具来完成的。实际上,对每种文件系统Linux都提供一个相应的工具来做这个工作。mkfs使用参数-t fstype来指定所要建立的文件系统类型。通常创建文件系统的操作会将原来该分区上的数据清除掉,并且该过程是不可逆的。

 

mkfs命令的一般格式如下:

 

 

mkfs [-t fstype] [-cv] device_or _mount_point [blocks]

 

 

其中,-t fstype选项用于指定所需创建的文件系统类型。缺省情况下,是ext2文件系统。如果要建立MS DOS文件系统,应使用参数msdos。选项-c用于查找分区中的坏块,并初始化坏块列表。通常初次安装系统时,建议使用该选项。

 

例如,如果需要在分区/dev/hda1上建立ext2文件系统,并检查坏块,应该使用以下命令:

 

# mkfs -c /dev/hda1

 

 

使用文件系统

 

创建文件系统后,需要使用命令mount将该文件系统安装到主文件系统中。命令mount有三个主要参数:

 

(1)需要安装的文件系统类型,用-t fstype选项来指定,这与mkfs中的-t选项是一样的。

 

(2)所需访问的文件系统所在分区名,通常是位于目录/dev中的特别设备文件;如果需要安装网络文件系统时,就使用该服务器上输出的目录名。

 

(3)安装新文件系统的路径名,也就是放置新文件系统的安装点(Mount Point)。通常这是一个空目录名,并且是专门为安装新文件系统而准备的。在Linux系统下,目录/mnt是常用的文件系统安装目录,缺省情况下, CD ROM和软盘驱动器都分别安装在其子目录下。当然,文件系统也可以被安装到其它空目录中。需要注意的是,不要将一个文件系统安装到一个非空的目录中。如果那样做,该目录中原有的内容会被新安装的文件系统内容所遮盖。

 

例如,需要将MS DOS文件系统分区/dev/hda1安装到系统的空目录/dos中,应该使用以下命令:

 

 

# mount -t msdos /dev/hda1 /dos

 

 

安装所需的文件系统后,可以使用不带参数的mount命令来查看当前安装的文件系统。文件系统的安装情况记录在文件/etc/mtab中。每次使用mount或umount(卸装文件系统)命令都会修改该文件,从而使该文件的内容与系统中文件系统的实际安装情况保持一致。

 

Linux使用了一个/etc/fstab文件,该文件列出在系统初启时需要自动安装的所有分区。此外,该文件也可以向mount命令传递参数。 Linux系统在初启时会执行脚本/etc/rc.d/rs.sysinit,该脚本使用fsck命令检查所需安装Linux分区,在没有发现错误后,将读取/etc/fstab文件中的内容,并根据该文件中指定的参数,自动安装该文件中指定的文件系统。

 

在关闭系统之前,为了保证文件系统的完整性,所有安装的文件系统都必须被卸载。通常在/etc/fstab文件中定义的文件系统都能够自动卸载。但是,对于手工mount的文件系统,在关闭系统之前必须手工卸载该文件系统。有时候也需要在系统工作过程中手工卸载某个文件系统。手工卸载文件系统必须使用 umount命令。umount命令将分区名或分区的安装点作为参数,格式如下:

 

 

umount <分区名或分区的安装点>

 

 

例如,需要将已经安装到/mnt/floppy目录下的软盘卸载,可以使用以下命令:

 

 

# umount /mnt/floppy

 

 

要注意,对于正在使用的文件系统,不能使用umount命令卸载。另外,为了安全起见,在Linux系统中通常只能由系统管理员root来完成硬盘分区、格式化分区、安装文件系统或卸载文件系统等工作。

 

维护文件系统

 

1.修复损坏的文件系统

 

当Linux文件系统由于人为因素或是系统本身的原因(如用户不小心冷启动系统、磁盘关键磁道出错或机器关闭前没有来得及把cache中的数据写入磁盘等)而受到损坏时,都会影响到文件系统的完整性和正确性。这时,就需要系统管理员进行维护。

 

对Linux系统中常用文件系统的检查是通过fsck工具来完成的。fsck命令的一般格式如下:

 

 

fsck [options] file_system [...]

 

 

在通常情况下,可以不为fsck指定任何选项。例如,要检查/dev/hda1分区上的文件系统,可以用以下命令:

 

 

# fsck /dev/hda1

 

 

应该在没有mount该文件系统时才使用fsck命令检查文件系统,这样能保证在检查时该文件系统上没有文件被使用。如果需要检查根文件系统,应该利用启动软盘引导,而且运行fsck时应指定根文件系统所对应的设备文件名。对于普通用户来说,为了安全起见,不要使用fsck来检查除ext2之外的文件系统。

 

fsck在发现文件系统有错误时可以修复它。如果需要fsck修复文件系统,必须在命令行中使用选项-A和-P。当修复文件系统后,应该重新启动计算机,以便系统读取正确的文件系统信息。

 

fsck对文件系统的检查顺序是从超级块开始,然后是已经分配的磁盘块、目录结构、链接数,以及空闲块链接表和文件的I节点等。用户一般不需要手工运行fsck,因为引导Linux系统时,如果发现需要安装的文件系统有错,会自动调用fsck。

 

2.避免可能导致系统崩溃的文件系统的错误

 

为了避免因为文件系统错误而导致系统崩溃的情况,可以考虑采取以下的措施和注意事项:

 

(1)在正确安装Linux系统后,制作系统备份;

 

(2)创建对应当前Linux核心的启动盘;

 

(3)在软盘上做一些重要文件的备份;

 

(4)对关键服务器最好使用UPS,预防突然掉电;

 

(5)定期使用fsck或badblocks检查磁盘,一旦发现错误,必须要做备份;

 

(6)一般情况下,不要以root身份登录到Linux系统;

 

(7)不要在完成任务后直接关闭系统的电源开关,最好使用shutdown命令;

 

(8)不要让无用的程序或数据占满硬盘空间。

 

这样可以将因文件系统错误而导致的损失降到最小。

 

3.其它一些管理文件系统的命令

 

 

du//统计当前目录下子目录的磁盘使用情况,主要是统计其子目录和所有子目录下文件的大小

df//统计文件系统中空闲的磁盘空间,缺省情况下显示所有安装文件系统的磁盘使用信息

in//用来在目录或文件间建立链接

find//用于查找Linux系统上的文件或目录

tar//是一个文件管理工具,用于将文件归档,或者从归档中恢复文件

gzip//GNU文件压缩工具,用于压缩Linux文件,通常与tar一起使用

 

文件系统的后备

 

系统管理员的主要任务之一是确保系统中所存信息的持续完整性。维护完整性的一种方法是定期后备系统中的数据。

 

系统后备(备份)是保护用户不受数据损坏或丢失之苦的一种非常重要的手段。如果系统的硬件出现了问题,或者是用户不小心删除了重要的文件,都有可能造成数据损坏或丢失,尤其在服务器应用环境中所造成的损失更是难以预计。经常进行数据备份可以使偶然破坏造成的损失减小到最低程度,而且能够保证系统在最短的时间内从错误状态中恢复。

 

在Linux系统中,造成数据丢失或数据损坏的原因有多种:第一种原因是用户误操作,强行删除或覆盖了一些重要的文件;第二种原因是硬件发生故障,导致数据的丢失;第三种原因是因为软件本身存在故障,而造成数据丢失。系统中数据的丢失和损坏轻则破坏用户关键数据,重则导致系统不能正常工作。所以,定期进行系统和用户数据的备份是系统管理员的基本职责。

 

对于备份来说,管理员需要考虑备份介质的选择、备份策略的选择、备份工具的选择。目前,比较常用的备份介质有软盘、磁带、光盘和硬盘等,通常有完全备份、增量备份和更新备份三种备份策略。

 


#p#副标题#e#

备份策略

 

 

1.完全备份

 

也称为简单备份,即每隔一定时间就对系统做一次全面的备份,这样在备份间隔期间出现了数据丢失或破坏,可以使用上一次的备份数据将系统恢复到上一次备份时的状态。但是,这样每次备份的工作量相当大,需要很大的存储介质空间。

 

因此,不可能太频繁地进行这种系统备份,只能每隔一段较长的时间(例如一个月)才进行一次完全备份。然而,在这段相对较长的时间间隔内(整个月) 一旦发生数据丢失现象,则所有更新的系统数据都无法被恢复。

 

2.增量备份

 

在这种备份策略中,首先进行一次完全备份,然后每隔一个较短的时间段进行一次备份,但仅仅备份在这段时间间隔内修改过的数据。然后,当经过一段较长的时间后,再重新进行一次完全备份,依照这样的周期反复执行。增量备份的工作量较小,也能够进行较为频繁的备份。例如,可以以一个月为备份周期,每个月进行一次完全备份,每天下班后或是业务量较小时进行当天的增量数据备份。

 

3.更新备份

 

这种备份方法与增量备份相似。首先每隔一段时间进行一次完全备份,然后每天进行一次更新数据的备份。但不同的是,增量备份是备份当天更改的数据,而更新备份是备份从上次进行完全备份后至今更改的全部数据文件。一旦发生数据丢失,首先可以恢复前一个完全备份,然后再使用前一个更新备份恢复到前一天的状态。

 

更新备份的缺点是,每次作小备份工作的任务比增量备份的工作量要大。但是,其好处在于,增量备份每天都保存当天的备份数据,需要过多的存储量;而更新备份只需要保存一个完全备份和一个更新备份就行了。另外在进行恢复工作的时候,增量备份要顺序进行多次备份的恢复,而更新备份只需要恢复两次。因此,更新备份的恢复工作相对较为简单。

 

备份时机

 

备份需要定期进行,通常应该选择在系统比较空闲时进行,以免影响系统的正常工作,并且此时系统中数据更新频度较低,一般选择在半夜零点之后进行备份。可以考虑写一个脚本并且加入到系统的cron自动任务中去(有关cron的详情,请利用man命令参考cron的手册页)。不过需要注意的是,对于系统备份应该根据具体的系统数据更新情况和用户使用系统的情况,决定具体的系统备份方案。

 

备份工具

 

选定了备份策略后,可以使用tar、cpio、dump等备份工具软件将数据进行备份。对于一般的备份,使用tar就足够了。通常用tar备份的命令格式如下所示:

 

 

tar cvfpsz <生成的备份文件> <所需备份的目录>

 

 

用于备份时,可以将tar命令和其它命令联合使用。例如,需要查找过去7天更新过的文件,并使用tar的-T参数指定需要备份的文件,进行所需备份:

 

 

# find / -mtime -7 -print >/tmp/filelist

# tar -c -T /tmp/filelist -f /dev/nrsa0

 

 

此外,也可以使用类似于tar的cpio命令进行备份。cpio对数据的压缩要比tar命令更有效,因为它是为备份任何文件集而设计的,而tar命令主要是为备份子目录设计的;cpio能够处理跨多个磁带的备份,并且能够跳过磁道上的坏区继续工作,而tar不能。

 

恢复后备文件

 

一般说来,在备份文件系统的时候,只要备份/etc、/root、/var、/home、/usr/local和X11R6目录下的内容即可。此外,如果用户还自定义了一些文件和子目录的话,也需要做备份。

 

以后当系统出现某些故障时,就需要恢复先前保存的后备文件。对备份文件进行恢复是一件很容易的事情。首先,必须确定待恢复的文件所在的位置。接着使用 tar -xp或cpio -im命令就行了。tar的-p及cpio中的-m选项用来确保所有的文件属性与文件一起被恢复。因为这些命令较为简单,这里就不一一举例了。要注意的是,当使用cpio恢复目录时,-d选项将用来创建子目录;而tar命令则自动完成创建子目录的工作。

 

系统安全管理

 

Linux系统安全管理包括多个要素,例如,普通用户的系统安全、超级用户的系统安全、文件系统的安全、进程安全,以及网络安全等。只有以上各个要素协调配合,才能真正地保证系统不易受到致命的打击。

 

安全管理的目标和要素

 

安全管理的目标包括防止非法操作、防止未获得授权的人进入系统或无合法权限的人员越权操作;数据保护,防止已授权或未授权的用户存取对方重要的个人信息;正确管理用户,一个系统不应被一个恶意的、试图使用过多资源的用户损害;保证系统的完整性,保证系统的完整性;记账,通过确认用户身份和记录下用户所做的操作,并根据这些记录查出哪些操作比较可疑,以及哪些用户对系统进行了破坏,从而采取相应的防范措施;系统保护,阻止任何用户冻结系统资源,如果某个用户占用某一系统资源的时间过长,必须有相应的措施剥夺其使用权;否则会影响其它用户使用,甚至导致系统崩溃。

 

Linux系统安全包括三个要素,即物理安全管理、普通用户安全管理和超级用户安全管理。

 

1.物理安全

 

一般来说,物理安全应该包括以下几个方面:

 

(1)保证放置计算机机房的安全,必要时应添加报警系统。同时应提供软件备份方案,把备份好的软件放置在另一个安全地点。

 

(2)保证所有的通信设施(包括有线通信线、电话线、局域网、远程网等)都不会被非法人员监听。

 

(3)钥匙或信用卡识别设备、用户口令钥匙分配、文件保护、备份或恢复方案等关键文档资料要保存在安全的位置。

 

2.普通用户安全管理

 

Linux系统管理员的职责之一是保证用户资料安全,其中一部分工作是由用户的管理部门来完成的。但作为系统管理员,有责任发现和报告系统的安全问题。

 

系统管理员可以定期随机抽选一用户,将该用户的安全检查结果发送给他及其管理部门;此外,用户的管理部门应该强化安全意识,制定完善的安全管理规划。

 

3.超级用户安全管理

 

超级用户可以对系统中任何文件和目录进行读写,超级用户口令一旦丢失,系统维护工作就很难进行,系统也就无安全性可言。

 

超级用户在安全管理方面需要注意的地方包括:

 

(1)在一般情况下最好不使用root账号,应使用su命令进入普通用户账号。

 

(2)超级用户不要运行其它用户的程序。

 

(3)经常改变root口令。

 

(4)精心地设置口令时效。

 

(5)不要把当前工作目录排在PATH路径表的前面,以避免“特洛依木马”的入侵。

 

(6)不要未退出系统就离开终端。

 

(7)建议将登录名root改成其它名称。

 

(8)注意检查不寻常的系统使用情况。

 

(9)保持系统文件安全的完整性。

 

(10)将磁盘的备份存放在安全的地方。

 

(11)确保所有登录账号都有用户口令。

 

(12)启动记账系统。

 

用户口令的管理

 

计算机安全包括物理安全和逻辑安全。通过加强机房管理、保证通信线路安全、建立完整的备份制度等措施,一般情况下都能保证物理安全。另外,建立和完善逻辑安全同样是一个很重要的问题,其中包括用户口令的管理、用户账号的管理、文件和目录权限的管理及维护系统日志。

 

1.用户口令的管理

 

用户口令的管理包括设置好的用户口令、采用正确的用户口令管理策略、设置用户口令的时效机制、执行安全的用户口令操作。

 

一个好的用户口令至少有6字符,口令中不要包含个人信息,例如生日、名字、门牌号码等。用户口令中最好有一些非字母(即数字、标点等)字符,最好应便于记忆。

 

用户口令的安全性随着时间的推移而变弱,所以,经常改变用户口令有利于系统安全。系统管理员可以通过修改/etc/shadow文件实现。

 

多数情况下用户口令丢失都与用户误操作有关。为保证用户口令安全必须注意以下几点:

 

(1)不要将用户口令写下来;

 

(2)用户在输入口令时,应避免被别人看到;

 

(3)保证用户一人一个口令,避免多人使用同一个账号;

 

(4)不要重复使用同一口令;

 

(5)不要在不同系统上使用同一口令;

 

(6)不要通过网络或Modem来传送口令。

 

2.用户账号的管理

 

用户账号的管理包括如何保证系统中每个用户账号的安全、如何管理这些账号,以及如何处理对系统安全有威胁的账号。

 

保证系统有一个安全的/etc/passwd文件是十分必要的,维护该文件时应注意以下问题:

 

(1)尽量避免直接修改/etc/passwd文件。

 

(2)在用户可以容忍的情况下,尽量使用比较复杂的用户账号名。

 

(3)尽量将passwd文件中UID号为0的人数限制在一到两个人内。如果发现存在管理员以外的UID为0时,就表示系统被攻破。以下命令可以显示passwd文件中ID为0的用户:

 

 

# grep '[^:]*[^*]*:0*' /etc/passwd

 

 

 

 

(4)保证passwd文件中没有口令相同的用户账号。下面的命令用来查询该文件中是否有ID=110的用户:

 

 

# grep 110 /etc/passwd

 

 

 

 

(5)保证passwd文件中每个用户的口令字段不为空,可以使用下面的命令:

 

 

# grep '[^:]*[^::]:*' /etc/passwd

 

 

 

 

(6)注意系统特殊用户使用的Shell字段,保证他们使用专用程序,而非一般用户的Shell。

 

(7)除非在必要的情况下,最好不要使用组口令。

 

(8)对于新用户最好先为之提供rsh(Restricted Shell),让他们在受限的环境中使用系统。

 

(9)当一个账号长时间不用时,可通过记账机制发现该账号,并将该账号查封。

 

3.安全问题

 

文件和目录权限的管理涉及重要目录的安全问题,包括以下目录:

 

 

/bin、/boot、/dev、/etc和$HOME。

 

 

 

 

/bin目录保存引导系统所需的全部可执行程序及常用的Linux命令。该目录只允许超级用户进行修改。同时,应把目录设置在PATH环境变量的最前面。例如:

 

 

PATH=/bin:/usr/bin:/usr/local/bin:/home/mengqc/bin

 

 

 

 

如果设置在最后,用户mengqc可以在自己的目录下放置一个名为su的特洛伊木马程序。超级用户执行su命令时,mengqc就可以获取超级用户口令。

 

/boot用来存放Linux初启时所需的一些数据和文件。如该目录被破坏,系统就不能启动。

 

/dev目录包含有链接硬件设备的文件,它的存取权限应当是775,并且应属root所有。设备文件使用权限设置不当,能给系统安全带来影响。例如/dev/mem是系统内存,用cat命令就可以在终端上显示系统内存中的内容。

 

/etc目录下的passwd、group、shadow 、inittab、cshrc和xinitrc等文件是系统正常工作时所用的。大多数情况下,/etc中的文件是黑客首选的攻击目标。

 

$HOME目录是各个用户的主目录,一般位于/home目录下。该目录的名称一般与用户的登录名相同。超级用户的主目录在/root下。

 

如果没有正确设置用户主目录的权限,就会给该用户带来危险。例如,假设其他人可以写一个用户的主目录,那么,可以通过修改该用户主目录中的.bash_profile文件来获取与该用户相同的身份。

 

4.对系统日志进行日常维护

 

系统管理员另一个复杂的任务是对系统日志进行日常维护。系统日志记录提供了对系统活动的详细审计信息,这些日志用于评估、审查系统的运行环境和各种操作。对于一般情况,日志记录包括记录用户登录时间、登录地点、进行什么操作等内容。使用得当的话,日志记录能向管理员提供有关危害安全的侵害或入侵企图的信息。

 

这些审计信息通常由守护程序自动产生,是系统默认设置的一部分,能帮管理员寻找系统存在的问题,对系统维护十分有用。还有一些日志需要管理员设置才能生效。大部分日志存放在/var/log目录中。

 

系统性能优化

 

对系统性能的优化主要包括以下几个方面的内容:

 

◆对于磁盘I/O性能的优化;

 

◆对文件系统的有机调整;

 

◆进程的执行调度;

 

◆系统守护进程任务的管理。

 

使用工具iostat监测磁盘I/O的性能 iostat检查各个磁盘的输入和输出,并产生各个磁盘的数据吞吐量、传输请求的统计数据。下面是一个使用iostat命令的示例:

 

# iostat -d 2

 

 

该命令将以2秒为时间间隔,产生对系统磁盘使用情况的统计输出。使用该工具得到各个硬盘的繁忙情况,就能根据数据吞吐量得出系统磁盘的性能。此时,系统管理员应该得出以下结论:

 

(1)当前磁盘的I/O性能是否已经影响到整个系统的性能,比如说,经常出现CPU等待I/O操作而出现CPU idle状态。

 

(2)用户的工作是否已经受到影响,例如,当使用NFS服务时,文件服务器是否经常不能及时处理用户请求。

 

(3)对于硬盘系统,当前的I/O是否集中在某一个或某几个磁盘上,造成任务请求不均衡。

 

对于这些问题,系统管理员应该有针对性地采用以下措施:

 

◆采用RAID技术提高硬盘I/O性能;

 

◆采用高性能硬盘来解决I/O瓶颈;

 

◆采用更先进、更快速的硬盘接口技术;

 

◆对文件系统进行调整,对执行进程进行调度。

 

对进程进行调度

 

进程在其运行过程中需要占有系统资源,如果用户执行的进程耗用资源过多,将有可能造成系统性能的瓶颈现象。这时,就需要对这样的进程进行调度。一种情况是与用户协商,将这个进程从系统中删除,这时需要系统管理员使用kill命令;另一种情况是需要对该进程的优先级别或调度时间进行调整,可以通过nice命令及at命令等完成。

 

要想让系统很好服务,必须管理好系统。作为系统管理员权力至上,职责也重大。以上介绍了系统管理的基本知识,然而,要想让系统始终处于良好工作状态,除了深入掌握管理知识外,还需在实践中不断积累经验。

热词搜索:

上一篇:三个简单实用的Linux技巧
下一篇:Linux安全管理的基本技巧

分享到: 收藏