📄 0410accountmanager.htm
字号:
6. <a href="#manual">手动新增使用者∶</a><br>
<span class=text_h2>
5.1 <a href="#manual_tools">一些检查工具</a>∶<a href="#pwck">pwck</a>,
<a href="#pwconv">pwconv</a>, <a href="#pwunconv">pwunconv</a>, <a href="#chpasswd">chpasswd</a><br>
5.2 <a href="#manual_normal">特殊帐号,如纯数字帐号的建立∶</a><br>
5.3 <a href="#manual_pop3">不开放终端机登入的帐号 (ex>mail acccount)</a><br>
5.4 <a href="#manual_amount">一个大量建置帐号的范例∶</a><br>
</span>
7. <a href="#FAQ">本章习题练习</a><br>
<span class=text_h2>
8. <a href="http://phorum.vbird.org/viewtopic.php?t=23887"
target="_blank">针对本文的建议∶http://phorum.vbird.org/viewtopic.php?t=23887</a>
</span>
</span>
</div>
<!-- 本文的正式部分 -->
<hr><a NAME="account"></a><img src="images/penguin-m.gif" alt="大标题的图示" height="34" width="25" align="middle" /><span class="text_h1">Linux 的帐号与群组</span><br>
<div class=block1>
管理员的工作中,相当重要的一环就是『管理帐号』啦!因为整个系统都是你在管理的,
并且所有的一般用户的申请,都必须要透过你的协助才行!所以你就必须要了解一下如何管理好一个网站的帐号管理啦!
在管理 Linux 主机的帐号时,我们必须先来了解一下 Linux 到底是如何辨别每一个使用者的!<br><br>
<hr><a name="account_id"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>使用者识别∶ UID 与 GID</span><br>
<div class=block2>
虽然我们登入 Linux 主机的时候,输入的是我们的帐号,但是,其实 Linux
主机并不会直接认识你的『帐号名称』的,他仅认识 ID 啊~ID 就是一组号码啦~
主机对于数字比较有概念的,帐号只是为了让人们容易记忆而已。
而您的 ID 与帐号的对应就在 /etc/passwd 当中哩。<br>
<div style="padding: 10 0 10 0 ;" align="right"><table width="90%"><tr><td><b>Tips:</b><br /><span style="font-style: italic; color : darkgreen"> 如果你曾经以 tarball 安装过软体的话,那么应该不难发现,在解压缩之后的档案,
档案拥有者竟然是『不明的数字』?奇怪吧?这没什么好奇怪的,因为 Linux
说实在话,他真的只认识代表你身份的号码而已!
</span></td><td><img src="../images/vbird_face.gif" /></td></tr></table></div>
那么到底有几种 ID 呢?还记得我们在『<a href="0210filepermission.php">档案属性与目录配置</a>』
那一篇文章的时候有提到每一个档案都具有『拥有人与拥有群组』的属性吗?
没错啦~每个登入的使用者至少都会取得两个 ID ,一个是使用者 ID (User ID ,简称 UID)、
一个是群组 ID (Group ID ,简称 GID)。<br><br>
那么档案如何判别他的拥有者与群组呢?其实就是利用 UID 与 GID 啦!
每一个档案都会有所谓的拥有者 ID 与拥有群组 ID ,亦即是 UID
与 GID ,然后系统会依据 /etc/passwd 的内容,去将该档案的拥有者与群组名称,
使用帐号的形式来秀出来!我们可以作个小实验,你可以以
root 的身份 vi /etc/passwd ,然后将你的一般身份的使用者的 ID 随便改一个号码,
然后再到你的一般身份的目录下看看原先该帐号拥有的档案,你会发现该档案的拥有人变成了
『数字了』呵呵!这样可以理解了吗?<br>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>vi /etc/passwd</span>
<span class=term_say>.....(前面省略).....</span>
dmtsai:x:501:501::/home/dmtsai:/bin/bash <span class=term_note><==将原本的 501:501 改成 3000:501</span>
[root@linux ~]# <span class=term_command>ls -ld /home/</span>
drwxr-xr-x 3 <span class=term_write>501</span> dmtsai 4096 Aug 30 10:37 dmtsai
<span class=term_say># 瞧!这里就能够知道,其实档案记录的是 UID 啦~</span>
</pre></td></tr></table>
你一定要了解的是,上面的例子仅是在说明 UID 与帐号的对应性,
<span class=text_import2>在一部正常运作的 Linux 主机环境下,上面的动作不可随便进行</span>,
这是因为系统上已经有很多的资料在运行了,随意修改系统上某些帐号的 UID
很可能会导致某些程序无法进行,这将导致系统无法顺利运作的结果。
因为权限的问题啊!所以,了解了之后,请赶快回到 /etc/passwd 里面,将数字改回来喔!<br><br>
<li><span class=text_import1>如何登入 Linux 取得 UID/GID</span></li>
<div class=block2>
好了,那么我们再来谈一谈,到底我们是怎样登入 Linux 主机的呢?其实也不难啦!当我们在主机前面或者是以
telnet 或者 ssh 登入主机时,系统会出现一个 login 的画面让你输入帐号,这个时候当你输入帐号与密码之后,
Linux 会∶<ol><span class=text_import2>
<li>先找寻 /etc/passwd 里面是否有这个帐号?如果没有则跳出,如果有的话则将该帐号对应的
UID ( User ID )与 GID ( Group ID )读出来,另外,该帐号的家目录与 shell
设定也一并读出;</li>
<li>再来则是核对密码表啦!这时 Linux 会进入 /etc/shadow
里面找出对应的帐号与 UID,然后核对一下你刚刚输入的密码与里头的密码是否相符?</li>
<li>如果一切都 OK 的话,就进入 Shell 控管的阶段棉!</li></ol></span>
大致上的情况就像这样,所以呢,当你要登入你的 Linux 主机的时候,那个 /etc/passwd
与 /etc/shadow 就必须要让系统读取啦,(这也是很多攻击者会将特殊帐号写到
/etc/passwd 里头去的缘故!)所以呢,如果你要备份 Linux 的系统的帐号的话,
那么这两个档案就一定需要备份才行呦!
</div>
</div>
<hr><a name="account_user"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>使用者帐号∶/etc/passwd,
/etc/shadow</span><br>
<div class=block2>
由上面的说明您大概已经知道,嘿嘿!帐号管理最重要的两个档案就是『 /etc/passwd
与 /etc/shadow 』了!这两个档案可以说是 Linux 里头最重要的档案之一了!
如果没有这两个档案的话,呵呵!您可是无法登入 Linux 的呦!所以,底下我们先针对这两个档案来进行说明。
当然棉,更详细的资料您可以自行 man 5 passwd 及 man 5 shadow 的啦~<br><br>
<hr><li><span class=text_import1>/etc/passwd</span></li>
<div class=block2>
这个档案的构造是这样的∶<span class=text_import2>每一行都代表一个帐号,
有几行就代表有几个帐号在你的系统中</span>!不过需要特别留意的是,
里头很多帐号本来就是系统中必须要的,我们可以简称他为系统帐号,
例如 bin, daemon, adm, nobody 等等,这些帐号是系统正常运作时所需要的,请不要随意的杀掉他呢!
这个档案的内容有点像这样∶<br>
<table class="term"><tr><td class="term"><pre>
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
</pre></td></tr></table>
我们先来看一下每个 Linux 系统都会有的第一行,就是 root 这个系统管理员那一行好了,
你可以明显的看出来,每一行使用『:』分隔开,共有七个咚咚,分别是∶<ol>
<li><span class=text_import1>帐号名称</span>∶就是帐号名称啦!对应 UID 用的!例如
root 就是预设的系统管理员的帐号名称;</li><br>
<li><span class=text_import1>密码</span>∶早期的 Unix 系统的密码是放在这个档案中的,
但是因为这个档案的特性是所有的程序都能够读取,所以,这样一来很容易造成资料的被窃取,
因此后来就将这个栏位的密码资料给他改放到 /etc/shadow 中了,关于 /etc/shadow
这一部份等一下再说。而这里你会看到一个 x ,呵呵!别担心,这表示密码已经被移动到
shadow 这个加密过后的档案棉;</li><br>
<li><span class=text_import1>UID</span>∶这个就是使用者识别码 (ID) 棉!通常 Linux 对于
UID 有几个限制需要说给您了解一下∶</li>
<table width=90% border=1 cellspacing=0 cellpadding=3 bgcolor=lightyellow>
<tr bgcolor=lightblue align=center><td width=80>id 范围</td><td>该 ID 使用者特性</td></tr>
<tr><td>0</td><td>当 UID 是 0 时,代表这个帐号是『系统管理员』!所以当你要作另一个系统管理员帐号时,
你可以将该帐号的 UID 改成 0 即可;这也就是说,一部系统上面的系统管理员不见得只有 root 喔!
不过,不很建议有多个帐号的 UID 是 0 啦~</td></tr>
<tr><td>1~499</td><td>保留给系统使用的 ID,其实 1~65534 之间的帐号并没有不同,
也就是<span class=text_import2>除了 0 之外,其他的 UID 并没有不一样</span>,预设 500
以下给系统作为保留帐号只是一个习惯。这样的好处是,以有名的 DNS 伺服器的启动服务『 named
』为例,这个程式的预设所有人 named 的帐号 UID 是 25 ,当有其他的帐号同样是 25
时,很可能会造成系统的一些小问题!为了杜绝这样的问题,建议保留 500 以前的 UID 给系统吧!<br>
不过,一般来说, 1~99 会保留给系统预设的帐号,另外 100~499 则保留给一些服务来使用。</td></tr>
<tr><td>500~65535</td><td>给一般使用者用的。事实上,目前的 linux 核心 (2.6.x 版)已经可以支援到
4294967295 (2^32-1) 这么大的 UID 号码喔!</td></tr>
</table><br>
上面这样说明可以了解了吗?是的, UID 为 0 的时候,就是 root 呦!所以请特别留意一下你的
/etc/passwd 档案!<br><br>
<li><span class=text_import1>GID</span>∶这个与 /etc/group 有关!其实 /etc/group
的观念与 /etc/passwd 差不多,只是他是用来规范 group 的而已!</li><br>
<li><span class=text_import1>使用者资讯说明栏</span>∶这个栏位基本上并没有什么重要用途,
只是用来解释这个帐号的意义而已!不过,如果您提供使用 finger 的功能时,
这个栏位可以提供很多的讯息呢!底下的 chfn 可以解释一下棉!</li><br>
<li><span class=text_import1>家目录</span>∶这是使用者的家目录,以上面为例, root 的家目录在
/root ,所以当 root 登入之后,就会立刻跑到 /root 里头啦!呵呵!
如果你有个帐号的使用空间特别的大,你想要将该帐号的家目录移动到其他的硬碟去,
没有错!可以在这里进行修改呦!预设的使用者家目录在 /home/yourIDname</li><br>
<li><span class=text_import1>Shell</span>∶所谓的 shell
是用来沟通人类下达的指令与硬体之间真正动作的界面!我们通常使用 /bin/bash
这个 shell 来进行指令的下达!嘿嘿!发现了吧?我们在 <a href="0320bash.php">bash</a>
章节里面提到很多次,登入 Linux 时为何预设是 bash 呢?就是这里设定的啦~
这里比较需要注意的是,有一个 shell 可以用来替代成让帐号无法登入的指令!那就是
/sbin/nologin 这个东西!这也可以用来制作纯 pop 邮件帐号者的资料呢!</li>
</ol>
</div>
<hr><li><span class=text_import1>/etc/shadow</span></li>
<div class=block2>
上面约略提到,由于每个程序都需要取得 uid 与 gid 来判断权限的问题,所以,
/etc/passwd 的权限必须要设定成为 -rw-r--r-- 这样的权限,在这样的情况下,
使用者的密码不就任何人都可以看到吗?即使这个档案内的密码栏是加密的,
坏心肠的朋友也可能利用暴力破解法去 try and error 找出您的密码资料......<br><br>
因为这样的关系,所以后来发展出将密码移动到 /etc/shadow 这个档案分隔开来的技术,
而且还加入很多的密码限制参数在 /etc/shadow 里头呢!我们先来了解一下这个档案的构造吧!
我的 /etc/shadow 档案有点像这样∶<br>
<table class="term"><tr><td class="term"><pre>
root:$1$i9Ejldjfjio389u9sjl$jljsoi45QE/:12959:0:99999:7:::
bin:*:12959:0:99999:7:::
daemon:*:12959:0:99999:7:::
adm:*:12959:0:99999:7:::
</pre></td></tr></table>
基本上, shadow 同样以『:』作为分隔符号,如果数一数,会发现共有九个栏位啊,
这九个栏位的用途是这样的∶<ol>
<li><span class=text_import1>帐号名称</span>∶由于密码也需要与帐号对应啊~因此,
这个档案的第一栏就是帐号,必须要与 /etc/passwd 相同才行!</li><br>
<li><span class=text_import1>密码</span>∶这个才是真正的密码,而且是
<span class=text_import2>经过编码过的密码</span>啦!
你只会看到有一些特殊符号的字母就是了!需要特别留意的是,
虽然这些加密过的密码很难被解出来,但是『很难』不等于『不会』,所以,
这个档案的预设属性是『-rw-------』或者是『-r--------』,亦即只有 root
才可以读写就是了!你得随时注意,不要不小心更动了这个档案的属性呢!另外,
如果是在密码栏的第一个字元为『 * 』或者是『 ! 』,表示这个帐号并不会被用来登入的意思。
所以万一哪一天你的某个使用者不乖时,可以先在这个档案中,将他的密码栏位的最前面多加一个
* !嘿嘿!他就无法使用该帐号棉!直到他变乖了,再给他启用啊!</li><br>
<li><span class=text_import1>最近更动密码的日期</span>∶这个栏位记录了『更动密码的那一天』的日期,
不过,很奇怪呀!在我的例子中怎么会是 12959 呢?呵呵,这个是因为计算 Linux
日期的时间是以 1970 年 1 月 1 日作为 1 ,而 1971 年 1 月 1 日则为 366 啦!
所以这个日期是累加的呢!得注意一下这个资料呦!那么最近的 2005 年 1 月 1 日就是 12784
啦,了解了吗?</li><br>
<li><span class=text_import1>密码不可被更动的天数</span>∶
第四个栏位记录了这个帐号的密码需要经过几天才可以被变更!如果是 0 的话,
表示密码随时可以更动的意思。这的限制是为了怕密码被某些人一改再改而设计的!如果设定为
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -