学习情境1.3 Linux系统用户与用户组的管理
1.3.1 学习要点
知识点:熟悉用户、用户组概念,掌握文件的权限划分概念
技能点:掌握对用户、用户组的创建、删除、禁用等操作,掌握对文件与目录的权限划分
1.3.2 任务描述
新建一用户组students。新建一用户iusr_1,所属组为students,家目录在/usr/local/iusr_1,shell为/bin/bash。设置用户iusr_1的密码为Linuxstation1。对用户lp禁用。删除用户news,删除用户组news。
1.3.3 相关知识
Linux系统是个多用户系统,能做到不同的用户能同时访问不同的文件,因此一定要有文件权限控制机制。Linux系统的权限控制机制和Windows的权限控制机制有着很大的差别。Linux的文件或目录被一个用户拥有时,这个用户称为文件的拥有者(或文件主),同时文件还被指定的用户组所拥有,这个用户组称为文件所属组。一个用户可以是不同组的成员,这可以由管理员控制。文件的权限由权限标志来决定,权限标志决定了文件的拥有者、文件的所属组、其他用户对文件访问的权限。
1.用户与组的概念
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。每个用户账号都拥有一个唯一的用户名和各自的口令。用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。
(1)用户的角色区分
用户在系统中是分角色的,在Linux系统中,由于角色不同,权限和所完成的任务也不同;值得注意的是用户的角色是通过UID和GID来识别的,特别是UID;在系统管理中,系统管理员一定要坚守UID唯一的特性。
root用户:系统唯一,是真实的,可以登录系统,可以操作系统任何文件和命令,拥有最高权限。
虚拟用户:这类用户也被称之为伪用户或假用户,与真实用户区分开来,这类用户不具有登录系统的能力,但却是系统运行不可缺少的用户,比如bin、daemon、adm、ftp、mail等;这类用户都系统自身拥有的,而非后来添加的,当然我们也可以添加虚拟用户。
普通真实用户:这类用户能登录系统,但只能操作自己家目录的内容;权限有限;这类用户都是系统管理员自行添加的。
(2)用户组(group)的概念
用户组(group)就是具有相同特征的用户(user)的集合体,比如有时我们要让多个用户具有相同的权限,比如查看、修改某一文件或执行某个命令,这时我们需要用户组,我们把用户都定义到同一用户组,我们通过修改文件或目录的权限,让用户组具有一定的操作权限,这样用户组下的用户对该文件或目录都具有相同的权限,这是我们通过定义组和修改文件的权限来实现的。
举例:我们为了让一些用户有权限查看某一文档,比如是一个时间表,而编写时间表的人要具有读写执行的权限,我们想让一些用户知道这个时间表的内容,而不让他们修改,所以我们可以把这些用户都划到一个组,然后来修改这个文件的权限,让用户组可读,这样用户组下面的每个用户都是可读的。
2.用户和权限
(1)文件主
Linux为每个文件都分配了一个所有者,称为文件主,并赋予文件主唯一的注册名。对文件的控制取决于文件主或超级用户(root)。
文件的所属关系是可以改变的,你可以将文件或目录的所有权转让给其他用户,但只有文件主或root才有权改变文件的所属关系。可以用chown命令更改某个文件或目录的所有权。例如,超级用户把自己的一个文件复制给用户user1,为了让用户user1能够访问这个文件,超级用户(root)应该把这个文件的属主设为user1,否则,用户user1无法访问这个文件。如果改变了文件或目录的所有权,原文件主将不再拥有该文件或目录的控制权。
(2)所属用户组
Linux下,每个文件又属于一个用户组。当创建一个文件或目录时,系统会赋予它一个所属的用户与组,chgrp命令可以改变文件的组关系。
(3)访问权限
Linux系统中的每个文件和目录都有访问权限,(rwx)读、写、执行这三种权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。
3.权限控制命令
(1)chmod命令
功能:chmod命令用于改变或设置文件或目录的访问权限。
格式:chmod[选项]权限模式,文件或目录名
说明:只有文件主或超级用户root才有权用chmod改变文件或目录的访问权限。
选项参数:
-c:若文件或目录权限确实已经更改,才显示更改后结果。
-f:若文件或目录权限无法被更改,也不显示错误信息。
-v:显示权限变更的详细资料。
-R:对当前目录下的所有档案与子目录进行相同的权限变更(即以递归式的方式逐个变更)。
设定文件权限时,在模式中常用以下的字母代表用户或用户组:
chmod命令用于改变文件或目录的访问权限。
让我们先来看一看这个文件。在shell提示下,键入:
ls-l sneakers.txt
前面的命令显示了这个文件信息:
-rw-rw-r—1 test test 39 3月11 12:04 sneakers.txt
这里提供了许多细节。你可以看到谁能读取(r)和写入(w)文件,以及谁创建了这个文件(test),所有者所在的组群(test)。在组群右侧的信息包括文件大小、创建的日期和时间,以及文件名。
第一列显示了当前的权限;它有十位。第一位代表文件类型。其余九位实际上是用于三组不同用户的三组权限。
那三组是:文件的所有者、文件所属的组群和“其他人”,这是前面没有包括的用户和组群。
-(rw-)(rw-)(r—)1 test test
类型所有者组群其他人
第一个项目指定文件类型,它可以显示以下几种:
d—目录
-(短线)—常规文件(而不是目录或链接)
l—到系统上其他位置的另一个程序或文件的符号链接。
在第一个项目之后的三组中,你可以看到下面几种类型:
r—文件可以被读取
w—文件可以被写入
x—文件可以被执行(如果它是程序的话)。
当你在所有者、组群或其他人中看到一个短线(“-”),这意味着相应的权限还没有被授予。可以看出以下这句
-rw-rw-r—1 test test 39 3月11 12:04 sneakers.txt文件的所有者(这个情况下是test)有读取和写入该文件的权限。组群test也有读取和写入sneakers.txt的权限,其他组群没任何权限。它不是一个程序,因此所有者和组群都没有执行它的权限。
接下来我们用chmod来改变文件的权限,键入下面的命令:
chmod o+w sneakers.txt
o+w命令告诉系统你想给其他人写入文件sneakers.txt的权限。要查看结果,再次列出文件的细节。现在,这个文件看起来与下面的输出相仿:
-rw-rw-rw-1 test test 39 3月11 12:04 sneakers.txt
现在,每个人都可以读取和写入这个文件。
要从sneakers.txt中删除读写权限,使用chmod命令来取消读取和写入这两个的权限。
chmod go-rw sneakers.txt
通过键入go-rw,你在告诉系统删除文件sneakers.txt中组群和其他人的读取和写入权限。结果与下面的输出相似:
-rw———1 test test 39 3月11 12:04 sneakers.txt
当你想用chmod命令来改变权限时,把它们当做速记符号来记忆,因为你实际要做的只是记住几个符号而已。
下面是一个速记符号含义的列表:
身份
u—拥有文件的用户(所有者)
g—所有者所在的组群
o—其他人(不是所有者或所有者的组群)
a—每个人或全部(u、g、和o)
权限
r—读取权
w—写入权
x—执行权
行动
+—添加权限
-—删除权限
=—使它成为唯一权限
另外,也可以通过使用数字来改变权限。
每种权限设置都可以用一个数值来代表:
r=4
w=2
x=1
-=0
当这些值被加在一起,它的总和便用来设立特定的权限。譬如,如果你想有读取和写入的权限,你会得到一个值为6的总和;4(读取)+2(写入)=6。
sneakers.txt文件的数字权限设置如下:
-(rw-)(rw-)(r—)
| | |
4+2+0 4+2+0 4+0+0
所有者的总和为6,组群的总和为6,其他人的总和为4。这个权限设置读作664。
如果你想改变sneakers.txt文件的权限,设置你的组群中的成员没有写入权,但是仍旧能够读取文件的话,从这组数字中减掉2就可以删除写入权限了。
然后,这组数值就变成644。
要实现这些新设置,键入:
chmod 644 sneakers.txt
现在,列举这个文件来校验改变。键入:
ls-l sneakers.txt
输出应为:
-rw-r—r—1 test test 39 3月11 12:04 sneakers.txt
现在,组群和其他人都没有了到文件sneakers.txt的写入权。
这里是一个某些常用设置、数值、以及它们的含义的列表:
-rw———(600)—只有所有者才有读取和写入的权限。
-rw-r—r—(644)—只有所有者才有读取和写入的权限;组群和其他人只有读取的权限。
-rwx———(700)—只有所有者才有读取、写入、和执行的权限。
-rwxr-xr-x(755)—所有者有读取、写入、和执行的权限;组群和其他人只有读取和执行的权限。
-rwx—x—x(711)—所有者有读取、写入、和执行权限;组群和其他人只有执行权限。
-rw-rw-rw-(666)—每个人都能够读取和写入文件。(请谨慎使用这些权限。)
-rwxrwxrwx(777)—每个人都能够读取、写入、和执行。(再重申一次,这种权限设置可能会很危险。)
下面列举了一些对目录的常见设置:
drwx———(700)—只有所有者能在目录中读取、写入。
drwxr-xr-x(755)—每个人都能够读取目录,但是其中的内容却只能被所有者改变。
例1.在不改变原有文件ex1的权限基础上,添加所有用户对其有执行权限。
#chmod a+x ex1
例2.将文件ex1的权限重新设置为文件主可以读和执行,组用户可以执行,其他用户无权访问。
#chmod u=rx,g=x,o=— ex1
或者
#chmod 610 ex1
例3.将目录wn1及其下面的所有子目录和文件的权限改为所有用户对其都有读,写权限。
$chmod–R a+rw-wn1
(2)chown命令
功能:改变某个文件或目录的拥有者和所属的组。
格式:chown[选项]用户或组[路径]文件名
说明:只有文件主和超级用户才可以使用该命令。同时改变文件主和文件所属的组时,用户名和用户组名由冒号分开。在文件名中可以包含通配符。
参数选项:
-R递归式地改变指定目录及其所有子目录、文件的文件主。
例1.将目录/usr/mengqc及其下面的所有文件、子目录的文件主改变成liu,文件所属组不变。
$chown-R liu/usr/mengqc
例2.把文件的拥有者改为longkey用户,同时文件的所属组改为root组。
#chown longkey:root chap1.txt
(3)chgrp命令
功能:改变文件或目录的所属组。
格式:chgrp[选项]组名文件名
说明:如果用户不是该文件的文件主或超级用户,则不能改变该文件或目录的所属组。chown可以同时改变文件拥有者和所属组,chgrp只具有改变所属组的功能。
参数选项:
-R递归式地改变指定目录及其下面的所有子目录和文件的用户组。
例1.将文件“chap1.txt”的所属组设为root组。
$chgrp root chap1.txt
例2.将/usr/mengqc及其子目录下的所有文件的用户组改为mengxin。
$chgrp-R mengxin/usr/mengqc
(4)umask命令
功能:用来设置新建文件权限的掩码。
umask是在Linux中常见的一个东西,它其实是一个掩码。当然,也有umask这样一个命令,它是对用户建立的文件的默认属性的定义。该定义为:
假设umask为022,则对于一个文件夹的话,它的默认属性为777-022=755,这也就是我们平时建立文件夹的权限。而对于一般的文件的话,则是用666-022=644。
格式:umask[模式]
说明:模式为新建文件权限的掩码值。
文件访问权限可以通过chmod命令来修改。当用户创建一个新文件后,如果不使用chmod修改权限,则这个文件的权限是什么呢?这个文件的权限由系统默认权限和默认权限掩码共同确定,它等于系统默认权限减去默认权限掩码。Linux系统中目录的默认权限是777,文件的默认权限是666。因此,有以下公式:
新目录的权限=777-默认权限掩码
新文件的权限=666-默认权限掩码
注意:基于安全原因,Linux系统不允许文件的默认权限有执行权。
不带任何参数的umask命令显示当前的默认权限掩码值。
例1.显示当前的默认权限掩码值。
#umask
022 //当前系统的默认权限掩码值
验证
$touch test //新建立test空文件
$ls–l test
-rw-r—r—1 root root 7 3月8 12:57 test
以上说明如果用户创建新的文件,文件的权限应为666-022=644(即rw-r—r—)。
4.Shell简介
shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。
Shell也有多种不同的版本。目前主要有下列版本的Shell:
Bourne Shell:是贝尔实验室开发的。
BASH:是GNU的Bourne Again Shell,是GNU操作系统上默认的shell。
Korn Shell:是对Bourne SHell的发展,在大部分内容上与Bourne Shell兼容。
C Shell:是SUN公司Shell的BSD版本。
一般shell都放在/bin目录下,下面是系统常见的几种shell
#ls/bin/∗sh
/bin/bash /bin/csh /bin/ksh /bin/sh /bin/tcsh /bin/zsh
5.用户的管理
Linux是一个多任务,多用户的操作系统,要能做到不同的用户能同时访问不同的文件,允许不同的用户从本地登录或远程登录,这时用户必须拥有一个合法的账号,Linux系统正是通过账号来实现对用户的访问进行控制的,因此,需要对用户与组进行有效的管理。
Linux系统采用纯文本文件来保存账号的各种信息,其中最重要的文件有/etc/passwd,/etc/shadow,/etc/group这几个。我们可以使用vi或其他编辑器来更改它们,也可以使用专门的命令来更改它们。账号的管理实际上就是对这几个文件的内容进行添加、修改和删除记录行的操作。不管以哪种形式管理账号,了解这几个文件的内容十分必要。
(1)/etc/passwd文件
/etc/passwd文件是账号管理中最重要的一个文件,它是一个纯文本文件。每一个注册用户在该文件都有一个对应的记录行,这一记录行记录了此用户的必要信息。
例1.显示/etc/passwd文件。
#cat/etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:
从passwd文件中可以看到,第一行是root用户,紧接的是系统用户,普通用户通常在文件的尾部。passwd文件中的每一行由7个字段的数据组成,字段之间用“:”分隔,其格式如下:
账号名称:密码:UID:GID:个人资料:主目录:Shell
说明如下:
账号名称:用户登录Linux系统时使用的名称。
密码:这里的密码是经过加密后的密码,而不是真正的密码,若为“x”,说明密码经过了shadow的保护。
UID:用户的标识,是一个数值,Linux系统内部使用它来区分不同的用户。
GID:用户所在主组的标识,是一个数值,Linux系统内部使用它来区分不同的组,相同的组具有相同的GID。
个人资料:可以记录用户的个人信息,如姓名、电话等信息(上例中test用户本项为空)。
主目录:通常是/home/username,这里username是用户名,用户执行“cd~”命令时当前目录会切换到个人主目录。
Shell:定义用户登录后使用的Shell,默认是bash。
(2)/etc/shadow
任何用户对passwd文件都有读的权限,虽然密码已经经过加密,但还是不能避免有人会获取加密后的密码。为了安全,Linux系统对密码提供了更多一层的保护,即把加密后的密码重定向到另一个文件/etc/shadow。密码如果经过shadow保护,在/etc/passwd文件中,每一记录行的密码字段会变成“x”,并且在/etc目录下存在文件shadow。只有超级用户能够读取shadow的内容。
例2.查看shadow文件的内容。
#cat/etc/shadow
root::12123:0:99999:7:::
bin:∗:12123:0:99999:7:::
……
test::12123:0:99999:7:::
和passwd文件类似,shadow文件中的每行由9个字段组成,格式如下:
用户名:密码:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志字段
shadow文件中,密码字段为“∗”表示用户被禁止登录,为“!!”表示密码未设置,为“!”表示用户被锁定。
6.命令行方式管理用户
在对用户与组进行管理时,可以采用两种方式,即命令行(Shell)方式和图形界面(GUI)方式,命令行方式下的用户与组的管理,包括用户的添加、删除及修改等。
(1)添加用户账号
超级用户root可以通过在系统提示符下运行useradd或adduser命令来创建用户账号。
命令格式:useradd[选项]用户名
说明:只有超级用户root才有权使用此命令,使用useradd命令创建新的用户账号后,应利用passwd命令为新用户设置口令。
useradd命令有很多的可选选项,具体说明如下:
-u:设置用户ID(UID),用户ID和账号一样必须是唯一的。
-g:指定用户所属的用户组(组必须存在),参数可以是组名称或组ID(GID)。
-d:建立用户目录,参数即所建的用户目录(通常与用户账号相同)。
-s:设置用户环境,即设置用户的Shell环境。
-e:设置用户账号的使用期限。
例.分析useradd命令中选项的意义。
#useradd –g 100–d/home/user1–s/bin/bash–e 08/02/06 user1
其参数的意义如下:
-g参数:指定用户所属的用户组,但该用户组必须已经存在。参数采用组名或GID皆可,如-g 100与-g users的意思相同,都是把用户加入到users用户组中,其中users用户组的GID 为100。
-d参数:建立用户目录,如–d/home/user1就是替用户建立位于/home目录下的用户目录,目录名称为user1。
-s参数:指定用户环境,如–s/bin/bash指定bash为该用户的Shell。当然也可指定其他Shell供用户使用。
-e参数:设置账号的期限,格式为“月/日/年”,如–e 08/02/06为2006年8月2日。
(2)修改用户属性
①passwd命令
功能:设置修改用户的密码属性。
格式:passwd用户名
说明:修改用户的密码需要两次输入密码确认。密码是保证系统安全的一个重要措施,在设置密码时,不要使用过于简单的密码。密码的长度应在8位或8位以上,由数字和英文组合而成。用户的密码也可以自己更改,这时使用不带用户名的passwd命令。
#passwd
②chsh命令
功能:修改用户的Shell设置。
格式:chsh用户名
说明:如果用户的默认Shell不合适,可以把它改成任何已经加入到/etc/Shells文件中的Shell。使用chsh命令改变用户的Shell,指定的Shell一定要在/etc/Shells中存在,否则会导致用户无法登录。也可以使用下面要介绍的命令usermod来改变用户的Shell设置。
③usermod命令
功能:改变用户的属性。
格式:usermod[选项]用户名
参数选项:
-d dir:改变用户的主目录,如果同时使用“-m”选项,原来主目录的内容会移动到新的主目录。
-g GID或组名:修改用户的所属基本组。
-l name:更改账户的名称,必须在该用户未登录的情况下才能使用。
-m:把主目录的所有内容移动到新的主目录,不能单独使用。
-p密码:修改用户的密码。
-s Shell:修改用户的登录Shell。
-u UID:改变用户的UID为新的值,改变用户的UID时主目录下所有该用户所拥有的文件或子目录将自动更改UID,但对于主目录之外的文件和目录只能用chown命令手工进行设置。
例.修改user2的UID为新的值600,所属组为wyq。
#usermod–u 600–g wyq user2
(3)删除用户账号
若不再需要某个用户时,可以将用户账号删除。使用userdel命令删除账号。
命令格式为:userdel[选项]用户名
参数选项:
-r表示在删除账号的同时,将用户主目录及其内部文件同时删除。若不加选项-r,则表示只删除登录账号而保留相关目录。
(4)锁定用户账号
在系统中,有时需要临时禁止某个用户账号登录而不删除。可以采用以下方式
使用passwd命令锁定用户账号。
命令格式为:passwd-l用户名
①例.锁定用户账号user1登录。
#passwd-l user1
Locking password for user iusr_1。
passwd:Success
查看Linux系统中管理用户账号的系统文件/etc/shadow,可看到其密码域的第一个字符前加了符号“!!”
②恢复时,使用带“-u”参数的passwd命令。
例.恢复user1用户账号登录。
#passwd-u user1
Unlocking password for user user1
passwd:Success
7.组的管理
(1)Linux的组
Linux的组有私有组,系统组,标准组之分。建立账户时,若没有指定账户所属的组,系统会建立一个和用户名相同的组,这个组就是私有组,这个组只容纳了一个用户。而标准组可以容纳多个用户,组中的用户都具有组所拥有的权利。系统组是Linux系统自动建立的。一个用户可以属于多个组,用户所属的组又有基本组和附加组之分。在用户所属组中的第一个组称为基本组,基本组在/etc/passwd文件中指定;其他组为附加组,附加组在/etc/group文件中指定。属于多个组的用户所拥有的权限是它所在的组的权限之和。
Linux系统关于组的信息存放在文件/etc/group中。
例.显示文件/etc/group内容。
#cat/etc/group
root:x:0:root,test
bin:x:1:root,bin,daemon
……
test:x:500:
group1:x:1000:
user1:x:501:
group文件中的每一行记录了一个组的信息,每行包括4个字段,字段之间用“:”分隔。
格式为 组名:组的密码:GID:组成员
字段说明:
组名:组的名称,如root,bin等。
组的密码:设置加入组的密码,一般情况下不使用组密码,该字段通常没用。
GID:组的标识符,为数值,类似UID。
组成员:组所包含的用户,用户之间用“,”分隔。
(2)用户组的建立,修改,删除
①组的建立
可以手工编辑/etc/group文件来完成组的添加,也可以用命令groupadd来添加组。
命令格式:groupadd组名
例.添加组group1。
#groupadd group1
②修改组属性
使用groupmod命令来修改组名或GID。
在groupmod-g命令后加上组的新ID号和组名来修改GID。
在groupmod-n命令后加上新组名和原组名来修改组名。
③改变组中的成员用户或改变组的密码
gpasswd命令。
格式:gpasswd[参数][用户名]组名
不带参数时,即修改组密码。
参数选项:
-a:将用户加入到组中。
-d:将用户从组中删除。
例.将用户user1加入到组group1中。
#gpasswd-a user1 group1
例.将用户user1从组group1中删除。
#gpasswd-d user1 group1
④删除组
使用groupdel命令来删除组。
格式:groupdel组名
说明:组被删除后,应使用chown命令将被删除用户组的目录与文件变为其他的用户组。
否则文件与目录会无所属组
1.3.4 任务实施
新建一用户组students。新建一用户iusr_1,所属组为students,家目录在/usr/local/iusr_1,shell为/bin/bash。设置用户iusr_1的密码为Linuxstation1。对用户lp(打印管理)禁用。删除用户news(新闻管理),删除用户组news。
任务步骤如下:
1.新建一用户组students
#groupadd students
2.新建一用户iusr_1,所属组为students,家目录在/usr/local/iusr_1,shell为/bin/bash
#useradd–d/usr/local/iusr_1–g students iusr_1
3.设置用户iusr_1的密码为Linuxstation1
#passwd iusr_1
Changing password for user iusr_1。
New UNIX password://输入密码Linuxstation1
Retype new UNIX password://再输一次
passwd:all authentication tokens updated successfully。
4.临时对用户lp禁用
#passwd–l lp
Locking password for user lp。
passwd:Success
5.恢复lp用户账号
#passwd–ulp
Unlocking password for userlp。
passwd:Success。
6.删除用户news
#userdel–r news
7.删除用户组news
#groupdel news
1.3.5 考核要点
表1.3.1 用户与用户组的管理考核要点

1.3.6 能力拓展
(1)新建一个组group1,新建一个系统组group2。
(2)更改组group2的GID为103,更改组名为grouptest。
(3)删除组grouptest。
(4)新建用户user1,指定UID为777,目录为/home/user1,初始组为group1,有效组为root,指定shell为/bin/bash。
(5)新建一个系统用户user2。
(6)查看用户user1的组群,切换到user1,在主目录下新建文件test1,再切换有效组为root,再新建文件test2。
(7)修改用户user1的个人说明为This is a test。
(8)修改用户密码过期时间为2010-07-27。
(9)更改用户user1的密码为111111,加锁用户user1并查看/etc/shadow,用户user1通过ssh登录127.0.0.1,解锁用户user1,再通过ssh登录。
(10)更改用户主目录/home/user1为/home/user11。
(11)查看所有支持的shell,将root更改为csh,并查看结果,并将root改为bash。

