linux用户与用户组

来源:互联网 发布:java抽象类命名规则 编辑:程序博客网 时间:2024/06/06 13:25

0.目录

  • 目录
  • 概述
    • 概述
    • 用户分类
    • 用户组分类
  • 用户密码相关配置文件
    • etcpasswd
    • etcshadow
    • etcgroup
    • etcgshadow
  • 相关命令
    • 关于用户
      • id
      • useradd
      • usermod
      • userdel
      • su
    • 关于密码
      • passwd
      • chage
    • 关于用户组
      • groupadd
      • groupmod
      • groupdel
      • groups
      • newgrp
    • 关于用户组密码添加或删除组成员
      • gpasswd

1.概述

概述

  • 多用户操作系统有用户的概念,多用户操作系统可以按需分配给不同用户资源来使用。
  • 用户组为包含用户的容器,作用是完成权限指派。即对某用户组施加某权限,属于该组的所有用户均有此权限。
  • 用户有用户名(username)及标识号(UID);用户组有组名(groupname)及标识号(GID),计算机通过标识号识别用户与组。

用户分类

  • 管理员(root)
    UID为0。

  • 系统用户
    UID在1至499之间1。
    任何进程均由用户发起,都是以某个用户的身份运行。有的守护进程与服务在用户登录前即运行(如运行登录界面),它们需要系统用户运行(不使用root运行,其权限过大)。
    系统用户不能登录系统。

  • 可登录用户
    UID在500以上。即普通用户。

用户组分类

  • 私有组(primary group,也称基本组)
    /etc/passwd中第4字段GID所对应的组,为对应用户的私有组。
    每个用户只有一个私有组。
    用户在被创建时,系统会创建一个与用户名同名的组作为该用户的私有组。

  • 额外组(supplementary group)
    一个用户可以属于多个额外组。


2.用户、密码相关配置文件

/etc/passwd

文件/etc/passwd保存用户的属性信息。
这里写图片描述

各字段以冒号分隔,各字段意义(配置文件可使用man查看,下同):

  1. 用户名
  2. 密码占位符(并不显示密码)
    用户密码信息存储在/etc/shadow中
  3. UID
    有效范围一般为0至65535
  4. GID
    此GID对应的组即为用户私有组,有效范围一般为0至65535。
    用户在登录系统时会立刻拥有该GID对应的用户组的权限,所以该GID所对应的组也被称为用户的初始组。
  5. 注释
  6. 家目录
  7. 该用户使用的默认shell

/etc/shadow

文件/etc/shadow保存用户的密码信息。该文件为只读文件,可通过一些命令更改密码的时间信息,但无法在该文件中直接手动修改。密码为空则用户无法登录。
这里写图片描述

各字段以冒号分隔,各字段意义:

  1. 用户名
  2. 用户密码被加密后的密文
    当用户被锁定时,该字段最前端会出现“!!”以示锁定,如上图中user1的情况。
    第一个“$”符号与第二个“$”之间的数字表示使用的是何种单向加密算法2加密密码的明文。
    第二个“$”符号与第三个“$”之间的8位字符串称为salt(不同用户的salt不同),用于和密码明文结合后,再被单向加密算法加密。
    第三个“$”之后则为用户的密码明文、salt结合后,再经过单向加密而成的密文字符串。
    用户登录时,系统如何验证密码是否正确3
  3. 从1970年1月1日至最近一次修改密码,所经过的天数
    若为0则表示该用户下次登录时需修改密码;若为空则表示密码的各时间特征禁用。
  4. 密码的最短使用天数(minimum password age)
    若为0或空则表示不限制最短使用时间
  5. 密码的最长使用天数(maximum password age)
    若为空表示密码没有设定最长使用天数。显然,若最长使用天数未设定,则警告天数、非活动天数也是不存在的。
    若设定最长使用天数小于最短使用天数,则用户无法修改其密码。
  6. 警告天数(password warning period)
    在密码还有X天(X为警告天数)到达最长使用天数时,用户会收到警告。
    当该值为0或空时表示不设定警告天数。
  7. 非活动天数(password inactivity period)
    当密码达到最长使用天数后,仍可使用该密码X天(X为非活动天数),但一旦登录即会被强制要求修改密码,直至修改后方恢复正常。当经过X天(X为非活动天数),原密码仍未修改,则无法再登录,需联系管理员。
    若该值为空则表示没有非活动期。
  8. 从1970年1月1日开始计,用户最多能使用的天数,即用户失效日期(account expiration date)
    当某用户使用至截止日期时,其不再被允许登录。
    该值为空时表示不设定用户的截止日期。
    该值不能为0,因为这可以被理解为不设定用户截止日期,也可被看做用户截止日期是1970年1月1日。
  9. 保留位(reserved field),供将来使用。

