[一天几个linux命令] Linux的账号与群组

Linux的账号与群组

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

使用者识别码:UID与GID

虽然我们登陆Linux主机的时候,输入的是我们的账号,但是其实Linux主机并不会直接认识你的“账号名称”的,他仅认识ID啊(ID就是一组号码啦)。由于计算机仅认识0与1,所以主机对于数字比较有概念的;至于账号只是为了让人们容易记忆而已。而你的ID与账号的对应就在/etc/passwd当中哩。

那么到底有几种ID呢?每个文件都具有“拥有者与拥有群组”的属性吗?没错啦!每个登陆的使用都至少都会取得两个ID,一个是使用者ID(User ID, 简称UID),一个是群组ID(Group ID, 简称GID)。

那么文件如判别他的拥有者与群组呢?其实就是利用UID与GID啦!每个文件都会有所谓的拥有者ID与拥有群组ID,当我们有要显示文件属性的需求时,系统会依据/etc/passwd/etc/group的内容,找到UID/GID对应的账号与群组名称再显示出来!我们可以作个小实验,你可以用root的身份vim /etc/passwd,然后将你的一般身份的使用者的ID随便改一个号码,然后再到你的一般身份的目录下看看原先该账号拥有的文件,你会发现该文件的拥有人变成了“数字了”呵呵!这样可以理解了吗?来看看下面的例子

#1.先察看一下,系统里面有没有一个名为dmtsai的用户
id dmtsai
uid=1000(dmtsai) gid=1000(dmtsai) groups=1000(dmtsai),10(whell) ⇐ 确定有这个账号叫喔

ll -d /home/dmtsai
drwx------. 17 dmtsai dmtsai 4096 Jul 17 19:51 /home/dmtsai
#瞧一瞧,使用者的字段正是dmtsai本身喔!

#2. 修改一下,将刚刚我们的dmtsai的1000UID改为2000看看:
vim /etc/passwd
.... (前面省略)....
dmtasi:2000:1000:dmtsai:/home/dmtsai:/bin/bash <== 修改一下特殊字体部分,由1000改过来

ll -d /home/dmtsai
drwx------. 17 1000 dmtsai 4096 Jul 17 19:51 /home/dmtsai
#很害怕吧!怎么变成1000了?因为文件只会记录UID的数字而已!
#因为我们乱改,所以导致1000找不到对应的账号,因此显示数字!

#3. 记得将刚刚的2000改回来!
vim /etc/passwd
.... (前面省略)....
dmtsai:x:1000:1000:dmtsai:/home/dmtsai:/bin/bash ⇐ “务必一定要”改回来!

你一定要了解的是,上面的例子仅是在说明UID的账号的对应性,在一部正常运行的Linux主机环境下,上面的动作不可随便进行,这是因为系统上已经有很多的数据被创建存在了,随意修改系统上某些账号的UID很可能会导致某些程序无法进行,这将导致系统无法顺利运行的结果,因为权限的问题啊!,所以,了解了之后,请赶快回到/etc/passwd里面,将数字改回来喔!

使用者账号

Linux系统上面的使用者如果需要登陆主机以取得shell的环境来工作时,他需要如何进行呢?首先,他必须要在计算机前面利用tty1~tty6的终端机提供的login接口,并输入账号与密码后才够登陆。如果是通过网络的话,那至少使用者就得要学习ssh这个功能了。那么你输入账号密码后,系统帮你处理了什么呢?

  • 先找寻/etc/passwd里面是否有你输入的账号?如果没有则跳出,如果有的话则将该账号对应的UID与GID(在/etc/group中)读出来,另外,该账号的主文件夹与shell设置也一并读出
  • 再来则是核对密码表啦!这时Linux会进入/etc/shadow里面找出对应的账号与UID,然后核对一下你刚刚输入的密码与里头的密码是否相符?
  • 如果一切都OK的话,就进入Shell控管的阶段啰!
    大致上的情况就像这样,所以当你要登陆你的Linux主机的时候,那个/etc/passwd与/etc/shadow就必须要让系统读取啦(这也是很多攻击者会将特殊账号写到/etc/passwd里头去的缘故),所以呢,如果你要备份Linux的系统账号的话,那么这两个文件就一定需要备份才行呦!
    由上述的流程我们也知道,跟使用者账号有关的有两个非常重要的文件,一人是管理使用者UID/GID 重要参数的/etc/passwd, 一个则是专门管理密码相关数据的/etc/shadow啰!那这两个文件的内容就非常值的进行研究啦!下面我们会简单的介绍这两个文件,详细的说明可以参考man 5 passwd 及 man 5 shadow

