linux账号管理

使用者标识符(linux只认识ID)

1. UID(user ID),GID (group ID)

每一个文件都具有『拥有人拥有群组』的属性吗?没错啦~每个登入的使用者至少都会取得两个 ID ,一个是使用者 ID (User ID ,简称UID)、一个是群组 ID (Group ID ,简称 GID)
我们可以作个小实验,你可以用 root 的身份 vim /etc/passwd ,然后将你的一般身份的使用者的 ID 随便改一个号码,然后再到你的一般身份的目录下看看原先该账号拥有的文件,你会发现该文件的拥有人变成了 『数字了』呵呵!这样可以理解了吗?来看看底下的例子:

# 1. 先察看一下,系统里面有没有一个名为 dmtsai 的用户?
[root@study ~] id dmtsai
uid=1000(dmtsai) gid=1000(dmtsai) groups=1000(dmtsai),10(wheel)<==确定有这个账号喔!
[root@study ~] ll -d /home/dmtsai
drwx------. 17 dmtsai dmtsai 4096 Jul 17 19:51 /home/dmtsai
# 瞧一瞧,使用者的字段正是 dmtsai 本身喔!
# 2. 修改一下,将刚刚我们的 dmtsai 的 1000 UID 改为 2000 看看:
[root@study ~] vim /etc/passwd
....(前面省略)....
dmtsai:x:2000:1000:dmtsai:/home/dmtsai:/bin/bash <==修改一下特殊字体部分,由 1000 改过来
[root@study ~] ll -d /home/dmtsai
drwx------. 17 1000 dmtsai 4096 Jul 17 19:51 /home/dmtsai
# 很害怕吧!怎么变成 1000 了?因为文件只会记录 UID 的数字而已!
# 因为我们乱改,所以导致 1000 找不到对应的账号,因此显示数字!
# 3. 记得将刚刚的 2000 改回来!
[root@study ~] vim /etc/passwd
....(前面省略)....
dmtsai:x:1000:1000:dmtsai:/home/dmtsai:/bin/bash<==『务必一定要』改回来!

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

Tips :
举例来说,如果上面的测试最后一个步骤没有将 2000 改回原本的 UID,那么当 dmtsai 下次登入时将没有办法进入自己的家目录! 因为他的 UID 已经改为 2000 ,但是他的家目录 (/home/dmtsai) 却记录的是 1000 ,由于权限是 700 , 因此他将无法进入原本的家目录!是否非常严重啊?

文件位置

Linux 系统上面的用户如果需要登入主机以取得 shell 的环境来工作时那么你输入账号密码后,系统帮你处理了什么呢?

  1. 先找寻 /etc/passwd 里面是否有你输入的账号?如果没有则跳出,如果有的话则将该账号对应的 UID 与GID (在 /etc/group 中) 读出来,另外,该账号的家目录与 shell 设定也一并读出;
  2. 再来则是核对密码表啦!这时 Linux 会进入 /etc/shadow 里面找出对应的账号与 UID,然后核对一下你刚刚输入的密码与里头的密码是否相符?
  3. 如果一切都 OK 的话,就进入 Shell 控管的阶段啰!

1. /etc/passwd管理UID,GID

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

[root@study ~]# head -n 4 /etc/passwd
root:x:0:0:root:/root:/bin/bash<==等一下做为底下说明用