/etc/group

文件/etc/group保存用户组的属性信息。
这里写图片描述

各字段以冒号分隔,各字段意义:

  1. 用户组名。
  2. 密码占位符(不显示密码),组密码信息存储在/etc/gshadow中。
  3. GID
  4. 以该组为额外组的所有用户列表,各用户使用逗号分隔

/etc/gshadow

文件/etc/gshadow保存用户组密码信息。
这里写图片描述

各字段以冒号分隔,各字段意义:

  1. 用户组名
  2. 组密码被加密后的密文
    • 如为“!”表示该组没有组密码,非该组用户将无法临时切换到该组;
    • 如有密码,则非该组用户可使用命令newgrp,输入密码临时切换到该组。
  3. 该用户组的组管理员用户
    • 如上截图user4所示,表示用户user4,为用户组user4的管理员。
  4. 同/etc/group的第4字段,表示以该用户组为额外组的所有用户
    • 如上图以用户组user3为额外组用户为user1、user2。

相关命令

关于用户

id

命令id,用于显示指定用户的UID、当前的有效用户组的GID及所属的所有的组;若未指定用户,则显示当前用户的。
这里写图片描述

有效用户组:在用户创建文件时,有效用户组会作为新文件的属组

useradd

系统命令useradd(也可写为adduser),用于添加用户。

默认情况下,新创建的用户,其UID、GID分别为/etc/passwd中已存在的最大的UID、GID加1;家目录为home下的以用户名命名的目录;shell为/bin/bash等。

可使用useradd各选项在创建用户时定制用户属性:

  • 选项“-u”:指定用户UID,即/etc/passwd中第3字段;
  • 选项“-g”:指定某GID对应的组,作为用户的私有组。即指定/etc/passwd中第4字段;
  • 选项“-G”:指定某GID对应的组,作为用户的额外组;
  • 选项“-c”:指定用户的注释(comment)信息,即/etc/passwd中第5字段;
  • 选项“-d”:指定用户的家目录4,即/etc/passwd中第6字段;
  • 选项“-M”:创建用户时系统自动为其创建与用户同名的家目录,使用此选项表示创建用户时不为其创建家目录;
  • 选项“-s”:指定用户默认使用的shell,即/etc/passwd中第7字段;
  • 选项“-r”:创建系统用户。
    • 创建系统用户后/etc/passwd中会有该用户家目录路径,但系统不会真正为系统用户创建家目录,因为系统用户不能登录系统。
  • 选项“-D”,显示创建新用户时的各默认配置5。

    [root@localhost ~]# useradd -DGROUP=100HOME=/homeINACTIVE=-1EXPIRE=SHELL=/bin/bashSKEL=/etc/skelCREATE_MAIL_SPOOL=yes

    其后加对应选项也可用来设置创建新用户时的各默认配置。

    [root@localhost ~]# useradd -D -s /bin/sh[root@localhost ~]# useradd -DGROUP=100HOME=/homeINACTIVE=-1EXPIRE=SHELL=/bin/shSKEL=/etc/skelCREATE_MAIL_SPOOL=yes

使用useradd创建用户后,可看到文件/etc/passwd、/etc/shadow、
/etc/group、/etc/gshadow中均增加了新的记录。
这里写图片描述

usermod

