07. Linux 的用户管理

Par @Martin dans le
Tags :

用户和用户组

Linux 是个多人多任务的系统, 常常会有多人同时使用系统来进行工作的情况, 简单的说, 用户指的就是使用操作系统的人; 而用户组, 就是指具有相同系统权限的一组用户.

来看一个例子(借用鸟哥的私房菜). 假设有一家人, 家里只有三兄弟, 分别是大毛、二毛与三毛. 对于这三人而言, 客厅、厨房、WC等是共同拥有的, 大家都有权限使用. 由于三人各自拥有自己的房间, 三毛觉得让大毛、二毛进入自己的房间无可厚非, 但是自己写给小丽的情书可不能被他们看见, 于是三毛把情书锁在抽屉里. 所以, 大毛、二毛虽然可以进入三毛的房间, 但总不能撬三毛的抽屉吧?!

以上面的例子来说, 这个大家庭就是一个用户组, 三兄弟就是属于这个用户组的用户, 大家都有权限使用这个家里的客厅、厨房、WC等是共同拥有的空间; 而他们的卧室就是用户的个人空间, 用户可以自由设定个人空间的权限, 例如, 二毛可能不希望别人来自己的房间, 而三毛则允许别人进入自己的房间, 但不能翻抽屉.

接着看例子, 假如这三兄弟都是小 P 孩, 而这个家里呢, 还有更高级的存在, 也就是他们的父母啦, 他们的父母拥有家庭里的最高权限, 因此他们可以控制三兄弟的个人空间; 这个父母对应的就是 Linux 里的 root 用户, 即超级管理员用户.

前面说过, Linux 下一切内容皆文件, 因此所有的用户和用户组信息也都被保存在一些关键文件中. /etc/group 存储当前系统中所有用户组信息. 每一行都是一个用户组的信息, 信息被分为 4 部分; Group : x : 123 : abc,def 组名 : 组密码占位符 : 组ID : 组中用户列表(最后一个信息没有不代表组中没有用户, 因为当组中只有一个用户且用户名和组名相同时, 它也是不显示用户列表的). 对于 Linux 来说, root 组的 ID 始终为 0, 并且 1 – 499 是预留给系统的, 一般是留给系统中的软件或服务. 而我们手动创建的用户 ID 是从 500 开始的.

/etc/gshadow 存储当前系统中用户组的密码信息 Group : x : : abc,def 组名 : 组密码 : 组管理者 : 组中用户列表(如果组密码是 !、* 或 空 都可以认为这个组没有密码).

/etc/passwd 存储当前系统中所有用户的信息. user : x : 123 : 456 : xxxx : /home/martin : /bin/bash 用户名 : 密码占位符 : 用户ID : 所在组ID : 用户注释信息 : 用户主目录 : 使用的 shell 解释器

/etc/shadow 存储当前系统中所有用户的密码信息. user : asdfasdfasdf… : : : : : 用户 : 加密的密码 : 好吧, 一些乱七八糟东西, 暂时请无视它…了解一下就好.

用户及用户组的管理命令

[groupadd] [ 组名] 添加用户组 [groupmod] [-n] [新组名] [旧组名] 更改用户组的名称 [groupmod] [-g] [新ID] [组名] 更改用户组的ID [groupadd] [-g] [组ID] [ 组名] 添加一个指定ID的用户组 [groupdel] [ 组名] 删除用户组(删除用户组时要确保先删除用户组中的用户)

[useradd] [-g] [用户组] [用户名] 为某个用户组添加用户 [useradd] [-d] [路径] [用户名] 在创建用户的时候指定用户个人文件夹(没有指定用户组的时候, 系统将默认为用户创建一个同名的用户组) [usermod] [-c] [备注] [用户名] 为用户添加注释 [usermod] [-l] [新用户名] [旧用户名] 更改用户名 [usermod] [-d] [路径] [用户名] 重新指定用户个人文件夹 [usermod] [-g] [目标组名] [用户名] 切换用户的所在用户组 [userdel] [用户名] 删除用户(并不会删除个人文件夹) [userdel] [-r] [用户名] 删除用户(同时会删除个人文件夹)

[touch] [/etc/nologin] 在 etc 下创建一个 nologin 文件将禁止普通用户登录系统

[passwd] [-l] [用户名] 锁定用户 [passwd] [-u] [用户名] 解锁用户 [passwd] [-d] [用户名] 清除用户密码

主要组和附属组

Linux 下允许一个用户属于多个用户组, 这时, 只有一个组是用户的主要组, 其它的都是附属组. [gpasswd] [-a] [用户名] [组名] 为用户添加附属组, 如果要一次性添加多个附属组, 可以用逗号分隔用户组的名称. 当用一个属于多个用户组的用户来创建一个文件的时候, 默认创建的文件属于用户的主要组, 如果想以附属组的权限来创建一个文件, 就要临时切换用户组. [newgrp] [组名] [组密码] 临时切换用户组(前提是要先切换成登录的用户再使用这条命令). [gpasswd] [-d] [用户名] [组名] 将一个用户从它的附属组中删除 [useradd] [-g] [主用户组] [-G] [附属用户组列表(逗号隔开)] [用户名] 添加用户的时候同时指定主用户组和附属用户组

其他命令

[gpasswd] [组名] 为用户组添加密码

[su] [username] 切换当前用户, 如果不写 username 为切换成 root 用户, 切换的时候需要输入目标用户密码. 需要注意, Ubuntu 为了系统的安全性, 默认 root 用户为随机密码, 除非手动重设 root 密码, 不过建议不要这么做. 所以一般当我们使用 su 进入超级用户时, 因为我们不知道密码, 所以进不去.. [sudo] [su] 因为上面的原因, 我们可以使用这条命令临时让当前用户有 root 权限, 它只要求输入当前用户的密码, 不过这是有时间限制的, Ubuntu 默认为 15 分钟. [sudo] [-i] 功能同上, 但是它没有时间限制.

[who am i] 显示当前用户名

[id] [username] 显示指定用户信息, 包括用户ID、用户名、主要组ID及名称、附属组列表

[groups] [username] 显示指定用户所在的所有组

[chfn] [用户名] 设置用户资料(按系统提示依次输入即可)

[finger] [用户名] 显示用户资料 )fS