鸟哥 Linux账号管理

Linux的账号与群组

使用者识别码:UID与GID

当登录Linux主机时,输入的是账号,Linux 主机并不会直接认识你的帐号,他仅认识 ID,帐号只是为了让人们容易记忆而已,ID 与帐号的 对应就在 / etc /passwd 当中。

每个登陆的使用者至少都会取得两个 ID ,一个是使用者 ID (User ID ,简称 UID)、一个是群组 ID (Group ID ,简称 GID)。

文件是利用UID与GID来判别拥有者与群组。每一个文件都会有所谓的拥有者ID与拥有群组ID,当要显示文件属性时,系统会依据 / etc / passwd 与 / etc /group 的内容, 找到 UID / GID 对应的帐号与群组名称再显示出来。

使用者账号

Linux 系统上面的使用者需要登陆主机以取得 shell工作环境,通过网络要使用ssh。输入账号密码后,系统做了工作:

  1. 先找寻 / etc / passwd里面是否有你输入的帐号,如果没有则跳出,如果有的话则将该帐号对应的 UID 与 GID (在 / etc / group 中) 读出来,另外,该帐号的主文件夹与 shell 设置也一并读出。
  2. 来则是核对密码表啦!这时Linux会进入 / etc / shadow里面找出对应的帐号与UID,然后核对一下你刚刚输入的密码与里头的密码是否相符。
  3. 一切都OK的话,就进入Shell控管的阶段 。

/ etc / passwd 文件结构
这个文件的构造是这样的:每一行都代表一个帐号,有几行就代表有几个帐号在你的系统中! 不过需要特别留意的是,里头很多帐号本来就是系统正常运行所必须要的,我们可以简称他为系统帐号, 例如 bin, daemon, adm, nobody 等等,这些帐号请不要随意的杀掉。

shadow中存储的密码单向运算。

遗忘密码

  1. 一般用户的密码忘记了:这个最容易解决,请系统管理员帮忙, 他会重新设置好你的密码而不需要知道你的旧密码!利用 root 的身份使用 passwd 指令来处理即可。
  2. root密码忘记了,就比较麻烦了,但是可以使用各种可行的方法开机进入Linux再去修改。

关于群组:有效与初始群组,groups,newgrp

/ etc / group文件结构
这个文件就是在记录GID与群组名称的对应。

有效群组(effective group)与初始群组(initial group)

每个使用者在他的passwd第四栏有所谓的GID,就是所谓的初始群组(initial group),也就是当使用者一登陆系统,立刻就拥有这个群组的相关权限。

groups有效与支持群组的观察

知道所有的支持群组:


在这个输出的讯息中,可知道 dmtsai 这个用户同时属于 dmtsai, wheel 及 users 这三个群组,而且,第一个输出的群组即为有效群组 (effective group) 。 通常有效群组的作用在新建文件,确定新建文件所在的群组。

newgrp:有效群组的切换

newgrp 是有限制的,那就是你想要 切换的群组必须是你已经有支持的群组。举例来说, dmtsai 可以在 dmtsai / wheel / users 这三 个群组间切换有效群组,但是 dmtsai 无法切换有效群组成为 sshd 。


加入一个群组有两个方式,一是通过系统管理员 (root) 利用 usermod 帮你加入,如果 root 太忙了而且你的系统有设置群组管理员,那么还可以通过群组管理员以 gpasswd 加入他所管理的群组中 。

/ etc / gshadow
以系统管理员的角度来说,这个 gshadow 最大的功能就是创建群组管理员。root 可能平时太忙碌,所以当有使 用者想要加入某些群组时, root 或许会没有空管理。此时如果能够创建群组管理员的话,那 么该群组管理员就能够将那个帐号加入自己管理的群组中! 可以免去 root 的忙碌啦!不过, 由于目前有类似 sudo 之类的工具, 所以这个群组管理员的功能已经很少使用了。

账号管理

新增与移除使用者:useradd,相关配置文件,passwd,usermod,userdel

创建一个可用的账号需要账号与密码两个数据,账号可以用useradd来新建使用者,密码则使用passwd。


系统会进行的操作:

  1. 在 / etc / passwd 里面创建一行与帐号相关的数据,包括创建 UID / GID / 主文件夹等 。
  2. 在 / etc / shadow 里面将此帐号的密码相关参数填入,但是尚未有密码。
  3. 在 / etc / group 里面加入一个与帐号名称一模一样的群组名称。
  4. 在 / home 下面创建一个与帐号同名的目录作为使用者主文件夹,且权限为 700。

由于在 / etc / shadow内仅会有密码参数而不会有加密过的密码数据,因此我们在创建使用者帐 号时, 还需要使用“ passwd 帐号 ”来给 密码才算是完成了使用者创建的流程。


以上是root来设置用户的权限。用户还可以自己来更改自己的密码。

使用chage来进行更详细的密码参数显示功能。

usermod
在使用useradd后,可以利用usermod来对某些地方进行细部修改。

userdel


删除使用者的相关数据。

使用者功能

一般身份使用者使用的指令。

id

id 这个指令则可以查询某人或自己的相关 UID / GID 等等的信息 。

chsh

就是change shell的简写。

新增与移除群组

groupadd

groupmod

跟 usermod 类似的,这个指令仅是在进行 group 相关参数的修改而已。

groupdel

gpasswd群组管理员功能

主机的细部权限规划:ACL的使用

什么是ACL与如何支持启动ACL

ACL即Access Control List,传统的 Linux 权限只能针对一个用户、一个群组及非此群组的其他人设置权限而已,无法针对单一用户或个人来设计权限。而 ACL 就是为了要改变这个问题 。

ACL的设置技巧:getfacl,setfacl

使用者身份切换

su

su 是最简单的身份切换指令了,可以进行任何身份的切换。

sudo

su 需要了解新切换的使用者密码 (常常是需要 root 的密码), sudo 的执行则仅需要 自己的密码即可! 甚至可以设置不需要密码即可执行 sudo 。由于 sudo可以让你以其他用 户的身份执行指令 (通常是使用 root 的身份来执行指令),因此并非所有人都能够执行 sudo , 而是仅有规范到 _etc_sudoers 内的用户才能够执行 sudo 这个指令。

一般用户能够具有 sudo 的使用权,就是管理员事先审核通过后,才开放sudo 的使用权的!因此,除非是信任用户,否则一般用户默认是不能操作 sudo的。