系统命令usermod,主要用于修改用户属性,个别选项可用于修改密码时间属性。大部分选项与useradd的相同。

  • 修改用户属性选项:
    • 选项“-u”:更改用户UID,即/etc/passwd中第3字段;
    • 选项“-g”:更改某GID对应的组,作为用户的私有组。即指定/etc/passwd中第4字段;
    • 选项“-G”:更改用户的额外组,覆盖原额外组;
      • 一般与选项“-a”连用,表示让用户新追加(append)一个额外组,但不覆盖原额外组。
    • 选项“-c”:更改用户的注释信息,即/etc/passwd中第5字段;
    • 选项“-s”:更改用户默认使用的shell,即/etc/passwd中第7字段;
    • 选项“-l”:更改用户名;
    • 选项“-d”:更改家目录;
      • 一般与选项“-m”连用,表示更改家目录并将原家目录中的文件移至新家目录。
  • 修改用户密码时间属性选项:
    • 选项“-f”:更改密码非活动时长,即/etc/shadow中第7字段;
    • 选项“-e”:更改用户账号过期时间,即/etc/shadow中第8字段;
      • 参数格式为日期:YYYY-MM-DD

userdel

系统命令userdel,用于删除用户。

该命令在删除用户时默认不会删除用户家目录,如想删除家目录,使用选项“-r”。

su

命令su,用于切换用户(switch user)。

一般使用格式“su - username”,切换用户并使用新用户的配置文件。

如果仅切换用户执行一条指令,又需切回原用户,则如果完全切换就比较繁琐。可使用选项“-c”,表示以指定用户运行一条命令后再切回来。

[root@localhost ~]# su -c whoami - user1user1[root@localhost ~]# whoamiroot

关于密码

passwd

命令passwd,用于修改密码和修改密码时间特征。

  • 修改密码

    • 无需选项,直接使用即可修改当前用户密码;
    • root使用格式“passwd username”,可修改其他用户密码。
    • 也可使用“–stdin”选项,表示输入重定向,配合管道,可使某指定字符串成为用户的密码。

      [root@localhost ~]# echo "redhat" | passwd --stdin gentooChanging password for user gentoo.passwd: all authentication tokens updated successfully.

      上述表示把“redhat”作为用户gentoo的密码。

  • 修改密码属性(仅root可用)
    • 选项“-l”:用于锁定(lock)某用户的密码;
      • 如上/etc/shadow介绍所述,用户的密码如被锁定时,/etc/shadow中的用户密码密文前会有“!!”。
    • 选项“-u”:解锁(unlock)用户的密码;
    • 选项“-e”:直接使用户密码到期(expire),在该用户下次登录时必须修改密码;
    • 选项“-n”:修改用户密码的最短(minimum)使用天数,即/etc/shadow中第4字段;
    • 选项“-x”:修改用户密码的最长(maximum)使用天数,即/etc/shadow中第5字段;
    • 选项“-w”:修改用户密码的即将到期警告(warning)天数,即/etc/shadow中第6字段;
    • 选项“-i”:修改用户密码的非活动(inactive)天数,即/etc/shaodw中第7字段;
    • 选项“-S”:显示用户密码的各时间属性、密码状态(status,即密码是否被锁,使用何种方式加密等)。这里写图片描述

chage

系统命令chage,修改密码时间特征。

  • 选项“-d”:修改密码最近一次被修改的时间,参数为日期(date)。即修改/etc/shadow中第3字段;
  • 选项“-m”:修改密码的最短(minimum)使用天数,/etc/shadow中第4字段;
  • 选项“-M”:修改密码的最长(maximum)使用天数,/etc/shadow中第5字段;
  • 选项“-W”:修改用户密码的即将到期警告(warning)天数,/etc/shadow中第6字段;
  • 选项“-I”:修改用户密码的非活动(inactive)天数,/etc/shadow中第7字段;
    • 此选项参数为“-1”时,表示不设定密码非活动天数,即/etc/shadow第7字段为空。
  • 选项“-E”:修改从1970年1月1日开始计,用户所能使用的天数,即/etc/shadow中第8字段;
    • 此选项参数为“-1”时,表示不设定用户的使用截止日期,即/etc/shadow中第8字段为空。
  • 选项“-l”:显示密码各时间属性,比/etc/shadow中显示的各时间更直观。这里写图片描述

关于用户组

groupadd

系统命令groupadd,用于创建用户组。

  • 选项“-g”:创建用户组时,指定GID;
  • 选项“-r”:创建系统组。

