Linux用户与组管理

明月清风 2016-10-11 94浏览
首页/正文
分享到: / / / /

linux用户与用户组管理的基本理念和命令

用户分为普通用户、系统用户、系统管理员(root)。 而用户组则与用户所对应,也分为普通用户组、系统用户组、和系统管理员组。

在Linux中,系统并非直接通过我们的账户名称进行识别。由于计算机只能识别二进制的0和1,所以对于计算机而言数字才是其识别的最佳方式。

而账户名称不过是为了方便使用者记忆,其实每个账户都有其对应的 ID(数字串)号码,换而言之无论是用户名称还是用户组名称,都有其对应的一组ID。

用户 ID 简写为 UID,用户组 ID 简写为 GID。

理解了上述概念,再让我们来看看Linux为我们预设的一些ID划分。

用户与用户组基本划分

系统分配了 0-65535 之间的数字作为用户与用户组ID,Centos6 与 Centos7 有些许细微差别,随后将会其列出。

用户分类 Centos6 UID Centos7 UID Centos6 GID Centos7 GID
Root 0 0 0 0
系统用户 1-499 1-999 1-499 1-999
普通用户 500+ 1000+ 500+ 1000+

上述分配是系统默认划分,可手动指定划分ID范围,但是为了方便管理与识别,不建议打乱划分范围,或做有规则的划分(避免新建用户UID与GID无法成对等干扰识别效率的分配)。

用户与用户组配置文件

当用户登录时,系统会首先寻找 /etc/passed 里面是否有其输入的账号,若没有则跳出,若匹配到则读取/etc/group所对应 UID 与 GID,加载其主文件夹与shell 设置。 然后读取 /etc/shadow 寻找对应账户与 UID,核对输入的密码,核对成功进入shell 控管阶段。

从上述流程中可看出,用户想要登录系统 etc/passed;/etc/group;/etc/shadow; 三个文件非常重要,那么我们来看看这三个文件中都有什么信息呢?

/etc/passwd 文件结构

我们用 cat 命令查看一下/etc/passwd文件的内容:

[root@ZhangSir ~]#cat /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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
......(此处省略)

此文件中没一行都代表了一个账号,有几行就有几个账号,不过里面很多账号本来就是系统正常运行所必须的菂,我们简称为系统账号,如:bin,daemon,adm,nobody 等等,这些账号不要随意删掉。

root:x:0:0:root:/root:/bin/bash

我们以 root 这一行为例,一行中以 ' : ' 作为分隔,隔成了7个字段,而这7个字段分别代表了:

  • 1.账户名称:登录所需账户名。

  • 2.密码:早期密码存放的地方,因安全考虑改存/etc/shadow,但为兼容问题,此处用x代替。

  • 3.UID:用户账号锁对应ID号码。

  • 4.GID:用户基本组(为什么会是基本组呢?我们下面解释!)ID号码。

  • 5.用户全名或说明,可以为空,方便识别与管理而已。

  • 6.用户主目录路径。

  • 7.用户所用shell。

/etc/group 文件结构

首先,我们还是 cat 一下,来看看此文件中都有什么。

#cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:zhangdeng
cdrom:x:11:
mail:x:12:postfix
man:x:15:
......(此处省略)

可以看出,这个文件同 /etc/passwd 事一样的格式,不过其只有四个分段,那么我来解释一下每个分段代表的含义:

  • 1.用户组名称(每一行记录一个用户组)。

  • 2.用户组密码:同 /etc/passwd 一样原因,密码被移至 /etc/gpasswd,此处用 x 代替。当用户切换没有添加自己的用户组时需要输入用户组密码,管理员可以设置用户组管理员对当前组进行管理。

  • 3.GID,我们 /etc/passwd 第4字段的GID号码对应的组名称就是从此处而来的啦。

  • 4.该用户组成员,多个成员 ' , ' 隔开。

/etc/shadow 文件结构

还是先来看看这个文件的内容:

