Linux 账号管理与 ACL 权限配置
那么到底有几种 ID 呢?还记得我们在第六章内有提到过, 每一个文件都具有『拥有人与拥有群组』的属性吗?没错啦~每个登陆的使用者至少都会取得两个 ID ,一个是使用者 ID (User ID ,简称 UID)、一个是群组 ID (Group ID ,简称 GID)。
?
那么文件如何判别他的拥有者与群组呢?其实就是利用 UID 与 GID 啦!每一个文件都会有所谓的拥有者 ID 与拥有群组 ID ,当我们有要显示文件属性的需求时,系统会依据 /etc/passwd 与 /etc/group 的内容, 找到 UID / GID 对应的账号与组名再显示出来!我们可以作个小实验,你可以用 root 的身份 vi /etc/passwd ,然后将你的一般身份的使用者的 ID 随便改一个号码,然后再到你的一般身份的目录下看看原先该账号拥有的文件,你会发现该文件的拥有人变成了 『数字了』呵呵!这样可以理解了吗?来看看底下的例子:
?
?
id 范围该 ID 使用者特性0
(系统管理员)当 UID 是 0 时,代表这个账号是『系统管理员』! 所以当你要让其他的账号名称也具有 root 的权限时,将该账号的 UID 改为 0 即可。 这也就是说,一部系统上面的系统管理员不见得只有 root 喔! 不过,很不建议有多个账号的 UID 是 0 啦~1~499
(系统账号)保留给系统使用的 ID,其实?
上述命令中,2008/09/04 为你想要计算的日期,86400 为每一天的秒数, %s 为 1970/01/01 以来的累积总秒数。 由于 bash 仅支持整数,因此最终需要加上 1 补齐 1970/01/01 当天。
图 1.3.1 、账号相关文件之间的 UID/GID 与口令相关性示意图?
至于在 /etc/group 比较重要的特色在于第四栏啦,因为每个使用者都可以拥有多个支持的群组,这就好比在学校念书的时候, 我们可以加入多个社团一样! ^_^。不过这里你或许会觉得奇怪的,那就是:『
图 1.3.2 、newgrp 的运行示意图?
虽然用户的环境配置(例如环境变量等等其他数据)不会有影响,但是使用者的『群组权限』将会重新被计算。 但是需要注意,由于是新取得一个 shell ,因此如果你想要回到原本的环境中,请输入 exit 回到原本的 shell 喔!
既然如此,也就是说,只要我的用户有支持的群组就是能够切换成为有效群组!好了, 那么如何让一个账号加入不同的群组就是问题的所在啰。你要加入一个群组有两个方式,一个是透过系统管理员 (root) 利用 usermod 帮你加入,如果 root 太忙了而且你的系统有配置群组管理员,那么你可以透过群组管理员以 gpasswd 帮你加入他所管理的群组中!详细的作法留待下一小节再来介绍啰!
为何用户要设订自己的口令会这么麻烦啊?这是因为口令的安全性啦!如果口令配置太简单, 一些有心人士就能够很简单的猜到你的口令,如此一来人家就可能使用你的一般账号登陆你的主机或使用其他主机资源, 对主机的维护会造成困扰的!所以新的 distributions 是使用较严格的 PAM 模块来管理口令,这个管理的机制写在 /etc/pam.d/passwd 当中。而?
?
这个动作会直接升级用户的口令而不用再次的手动输入!好处是方便处理,缺点是这个口令会保留在命令中, 未来若系统被攻破,人家可以在 /root/.bash_history 找到这个口令呢!所以这个动作通常仅用在 shell script 的大量创建使用者账号当中!要注意的是,这个选项并不存在所有 distributions 版本中, 请使用 man passwd 确认你的 distribution 是否有支持此选项喔!
?
如果你想要让 vbird2 的口令具有相当的守则,举例来说你要让 vbird2 每 60 天需要变更口令, 口令过期后 10 天未使用就宣告口令失效,那该如何处理?
?
??
非常有趣吧!你会发现 agetest 这个账号在第一次登陆时可以使用与账号同名的口令登陆, 但登陆时就会被要求立刻更改口令,更改口令完成后就会被踢出系统。再次登陆时就能够使用新口令登陆了! 这个功能对学校老师非常有帮助!因为我们不想要知道学生的口令,那么在初次上课时就使用与学号相同的账号/口令给学生, 让她们登陆时自行配置她们的口令,如此一来就能够避免其他同学随意使用别人的账号,也能够保证学生知道如何更改自己的口令!
?
在范例三当中,我们发现输出的信息还会有 Office, Office Phone 等信息,那这些信息要如何记录呢? 底下我们会介绍 chfn 这个命令!来看看如何修改用户的 finger 数据吧!
?
处理的方法如下所示:
?
??接下来,上述的 pro1, pro2, pro3, myuser1 这四个人,只要输入『 sudo su - 』并且输入『自己的口令』后, 立刻变成 root 的身份!不但 root 口令不会外流,用户的管理也变的非常方便! 这也是实务上面多人共管一部主机时常常使用的技巧呢!这样管理确实方便,不过还是要强调一下大前提, 那就是『这些你加入的使用者,全部都是你能够信任的用户』!?
要注意的地方主要有:myuser1 与 myuser2 都有支持次要群组,但该群组不见得会存在,因此需要先手动创建他! 然后 myuser3 是『不可登陆系统』的账号,因此需要使用 /sbin/nologin 这个 shell 来给予,这样该账号就无法登陆啰! 这样是否理解啊!接下来再来讨论比较难一些的环境!如果是专题环境该如何制作?
?
?
?
由于此项目计划只能够给 pro1, pro2, pro3 三个人使用,所以 /srv/projecta 的权限配置一定要正确才行! 所以该目录群组一定是 projecta ,但是权限怎么会是 2770 呢还记得第七章谈到的 SGID 吧?为了让三个使用者能够互相修改对方的文件, 这个 SGID 是必须要存在的喔!如果连这里都能够理解,嘿嘿!您的账号管理已经有一定程度的概念啰! ^_^
?
但接下来有个困扰的问题发生了!假如任务一的 myuser1 是 projecta 这个项目的助理,他需要这个项目的内容, 但是他『不可以修改』项目目录内的任何数据!那该如何是好?你或许可以这样做:
将 myuser1 加入 projecta 这个群组的支持,但是这样会让 myuser1 具有完整的 /srv/projecta 的权限, myuser1 是可以删除该目录下的任何数据的!这样是有问题的;将 /srv/projecta 的权限改为 2775 ,让 myuser1 可以进入查阅数据。但此时会发生所有其他人均可进入该目录查阅的困扰! 这也不是我们要的环境。真要命!传统的 Linux 权限无法针对某个个人配置专属的权限吗?其实是可以啦!接下来我们就来谈谈这个功能吧!
?
3.例题:
使用 root 切换成为任何使用者时,并不需要输入新用户的口令;虽然使用 su 很方便啦,不过缺点是,?
?
sudo 可以让你切换身份来进行某项任务,例如上面的两个范例。范例一中,我们的 root 使用 sshd 的权限去进行某项任务! 要注意,因为我们无法使用『 su - sshd 』去切换系统账号 (因为系统账号的 shell 是 /sbin/nologin), 这个时候 sudo 真是他 X 的好用了!立刻以 sshd 的权限在 /tmp 底下创建文件!查阅一下文件权限你就了解意义啦! 至于范例二则更使用多重命令串 (透过分号 ; 来延续命令进行),使用 sh -c 的方法来运行一连串的命令, 如此真是好方便!
但是 sudo 默认仅有 root 能使用啊!为什么呢?因为 sudo 的运行是这样的流程:
[root@www ~]# visudoUser_Alias ADMINS = pro1, pro2, pro3, myuser1ADMINS ALL=(root) /bin/su -
来源: http://vbird.dic.ksu.edu.tw/linux_basic/0410accountmanager_1.php
?
参考:Ubuntu用户及用户组管理命令