快捷搜索:   服务器  安全  linux 安全  MYSQL  dedecms

Linux 账号与身份管理(1)

  账号管理:

  管理员的工作中,相当重要的一环就是『管理账号』啦!因为整个系统都是你在管理的,并且所有的一般用户的申请,都必须要透过你的协助才行!所以你就必须要了解一下如何管理好一个网站的账号管理啦!在管理 Linux 主机的账号时,我们必须先来了解一下 Linux 到底是如何辨别每一个使用者的!

  使用者的 ID 与群组的 ID :

  其实 Linux 并不会直接认识你的『账号名称』,他认识的其实是你的『账号 ID 』才是!如果你曾经以 tarball 安装过软件的话,那么应该不难发现,在解压缩之后的档案,嘿?档案拥有者竟然是『不明的数字』?奇怪吧?这没什么好奇怪的,因为 Linux 说实在话,他真的只认识代表你身份的号码而已!而对应的号码与账号,则是记录在 /etc/passwd 当中!

  怎样登入 Linux 主机呀?

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

  先找寻 /etc/passwd 里面是否有这个账号?如果没有则跳出,如果有的话则将该账号对应的 UID ( User ID )与 GID ( Group ID )读出来,另外,该账号的家目录与 shell 设定也一并读出;

  再来则是核对密码表啦!这时 Linux 会进入 /etc/shadow 里面找出对应的账号与 UID,然后核对一下你刚刚输入的密码与里头的密码是否相符?

  如果一切都 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/passwd 档案与 /etc/shadow 档案:

  由上面的说明您大概已经知道,嘿嘿!账号管理最重要的两个档案就是『 /etc/passwd 与 /etc/shadow 』了!这两个档案可以说是 Linux 里头最重要的档案之一了!如果没有这两个档案的话,呵呵!您可是无法登入 Linux 的呦!

  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

  上面是 Mandrake 9.0 预设的几个账号,这些账号是系统在使用的呦!我们先来看一下 root 这个系统管理员这一行好了,你可以明显的看出来,每一行使用『:』分隔开,共有七个咚咚,分别是

  账号名称:就是账号名称啦!对应 UID 用的!例如 root 就是预设的系统管理员的账号名称;

  密码:早期的 Unix 系统的密码是放在这个档案中的,不过由于这样一来很容易造成数据的被窃取,所以后来就将数据给他改放到 /etc/shadow 中了,这一部份等一下再说,而这里你会看到一个 x ,呵呵!别担心密码已经被移动到 shadow 这个加密过后的档案啰;

  UID:这个就是使用者识别码(ID)啰!通常 Linux 对于 UID 有几个限制需要说给您了解一下:

  0 系统管理员,所以当你要作另一个系统管理员账号时,你可以将该账号的 UID 改成 0 即可;

  1~500 保留给系统使用的ID,其实 1~65534 之间的账号并没有不同,也就是除了 0 之外,其它的 UID 并没有不一样,预设 500 以下给系统作为保留账号只是一个习惯。这样的好处是,以 named 为例,这个程序的预设所有人 named 的账号 UID 是 25 ,当有其它的账号同样是 25 时,很可能会造成系统的一些小问题!为了杜绝这样的问题,建议保留 500 以前的 UID 给系统吧!

  500~65535 给一般使用者用的!

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

  GID:这个与 /etc/group 有关!其实 /etc/group 的观念与 /etc/passwd 差不多,只是他是用来规范 group 的而已!

  说明:这个字段基本上并没有什么用途,只是用来解释这个账号的意义而已!不过,如果您提供使用 finger 的功能时,这个字段可以提供很多的讯息呢!底下的 chfn 可以解释一下啰!

  家目录:这是使用者的家目录,以上面为例, root 的家目录在 /root ,所以当 root 登入之后,马上在的所在就是 /root 里头啦!呵呵!如果你有个账号的使用空间特别的大,你想要将该账号的家目录移动到其它的硬盘去,没有错!可以在这里进行修改呦!预设的使用者家目录在 /home/yourIDname

  Shell :所谓的 shell 是用来沟通人类下达的指令与硬件之间真正动作的界面!我们通常使用 /bin/bash 这个 shell 来进行指令的下达!关于 shell 的用法我们会在后面再提及的!这里比较需要注意的是,有一个 shell 可以用来替代成让账号无法登入的指令!那就是 /bin/false 这个东西!这也可以用来制作纯 pop 邮件账号者的数据呢!

  shadow 的构造:

  由于 /etc/passwd 并不安全,所以后来发展出将密码移动到 /etc/shadow 这个档案中分隔开来的技术!并且加入了很多的限制参数在 /etc/shadow 里头!我们来了解一下这个档案的构造吧!

  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:::

  这是 shadow 的形式,也同样的以『:』作为分隔的符号。数一数,共可以发现有九个字段,分别给他说明如下:

  账号名称:这个跟 passwd 需要对应!也就是跟 passwd 相同的意思啦!

  密码:这个才是真正的密码,而且是经过编码过的密码啦!你只会看到有一些特殊符号的字母就是了!需要特别留意的是,虽然这些加密过的密码很难被解出来,但是『很难』不等于『不会』,所以,这个档案的预设属性是『-rw-------』亦即只有 root 才可以读写就是了!你得随时注意,不要不小心更动了这个档案的属性呢!另外,如果是在密码栏的第一个字符为『 * 』表示这个账号并不会被用来登入的意思。所以万一哪一天你的某个使用者不乖时,可以先在这个档案中,将他的密码多加一个 * !嘿嘿!他就无法使用该账号啰!直到他变乖了,再给他启用啊!

  注意事项:密码忘记或者被更动了?

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

  这个时候就必须要使用到 /etc/shadow 这个数据了!我们刚刚知道密码是存在这个档案中的,所以只要你能够以软盘开机,进入『单人维护系统』,那么就可以不用输入密码来以 root 的身份登入(通常就是在 boot: 时输入 linux single 就是了!)然后进入 /etc/shadow 这个档案中,将 root 的密码这一栏全部清空!然后再登入 Linux 一次,这个时候 root 将不需要密码(有的时候需要输入空格符)就可以登入了!这个时候请赶快以 passwd 设定 root 密码即可!

  上次更动密码的日期:这个字段记录了『更动密码的那一天』的日期,不过,很奇怪呀!在我的例子中怎么会是 11979 呢?呵呵,这个是因为计算 Linux 日期的时间是以 1970 年 1 月 1 日作为 1 ,而 1971 年 1 月 1 日则为 366 啦!所以这个日期是累加的呢!得注意一下这个资料呦!那么最近的 2002 年 1 月 1 日就是 11689 啦,了解了吗?

  密码不可被更动的天数:第四个字段记录了这个账号的密码需要经过几天才可以被变更!如果是 0 的话,表示密码随时可以更动的意思。这的限制是为了怕密码被某些人一改再改而设计的!如果设定为 20 天的话,那么当你设定了密码之后, 20 天之内都无法改变这个密码呦!

  密码需要重新变更的天数:由于害怕密码被某些『有心人士』窃取而危害到整个系统的安全,所以有了这个字段的设计。你必须要在这个时间之内重新设定你的密码,否则这个账号将会暂时失效。而如果像上面的 99999 的话,那就表示,呵呵,密码不需要重新输入啦!不过,如果是为了安全性,最好可以设定一段时间之后,严格要求使用者变更密码呢!

  密码需要变更期限前的警告期限:当账号的密码失效期限快要到的时候,系统会依据这个字段的设定,发出『警告』言论给这个账号,提醒他『再过 n 天你的密码就要失效了,请尽快重新设定你的密码呦!』,如上面的例子,则是密码到期之前的 7 天之内,系统会警告该用户。

  账号失效期限:如果用户过了警告期限没有重新输入密码,使得密码失效了,而该用户在这个字段限定的时间内又没有跟 root 反应,让账号重新启用,那么这个账号将暂时的失效!

  账号取消日期:这个日期跟第三个字段一样,都是使用 1970 年以来的日期设定。这个字段表示:这个账号在此字段规定的日期之后,将无法再使用。这个字段会被使用通常应该是在『收费服务』的系统中,你可以规定一个日期让该账号不能再使用啦!

  保留:最后一个字段是保留的,看以后有没有新功能加入。

  这个 /etc/shadow 是很重要的数据,千万不能遗失也不能被 root 以外的人看到或修改!尤其是密码栏,因为很早之前就已经发明了『暴力计算』密码的程序,如果你的密码被看过了,则别人可以利用该程序去演算出你的真实密码,呵呵,到时候可就伤脑筋了!切记切记!

  这个 /etc/shadow 是很重要的数据,千万不能遗失也不能被 root 以外的人看到或修改!尤其是密码栏,因为很早之前就已经发明了『暴力计算』密码的程序,如果你的密码被看过了,则别人可以利用该程序去演算出你的真实密码,呵呵,到时候可就伤脑筋了!切记切记!那么什么是 SUID 与 SGID 呢?前面有说过了!跟档案属性比较有相关, 点这里 去看看吧!

  认识 /etc/group 与 /etc/gshadow 档案:

  认识账号与密码是使用 /etc/passwd 与 /etc/shadow ,那么认识 group 就是 /etc/group 与 /etc/gshadow 啰!OK!我们也来看看这两个档案的构造吧!

  认识 /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

  这个内容也说明如下:

  群组名称:就是群组名称啦!

  群组密码:通常不需要设定,因为我们很少使用到群组登入!不过,同样的,密码也是被纪录在 /etc/gshadow 当中啰!

  群组 ID:就是所谓的 GID 啦!

  支持的账号名称:这个群组里面的所有的账号,如上面所言,如果你想要让 mysccount 也属于 root 这个群组的话,那么就将上面的第一行最后面加上 ,myaccount (不要有空格)使成为『root:x:0:root,myaccount』就可以啦。

  /etc/gshadow 的构造:

  root:::root

  bin:::root,bin,daemon

  daemon:::root,bin,daemon

  sys:::root,bin,adm

  adm:::root,adm,daemon

  一般来说,group password 是用来让那些不在 group 中的成员,临时加入 group 用的,有兴趣的话可以使用 man newgrp 了解一下他的用法!不过,因为牵涉到 "密码",不好管理,因此很少用。真想让对方加入,不如将对方加入该群组,用密码反而不方便。

  增加使用者的一般步骤:

  新增使用者的时候,如果该使用者所属的群组不存在,则得(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 使用者删除!』才好!那什么是 Primary 的使用者呢?说穿了也很简单啦!就是 /etc/passwd 里面,那个 GID 设定为这个群组的 GID 的那个使用者就对啦!

  --------------------------------------------------------------------------------

  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 <==以自己的设定建立账号

  说明:

  这个指令能够变更的档案可多了!包括了底下的各个档案:

  /etc/passwd

  /etc/shadow

  /etc/group

  /etc/gshadow

  /etc/skel

  /etc/default/useradd

  /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 当中!』

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论