Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1131837
  • 博文数量: 300
  • 博客积分: 37
  • 博客等级: 民兵
  • 技术积分: 772
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-26 04:46
文章分类
文章存档

2017年(4)

2016年(7)

2015年(19)

2014年(72)

2013年(71)

2012年(127)

分类: LINUX

2014-10-28 10:11:07

  帐号管理

  好啦!既然要管理帐号,当然是由新增与移除使用者开始的啰~底下我们就分别来谈一谈如何新增、 移除与更改使用者的相关资讯吧~

新增与移除使用者: useradd, 相关设定档, passwd, usermod, userdel

  要如何在 Linux 的系统新增一个使用者啊?呵呵~真是太简单了~直接利用 useradd 这个指令即可! 他的指令下达方法如下:

  # useradd

  [root@linux ~]# 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
  [root@linux ~]# useradd vbird1
  [root@linux ~]# ls -l /home
  drwxr-xr-x   3 vbird1 vbird1 4096 Aug 30 17:33 vbird1
  [root@linux ~]# 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 建立一个帐号!
  [root@linux ~]# useradd -u 700 -g users vbird2
  [root@linux ~]# ls -l /home
  drwxr-xr-x   3 vbird2 users  4096 Aug 30 17:43 vbird2
  [root@linux ~]# 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
  [root@linux ~]# useradd -r vbird3
  [root@linux ~]# 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 啰!

  [root@linux ~]# passwd [useraccount]

  范例一:如果 root 要帮 dmtsai 修改密码时?
  [root@linux ~]# 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 这个使用者想要修改自己的密码时
  [dmtsai@linux ~]$ 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 可以随便设定密码,即使该密码并不符合系统的密码验证要求~ @_@。例如上面的范例一, 我帮 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 啰~

  [root@linux ~]# 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’的说明。
  [root@linux ~]# usermod -c "VBird's test" dmtsai
  [root@linux ~]# grep dmtsai /etc/passwd
  dmtsai:x:501:501:VBird's test:/home/dmtsai:/bin/bash

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

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

  范例四:万一 dmtsai 这个家伙被建立时忘记建立家目录,该如何是好?
  [root@linux ~]# 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

  整个指令的语法是:

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

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

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

  另外,其实使用者如果在系统上面操作过一阵子了,那么该使用者其实在系统内可能会含有其他档案的。 举例来说,他的邮件信箱 (mail box) 或者是例行性命令 (crontab) 之类的档案。 所以,如果想要完整的将某个帐号完整的移除,最好可以在下达 userdel -r username 之前, 先以‘ find / -user username ’查出整个系统内属于 username 的档案, 然后再加以删除吧!

阅读(1491) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~