#cat /etc/shadow
root:$6$cJ9qgQmt$NcHYa2uYOXMcE8JlkTxCLjWLbem6NuKPYEu3OunUzkCNP0otsQBqHBi.8IoR.ENkzTTWWIUu4ywoOnizXJ5tY0:17095:0:99999:7:::
bin:*:17095:0:99999:7:::
daemon:*:17095:0:99999:7:::
adm:*:17095:0:99999:7:::
lp:*:17095:0:99999:7:::
sync:*:17095:0:99999:7:::
shutdown:*:17095:0:99999:7:::
halt:*:17095:0:99999:7:::
mail:*:17095:0:99999:7:::
operator:*:17095:0:99999:7:::
games:*:17095:0:99999:7:::
ftp:*:17095:0:99999:7:::
nobody:*:17095:0:99999:7:::
......(此处省略)

是的,没错,同样的一行代表一个账户,以:隔开成段。那么我们来看看这个文件每段代表的含义:

  • 1.账户名称。
  • 2.密码:加密后的字符串,如果有密码位有 ' ! ' 则表示账户被锁定禁止登录,如果是*则代表是系统用户无法登录。
  • 3.最近一次修改密码的时间,1970年1月1日至此时间天数。
  • 4.最小密码修改间隔(相对上次修改密码的天数)。
  • 5.最大密码修改间隔(相对上次修改密码的天数)。
  • 6.密码过期前警告日期(相对密码有效天数截止时间)。
  • 7.密码失效日期(相对密码有效天数截止时间)。
  • 8.账户失效日期,自1970年1月1日算起。
  • 9.保留字段,留待以后添加功能。

/etc/gshadow 文件结构

既然用户配置文件 /etc/passwd 有对应的 /etc/shadow 文件来记录管理密码信息,那么用户组配置文件有没有对应的密码记录与管理文件呢?当然是有的,它就是 /etc/gshadow,我们也来看看他的文件结构吧!

#cat /etc/gshadow
root:::
bin:::
daemon:::
sys:::
adm:::
tty:::
disk:::
lp:::
mem:::
kmem:::
wheel:::zhangdeng
cdrom:::
mail:::postfix
man:::
dialout:::
floppy:::
......(此处省略)

可以发现这四个文件的结构都是一样的,一行记录一个以 ' : ' 分隔。此文件分了4个段落,其含义为下:

  • 1.用户组名。
  • 2.密码列,留空为无密码,开头为 ' ! ' 为锁定状态。
  • 3.用户组管理员账号。 4.用户组成员(与 /etc/group 成员相同)。

用户管理

介绍完了配置文件,可是我们增删查改用户与用户组总不能去一点一点修改配置文件吧!下面我们看看如何用命令来管理用户与用户组。

useradd新增用户

我们可以通过 useradd 命令快捷的添加用户。

useradd
  • -u 创建时指定用户UID。

  • -g 创建时指定用户GID(初始用户组或叫做基本组)。

  • -G 创建时直接添加其附加组。

  • -m 强制创建用户主目录(一般账号默认值)。

  • -M 强制不创建用户主目录(系统账号默认值)。

  • -c 账号说明,/etc/passwd 第5段内容。

  • -d 指定某个目录为用户主目录,而不使用默认值。

  • -r 创建一个系统账户 UID会依据/etc/login.defs -s 指定用户shell。

  • -e 指定账户失效日期 YYYY-MM-DD,/etc/shadow第8字段。

  • -f 密码失效日期 0为立即失效 -1为永不失效,/etc/shadow第7字段。

useradd创建账号默认属性

useradd 直接创建账号时,系统默认已经为我们配置好了很多的默认值,这些配置存放在 /etc/default/useradd

useradd -D可以调用出其默认值

#useradd -D
GROUP=100 
HOME=/home 
INACTIVE=-1 
EXPIRE= 
SHELL=/bin/bash 
SKEL=/etc/skel 
CREATE_MAIL_SPOOL=yes

/etc/default/useradd

这个文件是useradd创建用户时的基本账户设置默认参数配置文件。

group=100

新建账户的初始用户组使用的 GID 为 100 者。

系统上 GID 为 100 的组为 users 这个用户组,此设置让新建用户默认初始使用组为 users 这个组,但是在 Centos 上面我们创建用户,其默认的初始用户组并非 users 这个用户组,而是与用户名同名的用户组,这是因为针对用户组有两种不同的机制。

私有用户组机制

