- 用户账号的添加、删除与修改
- 用户口令的管理
- 用户组的管理
Linux系统用户账号的管理
Linux
下创建用户时会用到useradd
和adduser
这两个命令,他们的区别如下:
- 使用
useradd
时,如果后面不添加任何参数选项,例如:#sudo useradd test
创建出来的用户将是默认“三无”用户:一无Home Directory
,二无密码,三无系统Shell
。 - 使用
adduser
时,创建用户的过程更像是一种人机对话,系统会提示你输入各种信息,然后会根据这些信息帮你创建新用户。
adduser
会提示设置密码,而useradd
不会。
adduser
会创建用户目录,比如/home/freebird freebird
是用户,useradd
不会
adduser
会询问全名,房间号码,电话号码等用户信息,useradd
不会
在Linux中,adduser
更适合初级使用者,因为不用去记那些繁琐的参数选项,只要跟着系统的提示一步一步进行下去就行,缺点就是整个创建过程比较复杂而漫长;而useradd
比较适合有些高阶经验的使用者,往往一行命令加参数就能解决很多问题,所以创建起来十分方便。
useradd
useradd 选项 用户名
选项:
-c
comment
指定一段注释性描述。-d
目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。-g
用户组 指定用户所属的用户组。-G
用户组,用户组 指定用户所属的附加组。-s
Shell
文件 指定用户的登录Shell
。-u
用户号 指定用户的用户号,如果同时有-o
选项,则可以重复使用其他用户的标识号。
1 | useradd –d /home/sam -m sam |
此命令创建了一个用户sam
,其中-d
和-m
选项用来为登录名sam
产生一个主目录 /home/sam
(/home
为默认的用户主目录所在的父目录)。
1 | useradd -s /bin/sh -g group –G adm,root gem |
此命令新建了一个用户gem
,该用户的登录Shell
是 /bin/sh
,它属于group
用户组,同时又属于adm
和root
用户组,其中group
用户组是其主组。
增加用户账号就是在/etc/passwd
文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow
,/etc/group
等。
删除帐号
如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要将/etc/passwd
等系统文件中的该用户记录删除,必要时还删除用户的主目录。
常用的选项是 -r
,它的作用是把用户的主目录一起删除。
userdel -r sam
此命令删除用户sam
在系统文件中(主要是/etc/passwd
, /etc/shadow
, /etc/group
等)的记录,同时删除用户的主目录。
修改帐号
修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
修改已有用户的信息使用usermod命令,其格式如下:
usermod 选项 用户名
常用的选项包括-c
, -d
, -m
, -g
, -G
, -s
, -u
以及-o
等,这些选项的意义与useradd
命令中的选项一样,可以为用户指定新的资源值。
另外,有些系统可以使用选项:-l 新用户名
这个选项指定一个新的账号,即将原来的用户名改为新的用户名。
1 | usermod -s /bin/ksh -d /home/z –g developer sam |
此命令将用户sam
的登录Shell
修改为ksh
,主目录改为/home/z
,用户组改为developer
。
用户口令的管理
用户管理的一项重要内容是用户口令的管理。用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。
指定和修改用户口令的Shell
命令是passwd
。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。命令的格式为:
passwd 选项 用户名
可使用的选项:
-l
锁定口令,即禁用账号。-u
口令解锁。-d
使账号无口令。-f
强迫用户下次登录时修改口令。
如果默认用户名,则修改当前用户的口令。
例如,假设当前用户是sam,则下面的命令修改该用户自己的口令:
1 | passwd |
如果是超级用户,可以用下列形式指定任何用户的口令:
1 | passwd sam |
普通用户修改自己的口令时,passwd命令会先询问原口令,验证后再要求用户输入两遍新口令,如果两次输入的口令一致,则将这个口令指定给用户;而超级用户为用户指定口令时,就不需要知道原口令。
为用户指定空口令时,执行下列形式的命令:
1 | passwd -d sam |
此命令将用户 sam
的口令删除,这样用户 sam
下一次登录时,系统就不再允许该用户登录了。
passwd
命令还可以用 -l(lock)
选项锁定某一用户,使其不能登录,例如:
1 | passwd -l sam |
Linux系统用户组的管理
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux
系统对用户组的规定有所不同,如Linux
下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group
文件的更新。
增加用户组
groupadd 选项 用户组
可以使用的选项有:
-g
GID
指定新用户组的组标识号(GID
)。-o
一般与-g
选项同时使用,表示新用户组的GID
可以与系统已有用户组的GID
相同。
1 | groupadd group1 |
此命令向系统中增加了一个新组group1
,新组的组标识号是在当前已有的最大组标识号的基础上加1
。
1 | groupadd -g 101 group2 |
此命令向系统中增加了一个新组group2
,同时指定新组的组标识号是101
。
删除用户组
groupdel 用户组
修改用户组
groupmod 选项 用户组
常用的选项有:
-g
GID
为用户组指定新的组标识号。-o
与-g
选项同时使用,用户组的新GID
可以与系统已有用户组的GID
相同。-n
新用户组 将用户组的名字改为新名字
1 | groupmod -g 102 group2 |
此命令将组group2
的组标识号修改为102
。
1 | groupmod –g 10000 -n group3 group2 |
此命令将组group2
的标识号改为10000
,组名修改为group3
。
切换用户组
如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。
用户可以在登录后,使用命令newgrp
切换到其他用户组,这个命令的参数就是目的用户组。例如:
1 | newgrp root |
这条命令将当前用户切换到root
用户组,前提条件是root用户组确实是该用户的主组或附加组。类似于用户账号的管理,用户组的管理也可以通过集成的系统管理工具来完成。
与用户账号有关的系统文件
完成用户管理的工作有许多种方法,但是每一种方法实际上都是对有关的系统文件进行修改。
与用户和用户组相关的信息都存放在一些系统文件中,这些文件包括
/etc/passwd
/etc/shadow
/etc/group
- …
/etc/passwd
Linux
系统中的每个用户都在/etc/passwd
文件中有一个对应的记录行,它记录了这个用户的一些基本属性。
这个文件对所有用户都是可读的。它的内容类似下面的例子:
1 | # cat /etc/passwd |
从上面的例子我们可以看到,/etc/passwd
中一行记录对应着一个用户,每行记录又被冒号(:
)分隔为7
个字段,其格式和具体含义如下:
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
- 用户名
代表用户账号的字符串。
- 口令
一些系统中,存放着加密后的用户口令字。
虽然这个字段存放的只是用户口令的加密串,不是明文,但是由于/etc/passwd
文件对所有用户都可读,所以这仍是一个安全隐患。因此,现在许多Linux
系统(如SVR4
)都使用了shadow
技术,把真正的加密后的用户口令字存放到/etc/shadow
文件中,而在/etc/passwd
文件的口令字段中只存放一个特殊的字符,例如“x
”或者“*
”。
- 用户标识号
是一个整数,系统内部用它来标识用户。
一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell
等。
通常用户标识号的取值范围是0~65535
。0
是超级用户root
的标识号,1~99
由系统保留,作为管理账号,普通用户的标识号从100
开始。在Linux系统中,这个界限是500
。
- 组标识号
字段记录的是用户所属的用户组。
它对应着/etc/group
文件中的一条记录。
- 注释性描述
字段记录着用户的一些个人情况。
- 主目录
也就是用户的起始工作目录。
- 用户登录后,要启动一个进程,负责将用户的操作传给内核
这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。
系统管理员可以根据系统情况和用户习惯为用户指定某个Shell
。如果不指定Shell
,那么系统使用sh
为默认的登录Shell
,即这个字段的值为/bin/sh
。
- 系统中有一类用户称为伪用户(
pseudo users
)
这些用户在/etc/passwd
文件中也占有一条记录,但是不能登录,因为它们的登录Shell
为空。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。
伪用户含义
1 | bin 拥有可执行的用户命令文件 |
拥有帐户文件
除了上面列出的伪用户外,还有许多标准的伪用户,例如:audit
, cron
, mail
, usenet
等,它们也都各自为相关的进程和文件所需要。
由于/etc/passwd
文件是所有用户都可读的,如果用户的密码太简单或规律比较明显的话,一台普通的计算机就能够很容易地将它破解,因此对安全性要求较高的Linux
系统都把加密后的口令字分离出来,单独存放在一个文件中,这个文件是/etc/shadow
文件。 有超级用户才拥有该文件读权限,这就保证了用户密码的安全性。
/etc/shadow
中的记录行与/etc/passwd
中的一一对应,它由pwconv
命令根据/etc/passwd
中的数据自动产生
它的文件格式与/etc/passwd
类似,由若干个字段组成,字段之间用”:
“隔开。这些字段是:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
1 | "登录名"是与/etc/passwd文件中的登录名相一致的用户账号 |
下面是/etc/shadow
的一个例子:
1 | # cat /etc/shadow |
/etc/group
将用户分组是 Linux
系统中对用户进行管理及控制访问权限的一种手段。
每个用户都属于某个用户组;一个组中可以有多个用户,一个用户也可以属于不同的组。
当一个用户同时是多个组中的成员时,在/etc/passwd
文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。
用户要访问属于附加组的文件时,必须首先使用newgrp
命令使自己成为所要访问的组中的成员。
用户组的所有信息都存放在/etc/group
文件中。此文件的格式也类似于/etc/passwd
文件,由冒号(:
)隔开若干个字段,这些字段有:
组名:口令:组标识号:组内用户列表
1 | "组名"是用户组的名称,由字母或数字构成。与/etc/passwd中的登录名一样,组名不应重复。 |
/etc/group
文件的一个例子如下:
1 | root::0:root |
添加批量用户
添加和删除用户对每位Linux
系统管理员都是轻而易举的事,比较棘手的是如果要添加几十个、上百个甚至上千个用户时,我们不太可能还使用useradd
一个一个地添加,必然要找一种简便的创建大量用户的方法。Linux
系统提供了创建大量用户的工具,可以让您立即创建大量用户,方法如下:
- 先编辑一个文本用户文件。
每一列按照/etc/passwd
密码文件的格式书写,要注意每个用户的用户名、UID
、宿主目录都不可以相同,其中密码栏可以留做空白或输入x
号。一个范例文件user.txt
内容如下:
1 | user001::600:100:user:/home/user001:/bin/bash |
- 以
root
身份执行命令/usr/sbin/newusers
,从刚创建的用户文件user.txt
中导入数据,创建用户:
1 | newusers < user.txt |
然后可以执行命令 vipw
或 vi /etc/passwd
检查 /etc/passwd
文件是否已经出现这些用户的数据,并且用户的宿主目录是否已经创建。
- 执行命令
/usr/sbin/pwunconv
将 /etc/shadow
产生的 shadow
密码解码,然后回写到 /etc/passwd
中,并将/etc/shadow的shadow
密码栏删掉。这是为了方便下一步的密码转换工作,即先取消 shadow password
功能。
1 | pwunconv |
- 编辑每个用户的密码对照文件。
格式为:
用户名:密码
实例文件 passwd.txt
内容如下:
1 | user001:123456 |
- 以
root
身份执行命令/usr/sbin/chpasswd
创建用户密码,chpasswd
会将经过 /usr/bin/passwd
命令编码过的密码写入 /etc/passwd
的密码栏。
1 | chpasswd < passwd.txt |
- 确定密码经编码写入
/etc/passwd
的密码栏后
执行命令 /usr/sbin/pwconv
将密码编码为 shadow password
,并将结果写入 /etc/shadow
。
1 | pwconv |
这样就完成了大量用户的创建了,之后您可以到/home
下检查这些用户宿主目录的权限设置是否都正确,并登录验证用户密码是否正确。