Linux_04 —用户、用户组
一、用户与用户组记录的文件
- 在Linux系统当中 , 所有的系统上的账号信息都被记录在/etc/passwd这个文件中 (包括root用户) 。 而个人密码记录在/etc/shadow这个文件内 。 所有的组名记录在/etc/group文件内 。这三个文件非常重要 , 不要轻易做变动 。
- 用户 和用户组能够帮助Linux多任务环境变得更容易管理 。
- 实现账号的管理 , 主要有:
- 用户账号的添加 、 修改(以及修改用户所属的用户组) 、 删除
- 用户口令管理
- 用户组的添加、删除管理
二、添加用户
- 添加一个用户账号就是在系统中创建一个新账号 , 然后为新账号分配用户号 、 用户组、 主目录 和登录shell等资源 。 注意: 刚被创建的账号是被锁定的 , 无法使用 。
- 添加用户 : useradd [选项] 用户名
- 参数说明:
- -p : 指定用户密码
- -c : 指定一段注释性描述
- -d : 指定用户主目录 , 如果此目录不存在 , 则同时使用-m选项 , 可以创建主目录 。
- -g : 指定用户所属的用户组
- -G : 指定用户所属的附加组
- -s : 指定用户的登录Shell
- -u : 指定用户号 。 如果同时有-o选项 , 则可以重复使用其他用户的标识号
实例:
1. 创建用户tom [root@bogon outman02]# useradd tom 2. 查看用户信息 --> 显示UID 、GID 、以及tom所属的组 [root@bogon outman02]# id tom uid=501(tom) gid=501(tom) groups=501(tom) 3. 创建用户 , 并指定用户UID [root@bogon outman02]# useradd -u 800 jerry [root@bogon outman02]# id jerry uid=800(jerry) gid=800(jerry) groups=800(jerry) 4. 创建用户 , 并设置用户的个人主目录 (**注意:**用户编号默认跟随上一个用户的UID排序) 其中 -d用于指定用户主目录 , 如果主目录不存在则-m创建主目录 。 [root@bogon outman02]# useradd -d /home/lucy -m lucy [root@bogon outman02]# id lucy uid=801(lucy) gid=801(lucy) groups=801(lucy) 5. 创建用户gm , 指定他属于主用户组"jerry" , 附加组"adm , root" , 登录使用的shell是/bin/sh [root@bogon home]# useradd -s /bin/sh -g jerry -G adm,root gm [root@bogon home]# id gm uid=802(gm) gid=800(jerry) groups=800(jerry),0(root),4(adm) 6. 创建用户(伪用户) , 没有可登陆的shell [root@bogon home]# useradd -s /sbin/nologin alice [root@bogon home]# su tom [tom@bogon home]$ exit exit [root@bogon home]# su alice This account is currently not available.
- 增加用户账号就是在/etc/passwd文件中为新用户增加一条记录 , 同时更新其他系统文件 。 如:/etc/shadow 、/etc/group
三、修改用户
- 修改用户账号就是根据实际情况更改用户的相关属性 , 如:用户号 、 主目录 、 用户组 、 登录shell等 。
- 修改用户 : usermod [选项] 用户名 。
- 常用的选项(-c ,-d , -m . -g , -G , -s , -u , -o)的意义与useradd命令中的含义相同 , 可以为用户指定新的资源值 。
- 注意:“ ”(空格) , 这个选项是指定一个新的账号 , 即将原来的用户名改为新的用户名 。
实例:
1. 将用户gm的登录shell改为bash , 主目录改为/home/z , 用户组(主组)改为root [root@bogon home]# usermod -s /home/bash -d /home/z -g root gm [root@bogon home]# id gm uid=802(gm) gid=0(root) groups=0(root),4(adm) [root@bogon home]# su gm su: /home/bash: No such file or directory **注意:** 如果该主目录不存在 , 即使加上-m也不会创建该目录 。
四、用户口令的管理
- 用户账号刚刚创建时没有口令 , 但是被系统锁定, 无法使用 , 必须为其指定口令之后才能使用, 可以指定空口令。
- passwd : 指定或修改用户指令 。 超级用户可以为自己和其他用户指定口令, 普通用户只能用它修改自己的口令 。
- 命令格式 : passwd [选项] 用户名
- 选项 :
- -l(lock) : 锁定口令 , 即禁用账号 。
- -u(unlook) : 口令解锁
- -d(HOME_DIR) : 使用账号无口令 。(删除密码)
- -f : 强迫用户下次登录时修改口令。
- 注意: 默认无用户名,则修改当前用户的口令 。
五、切换用户
- su : 切换用户 管理员切普通用户不需要密码 , 用户切管理员需要密码
六、删除用户
- userdel : 删除用户 。
实例:
1. 删除用户 [root@bogon home]# userdel jerry 2. 删除用户的工作目录 [root@bogon home]# rm -rf jerry 3. 在删除指定用户名的同时删除他的home目录(工作中不建议使用 , 一个用户离职之后,用户可以删掉 , 但是他的工作文件可能还有用。 ) [root@bogon home]# userdel -r jerry
七、用户组管理
- 每个用户都有一个用户组 , 系统对一个用户组的所有用户进行集中管理 。 不同Linux系统对用户组的规定有所不同 , 如Linux下的用户属于它同名的用户组 , 这个用户组在用户创建时创建 。
- 用户组的管理涉及添加、删除 、 修改 , 实际上就是对/etc/group文件的更新操作。
八、用户组管理 — 添加
- 命令格式: groupadd [选项] 用户组
- 选项 :
- -g : GID 指定新用户组的组标识号
- -o : 一般与-g选项同时使用, 表示新用户组的GID可以与系统已有用户组的GID相同。
实例
1. 添加用户组 emp [root@bogon home]# groupadd emp 2. 添加用户组market , 并指定标识号为8000 [root@bogon home]# groupadd -g 8000 market 3. 将用户添加到附加组 (a: append G : 附加组) [root@bogon home]# usermod -aG morket tom
九、用户组管理 — 删除
- 命令格式 : groupdel 组名
- 如果删除的用户组 , 已经被用户追加为附加组 , 对应的用户的该附加组会被撤销 。
- 如果被删除的用户组 , 已经被用户指定为主组 , 则该用户组无法删除 。
十、用户组管理 — 修改
- 命令格式: groupmod [选项] 用户组
- 选项:
- -g : GID 为用户组指定新的组标识号
- -o : 与 -g选项一般同时使用, 用户组的新GID可以与系统中已有用户组的GID相同 。
- -n : 新用户组 , 将为用户组重命名 。
实例:
1. 将组group1的组标识号修改为102 [root@bogon home]# groupmod -g 102 group1 2. 将组group2的组标识号改为10000 , 并将名字改为group3 [root@bogon home]# groupmod -g 10000 -n group3 group2
十一、用户组管理 — 当前用户切换用户组
- 如果一个用户同时属于多个用户组 , 那么用户可以在用户组之间切换 , 以便有其他用户组的权限。
- 用户可以 登录后使用newgrp切换到其他用户组 。这个命令的参数就是目标用户组 。 如: $newgrp root 将当前用户切换到root用户组 , 前提条件是root 确实是该用户的主组或附加组。
十二、用户账号有关的系统文件详细介绍
- sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt - /etc/passwd文件中每一行记录都对应一个用户 , 每行记录又被冒号”:” 分割为7个字段 , 具体含义如下 : 用户名: 口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
- 用户名: 是代表用户账号 的字符串 。 通常长度不超过8个字符 , 并且由大小写字母或数字组成 , 用户名中不能有”:” , 因为”:”在这里是分隔符 , 为了兼容起见 , 登录名中最好不要包含”.” , 并且不适用”+” 和”-“开头 。
- 口令 : 一些系统中存放着加密后的用户口令 。 虽然这个字段存放的只是用户口令的加密串 , 不是明文, 但是由于/etc/passwd这个文件对所有用户可读 , 所以仍然 存在一些安全隐患。因此,现在许多Linux 系统(如SVR4)都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”。
- 用户标识号:是一个整数 , 系统内部用它来表示用户 。 一般情况下它与用户名是一一对应的。如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录Shell等。通常用户标识号的取值范围是0~65535。0是超级用户root的标识号,1~99由系统保留,作为管理账号,普通用户的标识号从100开始。在Linux系统中,这个界限是500。
- 组标识号: 记录的是用户所属的主用户组 。 他对应着/etc/group文件中的一条记录 。
- 注释性描述: 记录着用户的一些个人情况 。 没有实际性的用途 , 在不同的linux系统中 , 这个字段的格式并没有统一 。 在许多Linux系统中 , 这个 字段存放的是一段任意的注释性描述文字 , 用于finger输出 。
- 主目录: 也就是用户的其实工作目录 。 它是用户在登录到系统之后所处的目录。在大多数系统中,各用户的主目录都被组织在同一个特定的目录下,而用户主目录的名称就是该用户的登录名。各用户对自己的主目录有读、写、执行(搜索)权限,其他用户对此目录的访问权限则根据具体情况设置。
- 用户登录后 , 要启动一个进程 , 负责将用户的操作传给内核 , 这个进程是用户登录到系统后的运行命令解释器或某个特定的程序 。 即shell 。
- 系统中存在一类用户 被称为伪用户 。
- 这些用户在/etc/passwd文件中也占有一条记录 , 但是不能登录 , 因为他们没有shell(或shell为/sbin/nologin) 。 他们的存在主要是方便管理系统 , 满足相应的系统进程对文件属主的要求 。
- 常见的伪用户:
- 伪用户 | 含义
–|–
bin| 拥有可执行的用户命令文件
sys | 拥有系统文件
adm | 拥有账户文件
uucp | UUCP使用
IP | IP或PD子系统使用
nobady | NFS使用
- /etc/shadow中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生 。 它的文件格式与/etc/passwd类似,由若干个字段组成,字段之间用”:”隔开。这些字段是:
- 登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
- ”登录名”是与/etc/passwd文件中的登录名相一致的用户账号
- “口令”字段存放的是加密后的用户口令字,长度为13个字符。如果为空,则对应用户没有口令,登录时不需要口令;如果含有不属于集合 { ./0-9A-Za-z }中的字符,则对应的用户不能登录。
- “最后一次修改时间”表示的是从某个时刻起,到用户最后一次修改口令时的天数。时间起点对不同的系统可能不一样。例如在SCO Linux 中,这个时间起点是1970年1月1日。
- “最小时间间隔”指的是两次修改口令之间所需的最小天数。
- “最大时间间隔”指的是口令保持有效的最大天数。
- “警告时间”字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。
- “不活动时间”表示的是用户没有登录活动但账号仍能保持有效的最大天数。
- “失效时间”字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。
- 登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
- 用户组的所有信息存放在/etc/group文件中 。
- 将用户分组是Linux系统对用户进行管理及控制访问权限的一种手段。
- 每个用户都属于某个用户组 , 一个组中可以有多个用户 , 一个用户也可以属于不同的用户组 。
- 当一个用户同时是多个用户组中的成员时 , 在/etc/passwd文件中记录的是用户所属的主组, 也就是当时的默认组 , 而其他组称为附加组 。
- 用户要访问属于附加组的文件时 , 必须首先使用newgrp命令是自己成为所要访问的用户组的成员
- 用户组的所有信息存放在/etc/group文件中, 此文件的格式也类似与/etc/passwd文件 , 由”:”分割多个字段, 这些字段有:
- 组名 :口令:组标识号 :组内用户列表
- 组名: 用户组的名称 , 有字母或数字构成 , 不能含有”:” ,不能重复 。
- 口令: 存放用户加密后的指令 ,一般的Linux系统的用户组没有口令 , 所以这个字段一般是空或者是”*”。
- 组标识号 : 一个整数 , 用于被系统内部表示组 。
- 组内用户列表 : 属于这个组的所有用户的列表 , 不同 用户之间用”,”分割 , 这个用户组可能是用户的主组 , 也可能是附加组 。