管理员的工作中, 相当重要的一环就是“管理帐号”啦! 因为整个系统都是你在管理的, 并且所有一般用户的帐号申请, 都必须要通过你的协助才行! 所以你就必须要了解一下如何管理好一个服务器主机的帐号啦! 在管理 Linux 主机的帐号时, 我们必须先来了解一下 Linux 到底是如何辨别每一个使用者的!
13.1.1 使用者识别码: UID 与 GID
虽然我们登陆 Linux 主机的时候, 输入的是我们的帐号, 但是其实 Linux 主机并不会直接认识你的“帐号名称”的, 他仅认识 ID 啊 ( ID 就是一组号码啦) 。 由于计算机仅认识 0 与 1, 所以主机对于数字比较有概念的; 至于帐号只是为了让人们容易记忆而已。 而你的 ID 与帐号的对应就在 /etc/passwd 当中哩。
Tips
如果你曾经在网络上下载过 tarball 类型的文件, 那么应该不难发现, 在解压缩之后的文件中, 文件拥有者的字段竟然显示“不明的数字”? 奇怪吧? 这没什么好奇怪的, 因为 Linux 说实在话, 他真的只认识代表你身份的号码而已!
那么到底有几种 ID 呢? 还记得我们在第五章内有提到过, 每一个文件都具有“拥有人与拥有群组”的属性吗? 没错啦~每个登陆的使用者至少都会取得两个 ID , 一个是使用者 ID ( UserID , 简称 UID) 、 一个是群组 ID ( Group ID , 简称 GID)。
那么文件如何判别他的拥有者与群组呢? 其实就是利用 UID 与 GID 啦! 每一个文件都会有所谓的拥有者 ID 与拥有群组 ID , 当我们有要显示文件属性的需求时, 系统会依据 /etc/passwd与 /etc/group 的内容, 找到 UID / GID 对应的帐号与群组名称再显示出来! 我们可以作个小实验, 你可以用 root 的身份 vim /etc/passwd , 然后将你的一般身份的使用者的 ID 随便改一个号码, 然后再到你的一般身份的目录下看看原先该帐号拥有的文件, 你会发现该文件的拥有人变成了 “数字了”呵呵! 这样可以理解了吗? 来看看下面的例子:
# 1\. 先察看一下, 系统里面有没有一个名为 dmtsai 的用户?
[root@study ~]# id dmtsai
uid=1000( dmtsai) gid=1000( dmtsai) groups=1000( dmtsai) ,10( wheel) <==确定有这个帐号喔!
[root@study ~]# ll -d /home/dmtsai
drwx------. 17 dmtsai dmtsai 4096 Jul 17 19:51 /home/dmtsai
# 瞧一瞧, 使用者的字段正是 dmtsai 本身喔!
# 2\. 修改一下, 将刚刚我们的 dmtsai 的 1000 UID 改为 2000 看看:
[root@study ~]# vim /etc/passwd
....( 前面省略) ....
dmtsai:x:2000:1000:dmtsai:/home/dmtsai:/bin/bash <==修改一下特殊字体部分, 由 1000 改过来
[root@study ~]# ll -d /home/dmtsai
drwx------. 17 1000 dmtsai 4096 Jul 17 19:51 /home/dmtsai
# 很害怕吧! 怎么变成 1000 了? 因为文件只会记录 UID 的数字而已!
# 因为我们乱改, 所以导致 1000 找不到对应的帐号, 因此显示数字!
# 3\. 记得将刚刚的 2000 改回来!
[root@study ~]# vim /etc/passwd
....( 前面省略) ....
dmtsai:x:1000:1000:dmtsai:/home/dmtsai:/bin/bash <==“务必一定要”改回来!
你一定要了解的是, 上面的例子仅是在说明 UID 与帐号的对应性, 在一部正常运行的 Linux主机环境下, 上面的动作不可随便进行, 这是因为系统上已经有很多的数据被创建存在了,随意修改系统上某些帐号的 UID 很可能会导致某些程序无法进行, 这将导致系统无法顺利运行的结果, 因为权限的问题啊! 所以, 了解了之后, 请赶快回到 /etc/passwd 里面, 将数字改回来喔!
13.1.2 使用者帐号
Linux 系统上面的使用者如果需要登陆主机以取得 shell 的环境来工作时, 他需要如何进行呢? 首先, 他必须要在计算机前面利用 tty1~tty6 的终端机提供的 login 接口, 并输入帐号与密码后才能够登陆。 如果是通过网络的话, 那至少使用者就得要学习 ssh 这个功能了 ( 服务器篇再来谈) 。 那么你输入帐号密码后, 系统帮你处理了什么呢?
1. 先找寻 /etc/passwd 里面是否有你输入的帐号? 如果没有则跳出, 如果有的话则将该帐号对应的 UID 与 GID ( 在 /etc/group 中) 读出来, 另外, 该帐号的主文件夹与 shell 设置也一并读出;
2. 再来则是核对密码表啦! 这时 Linux 会进入 /etc/shadow 里面找出对应的帐号与 UID, 然后核对一下你刚刚输入的密码与里头的密码是否相符?
3. 如果一切都 OK 的话, 就进入 Shell 控管的阶段啰!
大致上的情况就像这样, 所以当你要登陆你的 Linux 主机的时候, 那个 /etc/passwd 与/etc/shadow 就必须要让系统读取啦 ( 这也是很多攻击者会将特殊帐号写到 /etc/passwd 里头去的缘故) , 所以呢, 如果你要备份 Linux 的系统的帐号的话, 那么这两个文件就一定需要备份才行呦!
由上面的流程我们也知道, 跟使用者帐号有关的有两个非常重要的文件, 一个是管理使用者UID/GID 重要参数的 /etc/passwd , 一个则是专门管理密码相关数据的 /etc/shadow 啰! 那这两个文件的内容就非常值得进行研究啦! 下面我们会简单的介绍这两个文件, 详细的说明可以参考 man 5 passwd 及 man 5 shadow [1]。
/etc/passwd 文件结构
这个文件的构造是这样的: 每一行都代表一个帐号, 有几行就代表有几个帐号在你的系统中! 不过需要特别留意的是, 里头很多帐号本来就是系统正常运行所必须要的, 我们可以简称他为系统帐号, 例如 bin, daemon, adm, nobody 等等, 这些帐号请不要随意的杀掉他呢!这个文件的内容有点像这样:
[root@study ~]# head -n 4 /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
我们先来看一下每个 Linux 系统都会有的第一行, 就是 root 这个系统管理员那一行好了, 你可以明显的看出来, 每一行使用“:”分隔开, 共有七个咚咚, 分别是:
- 帐号名称: 就是帐号啦! 用来提供给对数字不太敏感的人类使用来登陆系统的! 需要用来对应 UID 喔。 例如 root 的 UID 对应就是 0 ( 第三字段) ;
2. 密码:早期 Unix 系统的密码就是放在这字段上! 但是因为这个文件的特性是所有的程序都能够读取, 这样一来很容易造成密码数据被窃取, 因此后来就将这个字段的密码数据给他改放到 /etc/shadow 中了。 所以这里你会看到一个“ x ”, 呵呵!
3. UID: 这个就是使用者识别码啰! 通常 Linux 对于 UID 有几个限制需要说给您了解一下:
上面这样说明可以了解了吗? 是的, UID 为 0 的时候, 就是 root 呦! 所以请特别留意一
下你的 /etc/passwd 文件!
4. GID: 这个与 /etc/group 有关! 其实 /etc/group 的观念与 /etc/passwd 差不多, 只是他是用来规范群组名称与 GID 的对应而已!
5. 使用者信息说明栏: 这个字段基本上并没有什么重要用途, 只是用来解释这个帐号的意义而已! 不过, 如果您提供使用 finger 的功能时, 这个字段可以提供很多的讯息呢! 本章后面的 chfn 指令会来解释这里的说明。
6. 主文件夹: 这是使用者的主文件夹, 以上面为例, root 的主文件夹在 /root , 所以当root 登陆之后, 就会立刻跑到 /root 目录里头啦! 呵呵! 如果你有个帐号的使用空间特别的大, 你想要将该帐号的主文件夹移动到其他的硬盘去该怎么作? 没有错! 可以在这个字段进行修改呦! 默认的使用者主文件夹在 /home/yourIDname
7. Shell: 我们在第十章 BASH 提到很多次, 当使用者登陆系统后就会取得一个 Shell 来与系统的核心沟通以进行使用者的操作任务。 那为何默认 shell 会使用 bash 呢? 就是在这个字段指定的啰! 这里比较需要注意的是, 有一个 shell 可以用来替代成让帐号无法取得shell 环境的登陆动作! 那就是 /sbin/nologin 这个东西! 这也可以用来制作纯 pop 邮件帐号者的数据呢!/etc/shadow 文件结构