/etc/passwd文件结构

这个文件的构造是这样的:每一行都代表一个账号,有几行就代表有几个账号在你的系统中!不过需要特别留意的是,里头很多账号本来就是系统正常运行所必须要的,我们可以简称他为
系统账号,例如bin, daemon, adm, nobody等等,这些账号请不要随意的杀掉他呢!这个文件内容有点像这样:

head -n 4 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

我们先来看一下每一个Linux系统都会有的第一行,就是root这个系统管理员那一行了,你可以明显的看出来,第一行使用”:”分隔开,共有七个咚咚,分别是:

  1. 账号名称:就是账号啦!用来提供给对数字不太敏感的人类使用来登陆系统的!需要用来对应UID喔。例如root的UID对应就是0(第三个字段)
  2. 密码:早期Unix系统的密码就是放在这字段上!但是因为这个文件的特性是所有的程序都能够读取,这样一来很容易造成密码数据被窃取,因此后来就将这个字段的密码数据给他改放到/etc/shadow中了。所以里你会看到一个”x”,呵呵!
  3. UID:这个就是使用者识别码啰!通常Linux对于UID有几个限制需要给您了解一下:
id范围该ID使用者特性
0(系统管理员)当UID是0时,代表这个账号是“系统管理员”!所以当你要让其他的账号名称也具有root的权限时,将该账号的UID改为0即可。你也就是说,一部系统上面的系统管理员不见得只有root喔!不过,很不建议有多个账号的UID是0啦~容易让系统管理员混乱!
1~999(系统账号)保留给系统使用的ID,其实除了0之外,其他的UID权限与特性并没有不一样。默认1000以下的数字让给系统作为保留账号只是一个习惯。 由于系统上面启动的网络服务或背景服务希望使用较小的权限去运行,因此不希望使用root的身份去执行这些服务,所以我们就得要提供这些运行中程序的拥有账号才行。这些系统账号通常是不可登陆的所以才会有/sbin/nologin这个特殊的shell存在。根据系统账号的由来,通常这类账号又约被区分为两种:1~200:由distributions自行创建的系统账号;201~999:若使用者有系统账号需求时,可以使用的账号UID。
1000-60000(可登陆账号)给一般使用者用的。事实上,目前的linux核心(3.10.x版)已经可以支持到2^32-1这么大的UID号码喔!

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

  1. GID:这个与/etc/group有关!其实/etc/group的观念与/etc/passwd差不多,只有他是用来规范组名称与GID对应而已
  2. 使用者信息说明栏:这个字段基本上并没有什么重要用途,只是用来解释这个账号的意义而已!不过,如果您提供使用finger的功能时,这个字段可以提供很多的讯息呢!
  3. 主文件夹:这是使用者的主文件夹,以上面为例,root的主文件夹在/root,所以当root登陆之后,就会立刻跑到/root目录里头啦!呵呵!如果你有个账号的使用空间特别大,你想要将该账号的主文件夹移动到其他的硬盘去该怎么作?没有错!可以在这个字段进行个性呦!默认的使用者主文件夹在/home/yourIDname
  4. Shell:当使用者登陆系统后就会取得一个Shell来与系统的核心沟通以进行使用者的操作任务。那为何默认shell会使用bash呢?就是在这个字段指定的啰!这里比较需要注意的是,有一个shell可以用来替代成让账号无法取得shell环境的登陆动作!那就是/sbin/nologin这个东西!这也可以用来制作纯pop邮件账号者的数据呢!

