鸟哥的 Linux ADSL 私房菜


Linux 账号与身份管理
最近更新日期:2003/02/10
账号管理groupadd, groupdel, useradd, userdel, chsh, chfn, userconf,
密码管理与设定passwd,
使用者身份切换su, sudo, visudo,
使用者查询id, finger, groups,
手动增加使用者一般使用者账号, 仅开放 POP (邮件)账号
本章习题练习

账号管理
管理员的工作中,相当重要的一环就是『管理账号』啦!因为整个系统都是你在管理的,并且所有的一般用户的申请,都必须要透过你的协助才行!所以你就必须要了解一下如何管理好一个网站的账号管理啦!在管理 Linux 主机的账号时,我们必须先来了解一下 Linux 到底是如何辨别每一个使用者的! 大致上的情况就像这样,所以呢,当你要登入你的 Linux 主机的时候,那个 /etc/passwd 与 /etc/shadow 就必须要让系统读取啦,(这也是很多攻击者会将特殊账号写到 /etc/passwd 里头去的缘故!)所以呢,如果你要备份 Linux 的系统的账号的话,那么这两个档案就一定需要备份才行呦!
认识完了一些需要注意的东西之后,我们来研究一下如何以『指令』增加群组、使用者与变更密码吧!在接下来的例子中,『您可以依照底下的案例直接下达指令去试看看!』实作是真的很重要的啦!

  • 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 里头更改你『个人属性』的那一个资料啦!这个程序主要都是搭配 finger 这支程序在运作的!不过,由于 finger 这支程序不是很安全,所以预设是没有安装他的!如果您想要玩一下 finger 的话,那么请先参考 RPM 套件安装内容后,在安装 finger 的 RPM 档案,然后再来玩吧!底下这里鸟哥还是先简单的介绍一下就好了!
    使用 chfn 这个指令之后,程序会要求您输入许多的信息,包含了:
    密码
    昵称
    办公室号码
    办公室电话
    家里电话
    这几个咚咚给他设定好之后,你的 /etc/passwd 会变成怎样呢?我们以管线命令,配合正规表示法,捉出 test 这个人的信息如下:
    [root @test root]# more /etc/passwd | grep test
    test:x:501:501:Testing user,06-123-1234,06-123-1234,06-123-1234:/home/test:/bin/bash
    嘿嘿!多出了一些逗点分隔在第三栏啰!那个就是 chfn 改的信息啰!只有改这个地方就是了!所以你也可以自行修改呢!那么再来你可以使用 finger test 来看一下 test 这个人的基本信息!

  • userconf

  • 不论怎么说,以 useradd 与 groupadd 这两个指令来增加群组与账号总是不太方便!那么有没有比较类图形界面的方式可以来新增使用者呢?哈哈!当然有,在 Mandrake 与 Red Hat 当中那就是使用 userconf 就可以啦!假设您已经安装了 Linuxconf 这个套件,所以自然也就含有 userconf 这个咚咚!因此,直接以 root 的身份在指令列模式输入 userconf 就会出现下图:
     
     
    在这个画面中,目前我们所要使用到的功能只有: 当然,其实我们关心的只有 User accounts 这一项啰!在操作上,使用『上下键』移动反白的线条,而使用『Tab』键来使光标移动到底下的 Quit 及 Help 按钮!底下我们提一提在账号管理方面,最常使用的两个功能,分别是『已存在账号的修正与管理』,及『新增账号!』

    密码管理与设定:
    再来跟大家提一提那个重要的密码概念!您得要特别留意的是,今天,您的主机若是遭到入侵,对方的第一个入侵点自然就是您主机上面账号的『密码』了,所以,如果您的密码定义的比较严格的话,那么自然对方就不容易猜到你的密码,自然就会比较有保障啦!
     
    目前一些 Cracker 较常使用的密码破解软件,大抵是『字典攻击法』及所谓的『暴力攻击法』,就字面上的意义来说,『字典攻击法』是将字典里面所查的到的任何单字或词组都输入 的程序中,然后使用该程序一个一个的去尝试破解你的密码,不要觉得这样的速度似乎很慢,实际上,现今的计算机运算速度太高了,字典攻击法的操作效率基本上是 很高的!另一个『暴力攻击法』就是直接使用键盘上面任何可以使用的按键,然后依照组合,以 1 个, 2 个, 3 个…. 密码组合的方式去破解你的密码!这个方式就真的比较慢一点,如果你的密码组合是 6~8 个字符以上,那么暴力攻击法还是需要好长一段时间才能够破解的了的!
     
    由上面的『字典攻击法』与『暴力攻击法』猜测你的密码的方式来说,您知道如何设定一个好的密码了吗?是的,您的密码最好需要底下几个特性: 这种密码真的很不容易被破解,但是很不幸的,也很容易被你我忘记??所以呢,建议您常常使用一些对别人来说是没有意义,但是对您确有特殊涵意的字眼!例如我常常提到的,我爱我老婆!『 I&Mywife*^』之类的密码!不容易被猜,也挺容易被你自己记住的!那么有没有『很要命的密码』呢?有的,底下几种密码就很要命: VBird 曾经见过直接以账号做为密码的状况!真是要命??太好猜了?
     
    好了!知道了密码的重要性,与基本的设定之后,接着下来我们谈一谈如何手动设定密码吧!基本上, root 可以设定『任何样式的密码』,而且, root 也可以帮助 user 订定他们的密码!至于 user 仅能修改自己的密码!那么修改密码使用什么命令?就是 passwd 这个命令啦!咦!这里突然给他想到几个重要信息,大家赶紧复习一下: 这些指令与意义如果都还没有忘记!恭喜您了!真是不错!好了,还记得我们密码放在哪里吗?对啦!就是 /etc/shadow 里面,那个档案的权限是 –rw------- 所以只有 root 可以修改,因此, passwd 必需要具有 SUID 才能让一般使用者修改他们的密码啰!

  • 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 中,是不一样的呦!搞清楚呦!

    使用者身份切换:
    这里有个很有趣的问题要来跟大家分享一下,还记得在古老的年代里面,还没有 ssh 的时候,我们都是使用 telnet 登入系统的,偏偏系统预设是不开启 root 以 telnet 登入,那么好了!我们要怎样远程操控我们的 Linux 主机呀!?因为由前面的介绍我们不难发现,系统当中最特殊的账号就是 UID 为 0 的使用者了,他具有至高无上的权力!而且是系统管理员必须要具备的身份,否则怎样操控主机呢?您说是吧!好了,那么 telnet 将 root 的登入权限关掉了,而如果我们在制作一个使用者,并将其 UID 变为 0 的话又如何?嘿嘿!很抱歉, telnet 就是认 UID 的,所以肯定还是进不了系统,这个时候要怎么办呀!?就是变换身份呀!将一般使用者的身份变成了 root 就行了!
     
    但是怎样变换身份呀?怎么说呢?就是说,一般而言,我们都不希望以 root 的身份登入主机,以避免被怪客入侵了!但是一部主机又不可能完全不进行修补或者是设定等动作!这个时候要如何将一般使用者的身份变成 root 呢?主要有两种方式,分别是: 底下我们就来说一说 su 跟 sudo 的用法啦!

  • su

  • 语法
    [root @test /root ]# su
    参数说明:
    范例:
    [test@test test]$ su
    Password:          <==输入 root 的密码
    [root@test test]#       <==身份变成 root 了!
    [test@test test]$ su -  <==连环境参数档案都是读取 root 的!
    [root@test root]# su test  <==将 root 的身份改为 test ,且不需要输入密码喔!
    说明
    这个指令很有用呦!这是用来将『一般身份转换成 super user 』的指令!通常为了安全的考虑, telnet 与 ssh 尽量不要以 root 的身份来登入!但是有时后我们又要在外头以 root 的身份来修改系统设定,这个时候 su 就很有用了!su 的使用真的很简单,输入 su 之后,直接给他输入 root 的密码,此时您就是 root 了!但是需要特别留意的是: 此外, su 也可以将您的身份转换成为其它身份的使用者,而,如果您是 root ,那么转换为其它身份的使用者,将不需要输入密码喔!很过瘾吧!例如上面的最后一个例子!

  • 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 的档案!
    说明

    使用者查询:
    好了,知道了 UID,GID 以及与账号有关的一些信息之后,我们要来瞧瞧,那么如何知道哪一个使用者的 UID 与 GID ,以及他们所能够提供的支持的群组呢?可能的话,当然可以直接到 /etc/passwd 及 /etc/group 里面去查看啰!但是还有更简单的方法呢,那就是使用简单的指令工具呀!有哪些简便的工具呢?就是底下这几个:

    手动增加使用者
    好了,那么我们已经知道如何新增账号与删除甚至是修改账号了,呵呵!是否从此之后,天下太平呢?当然不是了!为什么呢?假设您今天要新增账号的内容是『数字账号』的话,那么是否可以使用 useradd 新增账号呢?例如:
    useradd 1234567
    很抱歉?useradd 并不允许这样的账号设定的!唉?真难过,难道没有其它的方法可以新增这样的使用者账号了吗?咦!刚刚不是说过,其实我们都是使用 /etc/passwd 及 /etc/shadow 这几个档案来设定账号的吗?那么使用手动的方式是否就可以解决这样的困扰了!Bingo !没错!就是这样!所以底下我们尝试使用手动的方式来新增账号,试试看能不能成功的增加一个使用者 1234 呢?

    本章习题练习 ( 要看答案请将鼠标移动到『答:』底下的空白处,按下左键圈选空白处即可察看 )
    2002/05/15:第一次完成
    2003/02/10:重新编排与加入 FAQ

    2002/05/05 以来统计人数


    Designed by VBird during 2001-2004.  Aerosol Lab.