一、用户和组群

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编号。

配置文件

  1. 主要配置文件
    /etc/passwd: 用户及其属性信息(名称,UID,主组ID)
    /etc/shadow: 用户密码及相关属性。
    /etc/group: 组及其属性信息。
    /etc/gshadow: 组密码及相关属性。

  2. /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
  1. /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:::
  1. /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
  1. /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下检查这些用户宿主目录的权限设置是否都正确,并登录验证用户密码是否正确。