/etc/shadow文件结构

我们知道很多程序的运行都与权限有关,而权限与UID/GID有关!因此各程序当然需要读取/etc/passwd来了解不同账号的权限。因此/etc/passwd的权限需设置-rw-r–r–这样的情况,虽然早期的密码也有加密过,但却放置到/etc/passwd的第二个字段上!这样一来很容易被有心人士窃取的,加密过的密码也能够通过暴力破解法去找出来

因为这样的关系,所以后来发展出将密码移动到/etc/shadow这个文件分隔开来的技术,而且还加入很多的密码限制参数在/etc/shadow里头呢!在这里,我们先来了解一下这个文件的构造吧!
这里写图片描述

  1. 账号名称:由于密码也需要与账号对应啊~因此,这个文件的第一栏就是账号,必须要与/etc/passwd相同才行!
  2. 密码:这个字段内的数据才是真正的密码,而且是经过编码的密码(加密)啦!你只会看到有一些特殊符号的字母就是了!需要特别留意的是,虽然这些加密很难被解出来,但是“很难”不等于“不会”,所以,这个文件的默认权限是“-rw——–”或者是“———-”,亦即只有root才可以读写就是了!你得随时注意,不要不小心更动了这个文件的权限呢!
    另外,由于各种密码编码的技术不一样,因些不同的编码系统会造成这个字段的长度不相同。举例来说,旧式的DES, MD5编码系统产生的密码长度就与目前惯用的SHA不同!SHA的密码长度明显的比较长些。由于固定的编码系统产生的密码长度必须一致,因此“当你让这个字段的长度改变后,该密码就会失效(算不出来)”。很多软件通过这个功能,在此字段前加上!或*改变密码字段长度,就会让密码“暂时失效了”
  3. 最近更动密码的日期:这个字段记录了“更动密码那一天”的日期,不过,很奇怪呀!在我的例子中怎么会是16559呢?呵呵,这个是因为计算Linux日期的时间是以1970年1月1日作为1而累加的日期,1971年1月1日则为366啦!得注意一下这个数据呦!上述的16559指的就是2015-05-04那一天啦!了解乎?而想要了解该日期可以使用本章后面chage指令的帮忙!至于想要知道某个日期的累积日数,可以使用如下的程序计算:
echo $(( $(date --date="2015/05/04" +%s)/86400+1))

上述指令中,2015/05/04, 86400为每一天的秒数,%s为1970/01/01以来的累积总秒数。由于bash仅支持整数,因此最终需要加上1补齐1970/01/01当天
4. 密码不可被更动的天数(与第3字段相比):第四个字段记录了这个账号的密码在最近一次被更改后需要经过几天才可以再被变更!如果是0的话,表示密码随时可以更动的意思。这的限制是为了怕密码被某些人一改再改面设计的!如果设置为20天的话,那么当你设置了密码之后,20天这内都无法改变这个密码呦
5. 密码需要重新变更的天数(与第3字段相比):经常变更密码是个好习惯!为了强制要求使用者变更密码,这个字段可以指定在最近一次更改密码后,在多少天数内需要再次的变更密码才行。你必须要在这个天数内重新设置你的密码,否则这个账号的密码将会“变为过期特性”。而如果像上面的99999(计算为273年)的话,那就表示,呵呵,密码的变更没有强制性这意。
6. 密码需要变更期限前的警告天数(与第5个字段相比):当账号的密码有效期限快要到的时个(第5字段),系统会依据这个字段的设置,发出“警告”言论给这个账号,提醒他“再过n天你的密码就要过期了,请尽快重新设置你的密码呦!”,如上面的例子,则是密码到期之前的7天之内,系统会警告该用户。
7. 密码过期后的账号宽限时间(密码失效日)(与第5个字段相比):密码有效日期为“更新日期(第3个字段)”+“重新变更日期(第5个字段)”,过了该期限后使用者依旧没有更新密码,那该密码就算过期了。虽然密码过期但是该账号还是可以用来进行其他工作的,包括登陆系统取得bash。不过如果密码过期了,那当你登陆系统时,系统会强制要求你必须要重新设置密码才能登陆继续使用叫喔,这就是密码过期特性。
那这个字段的功能是什么呢?是在密码过期几天后,如果使用者还是没有登陆更改密码,那么这个账号的密码将会“失效”,亦即该账号再也无法使用该密码登陆了。要注意密码过期与密码失效并不相同。
8. 账号失效日期:这个日期跟第三个字段一样,都是使用1970年以来的总日数设置。这个字段表示:这个账号在此字段规定的日期之后,将无法再使用。就是所谓的“账号失效”,此时不论你的密码是否过期,这个“账号”都不能再被使用!这个字段会被使用通常应该是在“收费服务”的系统中,你可以规定一个日期让该账号不能再使用啦!
9. 保留:最后一个字段是保留的,看以后有没有新功能加入。

