1. 基础知识
Linux 作为一种多用户的操作系统(服务器系统), 允许多个用户同时登陆到系统上, 并响应每个用户的请求.
任何需要使用操作系统的用户, 都需要一个系统账号, 账号分为: 管理员账号与普通用户账号.
在 Linux 中, 操作系统根据 UID 来判断用! 根据 UID 来判断用户! 而不是用户名! 只要 id 为 0 就是管理员, 哪怕有多个 id 为 0 的账号
系统在新建账号时, 会根据账号类型, 自动分配递增账号的 UID 与 GID (用户身份编号, 组编号), 也可自行分配. 通常情况下, 应当保证 UID 与 GID 唯一且不重复.
1.1 组的类别
在 Linux 中, 每个用户必须有一个主组. 当创建账号时, 系统会自动创建一个同名组作为该账户的主组. 用户必须属于一个且只有一个主组. 用户可以属于零个或者多个附加组.
1.2 用户与组的配置文件
在 Linux 中, 万物皆文件, 所以用户与组也以配置文件的形式保存在系统中, 以下为用户和组的主要配置文件详解:
/etc/passwd: 用户及其属性信息(名称, UID, 主组 ID 等)
/etc/group: 组及其属性信息
/etc/shadow: 用户密码及其相关属性
/etc/gshadow: 组密码及其相关属性
passwd 文件格式如下图:
依次含义为:
登录用户名
密码
UID
GID
全名或注释
用户主目录
用户默认使用 shell
group 文件格式如下图:
依次含义为:
群组名称
群组密码(通常不需要设定, 密码被记录在 / etc/gshadow)
GID: 群组 ID
附加组(以, 来分割, 该账户没有附加组所以为空)
shadow 文件格式如下图:
依次含义为:
登录用户名
密码(通常使用 shad512 加密)
从 1970 年 1 月 1 日起计算到现在为止密码最近一次被更改的时间
密码再过几天就可以被修改(0 表示随时可改)
密码几天后必须变更(99999 表示永不过期)
密码过期前多久提示用户
密码过期多久后账户将被锁定
多少天后账户将失效(从 1970-1-1 算起)
gshadow 文件格式如下图:
依次含义为:
群组名称
群组密码
组管理员列表
当前用户的附加组
2. 用户账号管理
在 Linux, 管理员在默认情况下为 root 账户, UID=0. 普通用户 UID 默认范围为 1-65535. 在 CentOS 6 中, 新建用户, 默认系统用户的 UID 范围为 1-499. 普通用户为 500+. 在 CentOS 7 中, 系统用户范围为 1-999. 普通用户为 1000+. 对系统的操作权限由用户决定.
通常对用户账号的操作分为添加, 修改, 删除.
2.1 添加账户
通过: useradd 命令, 来添加用户语法如下:
useradd [opentions] login
参数说明:
-u UID 自定义 UID (默认系统递增)
-o 配合 - u 选项, 不检查 UID 的唯一性(不建议)
-g GID: 指明用户所属基本组, 可为组名, 也可以 GID
-c comment 指定一段注释性描述.
-d 目录 指定用户主目录, 如果此目录不存在, 则同时使用 - m 选项, 可以创建主目录.
-g 用户组 指定用户所属的用户组.
-G 用户组, 用户组 指定用户所属的附加组.
-s Shell 文件 指定用户的登录 Shell.
-u 用户号 指定用户的用户号, 如果同时有 - o 选项, 则可以重复使用其他用户的标识号.
实例 1
# useradd -d /usr/ddz ddz
创建了一个用户 ddz, 并将他的家目录设置到 / user/ddz
实例 2
# useradd -s /sbin/bash -g root -G mage,wang ddz
此命令新建了一个用户 ddz, 设置该用户使用的 shell 为 / sbin/bash, 设置他的主组属于 group 用户组, 设置附加组为 mage 和 wang.(当设置组时, 要保证组已经存在, 否则请先创建该组)
小技巧:
增加用户账号就是在 / etc/passwd 文件中为新用户增加一条记录, 同时系统会自动更新其他系统文件如 / etc/shadow, /etc/group 等.
通常情况创建账户, 账户 ID 会按照最大的值递增, 但是递增的值必须在最大范围内.
在部署软件时, 通常会需要使用账户, 所以需要指定 UID, 来部署所有的账号都用同一个 UID, 来方便管理.
newusers [passwd 格式文件] 用于批量创建账户, 只需要每一列账户信息格式, 按照 passwd 中书写, 之后上传到 Linux 中替换即可.
chpasswd 批量修改用户口令. 将文件格式写为: user:passwd . 每行一个, 之后倒入 Linux 即可.
创建账户的默认值设定位于: /etc/default/useradd 文件中, 该文件记录了创建用户账户时的默认信息, 可通过修改该文件来修改创建账户时的信息.
2.2 删除帐号
如果一个用户的账号不再使用, 可以从系统中删除. 删除用户账号就是要将 / etc/passwd 等系统文件中的该用户记录删除, 必要时还删除用户的主目录.
通常在运维工作中, 一般使用让账号失效, 果然修改账户名的方式, 来便捷的操作账号.
删除一个已有的用户账号使用 userdel 命令, 其格式如下:
userdel 选项 用户名
常用的选项是 -r, 它的作用是把用户的主目录一起删除.
例如:
# userdel -r sam
此命令删除用户 sam 在系统文件中 (主要是 / etc/passwd, /etc/shadow, /etc/group 等) 的记录, 同时删除用户的主目录.
删除账号需要该账户没有人在使用, 才能删除成功. 请使用命令删除, 不要去手动改文件.
2.3 修改帐号
修改用户账号就是根据实际情况更改用户的有关属性, 如用户号, 主目录, 用户组, 登录 Shell 等.
修改已有用户的信息使用 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.
2.4 查询账号口令
id [opentions] [User]
相关参数:
-u: 显示 UID
-g: 显示 GID
-G: 显示用户所属的组 ID
-n: 显示名称
2.5 用户口令的管理
用户管理的一项重要内容是用户口令的管理. 用户账号刚创建时没有口令, 但是被系统锁定, 无法使用(在 passwd 文件中, 密码列显示为!! 或者! 表示用户被锁定, 是无法登陆的), 必须为其指定口令后才可以使用, 即使是指定空口令.
指定和修改用户口令的 Shell 命令是 passwd. 超级用户可以为自己和其他用户指定口令, 普通用户只能用它修改自己的口令. 命令的格式为:
passwd 选项 用户名
可使用的选项:
-l 锁定口令, 即禁用账号.
-u 口令解锁.
-d 使账号无口令.
-f 强迫用户下次登录时修改口令.
如果默认用户名, 则修改当前用户的口令.
例如, 假设当前用户是 sam, 则下面的命令修改该用户自己的口令:
- $ passwd
- Old password:******
- New password:*******
- Re-enter new password:*******
如果是超级用户, 可以用下列形式指定任何用户的口令:
- # passwd sam
- New password:*******
- Re-enter new password:*******
普通用户修改自己的口令时, passwd 命令会先询问原口令, 验证后再要求用户输入两遍新口令, 如果两次输入的口令一致, 则将这个口令指定给用户; 而超级用户为用户指定口令时, 就不需要知道原口令.
为了系统安全起见, 用户应该选择比较复杂的口令, 例如最好使用 8 位长的口令, 口令中包含有大写, 小写字母和数字, 并且应该与姓名, 生日等不相同.
为用户指定空口令时, 执行下列形式的命令:
# passwd -d sam
此命令将用户 sam 的口令删除, 这样用户 sam 下一次登录时, 系统就不再询问口令.
passwd 命令还可以用 - l(lock)选项锁定某一用户, 使其不能登录, 例如:
# passwd -l sam
利用组来简化授权操作, 当对整个组授权时, 整个组下的账号权限都会进行修改
其他 : 用户相关的其他指令
chfn [USER] 修改用户的备注文档
chsh [Shell] 修改用户的指定 shell
3. 用户组
3. 用户组的管理
每个用户都有一个用户组, 系统可以对一个用户组中的所有用户进行集中管理. 不同 Linux 系统对用户组的规定有所不同, 如 Linux 下的用户属于与它同名的用户组, 这个用户组在创建用户时同时创建.
用户组的管理涉及用户组的添加, 删除和修改. 组的增加, 删除和修改实际上就是对 / etc/group 文件的更新.
3.1 增加组
1, 增加一个新的用户组使用 groupadd 命令. 其格式如下:
groupadd 选项 用户组
可以使用的选项有:
-g GID 指定新用户组的组标识号(GID).
-o 一般与 - g 选项同时使用, 表示新用户组的 GID 可以与系统已有用户组的 GID 相同.
-r 创建系统组
实例 1:
# groupadd group1
此命令向系统中增加了一个新组 group1, 新组的组标识号是在当前已有的最大组标识号的基础上加 1.
实例 2:
# groupadd -g 101 group2
此命令向系统中增加了一个新组 group2, 同时指定新组的组标识号是 101.
3.2 删除组
2, 如果要删除一个已有的用户组, 使用 groupdel 命令, 其格式如下:
groupdel 用户组
例如:
# groupdel group1
此命令从系统中删除组 group1. 要想删除组, 要确保该组不是主组, 才能把这个组删掉.
3.3 修改组
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.
3.4 切换组(临时切换主组)
4, 如果一个用户同时属于多个用户组, 那么用户可以在用户组之间切换, 以便具有其他用户组的权限.
用户可以在登录后, 使用命令 newgrp 切换到其他用户组, 这个命令的参数就是目的用户组. 例如:
$ newgrp root
这条命令将当前用户切换到 root 用户组, 前提条件是 root 用户组确实是该用户的主组或附加组. 类似于用户账号的管理, 用户组的管理也可以通过集成的系统管理工具来完成.
3.5 更改查看组成员
5 , 可以通过以下命令, 来更改和查看组中的成员
#groupmems [opentions] [action]
参数如下:
-g 更改为指定组(只有 root 可以使用)
-a 指定用户加入组
-d 从组中删除该用户
-p 从组中清楚所有成员
-l 显示组成员列表
实例 1
$groupmems -l -g root
此命令表示查看 root 组中存在的成员.
实例 2
$groupmems -a Father -g root
此命令表示将 Father 用户加入 root 组中.
小技巧:
一个用户可以加入不同的组, 但是有且只有一个主组.
一个用户的权限为他所属的多个组的累加权限 . 假设 user 账户附加组 group1 = write group2 = read , 那么 user 就拥有 write + read 权限.
组和用户的关系是多对多 一个用户可以有多个组, 一个组也可以有多个用户.
在 Windows 中, 只有管理员才允许对用户组进行操作, 但在 Linux 中, 只要有组的口令, 就可以让账号进入组.
root 组的权限与普通组权限大致相同!! 账号并不是加入 root 组就能获得用户权限!
来源: https://www.cnblogs.com/ddz-linux/p/10467106.html