Techyou labs
真正的爱应该超越生命的长度、心灵的宽度、 灵魂的深度
常用标签
September 16, 2010

要登入Linux 系统一定要有帐号与密码才行,否则怎么登入,您说是吧? !不过, 不同的使用者应该要拥有不同的权限才行吧?我们还可以透过user/group 的特殊权限设定, 来规范出不同的群组开发专案呢~在Linux 的环境下,我们可以透过很多方式来限制使用者能够使用的系统资源, 包括bash shell 章节提到的ulimit 限制、还有特殊权限限制,如umask 等等。透过这些举动,我们可以规范出不同使用者的使用资源。另外,还记得系统管理员的帐号吗?对!就是 root 。请问一下,除了root 之外,是否可以有其他的系统管理员帐号?为什么大家都要尽量避免使用数字型态的帐号?如何修改使用者相关的资讯呢?这些我们都得要了解了解的!

1. Linux 的帐号与群组
1.1 使用者识别: UID 与 GID
1.2 使用者帐号:/etc/passwd, /etc/shadow
1.3 关于群组: 有效与初始群组、 groups, newgrp
2. 帐号管理:
2.1 新增与移除使用者: useradd, 相关设定档, passwd, usermod, userdel
2.2 使用者功能:chsh, chfn, finger, id
2.3 新增与移除群组:groupadd, groupmod, groupdel, gpasswd, newgrp
2.4 密码管理: passwd
3. 使用者身份切换:
3.1 su
3.2 sudo, visudo (/etc/sudoers)
4. 使用者的特殊 shell 与 PAM 模组
4.1 特殊的 shell , /sbin/nologin
4.2 PAM 模组: /etc/nologin, /etc/securetty, /etc/security/*

5. Linux 系统上使用者的对谈与mail 的使用:
4.1 查询使用者: w, who, last, lastlog
4.2 使用者对谈: talk, mesg, wall
4.3 使用者邮件信箱: mail
6. 手动新增使用者:
5.1 一些检查工具:pwck, pwconv, pwunconv, chpasswd
5.2 特殊帐号,如纯数字帐号的建立:
5.3 不开放终端机登入的帐号(ex>mail acccount)
5.4 一个大量建置帐号的范例:
7. 本章习题练习
8. 针对本文的建议:http://phorum.vbird.org/viewtopic.php?t=23887
大标题的图示Linux 的帐号与群组
管理员的工作中,相当重要的一环就是『管理帐号』啦!因为整个系统都是你在管理的,并且所有的一般用户的申请,都必须要透过你的协助才行!所以你就必须要了解一下如何管理好一个网站的帐号管理啦!在管理Linux 主机的帐号时,我们必须先来了解一下Linux 到底是如何辨别每一个使用者的!

小标题的图示使用者识别: UID 与 GID
虽然我们登入Linux 主机的时候,输入的是我们的帐号,但是,其实Linux 主机并不会直接认识你的『帐号名称』的,他仅认识ID 啊~ID 就是一组号码啦~ 主机对于数字比较有概念的,帐号只是为了让人们容易记忆而已。而您的ID 与帐号的对应就在/etc/passwd 当中哩。
Tips:
如果你曾经以tarball 安装过软体的话,那么应该不难发现,在解压缩之后的档案, 档案拥有者竟然是『不明的数字』?奇怪吧?这没什么好奇怪的,因为Linux 说实在话,他真的只认识代表你身份的号码而已!
那么到底有几种 ID 呢?还记得我们在『档案属性与目录配置』 那一篇文章的时候有提到每一个档案都具有『拥有人与拥有群组』的属性吗?没错啦~每个登入的使用者至少都会取得两个ID ,一个是使用者ID (User ID ,简称UID)、 一个是群组ID (Group ID ,简称GID)。

那么档案如何判别他的拥有者与群组呢?其实就是利用 UID 与 GID 啦!每一个档案都会有所谓的拥有者ID 与拥有群组ID ,亦即是UID 与GID ,然后系统会依据/etc/passwd 的内容,去将该档案的拥有者与群组名称,使用帐号的形式来秀出来!我们可以作个小实验,你可以以root 的身份vi /etc/passwd ,然后将你的一般身份的使用者的ID 随便改一个号码, 然后再到你的一般身份的目录下看看原先该帐号拥有的档案,你会发现该档案的拥有人变成了『数字了』呵呵!这样可以理解了吗?

[[email protected] ~]# vi /etc/passwd
.....(前面省略).....
dmtsai:x:501:501::/home/dmtsai:/bin/bash <==将原本的501:501 改成3000:501

[[email protected] ~]# ls -ld /home/
drwxr-xr-x 3 501 dmtsai 4096 Aug 30 10:37 dmtsai
# 瞧!这里就能够知道,其实档案记录的是UID 啦~

你一定要了解的是,上面的例子仅是在说明UID 与帐号的对应性, 在一部正常运作的Linux 主机环境下,上面的动作不可随便进行, 这是因为系统上已经有很多的资料在运行了,随意修改系统上某些帐号的UID 很可能会导致某些程序无法进行,这将导致系统无法顺利运作的结果。因为权限的问题啊!所以,了解了之后,请赶快回到/etc/passwd 里面,将数字改回来喔!

# 如何登入 Linux 取得 UID/GID
好了,那么我们再来谈一谈,到底我们是怎样登入Linux 主机的呢?其实也不难啦!当我们在主机前面或者是以telnet 或者ssh 登入主机时,系统会出现一个login 的画面让你输入帐号,这个时候当你输入帐号与密码之后, Linux 会:

1. 先找寻/etc/passwd 里面是否有这个帐号?如果没有则跳出,如果有的话则将该帐号对应的UID ( User ID )与GID ( Group ID )读出来,另外,该帐号的家目录与shell 设定也一并读出;
2. 再来则是核对密码表啦!这时Linux 会进入/etc/shadow 里面找出对应的帐号与UID,然后核对一下你刚刚输入的密码与里头的密码是否相符?
3. 如果一切都OK 的话,就进入Shell 控管的阶段啰!

大致上的情况就像这样,所以呢,当你要登入你的Linux 主机的时候,那个/etc/passwd 与/etc/shadow 就必须要让系统读取啦,(这也是很多攻击者会将特殊帐号写到/etc/passwd 里头去的缘故!)所以呢,如果你要备份Linux 的系统的帐号的话, 那么这两个档案就一定需要备份才行呦!
小标题的图示使用者帐号:/etc/passwd, /etc/shadow
由上面的说明您大概已经知道,嘿嘿!帐号管理最重要的两个档案就是『 /etc/passwd 与/etc/shadow 』了!这两个档案可以说是Linux 里头最重要的档案之一了!如果没有这两个档案的话,呵呵!您可是无法登入 Linux 的呦!所以,底下我们先针对这两个档案来进行说明。当然啰,更详细的资料您可以自行man 5 passwd 及man 5 shadow 的啦~

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

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 这个系统管理员那一行好了, 你可以明显的看出来,每一行使用『:』分隔开,共有七个咚咚,分别是:

1. 帐号名称:就是帐号名称啦!对应 UID 用的!例如root 就是预设的系统管理员的帐号名称;
2. 密码:早期的Unix 系统的密码是放在这个档案中的, 但是因为这个档案的特性是所有的程序都能够读取,所以,这样一来很容易造成资料的被窃取,因此后来就将这个栏位的密码资料给他改放到/etc/shadow 中了,关于/etc/shadow 这一部份等一下再说。而这里你会看到一个 x ,呵呵!别担心,这表示密码已经被移动到shadow 这个加密过后的档案啰;
3. UID:这个就是使用者识别码(ID) 啰!通常Linux 对于UID 有几个限制需要说给您了解一下:
id 范围 该 ID 使用者特性
0 当UID 是0 时,代表这个帐号是『系统管理员』!所以当你要作另一个系统管理员帐号时, 你可以将该帐号的UID 改成0 即可;这也就是说,一部系统上面的系统管理员不见得只有root 喔!不过,不很建议有多个帐号的UID 是0 啦~
1~499 保留给系统使用的ID,其实1~65534 之间的帐号并没有不同, 也就是除了0 之外,其他的UID 并没有不一样,预设500 以下给系统作为保留帐号只是一个习惯。这样的好处是,以有名的DNS 伺服器的启动服务『 named 』为例,这个程式的预设所有人named 的帐号UID 是25 ,当有其他的帐号同样是25 时,很可能会造成系统的一些小问题!为了杜绝这样的问题,建议保留500 以前的UID 给系统吧!
不过,一般来说, 1~99 会保留给系统预设的帐号,另外100~499 则保留给一些服务来使用。
500~65535 给一般使用者用的。事实上,目前的linux 核心(2.6.x 版)已经可以支援到4294967295 (2^32-1) 这么大的UID 号码喔!

上面这样说明可以了解了吗?是的, UID 为0 的时候,就是root 呦!所以请特别留意一下你的/etc/passwd 档案!

4. GID:这个与 /etc/group 有关!其实/etc/group 的观念与/etc/passwd 差不多,只是他是用来规范group 的而已!
5. 使用者资讯说明栏:这个栏位基本上并没有什么重要用途, 只是用来解释这个帐号的意义而已!不过,如果您提供使用finger 的功能时, 这个栏位可以提供很多的讯息呢!底下的 chfn 可以解释一下啰!
6. 家目录:这是使用者的家目录,以上面为例, root 的家目录在/root ,所以当root 登入之后,就会立刻跑到/root 里头啦!呵呵!如果你有个帐号的使用空间特别的大,你想要将该帐号的家目录移动到其他的硬碟去, 没有错!可以在这里进行修改呦!预设的使用者家目录在 /home/yourIDname
7. Shell:所谓的shell 是用来沟通人类下达的指令与硬体之间真正动作的界面!我们通常使用/bin/bash 这个shell 来进行指令的下达!嘿嘿!发现了吧?我们在bash 章节里面提到很多次,登入Linux 时为何预设是bash 呢?就是这里设定的啦~ 这里比较需要注意的是,有一个shell 可以用来替代成让帐号无法登入的指令!那就是 /sbin/nologin 这个东西!这也可以用来制作纯pop 邮件帐号者的资料呢!

# /etc/shadow
上面约略提到,由于每个程序都需要取得uid 与gid 来判断权限的问题,所以, /etc/passwd 的权限必须要设定成为-rw-r--r-- 这样的权限,在这样的情况下,使用者的密码不就任何人都可以看到吗?即使这个档案内的密码栏是加密的, 坏心肠的朋友也可能利用暴力破解法去try and error 找出您的密码资料......

因为这样的关系,所以后来发展出将密码移动到/etc/shadow 这个档案分隔开来的技术, 而且还加入很多的密码限制参数在/etc/shadow 里头呢!我们先来了解一下这个档案的构造吧!我的 /etc/shadow 档案有点像这样:

root:$1$i9Ejldjfjio389u9sjl$jljsoi45QE/:12959:0:99999:7:::
bin:*:12959:0:99999:7:::
daemon:*:12959:0:99999:7:::
adm:*:12959:0:99999:7:::

基本上, shadow 同样以『:』作为分隔符号,如果数一数,会发现共有九个栏位啊, 这九个栏位的用途是这样的:

1. 帐号名称:由于密码也需要与帐号对应啊~因此, 这个档案的第一栏就是帐号,必须要与/etc/passwd 相同才行!
2. 密码:这个才是真正的密码,而且是经过编码过的密码啦!你只会看到有一些特殊符号的字母就是了!需要特别留意的是, 虽然这些加密过的密码很难被解出来,但是『很难』不等于『不会』,所以,这个档案的预设属性是『-rw-------』或者是『-r--------』,亦即只有root 才可以读写就是了!你得随时注意,不要不小心更动了这个档案的属性呢!另外, 如果是在密码栏的第一个字元为『 * 』或者是『 ! 』,表示这个帐号并不会被用来登入的意思。所以万一哪一天你的某个使用者不乖时,可以先在这个档案中,将他的密码栏位的最前面多加一个* !嘿嘿!他就无法使用该帐号啰!直到他变乖了,再给他启用啊!
3. 最近更动密码的日期:这个栏位记录了『更动密码的那一天』的日期, 不过,很奇怪呀!在我的例子中怎么会是 12959 呢?呵呵,这个是因为计算Linux 日期的时间是以1970 年1 月1 日作为1 ,而1971 年1 月1 日则为366 啦!所以这个日期是累加的呢!得注意一下这个资料呦!那么最近的2005 年1 月1 日就是12784 啦,了解了吗?
4. 密码不可被更动的天数: 第四个栏位记录了这个帐号的密码需要经过几天才可以被变更!如果是0 的话, 表示密码随时可以更动的意思。这的限制是为了怕密码被某些人一改再改而设计的!如果设定为20 天的话,那么当你设定了密码之后, 20 天之内都无法改变这个密码呦!
5. 密码需要重新变更的天数: 由于害怕密码被某些『有心人士』窃取而危害到整个系统的安全,所以有了这个栏位的设计。你必须要在这个时间之内重新设定你的密码,否则这个帐号将会暂时失效。而如果像上面的99999 的话,那就表示,呵呵,密码不需要重新输入啦!不过,如果是为了安全性,最好可以设定一段时间之后,严格要求使用者变更密码呢!
6. 密码需要变更期限前的警告期限:当帐号的密码失效期限快要到的时候, 就是上面那个『必须变更密码』的那个时间时,系统会依据这个栏位的设定,发出『警告』言论给这个帐号,提醒他『再过n 天你的密码就要失效了,请尽快重新设定你的密码呦! 』,如上面的例子,则是密码到期之前的7 天之内,系统会警告该用户。
7. 密码过期的恕限时间:如果用户过了警告期限没有重新输入密码, 使得密码失效了,也就是说,你在『必须变更密码的期限前,并没有变更你的密码! 』那么该组密码就称为『失效的密码』啰~怎么办?没关系,还有这个栏位的天数设计啊~ 意思就是说,当密码失效后,你还可以用这个密码在n 天内进行登入的意思。而如果在这个天数后还是没有变更密码,呵呵!那么您的帐号就失效了!无法登入!
8. 帐号失效日期:这个日期跟第三个栏位一样,都是使用1970 年以来的总日数设定。这个栏位表示: 这个帐号在此栏位规定的日期之后,将无法再使用。这个栏位会被使用通常应该是在『收费服务』的系统中, 你可以规定一个日期让该帐号不能再使用啦!
9. 保留:最后一个栏位是保留的,看以后有没有新功能加入。

举个例子来说好了,假如我的dmtsai 这个使用者的密码栏如下所示:

dmtsai:$1$8zdAKdfC$XDa8eSus2I7nQL7UjRsIy/:13025:5:60:7:2:13125:

这表示什么呢?要注意的是, 13025 是2005/08/30 ,所以, dmtsai 这个使用者他的密码相关意义是:

* 最近一次更动密码的日期是2005/08/30 (13025);
* 能够修改密码的时间是5 天以后,也就是2005/09/04 以前dmtsai 不能修改自己的密码; 如果使用者还是尝试要更动自己的密码,系统就会出现这样的讯息:

You must wait longer to change your password
passwd: Authentication token manipulation error

* 使用者必须要在2005/09/04 到2005/10/29 之间的60 天限制内去修改自己的密码,若2005/10/29 之后还是没有变更密码时,该帐号就会宣告失效;
* 如果使用者一直没有更改密码,那么在2005/10/29 之前的7 天内,系统会警告dmtsai 应该修改密码的相关资讯;例如当dmtsai 登入时,系统会主动提示如下的资讯:

Warning: your password will expire in 5 days

* 如果该帐号一直到2005/10/29 都没有更改密码,由于还有两天的恕限时间,因此, dmtsai 还是可以在2005/10/31 以前继续登入;
* 如果使用者在2005/10/29 以前变更过密码,那么那个13025 的日期就会跟着改变,因此, 所有的限制日期也会跟着相对变动喔! ^_^
* 无论使用者如何动作,到了13125 ,大约是2005/12/8 左右,该帐号就失效了~

透过这样的说明,您应该会比较容易理解了吧? ! ^_^
Tips:
常常听到:我的密码忘记或者被更动了?怎么办?

有的时候会发生这样的情况,就是说,你的root 密码忘记了!要怎么办?重新安装吗?另外, 有的时候是被入侵了, root 的密码被更动过,该如何是好?

这个时候就必须要使用到/etc/shadow 这个资料了!我们刚刚知道密码是存在这个档案中的, 所以只要你能够以各种可行的方法开机进入Linux ,例如单人维护模式,或者是以live CD (KNOPPIX) 来进入Linux 系统。之后,将硬碟顺利挂载,然后进入/etc/shadow 这个档案中,将root 的密码这一栏全部清空!然后再登入Linux 一次,这个时候root 将不需要密码(有的时候需要输入空白字元) 就可以登入了!这个时候请赶快以passwd 设定root 密码即可。
小标题的图示关于群组: 有效与初始群组、groups, newgrp
认识了帐号相关的两个档案/etc/passwd 与/etc/shadow 之后,您或许还是会觉得奇怪, 那么群组的设定档在哪里?还有,在/etc/passwd 的第四栏不是所谓的GID 吗?那又是啥?呵呵~此时就需要了解/etc/group 与/etc/gshadow 啰~

# /etc/group
这个档案就是在记录GID 与群组名称的对应了~我的/etc/group 内容有点像这样:

root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm

也是以冒号『:』作为栏位的分隔符号,共分为四栏,每一栏位的意义是:

1. 群组名称:就是群组名称啦!
2. 群组密码:通常不需要设定,因为我们很少使用到群组登入!不过,同样的,密码也是被纪录在/etc/gshadow 当中啰!
3. GID:就是群组的 ID 啊~
4. 支援的帐号名称:加入这个群组里面的所有的帐号, 我们知道,一个使用者是可以加入多个群组的。举例来说,如果我想要让dmtsai 也加入root 这个群组,那么在第一行的最后面加上『,dmtsai』,注意不要有空格, 使成为『 root:x:0:root,dmtsai』就可以啰~

比较重要的特色在于第四栏啦,因为每个使用者都可以拥有多个支援的群组, 这就好比在学校念书的时候,我们可以加入多个社团一样! ^_^。不过这里您或许会觉得奇怪的,那就是:『假如我同时加入多个群组, 那么我在作业的时候,到底是以那个群组为准? 』底下我们就来谈一谈这个『有效群组』的概念。

# 有效群组(effective group)与初始群组(initial group)
还记得每个使用者在他的/etc/passwd 里面的第四栏有所谓的GID 吧?那个GID 就是所谓的『初始群组( initial group ) 』了!也就是说,当使用者一登入系统,立刻就拥有这个群组的相关权限的意思。举例来说,我们上面提到dmtsai 这个使用者的/etc/passwd 与/etc/group 还有/etc/gshadow 相关的内容如下:

[[email protected] ~]# grep dmtsai /etc/passwd /etc/group /etc/gshadow
/etc/passwd:dmtsai:x:501:501::/home/dmtsai:/bin/bash
/etc/group:users:x:100:dmtsai
/etc/group:dmtsai:x:501:
/etc/gshadow:users:::dmtsai
/etc/gshadow:dmtsai:!::

仔细看到上面这个表格,在/etc/passwd 里面,dmtsai 这个使用者所属的群组为GID=501 , 也就是/etc/group 里头dmtsai 那个群组啦~因为这是initial group ,所以, 使用者一登入就会主动取得,不需要在/etc/group 的第四个栏位写入该帐号的!

但是非initial group 的其他群组可就不同了。举上面这个例子来说,我将dmtsai 加入users 这个群组当中,由于users 这个群组并非是dmtsai 的初始群组,因此, 我必须要在/etc/group 这个档案中,找到users 那一行,并且将dmtsai 这个帐号加入第四栏, 这样dmtsai 才能够支援users 这个群组啊。

那么在这个例子当中,因为我的dmtsai 这个帐号同时支援dmtsai 与users 这两个群组, 因此,在读取/写入/执行档案时,针对群组部分,只要是users 与dmtsai 这两个群组拥有的功能, 我dmtsai 这个使用者都能够拥有喔!这样了呼?不过,这是针对已经存在的档案而言,如果今天我要建立一个新的档案或者是新的目录,请问一下,新档案的群组是dmtsai 还是users ?呵呵!这就得要检查一下当时的有效群组了(effective group)。

如果我以dmtsai 这个使用者的身份登入后,该如何知道我所有支援的群组呢?很简单啊,直接输入groups 就可以了!注意喔,是 groups 有加 s 呢!结果像这样:

[[email protected] ~]$ groups
dmtsai users

在这个输出的讯息中,我知道我同时属于dmtsai 及users 这个两个群组,而且, 第一个输出的群组即为有效群组(effective group) 了。也就是说,我的有效群组为dmtsai 啦~此时,如果我以touch 去建立一个新档,例如: touch test ,那么这个档案的拥有者为dmtsai ,而且群组也是dmtsai 的啦。这样是否可以了解什么是有效群组了?

那么如何变更有效群组呢?这个有两个方法,不论是那个方法,都是以newgrp 达成的!以上面这个例子来说,因为我的dmtsai 使用者同时拥有dmtsai 与users 两个群组,因此, dmtsai 当然可以随时切换dmtsai/users 成为有效群组啰。所以,我可以下达:

[[email protected] ~]$ newgrp users
[[email protected] ~]$ groups
users dmtsai

此时,我的有效群组就成为 users 了。当然,要能够顺利切换有效群组的话,还需要/etc/gshadow 的辅助才行~这个等一下我们会说明的。好了,那么如果你开始在/home/dmtsai 这个家目录底下尝试建立一个档案,例如『 touch test2 』好了,会发生什么状态呢?呵呵!那个档案的群组竟然变成 users 了!这样更清楚有效群组的意义了吧? !

我们额外的来讨论一下newgrp 这个指令,这个指令可以变更目前使用者的有效群组, 而且是另外以一个shell 来提供登入的喔,所以,以上面的例子来说, dmtsai 这个使用者目前是以另一个shell 登入的,而且新的shell 给予dmtsai 有效GID 为users 就是了。当直接执行『 newgrp groupname 』时,使用者的有效群组会成为groupname ,此时虽然使用者的环境设定(例如环境变数等等其他资料)不会有影响,但是使用者的『权限』将会重新被计算。举例来说, dmtsai 此时建立的新档案群组是users 了~

鸟哥的这个例子当中,要注意的是, dmtsai 这个使用者本来就属于users 与dmtsai 这两个群组, 所以他可以直接使用newgrp 来切换有效群组,而要离开新的有效群组时,输入『 exit 』即可。假设我的Linux 系统当中还有另一个群组,名称为vbird,那么dmtsai 是否可以登入vbird 这个群组?在某些前提下是可以的:

* vbird 这个群组在/etc/gshadow 的密码栏为合法的(不具有! 开头!);
* dmtsai 必须让root 或群组管理员(group administrator) 加入到vbird 群组中。

这两个大前提缺一不可喔!好了,假设我已经使用gpasswd 建立了vbird 这个群组的密码, 而dmtsai 也被加入群组成员当中了,那么当dmtsai 输入『newgrp vbird』时, 嘿嘿! dmtsai 这个使用者的有效群组就能够变成vbird 啰~
# /etc/gshadow
刚刚讲了很多关于『有效群组』的概念,另外,也提到newgrp 这个指令的用法, 但是,如果/etc/gshadow 这个设定没有搞懂得话,那么newgrp 是无法动作的呢!我的 /etc/gshadow 的内容有点像这样:

root:::root
bin:::root,bin,daemon
daemon:::root,bin,daemon
sys:::root,bin,adm

同样还是使用冒号『:』来作为栏位的分隔字元,而且你会发现,这个档案几乎与/etc/group 一模一样啊!是这样没错~不过,要注意的大概就是第二个栏位吧~第二个栏位是密码栏,如果密码栏上面是『!』时,表示该群组不能使用密码来登入呢!至于第四个栏位也就是支援的帐号名称啰~

1. 群组名称
2. 密码栏,同样的,开头为! 表示无法登入;
3. 群组管理员的帐号(相关资讯在后续介绍)
4. 该群组的所属帐号(与/etc/group 内容相同!)

不过,就以系统的操作来说,事实上,这个/etc/gshadow 的密码提供,最大的功能是在于『 让那些不在群组中的成员,临时加入该群组用的。 』 实际上使用的情况是很少的~而如果真的要操作这样的环境,那就得要熟悉newgrp 的用法啰!而且还要提供某个群组的密码出来,真是不好管理。所以,若真的想要让某个使用者利用该群组的功能时, 还是直接将对方加入群组的支援就好了!省得麻烦~
大标题的图示帐号管理
好啦!既然要管理帐号,当然是由新增与移除使用者开始的啰~底下我们就分别来谈一谈如何新增、 移除与更改使用者的相关资讯吧~

小标题的图示新增与移除使用者: useradd, 相关设定档, passwd, usermod, userdel
要如何在Linux 的系统新增一个使用者啊?呵呵~真是太简单了~直接利用useradd 这个指令即可!他的指令下达方法如下:

# useradd

[[email protected] ~]# useradd [-u UID] [-g initial_group] [-G other_group] \
> -[Mm] [-c 说明栏] [-d home] [-s shell] username
参数:
-u :后面接的是 UID ,是一组数字。直接指定一个特定的UID 给这个帐号;
-g :后面接的那个群组名称就是我们上面提到的initial group 啦~
该group ID (GID) 会被放置到/etc/passwd 的第四个栏位内。
-G :后面接的群组名称则是这个帐号还可以支援的群组。
这个参数会修改/etc/group 内的相关资料喔!
-M :强制!不要建立使用者家目录
-m :强制!要建立使用者家目录!
-c :这个就是/etc/passwd 的第五栏的说明内容啦~可以随便我们设定的啦~
-d :指定某个目录成为家目录,而不要使用预设值;
-r :建立一个系统的帐号,这个帐号的UID 会有限制(/etc/login.defs)
-s :后面接一个shell ,预设是/bin/bash 的啦~
范例:

范例一:完全参考预设值建立一个使用者,名称为vbird1
[[email protected] ~]# useradd vbird1
[[email protected] ~]# ls -l /home
drwxr-xr-x 3 vbird1 vbird1 4096 Aug 30 17:33 vbird1
[[email protected] ~]# grep vbird1 /etc/passwd /etc/shadow /etc/group
/etc/passwd:vbird1:x:502:502::/home/vbird1:/bin/bash
/etc/shadow:vbird1:!!:13025:0:99999:7:::
/etc/group:vbird1:x:502:
# 做这个范例只是想要让您了解,其实系统已经规范好了一些新增使用者时的参数了!
# 因此,当我们使用useradd 时,系统会主动的去修改/etc/passwd 与/etc/shadow,
# 而这两个档案内的相关栏位参考值,则会以一些设定档的内容来规范喔!
# 同时也要注意到,使用useradd 新增使用者时,这个使用者的/etc/shadow
# 密码栏会是不可登入的(以!! 为开头),因此还需要使用passwd
# 来给予vbird1 密码后,才算新增完毕!

范例二:我知道我的系统当中有个群组名称为users ,且UID 700 并不存在,
请用这两个参数给予vbird2 建立一个帐号!
[[email protected] ~]# useradd -u 700 -g users vbird2
[[email protected] ~]# ls -l /home
drwxr-xr-x 3 vbird2 users 4096 Aug 30 17:43 vbird2
[[email protected] ~]# grep vbird2 /etc/passwd /etc/shadow /etc/group
/etc/passwd:vbird2:x:700:100::/home/vbird2:/bin/bash
/etc/shadow:vbird2:!!:13025:0:99999:7:::
# 看一下,UID 与initial group 确实改变成我们需要的了!

范例三:建立一个系统帐号,名称为vbird3
[[email protected] ~]# usradd -r vbird3
[[email protected] ~]# grep vbird3 /etc/passwd /etc/shadow /etc/group
/etc/passwd:vbird3:x:101:102::/home/vbird3:/bin/bash
/etc/shadow:vbird3:!!:13025::::::
/etc/group:vbird3:x:102:
# 很重要喔!您会发现, UID 竟然是101 ,而GID 怎么会是102,
# 并且与 /etc/group 有对应的关系喔!有没有加 -r 差很多ㄟ!

我的天呐!这个指令更动的档案怎么怎么多啊?对啊!你才知道啊~ 这也是为啥我们说帐号管理是很复杂的啦~而且他参考的设定档才更多哩!这个指令至少可能会更动到的地方有:

* /etc/passwd
* /etc/shadow
* /etc/group
* /etc/gshadow
* /home/username

那请教一下,您有没有想过,以上述的第一个范例一好了,为何useradd vbird1 他会主动在/home/vbird1 建立起使用者的家目录?家目录内有什么资料且来自哪里?为何预设使用的是/bin/bash 这个shell ?呵呵!这就得要说明一下useradd 所使用的参考档案啰!

# 相关设定档
我们使用useradd 去新增使用者时,一些在/etc/passwd 当中的值会去参考『 /etc/default/useradd 』 ,这个档案的内容有点像这样:

GROUP=100 <==预设的群组
HOME=/home <==预设的家目录所在目录
INACTIVE=-1 <==在 /etc/shadow 内的第 7 栏
EXPIRE= <==在 /etc/shadow 内的第 8 栏
SHELL=/bin/bash <==预设的 shell
SKEL=/etc/skel <==使用者家目录的内容资料参考目录

关于群组的建立机制:

当我们直接使用useradd 来新增帐号时,在预设的情况下,相关的资讯都是参考/etc/default/useradd 这个档案内容的设定的。不过,对于使用者群组的建立机制中, 则有两种不一样的机制存在的:

* 以FC4 为代表,新建使用者时,若无指定initial group , 则系统会主动建立一个与帐号相同的群组名称,以该群组作为使用者的initial group;
* 以SuSE 9 为代表,新建使用者时,预设不会建立新群组,而以/etc/default/useradd 内的GROUP 设定值作为使用者的initial group 。

这应该是很容易理解才是~如果看不懂,请回去前一小节查阅一下/etc/passwd, /etc/shadow 的相关内容架构。

关于使用者家目录的参考:/etc/skel/*

在这个档案当中,比较奇怪的是SKEL 这个玩意儿了,他是啥?其实,这个咚咚就是使用者家目录的参考目录啰~举我们的范例一为例,我利用useradd vbird1 时,他在/home/vbird1 这个使用者家目录内的各项资料,都是由/ etc/skel 所复制过去的~所以呢,未来如果我想要让新增使用者时,该使用者的环境变数~/.bashrc 就设定妥当的话,您可以到/etc/skel/.bashrc 去编辑一下,也可以建立/etc/skel/public_html 这个目录,那么未来新增使用者后,在他的家目录下就会有public_html 那个目录了!这样了呼?

关于使用者 UID/GID 的设定:

另外,与密码还有UID/GID 有关的设定档则是在/etc/login.defs 里面, 这个档案有点像这样:

MAIL_DIR /var/spool/mail <==使用者预设邮件信箱放置目录

PASS_MAX_DAYS 99999 <==/etc/shadow 内的第5 栏
PASS_MIN_DAYS 0 <==/etc/shadow 内的第 4 栏
PASS_MIN_LEN 5 <==密码最短的字元长度,建议可以改到6 以上
PASS_WARN_AGE 7 <==/etc/shadow 内的第 6 栏

UID_MIN 500 <==使用者最小的UID,意即小于500 的UID 为系统保留
UID_MAX 60000 <==使用者能够用的最大UID
GID_MIN 500 <==使用者自订群组的最小GID,小于500 为系统保留
GID_MAX 60000 <==使用者自订群组的最大GID

CREATE_HOME yes <==在不加-M 及-m 时,是否主动建立使用者家目录?

看到这个档案后,您应该晓得的是,为何新建的使用者的UID 都会大于500 了吧?而且某些版本的distributions (例如SuSE server 9) 则是将UID_MIN 设定为1000 ,所以,他的一般身份使用者的UID 就会从1000 起跳啰~这样了解吗? !

那如果我现在新增一个使用者,这个使用者的UID 会是多少?答案是:『 如果/etc/passwd 里面的帐号所属的UID 没有大于/etc/login.defs 里头的UID_MIN (在本例中是500)时,则以UID 500 来作为一个新帐号的UID。如果/etc/passwd 已有大于500 以上的UID 时,则取/etc/passwd 内最大的那个UID 1 作为新设帐号的UID。 』而如果我是想要建立系统用的帐号,所以使用useradd -r sysaccount 这个-r 的参数时,就会找『比500 小的最大的那个UID 1 』就是了。 ^_^

关于家目录预设是否建立:

另外也要注意那个CREATE_HOME 的设定值,这个设定值也很重要。一般来说,在FC4 的环境下, 我们使用useradd useraccount 时,预设是会主动的建立家目录的,除非使用-M 这个参数~ 至于SuSE server 9 这个版本来说,嘿嘿!他预设是不建立家目录的,除非使用-m 这个参数呢!因此,在这里鸟哥也要建议您,如果肯定要建立家目录的话,不论在那个版本, 你最好还是加上-m 这个参数来强制建立家目录吧! ^_^

那么您就能知道啰, useradd 这支程式在建立Linux 上的帐号时,至少会参考:

* /etc/default/useradd
* /etc/login.defs
* /etc/skel/*

这些档案,不过,最重要的其实是建立/etc/passwd, /etc/shadow, /etc/group, /etc/gshadow 还有使用者家目录就是了~所以,如果您了解整个系统运作的状态,也是可以手动直接修改这几个档案就是了。

# passwd
刚刚我们讲到了,使用useradd 建立了帐号之后,在预设的情况下,该帐号是暂时被封锁的,也就是说,该帐号是无法登入的,你可以去瞧一瞧/etc/shadow 内的第二个栏位就晓得啰~那该如何是好?怕什么?直接给他设定新密码就好了嘛!对吧~设定密码就使用 passwd 啰!

[[email protected] ~]# passwd [useraccount]

范例一:如果root 要帮dmtsai 修改密码时?
[[email protected] ~]# passwd dmtsai
Changing password for user dmtsai.
New UNIX password: <==这里直接输入新的密码,萤幕不会有任何反应
BAD PASSWORD: it is based on a dictionary word <==密码太简单时的错误!
Retype new UNIX password: <==再输入一次同样的密码
passwd: all authentication tokens updated successfully. <==竟然还是成功修改了!

范例二: dmtsai 这个使用者想要修改自己的密码时
[[email protected] ~]$ passwd
Changing password for user dmtsai.
Changing password for dmtsai
(current) UNIX password: <==这里输入『原有的旧密码』
New password: <==这里输入新密码
BAD PASSWORD: it is based on your username <==密码的规范是很严格的
New password:
BAD PASSWORD: it is based on your username
New password:
BAD PASSWORD: it is based on a dictionary word
passwd: Authentication token manipulation error

先来谈一谈上面的两个范例。要注意的是, passwd 这个指令由于使用者的身份而有两种用法, 如果是root ,由于root 具有至高无上的权力,所以root 可以利用passwd [username] 来帮使用者修改他们的密码!因此,『如果使用者的密码不见了, root 是可以帮他们进行密码的修改,而不需要知道旧密码。 』另外,也只有root 可以随便设定密码,即使该密码并不符合系统的密码验证要求~ @[email protected]。例如上面的范例一, 我帮dmtsai 建立的密码太简单,所以其实系统是『警告』过root 的。但在重复输入两次密码后,嘿嘿!您还是会看到successfully 这个成功的字样呢!

那么如果是一般身份使用者,或者是root 想要修改自己的密码时,直接输入『 passwd 』,就能够修改自己的密码了。一般身份使用者输入的密码会经过系统的验证, 验证的机制除了/etc/login.defs 里头规定的最小密码字元数之外,还会受到/etc/pam.d/passwd 这个PAM 模组的检验呢!一般来说,您输入的密码最好要符合底下的要求:

* 密码不能与帐号相同;
* 密码尽量不要选用字典里面会出现的字串;
* 密码需要超过 8 个字元;

如果无法经过验证,那么该密码就不被接受,当然还是只能使用旧密码啰!此外,仅能接受三次密码输入,如果输入的密码都不被接受,那只好....重新执行一次passwd 啊!而, 经过这个passwd [username] 的动作后,您的帐号就会有密码啰,此时, 如果察看一下/etc/shadow ,你就会知道密码内容被改过啰~ ^_^

# usermod
所谓这『人有失手,马有乱蹄』,您说是吧?所以啰,当然有的时候会『不小心』在useradd 的时候加入了错误的设定资料。或者是,在使用useradd 后,发现某些地方还可以进行细部修改。此时,当然我们可以直接到/etc/passwd 或/etc/shadow 去修改相对应栏位的资料, 不过,Linux 也有提供相关的指令让大家来进行帐号相关资料的微调呢~那就是usermod 啰~

[[email protected] ~]# usermod [-cdegGlsuLU] username
参数:
-c :后面接帐号的说明,即/etc/passwd 第五栏的说明栏,可以加入一些帐号的说明。
-d :后面接帐号的家目录,即修改/etc/passwd 的第六栏;
-e :后面接日期,格式是YYYY-MM-DD 也就是在/etc/shadow 内的第八个栏位资料啦!
-g :后面接group name,修改/etc/passwd 的第四个栏位,亦即是GID 的栏位!
-G :后面接group name,修改这个使用者能够支援的群组,修改的是/etc/group 啰~
-l :后面接帐号名称。亦即是修改帐号名称, /etc/passwd 的第一栏!
-s :后面接Shell 的实际档案,例如/bin/bash 或/bin/csh 等等。
-u :后面接 UID 数字啦!即 /etc/passwd 第三栏的资料;
-L :暂时将使用者的密码冻结,让他无法登入。其实仅改 /etc/shadow 的密码栏。
-U :将/etc/shadow 密码栏的! 拿掉,解冻啦!
范例:

范例一:修改使用者dmtsai 的说明栏,加上『VBird's test』的说明。
[[email protected] ~]# usermod -c "VBird's test" dmtsai
[[email protected] ~]# grep dmtsai /etc/passwd
dmtsai:x:501:501:VBird's test:/home/dmtsai:/bin/bash

范例二:使用者dmtsai 密码在2006/01/01 失效。
[[email protected] ~]# usermod -e "2006-01-01" dmtsai
[[email protected] ~]# grep dmtsai /etc/shadow
dmtsai:$1$24ISJM4K$bbdijdreoieaVaBMAHsm6.:13026:0:99999:7::13149:

范例三:暂时冻结 dmtsai 的密码!
[[email protected] ~]# usermod -L dmtsai
[[email protected] ~]# grep dmtsai /etc/shadow
dmtsai:!$1$24ISJM4K$bbdijdreoieaVaBMAHsm6.:13026:0:99999:7::13149:
# 注意到,密码栏(第二栏)多了一个! 号!那个惊叹号会让密码无效喔!
[[email protected] ~]# usermod -U dmtsai <==这样就解开了!

范例四:万一dmtsai 这个家伙被建立时忘记建立家目录,该如何是好?
[[email protected] ~]# usermod -d /home/dmtsai2 -m dmtsai
# 如果仅是-d /home/dmtsai2 表示仅修改/etc/passwd 第六栏的内容而已,
# 如果加上-m 这个参数,则表示新建一个家目录的意思!
# 另外,如果原本的家目录是/home/dmtsai ,那-d /home/dmtsai2 -m
# 会将原本的/home/dmtsai 更名为/home/dmtsai2 喔!

usermod 是系统管理员root 用来管理帐号身份的相关资料的,不过,这个usermod 程式的功能其实也被很多其他的指令所取代喔!例如chfn 与chsh 等等的~ 不过,无论如何,您还是可以用usermod 来微调使用者帐号的相关资料啦!

# userdel
这个功能就太简单了~目的在删除使用者啦~与他相关的档案有:

* /etc/passwd
* /etc/shadow
* /home/username

整个指令的语法是:

[[email protected] ~]# userdel [-r] username
参数:
-r :连同使用者的家目录也一起删除
范例:

范例一:删除vbird2 ,连同家目录一起删除
[[email protected] ~]# userdel -r vbird2

这个指令下达的时候要小心了!通常我们要移除一个帐号的时候,你可以手动的将/etc/passwd 与/etc/shadow 里头的该帐号取消即可!一般而言,如果该帐号只是『 暂时不启用』的话,那么将/etc/shadow 里头最后倒数一个栏位设定为0 就可以让该帐号无法使用,但是所有跟该帐号相关的资料都会留下来!使用userdel 的时机通常是『 你真的确定不要让该用户在主机上面使用任何资料了! 』

另外,其实使用者如果在系统上面操作过一阵子了,那么该使用者其实在系统内可能会含有其他档案的。举例来说,他的邮件信箱(mail box) 或者是例行性命令(crontab) 之类的档案。所以,如果想要完整的将某个帐号完整的移除,最好可以在下达userdel -r username 之前, 先以『 find / -user username 』查出整个系统内属于username 的档案,然后再加以删除吧!
小标题的图示使用者功能:chfn, chsh
不论是useradd/usermod/userdel ,都是系统管理员所能够使用的指令, 如果我是一般身份使用者,那么我是否除了密码之外,就无法更改其他的资料呢?当然不是啦!这里我们介绍两个一般身份使用者常用的帐号资料变更指令啰!

# chsh

[[email protected] ~]$ chsh [-ls]
参数:
-l :列出目前系统上面可用的shell ,其实就是/etc/shells 的内容!
-s :设定修改自己的 Shell 啰
范例:

范例一:列出目前系统上面所以的shell ,并且指定csh 为自己的shell
[[email protected] ~]$ chsh -l
/bin/sh
/bin/bash
/sbin/nologin
/bin/ksh
/bin/tcsh
/bin/csh
/bin/zsh
[[email protected] ~]$ chsh -s /bin/csh; grep dmtsai /etc/passwd
Password: <==为了防止帐号被乱搞~所以需要输入dmtsai 的密码确认!
Shell changed.
dmtsai:x:501:501::/home/dmtsai:/bin/csh

这个指令重点就是在更改使用者的shell 啰~如上所述,我就可以修订好dmtsai 的shell 啦!

# chfn

[[email protected] ~]# chfn [-foph]
参数:
-f :后面接完整的大名;
-o :您办公室的房间号码;
-p :办公室的电话号码;
-h :家里的电话号码!
范例:

范例一:我用dmtsai 这个使用者来更改一下自己的相关资讯!
[[email protected] ~]$ chfn
Changing finger information for dmtsai.
Password: <==为了防止帐号被乱搞~所以需要输入dmtsai 的密码确认!
Name []: VBird' Test account
Office []: Tainan office 1
Office Phone []: 06-1234567
Home Phone []: 06-7654321

Finger information changed.
[[email protected] ~]$ grep dmtsai /etc/passwd
dmtsai:x:501:501:VBird' Test account,Tainan office 1,06-1234567,06-7654321:
/home/dmtsai:/bin/bash

这个指令说实在的,除非是你的主机有很多的用户,否则倒真是用不着这个程式!这就有点像是bbs 里头更改你『个人属性』的那一个资料啦!这个程式主要都是搭配finger 这支程式在运作的!不过,由于finger 这支程式不是很安全,所以预设是没有安装他的!如果您想要玩一下finger 的话,那么请先参考RPM 套件安装内容后,在安装finger 的RPM 档案,然后再来玩吧!底下这里鸟哥还是先简单的介绍一下就好了!

使用chfn 这个指令之后,程式会要求您输入许多的资讯,包含了:

* 密码
* 昵称
* 办公室号码
* 办公室电话
* 家里电话

不过,这些资讯其实更改的都是原本的/etc/passwd 里面的第五栏说明资料啦!每个资讯中间都以逗号『,』分隔开来而已。如上所示, dmtsai 的说明栏救被更动过啰! ^_^

# finger
finger 的中文字面意义是:『手指』,嘿嘿!这个finger 可以查阅的资料可就多了!刚刚我们不是使用chfn 来修改dmtsai 这个使用者的相关资讯吗?那些个相关资讯就可以利用finger 来查阅出来的!他的查询方法如下:

[[email protected] ~]# finger [-s] username
参数:
-s :使用长串资料输出格式。
范例:

范例一:将刚刚dmtsai 建立的一些使用者资讯呼叫出来视察!
[[email protected] ~]# finger dmtsai
Login: dmtsai Name: VBird's Test account
Directory: /home/dmtsai Shell: /bin/bash
Office: Tainan office 1, 06-1234567 Home Phone: 06-7654321
Last login Tue Aug 30 15:01 (CST) on tty1 from localhost
No mail.
No Plan.

有趣吧!这个finger 还可以用来查询别部主机的帐号呢!不过,目前通常用在本机帐号的查询。因为finger 算是比较危险的指令,所以,有些linux distributions 预设是不安装他的, 不过,如果您按照鸟哥说明的方式来完整安装FC4 的话,那就没有问题的啦!可以操作的。

不过,你或许会觉得有趣的是,怎么finger 的结果最底下显示『No mail. No Plan.』呢?呵呵! finger 会主动去/var/spool/mail 查询看看有没有该帐号的邮件信箱(mailbox), 而且还会去查询~/.plan 那个档案,那就是计画档啦~比如说,我在dmtsai 家目录底下建立.plan 这个档案,他的内容是『DmTsai will write something....』,结果使用finger 时, 嘿嘿!您可以自行看看结果会怎样啊! ^_^

# id
id 这个指令则可以查询某人或自己的相关UID/GID 等等的资讯,他的参数也不少,不过, 都不需要记~反正使用id 就全部都列出啰~ ^_^

[[email protected] ~]# id [username]

范例一:查阅自己的相关资讯!
[[email protected] ~]# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),10(wheel)

范例二:查阅一下 dmtsai 吧~
[[email protected] ~]# id dmtsai
uid=501(dmtsai) gid=501(dmtsai) groups=501(dmtsai),100(users)

再次强调一下,那个groups 指的是目前该使用者所属的所有群组,但是您必须要了解什么是『 初始群组与有效群组』的差异喔!
小标题的图示新增与移除群组
OK!了解了帐号的新增、删除、更动与查询后,再来我们可以聊一聊群组的相关内容了。基本上,群组的内容都与这两个档案有关:

* /etc/group
* /etc/gshadow

群组的内容其实很简单,都是上面两个档案的新增、修改与移除而已, 不过,如果再加上有效群组的概念,那么newgrp 与gpasswd 则不可不知呢!

# groupadd

[[email protected] ~]# groupadd [-g gid] [-r]
参数:
-g :后面接某个特定的GID ,用来直接给予某个GID ~
-r :建立系统群组啦!与 /etc/login.defs 内的 GID_MIN 有关。
范例:

范例一:新建一个群组,名称为 group1
[[email protected] ~]# groupadd group1
[[email protected] ~]# grep group1 /etc/group /etc/gshadow
/etc/group:group1:x:502:
/etc/gshadow:group1:!::
# 注意注意!在/etc/gshadow 里面可以发现,密码是不许登入的喔!

范例二:新建一个系统群组,名称为group2
[[email protected] ~]# groupadd -r group2
[[email protected] ~]# grep group2 /etc/group /etc/gshadow
/etc/group:group2:x:101:
/etc/gshadow:group2:!::

了解 -r 有没有的差异了吗? !是的~结果会跟/etc/login.defs 里面的设定有关喔!而且以groupadd 新增的帐号,预设都不能使用密码的方式登入的~ 也就是说,预设是私有群组,并无法使用newgrp 来登入的呢!

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

[[email protected] ~]# groupmod [-g gid] [-n group_name]
参数:
-g :修改既有的 GID 数字;
-n :修改既有的群组名称
范例:

范例一:将刚刚上个指令建立的group2 名称改为groupname , GID 为103
[[email protected] ~]# groupmod -g 103 -n groupname group2
[[email protected] ~]# grep groupname /etc/group /etc/gshadow
/etc/group:groupname:x:103:
/etc/gshadow:groupname:!::

不过,还是那句老话,不要随意的更动GID ,容易造成系统资源的错乱喔!

# groupdel
呼呼! groupdel 自然就是在删除群组的啰~用法很简单:

[[email protected] ~]# groupdel [groupname]

范例一:将刚刚的 groupname 删除!
[[email protected] ~]# groupdel groupname

范例二:若要删除dmtsai 这个群组的话? ?
[[email protected] ~]# groupdel dmtsai
groupdel: cannot remove user's primary group.

为什么groupname 可以删除,但是dmtsai 就不能删除呢?原因很简单, 『有某个帐号(/etc/passwd) 的initial group 使用该群组! 』如果查阅一下,你会发现在/etc/passwd 内的dmtsai 第四栏的GID 就是/etc/group 内的dmtsai 那个群组的GID ,所以啰,当然无法删除~否则dmtsai 这个使用者登入系统后, 就会找不到GID ,那可是会造成很大的困扰的!那么如果要删除 dmtsai 这个群组呢?你『必须要确认/etc/passwd 内的帐号没有任何人使用该群组作为initial group 』才行喔!所以,你可以:

* 修改 dmtsai 的 GID ,或者是:
* 删除 dmtsai 这个使用者。

# gpasswd
除了设定群组之外,我们还可以针对系统上面有的群组进行一些『密码』的给予喔!这个密码给予之后,该群组就能够让某些人登入成为有效群组呢!挺有趣的。另外,如果系统管理员太忙了,无法针对每个群组来管理,那么『 系统管理员还可以将某位使用者设定成为该群组的团长喔! 』 很有趣吧~虽然目前比较少人这么玩了,不过,鸟哥在这里还是跟大家介绍介绍吧!

关于系统管理员(root)做的动作:
[[email protected] ~]# gpasswd groupname
[[email protected] ~]# gpasswd [-A user1,...] [-M user3,user4...] groupname
[[email protected] ~]# gpasswd [-rR] groupname
参数:
:若没有任何参数时,表示给予groupname 一个密码(/etc/gshadow)
-A :将groupname 的主控权交由后面的使用者管理(该群组的管理员)
-M :将某些帐号加入这个群组当中!
-r :将 groupname 的密码移除
-R :让groupname 的密码栏失效,所以newgrp 就不能使用了!

关于群组管理员(Group administrator)做的动作:
[[email protected] ~]$ gpasswd [-ad] user groupname
参数:
-a :将某位使用者加入到groupname 这个群组当中!
-d :将某位使用者移除出groupname 这个群组当中。

范例一:建立一个新群组,名称为testgroup 且群组交由dmtsai 管理:
[[email protected] ~]# groupadd testgroup
[[email protected] ~]# gpasswd testgroup
Changing the password for group testgroup
New Password:
Re-enter new password:
# 输入两次密码就对了!
[[email protected] ~]# gpasswd -A dmtsai -M dmtsai,vbird testgroup
[[email protected] ~]# grep testgroup /etc/group /etc/gshadow
/etc/group:testgroup:x:502:dmtsai,vbird
/etc/gshadow:testgroup:1CEVbrcjxO6Ps:dmtsai:dmtsai,vbird
# 很有趣吧!此时dmtsai 则拥有testgroup 的主控权喔!若以我们讨论区 (
# http://phorum.vbird.org 的概念来说,群组管理员有点像『版主』啦!

范例二:以dmtsai 登入系统,并且让他加入vbird1 成为testgroup 成员之一:
[[email protected] ~]$ gpasswd -a vbird1 testgroup
Adding user vbird1 to group testgroup

很有趣的一个小实验吧!我们可以让testgroup 成为一个可以公开的群组,然后建立起群组管理员,群组管理员可以有多个。在这个案例中, 我将他设定为dmtsai ,所以, dmtsai 就可以自行增加群组成员啰~呼呼!然后,该群组成员就能够使用newgrp 啰~

# newgrp
还有印象吗?我们前面谈到/etc/gshadow 时就提过这个指令了! 『newgrp 会额外以另一个login 来提供使用者登入到另一个shell 中, 并且将有效群组改为newgrp 后面接的那个群组,若没有接群组,则预设群组为initial group 』
小标题的图示密码管理: passwd
再来跟大家提一提那个重要的密码概念!您得要特别留意的是,今天,您的主机若是遭到入侵, 对方的第一个入侵点自然就是您主机上面帐号的『密码』了,所以, 如果您的密码定义的比较严格的话,那么自然对方就不容易猜到你的密码,自然就会比较有保障啦!

目前一些Cracker 较常使用的密码破解软体,大抵是『字典攻击法』 及所谓的『暴力破解法』,就字面上的意义来说, 『字典攻击法』是将字典里面所查的到的任何单字或片语都输入的程式中, 然后使用该程式一个一个的去尝试破解你的密码,不要觉得这样的速度似乎很慢,实际上, 现今的电脑运算速度太高了,字典攻击法的操作效率基本上是很高的!另一个『 暴力破解法』就是直接使用键盘上面任何可以使用的按键,然后依照组合,以1 个, 2 个, 3 个…. 密码组合的方式去破解你的密码!这个方式就真的比较慢一点,如果你的密码组合是6~8 个字元以上,那么暴力攻击法还是需要好长一段时间才能够破解的了的!

由上面的『字典攻击法』与『暴力破解法』猜测你的密码的方式来说,您知道如何设定一个好的密码了吗?是的,您的密码最好需要底下几个特性:

* 密码中含有数个特殊字元,例如$#@^&* 及数字键等等:如同上面提到的, 您的按键越奇怪,那么对方就越不容易使用既有的软体来破解!
* 英文字母大小写混合使用;
* 密码长度至少要到6 ~ 8 个以上才好;
* 没有特殊意义的字母或数字组合,并且夹着很多的特殊字元!

这种密码真的很不容易被破解,但是很不幸的,也很容易被你我忘记! ^_^。所以呢, 建议您常常使用一些对别人来说是没有意义,但是对您确有特殊涵意的字眼!例如鸟哥常常提到的,我爱我老婆! 『 I&Mywife*^』之类的密码!不容易被猜,也挺容易被你自己记住的!那么有没有『很要命的密码』呢?有的,底下几种密码就很要命:

* 常用的英文单字:例如party, park, andyliu, linux, paper 等等,都不好!容易被字典攻击法破解!
* 身边人物的名字,例如配偶、小孩的名字等等, Tom, andy, eric 等等,都不好!
* 单纯的日期:例如您的生日啦!等等的,都不够好!
* 任何与您相关的数字或其他资讯,例如身份证号、银行帐号等;

VBird 曾经见过直接以帐号做为密码的状况!真是要命~太好猜了!

好了!知道了密码的重要性,与基本的设定之后,接着下来我们谈一谈如何手动设定密码吧!基本上, root 可以设定『任何样式的密码』,而且, root 也可以帮助user 订定他们的密码!至于 user 仅能修改自己的密码!那么修改密码使用什么命令?就是 passwd 这个命令啦!咦!这里突然给他想到几个重要资讯,大家赶紧复习一下:

* 如何寻找 passwd 这个指令?
使用 which passwd 即可
* 如何察看 passwd 这个档案的属性?并请说明他的属性为何?
使用 ls -l `which passwd` 即可!他具有 SUID 的属性!
* 什么是 SUID ?
就是该程式在被执行的过程中,具有程式拥有者的权限!
* 我该如何查询/etc/passwd 与/usr/bin/passwd 的用法与架构?
分别使用 man passwd 及 man 5 passwd

这些指令与意义如果都还没有忘记!恭喜您了!真是不错!好了,还记得我们密码放在哪里吗?对啦!就是/etc/shadow 里面,那个档案的权限是-rw------- 所以只有root 可以修改,因此, passwd 必需要具有SUID 才能让一般使用者修改他们的密码啰!关于passwd 的用法, 我们前面已经稍微提过一些啰,在底下我们则针对root 谈一下passwd 还有什么好功能? ?

# passwd

[[email protected] ~]# passwd [-lunxwS] username
参数:
-l :将username 这个帐号的密码锁住(lock),在/etc/shadow 内的密码栏修订~
-u :将 -l 的 lock 解开!
-n :后面接天数(数字) ,最短天数;亦即是/etc/shadow 内的第四栏;
-x :后面接天数(数字) ,最长天数;亦即是/etc/shadow 内的第五栏;
-w :后面接天数(数字) ,警告天数;亦即是/etc/shadow 内的第六栏;
-S :显示目前这个username 的相关资讯。
范例:

范例一:将dmtsai 这个使用者的密码冻结,并观察他!
[[email protected] ~]# passwd -l dmtsai
Locking password for user dmtsai.
passwd: Success
[[email protected] ~]# passwd -S dmtsai
Password locked.
[[email protected] ~]# grep dmtsai /etc/shadow
dmtsai:!!$1$TDy6D7eg$jVJV/FMaQn14v5Kl7sqw6/:13026:0:99999:7::13149:

范例二:将上述密码冻结解开
[[email protected] ~]# passwd -u dmtsai

其实这个passwd 指令还挺多用的~尤其很多功能仅有root 才能执行。您可以使用passwd -l 及passwd -u 来强制让一个使用者『暂时』无法使用该帐号, 很方便的啦! ^_^

暂无评论

添加新评论