我们先来看一下每个 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啦~容易让系统管理员混乱!保留给系统使用的 ID,其实除了 0 之外,其他的 UID 权限与特性并没有不一样。默认 1000 以下的数字让给系统作为保留账号只是一个习惯。
    1~999
    (系统账号)由于系统上面启动的网络服务或背景服务希望使用较小的权限去运作,因此不希望使用 root 的身份去执行这些服务, 所以我们就得要提供这些运作中程序的拥有者账号才行。这些系统账号通常是不可登入的, 所以才会有我们在第十章提到的/sbin/nologin 这个特殊的 shell 存在。
    根据系统账号的由来,通常这类账号又约略被区分为两种:
    • 1~200:由 distributions 自行建立的系统账号;
    • 201~999:若用户有系统账号需求时,可以使用的账号 UID。
      1000~60000
      给 一 般 使 用 者 用 的。 事实 上 , 目 前 的 linux 核心 (3.10.x 版 ) 已 经 可 以支 持 到4294967295 (2^32-1) 这么大的 UID 号码喔!
      (可登入账号)
  4. UID:
    上面这样说明可以了解了吗?是的, UID 为 0 的时候,就是 root 呦!所以请特别留意一下你的/etc/passwd 文件!
  5. GID:
    这个与 /etc/group 有关!其实 /etc/group 的观念与 /etc/passwd 差不多,只是他是用来规范组名与 GID 的
    对应而已!6. 用户信息说明栏:
    这个字段基本上并没有什么重要用途,只是用来解释这个账号的意义而已!不过,如果您提供使用 finger 的
    功能时, 这个字段可以提供很多的讯息呢!本章后面的 chfn 指令会来解释这里的说明。
  6. 家目录:
    这是用户的家目录,以上面为例, root 的家目录在 /root ,所以当 root 登入之后,就会立刻跑到 /root 目录里头啦!呵呵! 如果你有个账号的使用空间特别的大,你想要将该账号的家目录移动到其他的硬盘去该怎么作? 没有错!可以在这个字段进行修改呦!默认的用户家目录在 /home/yourIDname
  7. Shell:
    我们在第十章 BASH 提到很多次,当用户登入系统后就会取得一个 Shell 来与系统的核心沟通以进行用户的操作任务。那为何预设 shell 会使用 bash 呢?就是在这个字段指定的啰! 这里比较需要注意的是,有一个 shell 可以用来替代成让账号无法取得 shell 环境的登入动作!那就是 /sbin/nologin 这个东西!这也可以用来制作纯 pop 邮件账号者的数据呢!

2. etc/shadow专门管理密码

Linux系统中的/etc/shadow文件超详细内容解析

我们知道很多程序的运作都与权限有关,而权限与 UID/GID 有关!因此各程序当然需要读取/etc/passwd 来了解不同账号的权限。 因此 /etc/passwd 的权限需设定为 -rw-r–r-- 这样的情况, 虽然早期的密码也有加密过,但却放置到 /etc/passwd 的第二个字段上!这样一来很容易被有心人士所窃取的, 加密过的密码也能够透过暴力破解法去 trial and error (试误) 找出来!
因为这样的关系,所以后来发展出将密码移动到 /etc/shadow 这个文件分隔开来的技术, 而且还加入很多的密码限制参数在 /etc/shadow 里头呢!在这里,我们先来了解一下这个文件的构造吧! 鸟哥的 /etc/shadow 文件有点像这样:

[root@study ~]# head -n 4 /etc/shadow
root:$6$wtbCCce/PxMeE5wm$KE2IfSJr.YLP7Rcai6oa/T7KFhO...:16559:0:99999:7:::<==底下说明用

基本上, shadow 同样以『:』作为分隔符,如果数一数,会发现共有九个字段啊,这九个字段的用
途是这样的:

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

忘记密码?

1.用户
利用 root 的身份使用 passwd 指令来处理即可
2.root 密码
因为你无法使用 root 的身份登入了嘛! 但我们知道 root 的密码在/etc/shadow 当中,因此你可以使用各种可行的方法开机进入 Linux 再去修改。 例如重新启动进入单人维护模式(第十九章)后,系统会主动的给予 root 权限的 bash 接口, 此时再以 passwd 修改密码即可;或以Live CD 开机后挂载根目录去修改 /etc/shadow,将里面的 root 的密码字段清空, 再重新启动后 root 将不用密码即可登入!登入后再赶快以 passwd 指令去设定 root 密码即可。

[root@study ~]# authconfig --test | grep hashing
password hashing algorithm is sha512
# 这就是目前的密码加密机制!
# 实测已停用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值