<span>Linux 用户和用户组管理(3)</span>
用户和用户组管理
一、用户和组群
1.安全介绍3A
- Authentication: 认证,用户名和对应口令
- Authorization: 授权,不同用户权限不同
- Accouting/Audition: 审计
2. 所属者和所属组
user: 用户
用户标识: UserID, UID(16bits二进制,0-65535)
管理员: root, UID=0
普通用户: 1-65535(又分系统用户和登陆用户两种)
系统用户: 1-499(centos6), 1-999(centos7)由系统保留,作为管理账号,对守护进程获取资源进行权限分配;
登陆用户:500-60000(centos6), 1000-60000(centos7)
名称转换: username<>UID,通过/etc/passwd
group: 组
组标识: groupid, gid
管理员组: root, UID=0
用户主要组(主组):
- 用户必须属于一个且只有一个主组(基本组);
- 基本组名同用户名,且仅包含一个用户,也叫私有组(即,新建的用户,也会新建要给组,但组里只有用户自己)
用户的附加组: secondary group
基本组以外的组属于用户的附加族。
注意:
- 一个用户只有一个主组,但可以属于0或者多个附加组。
- 一般第一个为用户的主组,后面是附加组。
- 系统识别用户不是看用户名,而是id编号。
配置文件
-
主要配置文件
/etc/passwd: 用户及其属性信息(名称,UID,主组ID)
/etc/shadow: 用户密码及相关属性。
/etc/group: 组及其属性信息。
/etc/gshadow: 组密码及相关属性。 -
/etc/passwd
其格式和具体含义如下:
name:password:UID:GID:GECOS:directory:shell
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
/etc/passwd
由“:”分割成7段,每个字段含义如下:
①login name:
登录用户名(wang)
②passwd:
密码,口令(x) 现在放在 /etc/shadow 如果要想回到之前的状态用(命令 pwunconv)但是这样的话/etc/shadow文件就没有了,恢复使用(命令 pwconv)
③UID:
用户身份编号 管理员:0,系统默认为root,但是可以修改。普通用户:500+;1000+
④GID:
组标识号登录默认所在组编号(1000)
⑤GECOS:
用户全名或注释;
用命令chfn 可以修改注释信息;
用命令 finger 可以更加详细的查看修改和用户信息;
⑥home directory:
用户主目录(/home/wang)
root 的家目录是/root ,普通用户的家目录则为/home/username,用户家目录可以自己定义。
⑦shell:
用户默认使用shell (/bin/bash)
用 chsh命令 可以直接修改用户的shell
示例
[root@localhost home]# getent passwd ryan
ryan:x:500:500:centos6:/home/ryan:/bin/bash
[root@localhost home]#
[root@localhost home]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
- /etc/shadow
/etc/shadow和/etc/passwd类似,由":"分割成9段,只有管理员可以查看。
这些字段是:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
1.登陆用户名;2.用户密码,一般sha512加密; 3.从1970.1.1起,密码最近一次被更改的时间; 4.密码再过多少天就可以被更改,默认0,即不受限制; 5.密码多少天后过期,默认99999表示永远不用; 6.密码过期前几天提醒用户,默认一周; 7.密码过期几天后被锁定; 8.生命周期,从1970.1.1之后,多少天后账号失效; 9.没有意义,保留。
示例
[root@localhost home]# getent shadow ryan
ryan:$1$w7vV7KvG$kaxEMBMaLna7Iaf59NCQl1:17670:0:99999:7:::
[root@localhost home]#
[root@localhost home]# cat /etc/shadow
root:$1$w7vV7KvG$kaxEMBMaLna7Iaf59NCQl1:17670:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
adm:*:15980:0:99999:7:::
lp:*:15980:0:99999:7:::
sync:*:15980:0:99999:7:::
- /etc/group组
这些字段有:
组名:口令:组标识号:组内用户列表
1.组群名称; 2.组群密码,通常不设定,密码记录在/etc/gshadow; 3. GID. 组id; 4. 以当前组为附加组的用户列表。
示例
[root@localhost home]# getent group ryan
ryan:x:500:
[root@localhost home]# cat /etc/group
root:x:0:
bin:x:1:bin,daemon
daemon:x:2:bin,daemon
sys:x:3:bin,adm
adm:x:4:adm,daemon
tty:x:5:
disk:x:6:
lp:x:7:daemon
- /etc/gshadow
1.群组名称; 2.群组密码,一般不设置,如果设置了,普通用户知道口令后可以直接加进来,不设置反而安全; 3. 组管理员列表; 4.以当前组为附加组的用户列表;
示例
[root@localhost home]# cat /etc/gshadow
root:::
bin:::bin,daemon
daemon:::bin,daemon
sys:::bin,adm
adm:::adm,daemon
tty:::
disk:::
lp:::daemon
mem:::
kmem:::
wheel:::
mail:::mail,postfix
二、Linux系统用户账号的管理
用户账号的管理工作主要涉及到用户账号的添加、修改和删除。
添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录Shell等资源。刚添加的账号是被锁定的,无法使用。
1、添加新的用户账号使用useradd命令,其语法如下:
useradd 选项 用户名
参数说明:
选项:
- -c comment 指定一段注释性描述。
- -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
- -g 用户组 指定用户所属的用户组。
- -G 用户组,用户组 指定用户所属的附加组。
- -s Shell文件 指定用户的登录Shell。
- -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
用户名:
- 指定新账号的登录名。
例1:新建一个用户gem
# useradd gem
例2:新建用户sam,其主要组群为hello
# useradd -g hello sam
2、删除帐号userdel
删除一个已有的用户账号使用userdel命令,其格式如下:
userdel 选项 用户名
常用的选项是 -r,它的作用是把用户的主目录一起删除。
例如:
# userdel -r sam
此命令删除用户sam在系统文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的记录,同时删除用户的主目录。
3、修改帐号usermod
修改已有用户的信息使用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。
4、用户口令的管理passwd
指定和修改用户口令的Shell命令是passwd
。
超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。命令的格式为:
passwd 选项 用户名
可使用的选项:
- -l 锁定口令,即禁用账号。
- -u 口令解锁。
- -d 使账号无口令。
- -f 强迫用户下次登录时修改口令。
- -S 显示指定用户账号的状态
<mark>如果默认用户名,则修改当前用户的口令。</mark>
例如,假设当前用户是sam,则下面的命令修改该用户自己的口令:
$ passwd
Old password:******
New password:*******
Re-enter new password:*******
如果是超级用户,可以用下列形式指定任何用户的口令:
# passwd sam
New password:*******
Re-enter new password:*******
普通用户修改自己的口令时,passwd命令会先询问原口令,验证后再要求用户输入两遍新口令,如果两次输入的口令一致,则将这个口令指定给用户;而超级用户为用户指定口令时,就不需要知道原口令。
为用户指定空口令时,执行下列形式的命令:
# passwd -d sam
此命令将用户 sam 的口令删除,这样用户 sam 下一次登录时,系统就不再允许该用户登录了。
passwd 命令还可以用 -l(lock) 选项锁定某一用户,使其不能登录,例如:
# passwd -l sam
三、Linux系统用户组的管理
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。
1、增加一个新的用户组,使用groupadd命令。
其格式如下:
groupadd 选项 用户组
可以使用的选项有:
- -g GID 指定新用户组的组标识号(GID)。
- -o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
例1:
# groupadd group1
此命令向系统中增加了一个新组group1。
例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用户组确实是该用户的主组或附加组。类似于用户账号的管理,用户组的管理也可以通过集成的系统管理工具来完成。
四、其他的一些命令
1、su命令
详细了解
切换用户身份,基本格式:
su [-] [用户名]
例1
[jerry@centos jerry]$ su hello
此命令将普通用户jerry切换为hello
例2
[jerry@centos jerry]$ su -
普通用户切换为超级用户
2、id命令
查看用户的UID、GID和用户所属组群信息,基本格式:
id [用户名]
参数说明:
- -g或–group 显示用户所属群组的ID。
- -G或–groups 显示用户所属附加群组的ID。
- -n或–name 显示用户,所属群组或附加群组的名称。
- -r或–real 显示实际ID。
- -u或–user 显示用户ID。
- -help 显示帮助。
- -version 显示版本信息。
例1
# id //显示当前用户ID
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon) context=root:system_r:unconfined_t
3、添加批量用户
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:123456
user002:123456
user003:123456
user004:123456
user005:123456
user006:123456
(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下检查这些用户宿主目录的权限设置是否都正确,并登录验证用户密码是否正确。