系统会创建一个与账户同名的用户组作为用户初始用户组,且默认主文件夹权限通常为 700,这种机制会比较有保密性,使用这种机制将不会参考 GROUP=100 这个设置值。代表性发行版有 RHEL、Fedora、Centos 等等

公有用户组机制

就是以 GROUP=100 这个设置值为新用户初始用户组,因此每个账户都属于 users 这个用户组,且默认主文件夹权限通常为 755,这种机制便于用户互相分享文件。代表发行版有 SuSE 等等。

home=/home

用户主目录的基准目录,新建账户的默认主目录将会创建在此目录下。

inactive=-1

/etc/shadow 第7字段,若为 0,则代表立即失效,若为 -1,则代表永不失效,如 30,则代表 30 天后失效。

expire=

/etc/shadow 第8字段,账号失效日期。

shell=/bin/bash

新建用户默认使用的 shell,若是改为 /sbin/nologin 则新建用户默认无法登陆系统。

skel=/etc/skel

用户主目录配置文件参考基准目录,新建用户的配置将会复制此文件夹的数据。

create_mail_spool=yes

创建用户的 mailbox,/var/spool/mail/xxxx。

/etc/login.defs

useradd 创建用户密码参数默认配置文件。

# Please note that the parameters in this configuration file control the
# behavior of the tools from the shadow-utils component. None of these
# tools uses the PAM mechanism, and the utilities that use PAM (such as the
# passwd command) should therefore be configured elsewhere. Refer to
# /etc/pam.d/system-auth for more information.
#
# *REQUIRED*
# Directory where mailboxes reside, _or_ name of file, relative to the
# home directory. If you _do_ define both, MAIL_DIR takes precedence.
# QMAIL_DIR is for Qmail
#
#QMAIL_DIR Maildir
MAIL_DIR /var/spool/mail
#MAIL_FILE .mail
# Password aging controls:
#
# PASS_MAX_DAYS Maximum number of days a password may be used.
# PASS_MIN_DAYS Minimum number of days allowed between password changes.
# PASS_MIN_LEN Minimum acceptable password length.
# PASS_WARN_AGE Number of days warning given before a password expires.
#
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
#
# Min/max values for automatic uid selection in useradd
#
UID_MIN 1000
UID_MAX 60000
# System accounts
SYS_UID_MIN 201
SYS_UID_MAX 999
#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN 1000
GID_MAX 60000
# System accounts
SYS_GID_MIN 201
SYS_GID_MAX 999
#
# If defined, this command is run when removing a user.
# It should remove any at/cron/print jobs etc. owned by
# the user to be removed (passed as the first argument).
#
#USERDEL_CMD /usr/sbin/userdel_local
#
# If useradd should create home directories for users by default
# On RH systems, we do. This option is overridden with the -m flag on
# useradd command line.
#
CREATE_HOME yes
# The permission mask is initialized to this value. If not specified, 
# the permission mask will be initialized to 022.
UMASK 077
# This enables userdel to remove user groups if no members exist.
#
USERGROUPS_ENAB yes
# Use SHA512 to encrypt password.
ENCRYPT_METHOD SHA512

其文件中已经详细的说明了各个参数的含义,在这里我在大略的概括一下。

mail_dir /var/spool/mail

用户默认邮箱目录基准目录。

pass_max_days 99999

/etc/shadow 第5段落,最大更改密码间隔。

pass_min_days 0

/etc/shadow 第4段落,最小更改密码间隔。

pass_min_len 5

密码最短字符长度,已被pam模块替代,失去效用。

pass_warn_age 7

/etc/shadow 第6段落,密码过期前警告天数。

uid_min 1000

普通用户最小 ID 小于 1000 的 GID 默认为系统用户保留

uid_max 60000

普通用户最大 ID,用户能使用的最大 GID。

gid_min 1000

普通用户组最小 ID,小于 1000 的 GID 默认为系统用户组保留。

gid_max 60000

普通用户组最大 ID,用户组能使用的最大 GID。

sys_uid_min 201

系统用户最小ID 。

sys_uid_max 999

系统用户组最大 ID,大于999的 ID 默认为普通用户使用 ID

sys_gid_min 201

系统用户组最小 ID 。

sys_gid_max 999

系统用户组最大 ID,大于999的 ID默认为普通用户使用 ID。