举个例子来说好了,假如我的dmtsai这个使用者的密码栏如下所示:

dmtsai:$68765432fsdfer...:16559:5:60:7:5:16679:

这表示什么呢?先要注意的是16559是2015/05/04。所以dmtsai这个使用者的密码相关意义是:

  • 由于密码几乎仅能单向运算(由明码计算成为密码,无法由密码反推明码),因此由上表的数据我们无法得知dmstai的实际密码明文(第二个字段)
  • 此账号最近一次更动密码的日期是2015/05/04(16559)
  • 能够再次修改密码的时间是5天以后,也就是2015/05/09以前dmtsai不能修改自己的密码;如果使用者还是尝试要更动自己的密码,系统就会出现这样的讯息:
You must wait longer to change your password
passwd: Authentication token manipulation error

画面中告诉我们:你必须要等待更久的时间才能够变更密码之意啦!
- 由于密码过期日期定义为60天后,亦即累积日数为:16559+60=16619,经过计算得到此日数代表日期为2015/07/03。这表示:“使用者必须要在2015/05/09(前5天不能改)到2015/07/03之间的60天限制内修改自己的密码,若2015/07/03这后还是没有变更密码时,该密码就宣告为过期”了!
- 警告日期设置为7天,亦即是密码过期日前的7天,在本例中则代表2015/06/26 ~ 2015/07/03这七天。如果使用者一直没有更改密码,那么在这7天中,只要dmtsai登陆系统就会发现如下的讯息:

Warning:your password will expire in 5 days
  • 如果该账号一直到2015/07/03都没有更改密码,那么密码就过期了。但是由于有5天的宽限天数,因此dmtsai在2015/07/08前都还可以使用旧密码登陆主机。不过登陆时会出现强制更改密码的情况,画面有点像下面这样:
You are required to change your password immediately(password aged)
WARNING:Your password has expired.
You must change your password now and login again!
Changing password for user dmtsai.
Changing password for dmtsai
(current) UNIX password:

你密码要输入一次旧密码以级两次新密码后,才能够开始使用系统的各项资源。如果你是在2015/07/08以后尝试以dmtsai登陆的话,那么就会出现如下的错误讯息且无法登陆,因为此时你的密码就失效去啦!

Your account has expired; please contact your system administrator
  • 如果使用者在2015/07/03以前变更过密码,那么第3个字段的那个16559的天数就会跟着改变,因此,所有的限制日期也会跟着相对变动喔!
  • 无论使用者如何动作,到了16679(大约是2015/09/01左右)该账号就失效了

总结

记忆id这个命令
记忆/etc/passwd /etc/shadow文件的格式和代表的意义

参考文献

《鸟哥的私房菜-基础学习篇》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值