一、用户和组群
Linux是一个真正的多用户操作系统,从本机或远程登录的多个用户能同时使用同一计算机,同时访问同一外围设备。不同的用户对于相同的资源拥有不同的使用权限。Linux将同一类型的用户归于一个组群,可利用组群权限来控制组群成员用户的权限。Linux系统进行用户和组群管理的目的在于保证系统中数据与进程的安全。
1、用户
无论是从本地还是从远程登录Linux系统,用户都必须拥有用户账号。登录时系统检验输入的用户名和密码。只有当该用户名已存在,且密码与用户名匹配时,用户才能登录到Linux。系统还会根据用户的默认配置建立用户的工作环境。
Linux中用户分为三大类型:超级用户、系统用户和普通用户。
- 超级用户:又称为root用户或根用户,拥有系统的最高权限。
- 系统用户:与系统服务相关的用户,通常在安装相关软件包时自动创建,一般不需要改变其默认设置。
- 普通用户在安装后由超级用户创建。普通用户的权限相当有限,只能操作其拥有权限的文件和目录,只能管理自己启动的进程。
每个用户都有如下属性信息:
- 用户名:登录时使用的名字,必须是唯一的,可由字母、数字和符号组成。
- 密码:用于身份验证。
- 用户ID (UID):用户ID是Linux中每个用户都拥有的唯一识别号码,如同每个人都拥有的身份证号。超级用户的UID默认为
0
,1-499
默认为系统用户专用UID。默认将500
及以上UID作为普通用户的UID。安装完成后新建的第一个用户的UID默认为500
,第二个用户的UID默认为501
,并依此类推。 - 组群ID (GID):每位用户至少属于一个组群。组群ID是Linux中每个组群都拥有的唯一识别号妈。和UID类似,超级用户所属组群(即超级组群)的GID默认为
0
,1~499
默认为系统组群专用GID。安装完成后新建的第一个私人组群的GID默认为500
,第二个私人组群的GID默认为501
,并依此类推。 - 用户主目录:专属于用户的目录,用于保存该用户的自用文件。用户登录Linux后默认进人此目录,且对此目录具有完全控制权限。默认情况下,超级用户
root
的主目录为/rkoot
,而普通用户的主目录为/home
中与用户名同名的目录,如jerry的默认主目录为/home/jerry 。 - 全名:用户的全称,是用户账号的附加信息,可为空。
- 登录Shell:登录Linux后自动进人的Shell环境。Linux中默认使用
Bash
,用户一般不需要修改。
2、与用户相关的文件
1. 用户账号信息文件/etc/passwd
/etc/passwd
文件保存除密码之外的用户账号信息。所有用户都可查看/etc/passwd
文件的内容。
passwd
文件中每行代表一个用户账号,而每个用户账号的信息又用划分为多个字段来表示用户的属性信息。passwd
文件中各字段从左到右依次为:用户名、密码、用户ID、用户所属主要组群的组群ID、全名、用户主目录和登录Shell。其中,密码字段的内容总是以“x”来填充,加密后的密码保存在/etc/shadow
文件中。
2. 用户密码信息文件/etc/shadow
/etc/shadow
文件根据/etc/passwd
文件而产生,只有超级用户才能查看其内容。为进一步提髙安全性,在shadow
文件中保留的是采用SHA 512
安全散列算法加密的密码。由于SHA算法是一种单向算法,理论上认为密码无法破解。
与passwd
文件类似,shadow
文件中每行也代表一个用户账号,而每个用户账号的信息也用“:
”划分为多个字段来表示用户的属性信息。shadow
文件的各字段的含义如下所示。
位置 | 含义 |
---|---|
1 | 用户名,其排列顺序与/etc/passwd 文件保持一致 |
2 | 加密密码。如果是"!! ",则表示这个账号无密码,不能登录。部分系统用户账号无密码 |
3 | 从1970年1月1日起到上次修改密码日期的间隅天数。对于无密码的账号而言,是指从1970年1月1日起到创建该用户账号的间隔天数 |
4 | 密码自上次修改后,要隔多少天才能再次修改。若为0则表示没有时间限制。 |
5 | 密码自上次修改后,多少天之内必须再次修改。若为99999则表示用户密码未没置为必须修改 |
6 | 若密码已设置时间限制,则在过期多少天前向用户发送警告信息,默认为7天 |
7 | 若密码设置为必须修改,而到达期限后仍未修改,系统将推迟关闭账号的天数 |
8 | 从1970年1月1日起到用户账号到期的间隔天数 |
9 | 保留字段未使用。 |
3、组群
Linux将具有相同特性的用户划归为一个组群,可以大大简化用户的管理,方便用户之间文件的共享。任何一个用户都至少属于一个组群,并且可同时属于多个附加组群。用户不仅拥有其主要组群的权限,还同时拥有其附加组群的权限。
组群按照其性质分为:超级组群、系统组群和私人组群。
- 超级组群:超级用户所处的组群。
- 系统组群:安装系统服务程序时自动创建的组群。
- 私人组群:安装完成后,由超级用户新建的组群。
每个组群都具有如下属性信息:
- 组群名:组群的名称,由数字、字母和符号组成。
- 组群ID ( GID ):用于识別不同组群的唯一数字标识。
- 组群密码:默认情况下,组群无密码,必须进行一定操作才能设置组群密码。
- 用户列表:组群的所有用户,用户之间用"
,
"分隔。
4、与组群相关的文件
1. 组群账号信息文件 /etc/group
/etc/group
文件保存组群账号的信息,所有用户都可以查看其内容。group
文件中的每行内容表示一个组群的信息,各字段之间用“:
”分隔。
group
文件的各字段从左到右依次为:组群名、组群密码、组群管理员密码和以此组群为附加组群的用户列表,其中密码字段总为“x
”。
2. 组群密码信息文件 /etc/gshadow
/etc/gshadow
文件根据/etc/group
文件而产生,主要用于保存加密的组群密码,只有超级用户才能查看其内容。
gshadow
文件的各字段从左到右依次为:组群名、组群加密密码、组群管理员密码和此组群为附加组群的用户列表,其中加密密码字段为“!!
”表示无密码。
二、管理用户和组群的Shell命令
利用Shell命令也可进行用户和组群管理,虽然没有使用用户管理器直观,但是更加可靠高效。
1、管理用户的Shell命令
1. useradd命令
格式:useradd [选项]用户名
功能:新建用户账号,只有超级用户才能使用此命令。
主要选项说明:
命令 | 作用对象 | 作用 |
---|---|---|
-c | 全名 | 指定用户的全称,即用户的注释信息 |
-d | 主目录 | 指定用户的主目 |
-e | 有效期限 | 指定用户账号的有限期限 |
-f | 缓冲 | 指定密码过期后多久将关闭此账号 |
-g | 组群ID|组群名 | 指定用户所属的主要组群 |
-G | 组群ID |组群名 | 指定用户所属的附加组群 |
-s | 登录 | 指定用户登录Shell |
-u | 用户 | 指定用户UID |
新建用户时如果指定其所属的主要组群,系统就不会新建与用户同名的私有组群。系统仍将为该用户在/home
目录新建一个与用户同名的子目录,用户的登录Shell仍为Bash, UID仍由系统自动分配。
使用useradd
命令新建用户账号,将在/etc/passwd
文件和/etc/shadow
文件中増加新用户的记录。如果同时还新建了私人组群,还将在/etc/group
文件和/etc/gshadow
文件中增加记录。
2. passwd命令
格式:passwd [选项][用户]
功能:设置或修改密码及密码属性。
主要选项说明
命令 | 作用对象 | 作用 |
---|---|---|
-d | 用户名 | 删除用户的密码,则该用户账号无须密码即可登录系统 |
-1 | 用户名 | 暂时锁定指定的用户账号 |
-U | 用户名 | 解除指定用户账号的锁定 |
-S | 用户名 | 显示指定用户化号的状态 |
- 设置与修改密码
超级用户使用useradd
命令新建用户账号后,还必须使用passwd
命令为用户设置初始密码,否则此用户账号将被禁止登录。普通用户以此初始密码登录后可自行修改密码。
Linux安全性要求较高,如果密码少于6位、字符过于规律、字符重复性太高或者是英文单词,系统都将出现提示信息,提醒用户密码不符合要求。合格的密码应当由字母、数字和符号混合编排,且长度超过6位。
Linux中超级用户可(修改所有用户的密码,并且不需要先输人其原来的密码。普通用户使用passwd
命令修改密码时不能使用参数,只能修改用户自己的密码并必须先输人原来的密码。
- 删除密码
超级用户可删除用户的密码,该用户账号无须密码即可登录。
要删除用户的密码,超级用户除了使用passwd
命令外,还可以直接编辑/etc/passwd
文件,清除指定用户账号密码字段的内容即可。
- 锁定与解锁用户账号
用户因放假、出差等原因短期不使巧系统时,出于安全考虑,系统管理员可以暂时锁定用户账号。用户账号一旦被锁定必须解除其锁定后才能继续使用。
超级用户也可以直接编辑/etc/passwd
文件,在指定的用户账号所在行前加上“#
”或“*
”符号使其成为注释行,那么该用户账号也被锁定不能使用。去除“#
”或“*
”符号,用户账号就可以恢复使用。
3.usermod命令
格式:usermod [选项]用户名
功能:修改用户的属性。只有超级用户才能使用此命令,且需要修改属性的用户当前未登录。
主要选项说明
命令 | 作用对象 | 作用 |
---|---|---|
-c | 全名 | 指定用户的全称,即用户的注释信息 |
-d | 主目录 | 指定用户的主目录 |
-e | 有效期限 | 指定用户账号的有限期限 |
-f | 缓冲天数 | 指定密码过期后多久将关闭此账号 |
-g | 组群ID或组群名 | 指定用户所属的主要组群 |
-G | 组群ID或组群名 | 指定用户所属的附加组群 |
-s | 登录Shell | 指定用户登录Shell |
-u | 用户ID | 指定用户的UID |
-1 | 用户名 | 指定用户的新名称 |
usermod
命令可使用的选项跟useradd
命令基本相同,唯一的不同在于usermod
命令可以修改用户名。执行 usermod
命令将修改/etc/passwd
、/etc/shadow
、/etc/group
和/etc/gshadow
等文件的相关信息。
4. userdel命令
格式:userdel [-r]用户名
功能:删除指定的用户账号,只有超级用户才能使用此命令。
选项说明:使用“-r
”选项,系统不仅将删除此用户账号,并且还将用户的主目录也一并删除。如果不使用“-r
”选项,则仅删除此用户账号。
另外,如果在新建该用户时已创建私人组群,而该私人组群当前又无其他用户,那么在删除用户的同时也将一并删除这一私人组群。正在使用系统的用户不能被删除,必须退出登录才行。
5. su命令
格式:su [-][用户名]
功能:切换用户身份。无用户名参数,即切换为超级用户。超级用户可切换为任何普通用户,而且不需要输人密码。普通用户转换为其他用户时需要输人被转换用户的密码。切换为其他用户之后就拥有该用户的权限。使用exit
命令可返回到本来的用户身份。
选项说明:“-
”选项,表示切换时采用新用户的环境变量。
6. id命令
格式:id [用户名]
功能:查看用户的UID、GID和用户所属组群的信息。不指定用户名,则显示当前用户的相关信息。
2、管理组群的Shell命令
1. groupadd命令
格式:groupadd [选项]组群名
功能:新建组群,只有超级用户才能使巧此命令。
主要选项说明:
-g
组群ID 指定组群的GID
利用groupadd
命令新建组群时如果不指定GID,则其GID由系统自动分配。执行groupadd
命令后,/etc/group
和/etc/gshadow
文件中将增加一行记录。
2. groupmod 命令
格式:groupmod [选项]组群名
功能:修改指定组群的属性,只有超级用户才能使用此命令。
主要选项说明:
命令 | 作用对象 | 作用 |
---|---|---|
-g | 组群ID | 指定组群的GID |
-n | 组群名 | 指定组群的新名字 |
3. groupdel 命令
格式:groupdel 组群名
功能:删除指定的组群,只有超级用户才能使用此命令。在删除指定组群之前必须确保该组群不是任何用户的主要组群,否则必须删除那些以此组群作为主要组群的用户才行。
3、批量创建多个用户账号
作为系统管理员,有时需要批量新建多个用户账号。使用上述命令和方法将非常费时并且容易出错,而通过预先编写用户信息文件和密码文件,利用newuseis
等命令能实现批量添加用户账号的功能。
步骤如下:
1. 创建组群
[root@centos ~]#groupadd -g 600 14students
2. 创建用户信息文件
使用任何一种文本编辑器输人用户账号信息。用户账号信息必须符合/etc/passwd
文件的格式。每行内容为一个用户账号的信息,字段排列顺序也必须跟/etc/passwd
文件完全相同。每个用户账号的用户名和UID必须各不相同。
3. 创建用户密码文件
使用任何一种文本编辑器输入用户名和密码信息。每行内容为一个用户账号的信息,用户名与用户信息文件的内容相对应。
4. 批量创建用户账号
超级用户利用newusers
命令批量创建用户账号,只需将用户信息文件重定向给newusers
,系统就会自动新建用户账号。
[root@centos ~] # newusers < student.txt
操作无误后,查看/etc/passwd
文件会发现student.txt文件的内容追加到/etc/passwd
文件,而且系统还已在/home
目录中为每位用户创建其主目录。
5. 暂时取消shadow
加密
[root@centos ~]# pwunconv
为使用户密码文件中指定的密码可用,必须取消原有的shadow
加密。超级用户利用pwunconv
命令将/etc/shadow
文件中加密密码解密,并保存于/etc/passwd
文件,且删除/etc/shadow
文件。
6. 为用户设置密码
超级用户利用chpasswd
命令批量更新用户的密码,只需要把用户密码文件重定向给chpasswd
程序,系统就会自动设置用户密码。
[root@centos ~]# chpasswd < password.txt
操作无误后,再次查看/etc/passwd
文件,会发现password.txt文件中的密码均出现在/etc/passwd
文件中相应用户的密码字段。显然,送样的/etc/passwd
文件存在很大的安全隐患,为此需要恢复shadow
加密。
7. 恢复shadow
加密
[root@centos ~]# pwconv
pwconv
命令的功能跟pwunconv
命令相反,能将/etc/passwd
文件中的密码字段进行shadow
加密,并将加密后的密码保存到/etc/shadow
文件。