create_home yes

在不加 -m 或 -M 时是否主动创建用户主文件夹。

umask 077

用户主文件夹创建的 umask ,因此权限会是 700。

usergroups_enab yes

使用 userdel 删除用户时是否删除其初始用户组。

encrypt_method sha512

密码默认加密使用SHA512 总结:useradd创建用户时参考了 /etc/default、/etc/login.defs、/etc/skel/*,并修改了 /etc/passwd、/etc/shadow、/etc/group、/etc/gshadow

passwd 修改账户密码和属性

使用 useradd 创建账户后,在默认情况下,该账号是暂时被锁定,无法登录系统的,此时就需要 passwd 来进行管理了。

passwd
  • --stdin:可接受前一个管道传来的数据,作为密码输入。
  • -l:锁定账户,在/etc/shadow 第2字段前面加上 ' ! ' 使密码失效。
  • -u:解锁账号,与-l相对应。
  • -S:列出密码相关参数,即/etc/shadow文件内大部分内容。
  • -n:天数 shadow第4字段,修改密码间隔天数。
  • -x:天数 shadow第5字段,距离上次修改密码最大间隔。
  • -w:天数 shadow第6字段,密码过期前警告天数。
  • -i:天数 shadow第7字段,密码过期时间。

chage 修改账户密码属性

chage
  • -l:列出该账户详细密码参数。
  • -d:日期 shadow第3字段,最近一次修改密码日期(YYYY-MM-DD)。
  • -m:天数 shadow第4字段,最小修改密码间隔。
  • -M:天数 shadow第5字段,最大修改密码间隔。
  • -W:天数 shadow第6字段,密码过期前警告天数。
  • -I:天数 shadow第7字段,密码失效天数。
  • -E:日期 shadow第8字段,账户失效日期(YYYY-MM-DD)。

usermod 修改账户密码属性

usermod
  • -l:passwd第1字段,修改账户名称。
  • -u:passwd第3字段,修改UID。
  • -g:passwd第4字段,修改GID。
  • -G:group第4字段,修改用户组。
  • -a:配合-G,追加而非覆盖。
  • -c:passwd第5字段,账户说明信息。
  • -d:passwd第6字段,修改用户主文件夹。
  • -s:passwd第7字段,修改用户默认shell。
  • -f:shadow第7字段,密码失效天数。
  • -e:shadow第8字段,账户失效日期。
  • -L:锁定账户(加' ! ')。
  • -U:解锁账户(去' ! ')。

userdel 删除账户

userdel

不加参数仅仅删除账户。 -r 同时删除主文件夹和 email(/var/spool/mail/xxx)。

用户附加信息查询与修改

finger 查阅用户属性

[root@ZhangSir ~]#finger zhang
Login: zhang Name:
Directory: /home/zhang Shell: /bin/bash
Never logged in.
No mail.
No Plan.

chfn 修改用户附加信息

[root@ZhangSir ~]#chfn
Changing finger information for root.
名称 [root]: root
办公 []: MaGeLinux
办公电话 []: 12580
住宅电话 []: 114
Finger information changed.

chsh 修改默认shell

chsh
  • -l :列出当前系统可用shell。
  • -s:修改自己的shell。

id 查询uid和gid

[root@ZhangSir ~]#id
uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

用户组管理

了解了用户的增删查改后,我们再来看看用户组的管理命令。

groupadd 新建用户组

groupadd
  • -g GID :后面接指定的GID,用来直接给予某个GID。
  • -r :新建系统用户组,与/etc/login.defs内的GID_MIN有关。

groupmod 修改用户组相关参数

groupmod
  • -g :修改用户组GID。
  • -n :修改用户组名。

groupdel 删除用户组

groupdel 接上用户组名即可删除用户组,但是组内有成员便无法删除。

gpasswd 用户组管理员功能

gpasswd

不添加参数时,则表示给组设置组密码。

  • -A:添加组管理员。
  • -M:批量添加组成员,多个成员以 ' , ' 隔开。
  • -R:让组密码失效。
  • -r:删除组密码。
  • -a:添加某位用户到用户组。
  • -d:从用户组中删除某位用户。
最后修改:2016-10-11 15:04:47 © 著作权归作者所有
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

上一篇