groupmod

系统命令groupmod,用于修改用户组属性。

  • 选项“-g”:更改GID;
  • 选项“-n”:更改新的组名。

groupdel

系统命令groupdel,用于删除用户组。

groupdel无法删除某用户的私有组。如一定要删除,可在/etc/passwd中更改用户的私有组GID,令其不再是用户私有组。这里写图片描述

groups

命令groups,用于显示当前用户所属的组。
这里写图片描述

如图所示user1所属的用户组有user1、user2。有效用户组会被列出在第一个。此时若创建文件,则该文件的属组即为user1。

newgrp

命令newgrp,用于更改用户的有效用户组。

用户在登录系统后,其在/etc/passwd文件的GID字段对应的组即为有效用户组。使用newgrp可更改当前的有效用户组,更改的组须为该用户已经属于的组,否则可能需要输入对应的组密码(如果有的话)或无法更改。

更改有效用户组后,该用户创建的文件的属组即为新用户组。
这里写图片描述

命令newgrp更改有效用户组,是在当前shell的子shell中完成的。
这里写图片描述
用户的环境设置(如环境变量等)不会被影响,退出子shell使用命令exit即回到原shell。

关于用户组密码,添加或删除组成员

gpasswd

命令gpasswd,用于设置用户组管理员、组密码。

  • 无选项:直接为某用户组设置组密码;
  • 选项“-r”:删除组密码;
  • 选项“-A”:指定组管理员;
  • 选项“-a”:添加某用户至用户组;
  • 选项“-d”:从用户组删除某用户。
    • 组管理员也可使用该命令添加或删除组成员。

root可把某用户添加至某用户组,但如有大量类似操作,可令用户组管理员来完成,减少root负担。不过有sudo等工具,组管理员已不常用,gpasswd其他选项不再赘述。

(完)


  1. centOS7为 1-999。 ↩
  2. 加密算法可分类为对称加密、公钥加密(非对称加密)、单向加密。典型的单向加密算法如md5、SHA等。单向加密是指具备如下特征的加密算法:
    1、单向加密算法只能加密,不能解密。可看做哈希算法的一种,相当于计算特征码;
    2、不论明文如何,加密的密文是定长的;
    3、若明文相同,则密文一定相同;若明文发生微小变化,则密文发生巨大变化。称为雪崩效应。
    centOS6开始,加密算法一般是md5、sha1、sha224、sha256、sha384、sha512,在“/etc/shadow”中的密码密文字段,这些算法分依次用1-6代表,表示该密码是通过何种单向加密算法加密后存储的。 ↩
  3. 1、一个自然的想法是:使用同样的单向加密算法,对用户登录时输入的密码进行加密,用加密后的密文与该用户密码加密后的密文进行比对,如果密文相同即表示输入正确。
    2、如上会有一问题:若用户A使用的密码和用户B使用的密码相同,那么单向加密算法加密这两密码后的密文是一样的,所以若此时A又偷窥到了B的密码单向加密后的密文,那么就可以推测出B用的是和自己一样的密码。所以/etc/shadow中第2字段存储的不是用户密码单向加密后的密文,而是salt与用户密码结合后再进行单向加密的密文。这样因为单向加密算法的雪崩效应,即便A与B密码相同,/etc/shadow中存储的A与B的密文也大不相同,使得A无法从自己的密文得知其和B所用的密码是相同的。
    3、所以登录过程为:输入用户名和密码,系统把输入的密码和该用户对应的salt结合后进行单向加密,再与/etc/shadow中第2字段中的密文进行比较,若相同则表示输入密码正确。 ↩
  4. 家目录的创建,其实是系统复制“/etc/skel”及其中的内容(如.bashrc等用户的环境配置文件),然后重命名该目录(默认是/home/user)而来的。
    所以选项“-d”指定的目录若已存在,则会报错。 ↩
  5. 实际上“useradd -D”所显示或修改的创建用户时的用户的配置信息,是保存在配置文件“/etc/default/useradd”中。
    更详细的创建新用户时,用户的默认配置信息,保存在配置文件“/etc/login.defs”。 ↩
0 0
原创粉丝点击