资源描述
,Click to edit Master title style,Click to edit Master text styles,Click to edit Master title style,Click to edit Master text styles,第,9,章 用户与用户组管理,本章介绍,Linux,上用户和用户组的管理。作为一种多用户的操作系统,,Linux,可以允许多个用户同时登录到系统上,并响应每一个用户的请求。对于系统管理员而言,一个非常重要的工作就是对用户帐户进行管理。这些工作包括添加和删除用户、分配用户主目录、限制用户的权限等等。接下来将逐一讨论这些方面。,9.1,用户与用户组基础,计算机科学还没有进展到让每一台电脑都能通过生物学特征识别人的程度。在绝大多数情况下,用户名是身份的唯一标志,计算机通过用户提供的口令来验证这一标志。这种简单而实用的方式被广泛应用于几乎所有的计算机系统中。遗憾的是,也是由于这种“简单”的验证方式,使得在世界各地,每一天都有无数的帐号被盗取。因此选择一个合适的用户名和一个不易被破解的密码非常重要。,Linux,也运用同样的方法来识别用户:用户提供用户名和密码,经过验证后登录到系统。,Linux,会为每一个用户启动一个进程,然后由这个进程接受用户的各种请求。在建立用户的时候,需要限定其权限,例如不能修改系统配置文件,不能查看其他用户的目录等等。就像在一个银行安全系统中,每一个人只能处理其职权范围内的事情。另外,系统中有一个特殊的,root,用户,这个用户有权对系统进行任何操作而不受限制。,9.2,快速上手:为朋友,John,添加帐户,John,的笔记本送去维修了,希望借这台电脑用几天。但是这台电脑上有一些私人文件,或许不应该让,John,看到。因此应该为,John,单独添加一个帐户,而不是使用当前系统上已有的帐户。,打开终端,输入:,$,sudo,useradd,-m john,$,sudo,passwd,john,输入新的,UNIX,口令:,重新输入新的,UNIX,口令:,passwd,:已成功更新密码,9.3,添加用户,添加用户是系统管理的例行工作,在“快速上手”环节,读者已经实践了添加用户的基本步骤。接下来将详细讨论,useradd,和,groupadd,命令的各个常用选项,以及如何使用图形化的用户管理工具。最后介绍如何追踪用户状态。,9.3.1,使用命令行工具:,useradd,和,groupadd,在默认情况下,不带,-m,参数的,useradd,命令不会为新用户建立主目录。在这种情况下,用户可以登录到系统的,shell,,但不能够登录到图形界面。这是因为桌面环境,无论是,KDE,还是,GNOME,,需要用到用户主目录中的一些配置文件。例如,以下面的方式使用,useradd,命令添加一个用户,nox,:,$,useradd,nox,$,passwd,nox,#,设置,nox,用户的口令,输入新的,UNIX,口令:,重新输入新的,UNIX,口令:,passwd,:已成功更新密码,9.3.1,使用命令行工具:,useradd,和,groupadd,9.3.2,使用图形化的管理工具,除了传统的命令行方式,,Linux,还提供图形化工具对用户和用户组进行管理。相比较,useradd,等命令而言,图形化工具提供了更为友好的用户接口,当然,这是以牺牲一定灵活性为代价的。下面以,Ubuntu,下的“用户和组”管理工具为例进行介绍。,9.3.3,记录用户操作:,history,Linux,,准确地说是,Shell,,会记录用户的每一条命令。通过,history,命令,用户可以看到自己曾经执行的操作:,$history,16,cd,/media/,fishbox,/software/,17,ls,18,sudo,tar,zxvf,ies4linux-latest.tar.gz,19,cd,ies4linux-2.99.0.1/,20,ls,21 vi README,22 ./ies4linux,9.3.4,直接编辑,passwd,和,shadow,文件,在,Linux,中所作的一切基本配置最终都将反映到配置文件中,用户管理也不例外。所有的用户信息都登记在,/etc/,passwd,文件中,而,/etc/shadow,文件则保存着用户的登录密码。,诸如,useradd,这样的工具实际上对用户隐藏了用户管理的细节。可以通过手动编辑,passwd,和,shadow,这两个文件实现,useradd,等工具的所有功能。其中,,passwd,文件对所有用户可读,而,shadow,则只能用,root,帐号查看。为了保证口令的安全性,这一点很容易理解。当然,修改这两个文件都需要,root,权限。,不推荐初学者通过直接编辑这两个文件实现用户管理,尽管这种做法带来了很大程度上的灵活性。如果读者的确需要了解如何编辑,passwd,和,shadow,,可以参考本章的“进阶”部分。,9.4,删除用户:,userdel,userdel,命令用于删除用户帐号。下面这条命令删除,mike,这个帐号:,$,sudo,userdel,mike,在默认情况下,,userdel,并不会删除用户的主目录。除非使用了,-r,选项。下面这他条命令将,john,的帐号删除,同时删除其主目录:,$,sudo,userdel,-r john,9.5,管理用户帐号:,usermod,可以使用,usermod,命令来修改已有的用户帐号。这个命令有多个不同的选项,对应于帐号的各个属性。,选项,含义,-d,修改用户主目录,-e,修改帐号的有效期限。以公元月,/,日,/,年的形式表示(,MM/DD/YY,),-g,修改用户所属的组,-l,修改用户帐号名称,-s,修改用户登录后所使用的,shell,9.6,查看用户信息:,id,id,命令用于查看用户的,UID,、,GID,及其所属的组。这个命令以用户名作为参数,下面这条命令显示了,nobody,用户的,UID,、,GID,及其属于的组信息:,$id nobody,uid,=65534(nobody),gid,=65534(nogroup),组,=65534(nogroup),提示:关于用户的,UID,和,GID,,请参考,9.9,节。,使用不带任何参数的,id,命令显示当前登录用户的信息:,$id,uid,=1000(lewis),gid,=1000(lewis),组,=4(adm),20(dialout),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),107(fuse),109(lpadmin),115(admin),125(vboxusers),127(sambashare),1000(lewis),9.7,用户间切换:,su,在第,3,章曾经介绍过,使用,root,帐号一个比较好的做法是使用,su,命令。不带任何参数的,su,命令会将用户提升至,root,权限,当然首先需要提供,root,口令。通过,su,命令所获得的特权将一直持续到使用,exit,命令退出为止。,注意:,Ubuntu,Linux,的限制非常严格。在默认情况下,系统没有合法的,root,口令。这意味着不能使用,su,命令提升至,root,权限,而必须用,sudo,来获得,root,访问权。,也可以使用,su,命令切换到其他用户。下面这个命令将当前身份转变为,john,:,$,su,john,系统会要求输入,john,口令。通过验证后,就可以访问,john,帐号了。通过,exit,命令回到之前的帐号:,$exit,9.8,受限的特权:,sudo,使用,su,命令提升权限已经让系统安全得多了,但,root,权限的不可分割让事情变得有些棘手。如果用户,john,想要运行某个特权命令,那他除了向管理员索取,root,口令外别无他法。仅仅为了一个特权操作而赋予用户控制系统的完整权限,这种做法听起来有点可笑,但这确实存在于某些不规范的管理环境中。,最常见的解决方法是使用,sudo,程序。这个程序接受命令行作为参数,并以,root,身份(或者也可以是其它用户)执行它。在执行命令之前,,sudo,会首先要求用户输入自己的口令,口令只需要输入一次。出于安全性的考虑,如果用户在一段时间内(默认是,5,分钟)没有再次使用,sudo,,那么此后必须再次输入口令。这样的设置避免了特权用户不经意间将自己的终端留给那些并不受到欢迎的人。,9.9,进阶,1,:,/etc/,passwd,文件,这一节简要介绍,/etc/,passwd,文件,这是,Linux,中用于存储用户信息的文件。在早期的,Linux,中,,/etc/,passwd,是管理用户的唯一场所,包括用户口令在内的所有信息都记录在这个文件中。出于安全性的考虑,现在用户口令已经转而保存在,/etc/shadow,中了,这个文件将在下一节讨论。,9.9.1 /etc/,passwd,文件概览,用户的基本信息被储存在,/etc/,passwd,文件中。这个文件的每一行代表一个用户,使用,cat,命令查看到的文件内容大致如下所示:,root:x:0:0:root:/root:/bin/bash,daemon:x:1:1:daemon:/usr/sbin:/bin/sh,bin:x:2:2:bin:/bin:/bin/sh,sys:x:3:3:sys:/dev:/bin/sh,9.9.2,加密的口令,把加密口令放在这里讲解似乎显得有点不合时宜。正如读者所看到的,在,passwd,的口令字段中,只有一个“,x”,摆放在那里。难道用户的口令就是“,x”,吗?这显然不可能,由于,passwd,文件需要对所有用户可读,因此另找一个地方存放口令显得很有必要。如今绝大多数系统都将用户口令经过加密后存放在,/etc/shadow,文件中(这个文件只对,root,可读),然后在,passwd,文件的口令字段放入一个“,x”,作为占位符。,无论加密口令被存放在哪,其原理总是相同的。大部分,Linux,发行版可以识别多种不同的加密算法。通过分析加密后的数据,系统可以知道使用的是哪一种算法。因此,可以在一套系统上使用多种不同的加密方式。,9.9.3 UID,号,UID,号用于唯一标识系统中的用户。这是一个,32,位无符号整数。,Linux,规定,root,用户的,UID,为,0,。而其他一些虚拟用户如,bin,、,daemon,等被分配到一些比较小的,UID,号,这些用户通常被安排在,passwd,文件的开头部分。从一个比较大的数开始分配真实用户(如这里的,john,)的,UID,号是一个好习惯,这样能为虚拟用户提供了足够的余地。在笔者的系统上,真实用户的,UID,是从,1000,开始分配的。,应该保证每个用户,UID,号的唯一性。如果多个用户共有一个,UID,,那么在诸如,NFS,这样的系统中将产生安全隐患。可以有多个用户的,UID,号均为,0,,那么这些用户将同时拥有,root,权限。但通常不推荐这样做,这同样是出于安全方面的考虑。如果有这样的需求的话,应该使用类似于,sudo,这样的工具。,9.9.4 GID,号,GID,号用于在用户登录时指定其默认所在的组。和,UID,号一样,这是一个,32,位整数。组在,/etc/group,文件中定义,其中,root,组的,GID,号为,0,。,在确定一个用户对某个文件是否具有访问权限时,系统会考察这个用户所在的所有组(在,/etc/group,文件中定义)。默认组,ID,只是在用户创建文件和目录时才有用。举例来说,,john,同时属于,john,、,students,、,workmates,这三个组,默认组是,john,。那么对于所有属于这三个组的文件和目录,,john,都有权访问。当,john,新建了一个文件,那么这个文件所属的组就是,john,。,9.10,进阶,2,:,/etc/
展开阅读全文