Linux 系统是一个多使用者多工的分时操作系统,任何一个要使用系统资源的使用者,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
使用者的账号一方面可以帮助系统管理员对使用系统的使用者进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助使用者组织档案,并为使用者提供安全性保护。
每个使用者账号都拥有一个惟一的使用者名称和各自的口令。
使用者在登入时键入正确的使用者名称和口令后,就能够进入系统和自己的主目录。
实现使用者账号的管理,要完成的工作主要有如下几个方面:
使用者账号的新增、删除与修改。
使用者口令的管理。
使用者组的管理。
一、 Linux 系统使用者账号的管理
使用者账号的管理工作主要涉及到使用者账号的新增、修改和删除。
新增使用者账号就是在系统中建立一个新账号,然后为新账号分配使用者号、使用者组、主目录和登入 Shell 等资源。刚新增的账号是被锁定的,无法使用。
1 、新增新的使用者账号使用 useradd 命令,其语法如下:
useradd 选项 使用者名称
引数说明:
选项:
-c comment 指定一段注释性描述。
-d 目录 指定使用者主目录,如果此目录不存在,则同时使用-m 选项,可以建立主目录。
-g 使用者组 指定使用者所属的使用者组。
-G 使用者组,使用者组 指定使用者所属的附加组。
-s Shell 档案 指定使用者的登入 Shell 。
-u 使用者号 指定使用者的使用者号,如果同时有-o 选项,则可以重复使用其他使用者的标识号。
使用者名称:
指定新账号的登入名。
例项 1
# useradd –d /usr/sam -m sam
此命令建立了一个使用者 sam,其中-d 和-m 选项用来为登入名 sam 产生一个主目录/usr/sam(/usr 为预设的使用者主目录所在的父目录)。
例项 2
# useradd -s /bin/sh -g group –G adm,root gem
此命令新建了一个使用者 gem,该使用者的登入 Shell 是 /bin/sh,它属于 group 使用者组,同时又属于 adm 和 root 使用者组,其中 group 使用者组是其主组。
这里可能新建组:#groupadd group 及 groupadd adm
增加使用者账号就是在/etc/passwd 档案中为新使用者增加一条记录,同时更新其他系统档案如/etc/shadow, /etc/group 等。
Linux 提供了整合的系统管理工具 userconf,它可以用来对使用者账号进行统一管理。
3 、删除帐号
如果一个使用者的账号不再使用,可以从系统中删除。删除使用者账号就是要将/etc/passwd 等系统档案中的该使用者记录删除,必要时还删除使用者的主目录。
删除一个已有的使用者账号使用 userdel 命令,其格式如下:
userdel 选项 使用者名称
常用的选项是-r,它的作用是把使用者的主目录一起删除。
例如:
# userdel sam
此命令删除使用者 sam 在系统档案中(主要是/etc/passwd, /etc/shadow, /etc/group 等)的记录,同时删除使用者的主目录。
4 、修改帐号
修改使用者账号就是根据实际情况更改使用者的有关属性,如使用者号、主目录、使用者组、登入 Shell 等。
修改已有使用者的资讯使用 usermod 命令,其格式如下:
usermod 选项 使用者名称
常用的选项包括-c, -d, -m, -g, -G, -s, -u 以及-o 等,这些选项的意义与 useradd 命令中的选项一样,可以为使用者指定新的资源值。
另外,有些系统可以使用选项:-l 新使用者名称
这个选项指定一个新的账号,即将原来的使用者名称改为新的使用者名称。
例如:
# usermod -s /bin/ksh -d /home/z –g developer sam
此命令将使用者 sam 的登入 Shell 修改为 ksh,主目录改为/home/z,使用者组改为 developer 。
5 、使用者口令的管理
使用者管理的一项重要内容是使用者口令的管理。使用者账号刚建立时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。
指定和修改使用者口令的 Shell 命令是 passwd 。超级使用者可以为自己和其他使用者指定口令,普通使用者只能用它修改自己的口令。命令的格式为:
passwd 选项 使用者名称
可使用的选项:
-l 锁定口令,即禁用账号。
-u 口令解锁。
-d 使账号无口令。
-f 强迫使用者下次登入时修改口令。
如果预设使用者名称,则修改当前使用者的口令。
例如,假设当前使用者是 sam,则下面的命令修改该使用者自己的口令:
$ passwd
Old password:******
New password:*******
Re-enter new password:*******
如果是超级使用者,可以用下列形式指定任何使用者的口令:
# passwd sam
New password:*******
Re-enter new password:*******
普通使用者修改自己的口令时,passwd 命令会先询问原口令,验证后再要求使用者输入两遍新口令,如果两次输入的口令一致,则将这个口令指定给使用者;而超级使用者为使用者指定口令时,就不需要知道原口令。
为了系统安全起见,使用者应该选择比较复杂的口令,例如最好使用 8 位长的口令,口令中包含有大写、小写字母和数字,并且应该与姓名、生日等不相同。
为使用者指定空口令时,执行下列形式的命令:
# passwd -d sam
此命令将使用者 sam 的口令删除,这样使用者 sam 下一次登入时,系统就不再询问口令。
passwd 命令还可以用-l(lock) 选项锁定某一使用者,使其不能登入,例如:
# passwd -l sam
二、 Linux 系统使用者组的管理
每个使用者都有一个使用者组,系统可以对一个使用者组中的所有使用者进行集中管理。不同 Linux 系统对使用者组的规定有所不同,如 Linux 下的使用者属于与它同名的使用者组,这个使用者组在建立使用者时同时建立。
使用者组的管理涉及使用者组的新增、删除和修改。组的增加、删除和修改实际上就是对/etc/group 档案的更新。
1 、增加一个新的使用者组使用 groupadd 命令。其格式如下:
groupadd 选项 使用者组
可以使用的选项有:
-g GID 指定新使用者组的组标识号(GID)。
-o 一般与-g 选项同时使用,表示新使用者组的 GID 可以与系统已有使用者组的 GID 相同。
例项 1:
# groupadd group1
此命令向系统中增加了一个新组 group1,新组的组标识号是在当前已有的最大组标识号的基础上加 1 。
例项 2:
# groupadd -g 101 group2
此命令向系统中增加了一个新组 group2,同时指定新组的组标识号是 101 。
2 、如果要删除一个已有的使用者组,使用 groupdel 命令,其格式如下:
groupdel 使用者组
例如:
# groupdel group1
此命令从系统中删除组 group1 。
3 、修改使用者组的属性使用 groupmod 命令。其语法如下:
groupmod 选项 使用者组
常用的选项有:
-g GID 为使用者组指定新的组标识号。
-o 与-g 选项同时使用,使用者组的新 GID 可以与系统已有使用者组的 GID 相同。
-n 新使用者组 将使用者组的名字改为新名字
例项 1:
# groupmod -g 102 group2
此命令将组 group2 的组标识号修改为 102 。
例项 2:
# groupmod –g 10000 -n group3 group2
此命令将组 group2 的标识号改为 10000,组名修改为 group3 。
4 、如果一个使用者同时属于多个使用者组,那么使用者可以在使用者组之间切换,以便具有其他使用者组的许可权。
使用者可以在登入后,使用命令 newgrp 切换到其他使用者组,这个命令的引数就是目的使用者组。例如:
$ newgrp root
这条命令将当前使用者切换到 root 使用者组,前提条件是 root 使用者组确实是该使用者的主组或附加组。类似于使用者账号的管理,使用者组的管理也可以通过整合的系统管理工具来完成。
三、与使用者账号有关的系统档案
完成使用者管理的工作有许多种方法,但是每一种方法实际上都是对有关的系统档案进行修改。
与使用者和使用者组相关的资讯都存放在一些系统档案中,这些档案包括/etc/passwd, /etc/shadow, /etc/group 等。
下面分别介绍这些档案的内容。
1 、/etc/passwd 档案是使用者管理工作涉及的最重要的一个档案。
Linux 系统中的每个使用者都在/etc/passwd 档案中有一个对应的记录行,它记录了这个使用者的一些基本属性。
这个档案对所有使用者都是可读的。它的内容类似下面的例子:
# cat /etc/passwd
root:x:0:0:Superuser:/:
daemon:x:1:1:System daemons:/etc:
bin:x:2:2:Owner of system commands:/bin:
sys:x:3:3:Owner of system files:/usr/sys:
adm:x:4:4:System accounting:/usr/adm:
uucp:x:5:5:UUCP administrator:/usr/lib/uucp:
auth:x:7:21:Authentication administrator:/tcb/files/auth:
cron:x:9:16:Cron daemon:/usr/spool/cron:
listen:x:37:4:Network daemon:/usr/net/nls:
lp:x:71:18:Printer administrator:/usr/spool/lp:
sam:x:200:50:Sam san:/usr/sam:/bin/sh
从上面的例子我们可以看到,/etc/passwd 中一行记录对应著一个使用者,每行记录又被冒号 (:) 分隔为 7 个栏位,其格式和具体含义如下:
使用者名称: 口令: 使用者标识号: 组标识号: 注释性描述: 主目录: 登入 Shell
1)” 使用者名称” 是代表使用者账号的字串。
通常长度不超过 8 个字元,并且由大小写字母和/或数字组成。登入名中不能有冒号 (:),因为冒号在这里是分隔符。
为了相容起见,登入名中最好不要包含点字元 (.),并且不使用连字元 (-) 和加号 (+) 打头。
2)“口令” 一些系统中,存放著加密后的使用者口令字。
虽然这个栏位存放的只是使用者口令的加密串,不是明文,但是由于/etc/passwd 档案对所有使用者都可读,所以这仍是一个安全隐患。因此,现在许多 Linux 系统(如 SVR4)都使用了 shadow 技术,把真正的加密后的使用者口令字存放到/etc/shadow 档案中,而在/etc/passwd 档案的口令栏位中只存放一个特殊的字元,例如 “x” 或者 “*” 。
3)“使用者标识号” 是一个整数,系统内部用它来标识使用者。
一般情况下它与使用者名称是一一对应的。如果几个使用者名称对应的使用者标识号是一样的,系统内部将把它们视为同一个使用者,但是它们可以有不同的口令、不同的主目录以及不同的登入 Shell 等。
通常使用者标识号的取值范围是 0~65 535 。 0 是超级使用者 root 的标识号,1~99 由系统保留,作为管理账号,普通使用者的标识号从 100 开始。在 Linux 系统中,这个界限是 500 。
4)“组标识号” 栏位记录的是使用者所属的使用者组。
它对应著/etc/group 档案中的一条记录。
5)“注释性描述” 栏位记录著使用者的一些个人情况。
例如使用者的真实姓名、电话、地址等,这个栏位并没有什么实际的用途。在不同的 Linux 系统中,这个栏位的格式并没有统一。在许多 Linux 系统中,这个栏位存放的是一段任意的注释性描述文字,用做 finger 命令的输出。
6)“主目录”,也就是使用者的起始工作目录。
它是使用者在登入到系统之后所处的目录。在大多数系统中,各使用者的主目录都被组织在同一个特定的目录下,而使用者主目录的名称就是该使用者的登入名。各使用者对自己的主目录有读、写、执行(搜寻)许可权,其他使用者对此目录的访问许可权则根据具体情况设定。
7) 使用者登入后,要启动一个程序,负责将使用者的操作传给核心,这个程序是使用者登入到系统后执行的命令直译器或某个特定的程式,即 Shell 。
Shell 是使用者与 Linux 系统之间的介面。 Linux 的 Shell 有许多种,每种都有不同的特点。常用的有 sh(Bourne Shell), csh(C Shell), ksh(Korn Shell), tcsh(TENEX/TOPS-20 type C Shell), bash(Bourne Again Shell) 等。
系统管理员可以根据系统情况和使用者习惯为使用者指定某个 Shell 。如果不指定 Shell,那么系统使用 sh 为预设的登入 Shell,即这个栏位的值为/bin/sh 。
使用者的登入 Shell 也可以指定为某个特定的程式(此程式不是一个命令直译器)。
利用这一特点,我们可以限制使用者只能执行指定的应用程式,在该应用程式执行结束后,使用者就自动退出了系统。有些 Linux 系统要求只有那些在系统中登记了的程式才能出现在这个栏位中。
8) 系统中有一类使用者称为伪使用者(psuedo users)。
这些使用者在/etc/passwd 档案中也占有一条记录,但是不能登入,因为它们的登入 Shell 为空。它们的存在主要是方便系统管理,满足相应的系统程序对档案属主的要求。
常见的伪使用者如下所示:
伪 用 户 含 义
bin 拥有可执行的使用者命令档案
sys 拥有系统档案
adm 拥有帐户档案
uucp UUCP 使用
lp lp 或 lpd 子系统使用
nobody NFS 使用
拥有帐户档案
1 、除了上面列出的伪使用者外,还有许多标准的伪使用者,例如:audit, cron, mail, usenet 等,它们也都各自为相关的程序和档案所需要。
由于/etc/passwd 档案是所有使用者都可读的,如果使用者的密码太简单或规律比较明显的话,一台普通的计算机就能够很容易地将它破解,因此对安全性要求较高的 Linux 系统都把加密后的口令字分离出来,单独存放在一个档案中,这个档案是/etc/shadow 档案。 有超级使用者才拥有该档案读许可权,这就保证了使用者密码的安全性。
2 、/etc/shadow 中的记录行与/etc/passwd 中的一一对应,它由 pwconv 命令根据/etc/passwd 中的资料自动产生
它的档案格式与/etc/passwd 类似,由若干个栏位组成,栏位之间用”:” 隔开。这些栏位是:
登入名: 加密口令: 最后一次修改时间: 最小时间间隔: 最大时间间隔: 警告时间: 不活动时间: 失效时间: 标志
“登入名” 是与/etc/passwd 档案中的登入名相一致的使用者账号
“口令” 栏位存放的是加密后的使用者口令字,长度为 13 个字元。如果为空,则对应使用者没有口令,登入时不需要口令;如果含有不属于集合 { ./0-9A-Za-z } 中的字元,则对应的使用者不能登入。
“最后一次修改时间” 表示的是从某个时刻起,到使用者最后一次修改口令时的天数。时间起点对不同的系统可能不一样。例如在 SCO Linux 中,这个时间起点是 1970 年 1 月 1 日。
“最小时间间隔” 指的是两次修改口令之间所需的最小天数。
“最大时间间隔” 指的是口令保持有效的最大天数。
“警告时间” 栏位表示的是从系统开始警告使用者到使用者密码正式失效之间的天数。
“不活动时间” 表示的是使用者没有登入活动但账号仍能保持有效的最大天数。
“失效时间” 栏位给出的是一个绝对的天数,如果使用了这个栏位,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登入了。
下面是/etc/shadow 的一个例子:
# cat /etc/shadow
root:Dnakfw28zf38w:8764:0:168:7:::
daemon:*::0:0::::
bin:*::0:0::::
sys:*::0:0::::
adm:*::0:0::::
uucp:*::0:0::::
nuucp:*::0:0::::
auth:*::0:0::::
cron:*::0:0::::
listen:*::0:0::::
lp:*::0:0::::
sam:EkdiSECLWPdSa:9740:0:0::::
3 、使用者组的所有资讯都存放在/etc/group 档案中。
将使用者分组是 Linux 系统中对使用者进行管理及控制访问许可权的一种手段。
每个使用者都属于某个使用者组;一个组中可以有多个使用者,一个使用者也可以属于不同的组。
当一个使用者同时是多个组中的成员时,在/etc/passwd 档案中记录的是使用者所属的主组,也就是登入时所属的预设组,而其他组称为附加组。
使用者要访问属于附加组的档案时,必须首先使用 newgrp 命令使自己成为所要访问的组中的成员。
使用者组的所有资讯都存放在/etc/group 档案中。此档案的格式也类似于/etc/passwd 档案,由冒号 (:) 隔开若干个栏位,这些栏位有:
组名: 口令: 组标识号: 组内使用者列表
“组名” 是使用者组的名称,由字母或数字构成。与/etc/passwd 中的登入名一样,组名不应重复。
“口令” 栏位存放的是使用者组加密后的口令字。一般 Linux 系统的使用者组都没有口令,即这个栏位一般为空,或者是*。
“组标识号” 与使用者标识号类似,也是一个整数,被系统内部用来标识组。
“组内使用者列表” 是属于这个组的所有使用者的列表/b],不同使用者之间用逗号 (,) 分隔。这个使用者组可能是使用者的主组,也可能是附加组。
/etc/group 档案的一个例子如下:
root::0:root
bin::2:root,bin
sys::3:root,uucp
adm::4:root,adm
daemon::5:root,daemon
lp::7:root,lp
users::20:root,sam
四、新增量使用者批
新增和删除使用者对每位 Linux 系统管理员都是轻而易举的事,比较棘手的是如果要新增几十个、上百个甚至上千个使用者时,我们不太可能还使用 useradd 一个一个地新增,必然要找一种简便的建立大量使用者的方法。 Linux 系统提供了建立大量使用者的工具,可以让您立即建立大量使用者,方法如下:
(1)先编辑一个文字使用者档案。
每一列按照/etc/passwd 密码档案的格式书写,要注意每个使用者的使用者名称、 UID 、宿主目录都不可以相同,其中密码栏可以留做空白或输入 x 号。一个范例档案 user.txt 内容如下:
user001::600:100:user:/home/user001:/bin/bash
user002::601:100:user:/home/user002:/bin/bash
user003::602:100:user:/home/user003:/bin/bash
user004::603:100:user:/home/user004:/bin/bash
user005::604:100:user:/home/user005:/bin/bash
user006::605:100:user:/home/user006:/bin/bash
(2)以 root 身份执行命令 /usr/sbin/newusers,从刚建立的使用者档案 user.txt 中汇入资料,建立使用者:
# newusers < user.txt
然后可以执行命令 vipw 或 vi /etc/passwd 检查 /etc/passwd 档案是否已经出现这些使用者的资料,并且使用者的宿主目录是否已经建立。
(3)执行命令/usr/sbin/pwunconv 。
将 /etc/shadow 产生的 shadow 密码解码,然后回写到 /etc/passwd 中,并将/etc/shadow 的 shadow 密码栏删掉。这是为了方便下一步的密码转换工作,即先取消 shadow password 功能。
# pwunconv
(4)编辑每个使用者的密码对照档案。
范例档案 passwd.txt 内容如下:
user001: 密码
user002: 密码
user003: 密码
user004: 密码
user005: 密码
user006: 密码
(5)以 root 身份执行命令 /usr/sbin/chpasswd 。
建立使用者密码,chpasswd 会将经过 /usr/bin/passwd 命令编码过的密码写入 /etc/passwd 的密码栏。
# chpasswd < passwd.txt
(6)确定密码经编码写入/etc/passwd 的密码栏后。
执行命令 /usr/sbin/pwconv 将密码编码为 shadow password,并将结果写入 /etc/shadow 。
# pwconv
这样就完成了大量使用者的建立了,之后您可以到/home 下检查这些使用者宿主目录的许可权设定是否都正确,并登入验证使用者密码是否正确。
原文连结:http://www.runoob.com/linux/linux-user-manage.html