红联Linux门户
Linux帮助

Linux 帐号与身份管理

发布时间:2005-10-21 00:10:05来源:红联作者:火
帐号管理:
  管理员的工作中,相当重要的一环就是『管理帐号』啦!因为整个系统都是你在管理的,并且所有的一般用户的申请,都必须要透过你的协助才行!所以你就必须要了解一下如何管理好一个网站的帐号管理啦!在管理 Linux 主机的帐号时,我们必须先来了解一下 Linux 到底是如何辨别每一个使用者的!
  ? 使用者的 ID 与群组的 ID :
  其实 Linux 并不会直接认识你的『帐号名称』,他认识的其实是你的『帐号 ID 』才是!如果你曾经以 tarball 安装过软件的话,那么应该不难发现,在解压缩之后的档案,嘿~档案拥有者竟然是『不明的数字』?奇怪吧?这没什么好奇怪的,因为 Linux 说实在话,他真的只认识代表你身份的号码而已!而对应的号码与帐号,则是记录在 /etc/passwd 当中!
  ? 怎样登入 Linux 主机呀?
  好了,那么我们再来谈一谈,到底我们是怎样登入 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 的系统的帐号的话,那么这两个档案就一定需要备份才行呦!
  ? 认识 UID、GID、SUID与SGID:
  还记得我们在『?案系???案?性』那一篇文章的时候有提到每一个档案都具有『拥有人与拥有群组』的属性吗?那么档案如何判别他的拥有者与群组呢?其实就是利用 UID 与 GID 啦!每一个档案都会有所谓的拥有者 ID 与拥有群组 ID ,亦即是 UID 与 GID ,然后系统会依据 /etc/passwd 的内容,去将该档案的拥有者与群组名称,使用帐号的形式来秀出来!我们可以作个小实验,你可以以 root 的身份 vi /etc/passwd ,然后将你的一般身份的使用者的 ID 随便改一个号码,然后再到你的一般身份的目录下看看原先该帐号拥有的档案,你会发现该档案的拥有人变成了『数字了』呵呵!这样可以理解了吗?
  
  [root @test /root]# vi /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
  test:x:500:500:test user:/home/test:/bin/bash <==将 500 改成 510 
  [root @test /root]# cd /home/test
  [root @test test]# ll 
  -rw-rw-r--  1 500   test    12542 Apr 12 11:22 test
  看上面,拥有这变成了数字了~
  
  ? 认识 /etc/passwd 档案与 /etc/shadow 档案:
  这两个档案可以说是 Linux 里头最重要的档案之一了!如果没有这两个档案的话,呵呵!您可是无法登入 Linux 的呦!
  o passwd 的构造:
  这个档案的构造是这样的:每一行都代表一个帐号,有几行就代表有几个帐号在你的系统中!不过需要特别留意的是,里头很多帐号本来就是系统中必须要的(例如 bin, daemon, adm, nobody 等等),请不要随意的杀掉他~~;
  
  o [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
  o 上面是 Red Hat 预设的几个帐号,这些帐号是系统在使用的呦!我们先来看一下 root 这个系统管理员这一行好了,你可以明显的看出来,每一行使用『:』分隔开,共有七个咚咚,分别是:
  1. 帐号名称:就是帐号名称啦!对应 UID 用的!例如 root 就是预设的系统管理员的帐号名称;
  2. 密码:早期的 Unix 系统的密码是放在这个档案中的,不过由于这样一来很容易造成资料的被窃取,所以后来就将资料给他改放到 /etc/shadow 中了,这一部份等一下再说,而这里你会看到一个 x ,呵呵!别担心密码已经被移动到 shadow 这个加密过后的档案?;
  3. UID:这个就是使用者识别码(ID)?!通常 Linux 对于 UID 有几个限制需要说给您了解一下:
  1. 0 :系统管理员,所以当你要作另一个系统管理员帐号时,你可以将该帐号的 UID 改成 0 即可;
  1~500 :保留给系统使用的ID,其实 1~65534 之间的帐号并没有不同,也就是除了 0 之外,其它的 UID 并没有不一样,
       预设 500 以下给系统作为保留帐号只是一个习惯。
       这样的好处是,以 named 为例,这个程序的预设所有人 named 的帐号 UID 是 25 ,当有其它的帐号同样是 25 
       时,很可能会造成系统的一些小问题!为了杜绝这样的问题,建议保留 500 以前的 UID 给系统吧!
  500~6553 :给一般使用者用的!
  1.
  上面这样说明可以了解了吗?是的, UID 为 0 的时候,就是 root 呦!所以请特别留意一下你的 /etc/passwd 档案!
  2. GID:这个与 /etc/group 有关!其实 /etc/group 的观念与 /etc/passwd 差不多,只是他是用来规范 group 的而已!
  3. 说明:这个字段并没有什么用途,只是用来解释这个帐号的意义而已!
  4. 家目录:这是使用者的家目录,以上面为例, root 的家目录在 /root ,所以当 root 登入之后,马上在的所在就是 /root 里头啦!呵呵!如果你有个帐号的使用空间特别的大,你想要将该帐号的家目录移动到其它的硬盘去,没有错!可以在这里进行修改呦!预设的使用者家目录在 /home/yourIDname
  5. Shell :所谓的 shell 是用来沟通人类下达的指令与硬件之间真正动作的界面!我们通常使用 /bin/bash 这个 shell 来进行指令的下达!关于 shell 的用法我们会在后面再提及的!这里比较需要注意的是,有一个 shell 可以用来替代成让帐号无法登入的指令!那就是 /bin/false 这个东西!这也可以用来制作纯 pop 邮件帐号者的资料呢!
  o shadow 的构造:
  由于 /etc/passwd 并不安全,所以后来发展出将密码移动到 /etc/shadow 这个档案中分隔开来的技术!并且加入了很多的限制参数在 /etc/shadow 里头!我们来了解一下这个档案的构造吧!
  o root:$K.K2.hqu.QfV.dkjjteojiasdlkjeo:11661:0:99999:7:::
  bin:*:11661:0:99999:7:::
  daemon:*:11661:0:99999:7:::
  adm:*:11661:0:99999:7:::
  o 这是 shadow 的形式,也同样的以『:』作为分隔的符号。数一数,共可以发现有九个字段,分别给他说明如下:
  1. 帐号名称:这个跟 passwd 需要对应!也就是跟 passwd 相同的意思啦!
  2. 密码:这个才是真正的密码,而且是经过编码过的密码啦!你只会看到有一些特殊符号的字母就是了!需要特别留意的是,虽然这些加密过的密码很难被解出来,但是『很难』不等于『不会』,所以,这个档案的预设属性是『-rw-------』亦即只有 root 才可以读写就是了!你得随时注意,不要不小心更动了这个档案的属性呢!另外,如果是『 * 』表示这个帐号并不会被用来登入的意思。
   
  注意事项:密码忘记或者被更动了?有的时候会发生这样的情况,就是说,你的 root 密码忘记了!要怎么办?重新安装吗?另外,有的时候是被入侵了, root 的密码被更动过,该如何是好?这个时候就必须要使用到 /etc/shadow 这个资料了!我们刚刚知道密码是存在这个档案中的,所以只要你能够以软盘开机,进入『单人维护系统』,那么就可以不用输入密码来以 root 的身份登入(通常就是在 boot: 时输入 linux single 就是了!)然后进入 /etc/shadow 这个档案中,将 root 的密码这一栏全部清空!然后再登入 Linux 一次,这个时候 root 将不需要密码(有的时候需要输入空格符)就可以登入了!这个时候请赶快以 passwd 设定 root 密码即可!
  3. 上次更动密码的日期:这个字段记录了『更动密码的那一天』的日期,不过,很奇怪呀!在我的例子中怎么会是 11661 呢?呵呵,这个是因为计算 Linux 日期的时间是以 1970 年 1 月 1 日作为 1 ,而 1971 年 1 月 1 日则为 366 啦!所以这个日期是累加的呢!得注意一下这个资料呦!那么最近的 2002 年 1 月 1 日就是 11689 啦,上面的日期则是 2001 年 12 月 5 日的意思!了解了吗?
  4. 密码不可被更动的天数:第四个字段记录了这个帐号的密码需要经过几天才可以被变更!如果是 0 的话,表示密码随时可以更动的意思。这的限制是为了怕密码被某些人一改再改而设计的!如果设定为 20 天的话,那么当你设定了密码之后, 20 天之内都无法改变这个密码呦!
  5. 密码需要重新变更的天数:由于害怕密码被某些『有心人士』窃取而危害到整个系统的安全,所以有了这个字段的设计。你必须要在这个时间之内重新设定你的密码,否则这个帐号将会暂时失效。而如果像上面的 99999 的话,那就表示,呵呵,密码不需要重新输入啦!不过,如果是为了安全性,最好可以设定一段时间之后,严格要求使用者变更密码呢!
  6. 密码需要变更期限前的警告期限:当帐号的密码失效期限快要到的时候,系统会依据这个字段的设定,发出『警告』言论给这个帐号,提醒他『再过 n 天你的密码就要失效了,请尽快重新设定你的密码呦!』,如上面的例子,则是密码到期之前的 7 天之内,系统会警告该用户。
  7. 帐号失效期限:如果用户过了警告期限没有重新输入密码,使得密码失效了,而该用户在这个字段限定的时间内又没有跟 root 反应,让帐号重新启用,那么这个帐号将暂时的失效!
  8. 帐号取消日期:这个日期跟第三个字段一样,都是使用 1970 年以来的日期设定。这个字段表示:这个帐号在此字段规定的日期之后,将无法再使用。这个字段会被使用通常应该是在『收费服务』的系统中,你可以规定一个日期让该帐号不能再使用啦!
  9. 保留:最后一个字段是保留的,看以后有没有新功能加入。
  这个 /etc/shadow 是很重要的资料,千万不能遗失也不能被 root 以外的人看到或修改!尤其是密码栏,因为很早之前就已经发明了『暴力计算』密码的程序,如果你的密码被看过了,则别人可以利用该程序去演算出你的真实密码,呵呵,到时候可就伤脑筋了!切记切记!
  那么什么是 SUID 与 SGID 呢?前面有说过了!跟档案属性比较有相关, ??? 去看看吧!
  ? 认识 /etc/group 与 /etc/gshadow 档案:
  认识帐号与密码是使用 /etc/passwd 与 /etc/shadow ,那么认识 group 就是 /etc/group 与 /etc/gshadow ?!OK!我们也来看看这两个档案的构造吧!
  o 认识 /etc/group
  这个档案可以让你直接将帐号所要支持的群组加进来!例如你有一个帐号名称为 myaccount ,你想要让这个帐号可以支持 root 这个群组,则你可以直接在 /etc/group 里面加入呢!很方便,不需要动用的指令呦!
  root:x:0:root
  bin:x:1:root,bin,daemon
  daemon:x:2:root,bin,daemon
  sys:x:3:root,bin,adm
  adm:x:4:root,adm,daemon
  o 这个内容也说明如下:
  1. 群组名称:就是群组名称啦!
  2. 群组密码:通常不需要设定,因为我们很少使用到群组登入!不过,同样的,密码也是被纪录在 /etc/gshadow 当中?!
  3. 群组 ID:就是所谓的 GID 啦!
  4. 支持的帐号名称:这个群组里面的所有的帐号,如上面所言,如果你想要让 mysccount 也属于 root 这个群组的话,那么就将上面的第一行最后面加上 ,myaccount (不要有空格)使成为『root:x:0:root,myaccount』就可以啦。
  o /etc/gshadow 的构造:
  root:::root
  bin:::root,bin,daemon
  daemon:::root,bin,daemon
  sys:::root,bin,adm
  adm:::root,adm,daemon
  o 这个内容与 group 几乎相同啦!就不提了!
  ? 增加使用者的一般步骤:新增使用者的时候,如果该使用者所属的群组不存在,则得(1)先新增群组;然后(2)再新增使用者帐号。当然,如果要删除群组时,则必须要反过来,先删除使用者才能删除群组!这点请大家留意?!
  认识完了一些需要注意的东西之后,我们来研究一下如何以『指令』增加群组、使用者与变更密码吧!
  ? groupadd
  语法:
  ? [root @test /root ]# groupadd [-g GID] groupname
  参数说明:
  -g GID :自行设定 GID 的大小
  范例:
  [root @test /root]# groupadd -g 55 testing <==设定一个群组,GID为 55
  ? 说明:
  这个指令会增加群组呢!而作用到的档案只有『/etc/group 与 /etc/gshadow』这两个档案,说实在的,你也可以直接修改这两个档案就好了,根本不需要使用到这个指令的!使用 vi 修改上面两个档案还比较简单呢!另外,如果你要新增的使用者所要的群组并不存在于系统中,那么您在增加使用者帐号之前,就必须要先新增群组?!
  ? groupdel
  语法:
  ? [root @test /root ]# groupdel groupname
  ???明:
  ?例:
  [root @test /root]# groupdel testing
  ? 说明:
  这很简单的,就是将 group ID 给他杀掉去!不过,有一点必须要特别留意,就是『在杀掉群组之前,请先将该群组的 primary 使用者删除!』才好!
  ? useradd
  语法:
  ? [root @test /root ]# useradd [-u UID] [-g GID] [-d HOME] [-mM] [-s shell] username
  参数说明:
  -u  :直接给予一个 UID
  -g  :直接给予一个 GID (此 GID 必须已经存在于 /etc/group 当中)
  -d  :直接将他的家目录指向已经存在的目录(系统不会再建立)
  -M  :不建立家目录
  -s  :定义其使用的 shell
  范例:
  [root @test /root]# useradd testing  <==直接以预设的资料建立一个名为 testing 的帐号
  [root @test /root]# useradd -u 720 -g 100 -M -s /bin/bash testing  <==以自己的设定建立帐号
  ? 说明:
  这个指令能够变更的档案可多了!包括了底下的各个档案:
  o /etc/passwd
  o /etc/shadow
  o /etc/group
  o /etc/gshadow
  o /etc/skel
  o /etc/default/useradd
  o /etc/login.defs
  建立预设的帐号:
  建立帐号的时候,如果没有特殊的设定,通常我们只使用『 useradd username 』就可以建立一个名为 username 的帐号了!不过你知道预设的帐号的基本设定吗?嘿嘿嘿嘿!基本设定就在 /etc/login.defs 与 /etc/default/useradd 这两个档案中!在 login.defs 里头有点像底下这样:
  ? MAIL_DIR    /var/spool/mail <==邮件预设目录摆放处
  PASS_MAX_DAYS  99999      <==密码需要变更的时间
  PASS_MIN_DAYS  0       <==密码多久需要变更
  PASS_MIN_LEN  5       <==密码的最小长度(这个可以改大一些吧!)
  PASS_WARN_AGE  7       <==密码快要失效之前几天发警告讯息?
  UID_MIN          500  <==预设帐号最小起算的 UID 数目(最小为 500 )
  UID_MAX         60000  <==最大的 UID 限制
  GID_MIN          500  <==GID 限制
  GID_MAX         60000  <==GID 限制
  CREATE_HOME   yes      <==是否建立家目录,预设是要建立家目录(若为 mail server 可以取消此项目)
  几乎可以设定的都在这里设定了!所以需要了解一下这个档案!另外,如果你是专门开启 mail server 的,那么由于使用者帐号不需要登入主机,所以也就不需要给予家目录,这个时候最后一项 GREATE_HOME 或者可以设定为 no !此外,当你以预设的资料建立帐号时,该帐号的 UID 将会取目前在 /etc/passwd 当中『最大的(其实是小于 60000)』那一个 UID + 1 即是预设帐号的 UID ?!
  而至于 useradd 内容则为:
  GROUP=100     <==预设的使用者群组为 100 ,查看一下 /etc/group 时,这个群组名称为 users 呢!
  HOME=/home     <==预设使用者的家目录建立的目录
  INACTIVE=-1    <==是否不激活,设定为 -1 自然就是激活啦!
  EXPIRE=      <==是否需要设定『死亡』时间?如果你希望该用户在期限到之后就不许登入,此项可以设定天数。
  SHELL=/bin/bash  <==预设的 Shell 为何?
  SKEL=/etc/skel   <==使用者家目录的内容!
  在这个项目中,最需要了解的就是 SKEL 啦!当你建立一个名为 testing 的帐号时,预设的家目录会是『 /home/testing 』这个目录,而这个目录的内容就是由 /etc/skel 所 copy 过去的!所以『当你想要让使用者的预设家目录内容更动时,可以直接将要更动的资料写在 /etc/skel 当中!』
  以自己的条件建立帐号:
  如果要以自己的条件建立帐号的时候,一般我都是喜欢手动的增加啦!不然就是先以上面的那一个例子增加一个帐号之后,在去手动修改 /etc/passwd 等等的档案!
  ? userdel
  语法:
  [root @test /root ]# userdel [-r] username
  参数说明:
  -r :将该帐号的[home directory]与[/var/spool/mail/username]一并删除!
  范例:
  [root @test /root]# userdel testing   <==只有砍掉 /etc/passwd 与 /etc/shadow 的该帐号内容;
  [root @test /root]# userdel -r testing <==连该帐号的 /home/testing 与 /var/spool/mail/testing 都砍掉!
  ? 说明:
  这个指令下达的时候要小心了!通常我们要移除一个帐号的时候,你可以手动的将 /etc/passwd 与 /etc/shadow 里头的该帐号取消即可!一般而言,如果该帐号只是『暂时不启用』的话,那么将 /etc/shadow 里头最后倒数一个字段设定为 0 就可以让该帐号无法使用,但是所有跟该帐号相关的资料都会留下来!使用 userdel 的时机通常是『你真的确定不要让该用户在主机上面使用任何资料了!』
  ? chsh
  语法:
  [root @test /root ]# chsh [-l] [-s shellname]
  参数说明:
  -l  :列出目前这部机器上面的能用的 shell 名称
  -s  :改变目前的 shell 成为 shellname
  范例:
  [test @test /root]# chsh -l     <==列出本机上所有能用的 shell 名称
  /bin/sh
  /bin/bash
  /bin/ash
  /bin/bsh
  /bin/csh
  [test @test /root]# chsh -s /bin/csh <==test 这个用户自行改变自己的预设 shell
  ? 说明:
  这是用来改变使用者自己的 shell 的指令!要注意呦,由于这个档案能够改变 /etc/passwd 的内容,所以他的预设属性就有 SUID 的属性了!通常 VBird 也都不会使用这个指令,因为直接改 /etc/passwd 就可以啦!
  ? chfn
  语法
  [root @test /root ]# chfn
  参数说明:
  范例:
  [test@test test]$ chfn
  Changing finger information for test.
  Password:          <==这里输入新的密码
  Name [Testing]: Testing   <==这里输入你要显示的『昵称』
  Office []: 
  Office Phone []:
  Home Phone []:
  Finger information changed.
  ? 说明:
  这个指令说实在的,除非是你的主机有很多的用户,否则倒真是用不着这个程序!这就有点像是 bbs 里头更改你『个人属性』的那一个资料啦!
  ? userconf
  不论怎么说,以 useradd 与 groupadd 这两个指令来增加群组与帐号总是不太方便!那么有没有比较类图形界面的方式可以来新增使用者呢?哈哈!当然有,那就是使用 userconf 就可以啦!不过,由于这个指令预设并没有安装在 Red Hat 7.2 里头,所以请安装一下吧!(请使用 Red Hat 7.2 第一块光盘!)
  
  ? [root @test /root ]# modprobe cdrom
  [root @test /root ]# modprobe ide-cd
  [root @test /root ]# mount -t iso9660 /dev/cdrom /mnt/cdrom
  [root @test /root ]# cd /mnt/cdrom/RedHat/RPMS
  [root @test /RPMS ]# rpm -ivh linuxconf*
  [root @tset /RPMS ]# cd
  [root @test /root ]# umount /mnt/cdrom
  这样就将 userconf 安装进来啦!接下来就简单?!在提示字符之下输入: userconf 则会出现如下的画面:
在这个画面中,目前我们所要使用到的功能只有:
  ? User accounts
  ? Group definitions
  ? Change root password
  当然,其实我们关心的只有 User accounts 这一项?!在操作上,使用『上下键』移动反白的线条,而使用『Tab』键来使光标移动到底下的 Quit 及 Help 按钮!
  1. 进入 User account:在 User accounts 按下 Enter 键,会出现:
   
  在这个画面中,第一栏为登入的帐号,第二栏为这个帐号的名称(可有可无),第三栏是这个帐号在这架 Linux 主机中的编号,第四栏则是这个帐号所代表的群组。你可以看到上面有个 vbird 的帐号,这个帐号的使用者是 DerMin Tsai(就使鸟哥啦),然后 vbird 这个帐号的编号是 500,而所属的群组是 root 这一个。当然?,就如同前面说的,一般使用者 UID 是由 500 起算的!
  2. 新增使用者:在上图中按两下『Tab』 键将光标移动至 Add 这一项,按 Enter,会出现:
   
  在这个画面中,你所需要输入的其实只有 Login name 就可以了,其它的东西系统会自动帮你设定(有 (opt) 的都是系统会自行依照 /etc/login.defs 与 /etc/defaults/useradd 的内容自行加以设定的!)。不过,如果你需要将使用者分门别类的话,最好还是设定一下比较好!
  ? Login name:输入要新增的使用者的帐号(就是 ID 啦);
  ? Full name :这是这个帐号的使用者全名,这个地方是可有可无的,不会影响!
  ? group :用来指定这一个 ID 的所属群组,通常鸟哥都会将在我机器上的使用者分成几各类别,而分别给予不同的群组,好方便管控!
  ? Supplementary groups:除了主要的群组之外,Linux 还提供你其它的支持群组!不过通常不用设定就可以了;
  ? Home directory(opt) :这是用来设定这个帐号使用者的家目录。通常如果不设定的话,预设的使用者家目录都在 /home/userID ,但是当你的硬盘容量不够大的时候,或者想将某人移动到某一个目录的话,就可以直接在这边改一改?!
  ? Command interpreter(opt) :这是使用者预设的 Shell ,通常在 Linux 下,我们都使用 BAShell ,所以不用改啦;
  ? User ID(opt) :注意喔,这个 ID 可不是前面的 login 的 ID ,这个 ID 是前面说的 Uid 编号,你可以自己设定一个大于 500 且不与其它帐号重复的 ID,也可以交由系统自动设定;
  ? 设定邮件别名(alias):基本上设定完这里就可以了,其它的保持默认值即可。不过,如果你已经有开启了 mail 服务,而虽然你的 ID 是 vbird ,但是也想要使用另一个 ID 为 dmtsai 的时候,其实不用再设定另一个帐号,只要使用 alias 的功能即可。将光标往下移动,可以看到如下的画面:
   
  在上面这个画面中,将光标移动到 Email alias 这一项上面。输入你要的别名(alias)即可。所谓的设定邮件别名 的意思是这样的,当你想要让 dmtsai 的邮件也传递到 vbird 这个帐号时,使用使用邮件别名,则系统在收到 dmtsai 这个 ID 的信件时,会将信直接传送到 vbird 而不会使用 dmtsai。(这个项目会直接写入 /etc/aliases 这个档案中,我们会在后面的邮件主机里头再提到这个项目!)
  最常使用 邮件别名 的时候是:当一群人都想要使用同一个帐号时。例如:你是一个系统管理员,若你要进行系统维修的时候,会在两天前发 e-mail 向你的使用者通知。如果是一个小站的话,那你可以慢慢的发个几封信也就是了,但是当你负责的是一个几百甚至几千人的企业时,这样发信是否觉得很麻烦呢?这时就可以使用 mail alias 的功能了,每个使用者的 mail alias 都可以设定为同一个虚拟帐号,例如每个人都有一个叫做 piggg 的帐号,则你只要寄信给 piggg 这个帐号时,系统会自动帮你把信传送给每一个人喔!好用吧!关于这部份,我们会在 mail server 中再次提到!
  OK!设定完成之后,按下 『Tab』 键,选择 Accept 按 Enter,这时会出现要你输入密码的画面:
  
   
  请输入这个帐号所想要的密码。请注意,通常密码的限制是:
  ? 密码不能与帐号相同;
  ? 密码需要超过 8 个字符;
  这是主要的限制,不过,由于你是『权力无限大的管理员』,所以密码的形式是『不限的』(虽然没有照规矩来时,在设定中会出现一些错误讯息,不过并不会影响你的设定!)。输入完毕之后会出现在输入一次的画面:
  
   
  再次输入一次密码之后,如果出现如下的画面,那就新增完成了!
  
  3. 新增群组:新增群组的话请选择 Cancel 跳出到最前面的画面,选择 Group definitions 这一项,就会出现 Group 的列表,基本上 Group 的增加与新增使用这是相同的方式,在此就不多说了!留给大家去尝试尝试吧!
  ? passwd
  语法
  ? [root @test /root ]# passwd [username]
  [test @test /root]# passwd
  [root @test /root]# passwd test
  Changing password for user test
  New password:   <==输入密码
  BAD PASSWORD: it is based on a dictionary word
  Retype new password:  <==再输入一次!
  passwd: all authentication tokens updated successfully
  ? 说明:
  这个指令可以修改使用者的密码!要注意的是,这个指令在 /bin/passwd 中,而帐号所存放的地方在 /etc/passwd 中,是不一样的呦!搞清楚呦!
  ? 一般使用者的用法是直接输入 passwd 即可;
  ? root 可以使用 passwd [username] 来替 username 这个帐号取一个新的密码!
  
  使用者身份切换:
  这里有个很有趣的问题要来跟大家分享一下,还记得在古老的年代里面,还没有 ssh 的时候,我们都是使用 telnet 登入系统的,偏偏系统预设是不开启 root 以 telnet 登入,那么好了!我们要怎样远程操控我们的 Linux 主机呀!?因为由前面的介绍我们不难发现,系统当中最特殊的帐号就是 UID 为 0 的使用者了,他具有至高无上的权力!而且是系统管理员必须要具备的身份,否则怎样操控主机呢?您说是吧!好了,那么 telnet 将 root 的登入权限关掉了,而如果我们在制作一个使用者,并将其 UID 变为 0 的话又如何?嘿嘿!很抱歉, telnet 就是认 UID 的,所以肯定还是进不了系统,这个时候要怎么办呀!?就是变换身份呀!将一般使用者的身份变成了 root 就行了!
  但是怎样变换身份呀?怎么说呢?就是说,一般而言,我们都不希望以 root 的身份登入主机,以避免被怪客入侵了!但是一部主机又不可能完全不进行修补或者是设定等动作!这个时候要如何将一般使用者的身份变成 root 呢?主要有两种方式,分别是:
  ? 以 su 直接将身份变成 root 即可,但是这个指令却需要 root 的密码,也就是说,如果你要以 su 变成 root 的话,你的一般使用者就必须要有 root 的密码才行;
  ? 那么如果不想要将 root 的密码流出去呢?呵呵!可以使用 sudo 来进行工作呦!
  底下我们就来说一说 su 跟 sudo 的用法啦!
  ? su
  语法:
  ? [root @test /root ]# su
  参数说明:
  范例:
  [test@test test]$ su
  Password:      <==输入 root 的密码
  [root@test test]#    <==身份变成 root 了
  ? 说明:
  这个指令很有用呦!这是用来将『一般身份转换成 super user 』的指令!通常为了安全的考量, telnet 与 ssh 尽量不要以 root 的身份来登入!但是有时后我们又要在外头以 root 的身份来修改系统设定,这个时候 su 就很有用了!
  ? sudo
  语法
  [root @test /root ]# sudo [-u username] [command]
  参数说明:
  -u :将身份变成 username 的身份
  范例:
  [test@test test]$ sudo mkdir /root/testing
  Password:      <==输入 test 的密码
  [root@test test]$ sudo -u test touch test  <==root 可以执行 test 这个使用者的指令,建立 test 的档案!
  说明:
  ? 如果单纯的使用 su 来变换成 root 的身份,最大的好处是可以直接下达我们惯用的指令,但是,还是会有问题的,就是如果主机是由多人共管的时候,由于所有的人都必须要知道 root 的密码,如此一来,呵呵!很麻烦的啦!因为怕被入侵嘛!如果管理群中的一个人不小心泄出了 root 的密码,不就完蛋了~~这个时候就有 sudo 的出现了!
  ? sudo 的基本语法就是在 sudo 后头直接加上指令,例如上面的例子中, mkdir /root/testing 就是命令啦!那么就可以来执行 root 身份可以动作的事情!此外,由于执行 root 身份的工作时,『输入的密码是使用者的密码,而不是 root 的密码,所以可以减少 root 密码外流的问题!』如此 root 的密码将不会流出去了!但是 sudo 在使用的时候请小心,就是要在 /etc/sudoers 里头设定该有的事项!在预设情况下,只有 root 才能使用 sudo !那有什么用!我们是一般使用者,想要使用的是 sudo 来变成 root 的身份呀!呵呵!没关系!可以使用 visudo 来编辑 /etc/sudoers 这个档案即可!在 Red Hat 的预设情况中,使用『 visudo 』才能编辑 /etc/sudoers 这个档案,此外,编辑者的身份必须要 root 才行!如何编辑呢?在预设的情况中,我们会希望将可以执行 root 动作的人的 group 设定为 wheel ,然后:
  [root@est /root]# visudo
  # sudoers file.
  #
  # This file MUST be edited with the 'visudo' command as root.
  #
  # See the sudoers man page for the details on how to write a sudoers file.
  #
  # Host alias specification
  # User alias specification
  # Cmnd alias specification
  # Defaults specification
  # User privilege specification
  root  ALL=(ALL) ALL
  test  ALL=(ALL) ALL         <==这一行可以加入,使 test 这个人可以使用 sudo
  # Uncomment to allow people in group wheel to run all commands
  # %wheel    ALL=(ALL)    ALL  <==将这一行批注符号取消
  # Same thing without a password
  # %wheel    ALL=(ALL)    NOPASSWD: ALL
  # Samples
  # %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
  # %users localhost=/sbin/shutdown -h now
  ? ? 如果如同上面的方式,将黄色字体那一行 /etc/sudoers 里头将『 # %wheel    ALL=(ALL)    ALL』这一行的批注符号取消,如此一来,则群组为 wheel 的人就可以进行 root 的身份工作!那么万一我想要让『单独的个人可以使用 sudo 的功能』呢?呵呵!那就直接以 visudo 加上这一行『test ALL=(ALL) ALL』即可!那么 test 即可使用 sudo 的功能?!很简单吧!但是请记得不要以 vi 直接修改 sudoers 呦!会有问题!
  ? sudo 除了变成 root 的功能之外!嘿嘿!他还可以变成『任何人』的功能呦!举个简单的例子来说好了,我们都知道激活程序的时候最好不要使用 root 来激活,因为如此一来当该程序被接管时,接管者(或者说是入侵者)将拥有 root 的权限了!所以近来我们都希望不要以 root 来激活一些程序啦!会比较安全!那么我们要以 root 来激活成为 test (例如常用的 nobody 这个帐号)要如何作?很简单,就使用上面的第二个例子来看, root 可以改变身份成为 test 来建立档案!嘿嘿!还不需要输入密码!很棒吧!这个动作我曾经在 squid 这个执行续上面做过,这样一来,即使我的 squid 被利用了,那么该怪客只能拥有 nobody 的权限,嘿嘿!该权限是很小很小的!所以可以达到保护主机的部分功能呦!
  
  手动增加使用者:
  ? 一般使用者帐号的增加:
  好了,现在我们知道其实使用 userconf 、 useradd 与 groupadd 其实会用到的档案最鲜明的就是 /etc/passwd 与 /etc/shadow ?!那么如何手动的增加一个使用者呢?最大的困扰在于 passwd 与 shadow 的同步啦!OK!大致的步骤可以这样说:
  1. 先建立所需要的群组( vi /etc/group )
  2. 建立帐号的各个属性( vi /etc/passwd )
  3. 将 passwd 与 shadow 同步化 ( pwconv )
  4. 建立该帐号的密码 ( passwd acount )
  5. 建立使用者家目录 ( cp -r /etc/skel /home/account )
  6. 更改家目录属性 ( chown -R account.group /home/account )
  这样就 OK 啦!实地的来新增一个 test 群组与帐号来试试看:
  
  建立新的群组 test ,设其 GID 为 520
  [root @test /root ]# vi /etc/group
  ----略
  test:x:520:test        <==新增群组,且群组的人为 test ,GID 为 520
  建立 test 的各个属性
  [root @test /root ]# vi /etc/passwd
  ----略
  test:x:520:520:testing account:/home/test:/bin/bash  <==建立各个属性
  同步化 /etc/passwd 与 /etc/shadow
  [root @test /root ]# pwconv     <==将 passwd 的资料转入 /etc/shadow 中!
  建立密码
  [root @test /root ]# passwd test  <==建立使用者 test 密码
  Changing password for user test
  New password:
  Retype new password:
  passwd: all authentication tokens updated successfully
  建立家目录并转化家目录的拥有者
  [root @test /root ]# cp -r /etc/skel /home/test
  [root @test /root ]# chown -R test:test /home/test
  
  这样就建立完毕?!!很简单吧!而由上面的例子,其实您也可以依据此而使用 scripts 来新增使用者,详细的步骤等以后 VBird 真的开发出来了,再来跟大家报告。(如果没记错的话,目前很多网页都已经有提供相关的大量建立帐号的方式了!)
  ? POP3 邮件帐号的增加:
  好啦!如果我是一个邮件主机,我不要使用者使用 ftp, telnet, ssh 的话,只允许对方使用 POP3 而已,该怎么办?呵呵!其实也是很简单的,除了 userconf 可以进行之外,你也可以手动达到此一目的呦!
  基本上的原理是这样的:
  o Red Hat 预设的一个 popusers 群组(GID 为 45)就是专门给邮件帐号使用的啦!所以只要你的群组设定名称为 popusers 即可(其实仅是利于管理就是了);
  o 由于不需要让这个帐号由其它的服务登入主机,所以在 shell 的地方则改成了 /bin/false ?!
  o 由于不需要这个帐号的登入,所以家目录也可以不用建立!!
  所以整个建立的步骤就可以简化为:
  1. 建立帐号的各个属性( vi /etc/passwd )
  2. 将 passwd 与 shadow 同步化 ( pwconv )
  3. 建立该帐号的密码 ( passwd acount )
  这样就可以啦!我们实地的来建立一个名为 poptest 的帐号试试看:
  
  建立帐号 poptest
  [root @test /root ]# vi /etc/passwd
  ---略
  poptest:x:530:45:testing pop account:/home/poptest:/bin/false  <==家目录先设定也没关系!
  注意:群组名称 45 为 popusers 而 shell 则需要为 /bin/false 才行!
  同步化 passwd 与 shadow
  [root @test /root ]# pwconv
  建立密码
  [root @test /root ]# passwd poptest
  Changing password for user poptest
  New password:
  Retype new password:
  passwd: all authentication tokens updated successfully
  
  很简单吧!这样就建立好 poptest 这一个邮件 POP3 的帐号了!这个帐号将仅可以使用 pop3 与 smtp 来收发信件呢!!
  那么如何砍到刚刚建立的帐号呢?很简单的啦!
  1. 就是将 /etc/passwd 与 /etc/shadow 里面的相关信息都杀掉,
  2. 然后再到 /home 底下去将该 account 的家目录整个杀掉就是了!
  3. 此外,你也需要到 /var/spool/mail 底下去杀掉该帐号的邮件呦!
文章评论

共有 1 条评论

  1. tinyseep 于 2005-10-21 11:31:58发表:

    受教啦,呵呵,虽然是菜鸟也看得有滋有味的。