linux操作:用户管理


Linux系统是一个 多用户(Multi-users)多任务(Multi-tasks)分时操作系统,用户管理则是系统中不可或缺的一部分,系统资源的调用离不开用户权限等等,这篇文章主要就用来记录Linux中的用户管理模块的学习轨迹和笔记,方便查阅和回顾。

一、用户和用户组

1、用户标识和用户分类
  Linux操作系统对多用户的管理,是非常繁琐的,所以用组的概念来管理用户就变得简单,每个用户可以在一个独立的组,每个组也可以有零个用户或者多个用户。操作系统为了识别每个用户,会给每个用户定义一个ID,就是UID。用户组就相当于多个用户的容器;在linux系统中,用户组也有一个ID,GID。

(1) Linux中用户分为两大类:
  管理员用户(root用户)和普通用户。
普通用户又可分为两类:
1)系统用户
  为了能够让那些后台进程或服务类进程以非管理员的身份运行,通常需要为此创建多个普通用户,这类用户从来不用登陆系统。
2)登录用户
  就是我们一般使用登录linux的用户。

(2)用户标识
  用户标识:user id,UID 。
  通常使用16bits二进制数字表示(0-65535) 。
  Linux系统用户是根据用户ID来识别的,默认ID长度为32位,从默认ID编号从0开始,但是为了和老式系统兼容,用户ID限制在60000以下,Linux用户分总共分为三种,每种标识也如下:
root用户 (ID 0)
系统用户 (ID 1-499(Centos6)、1-999(Centos7))
登录用户 (ID 500-60000(Centos6)、1000-60000(Centos7))

2、用户组
在Linux中,用户组分类方式有三种:
(1)管理员组、普通用户组(系统用户组,登录用户组)
(2)用户的基本组、用户附加组
(3)私有组、公共组

用户组标识:group id,GID
通常使用16bits二进制数字表示(0-65535)
管理员的用户组标识:0
普通用户组:1-65535
系统用户组:1-499(Centos6)、1-999(Centos7)
登录用户组:500-60000(Centos6)、1000-60000(Centos7)

二、与用户有关的系统文件

系统文件作用
/etc/passwd保存用户信息
/etc/shdaow保存用户密码(以加密形式保存)
/etc/group保存组信息
/etc/login.defs用户属性限制,密码过期时间,密码最大长度等限制
/etc/default/useradd显示或更改默认的useradd配置文件

1、/etc/passwd文件(用户信息文件)
实例:

[root@localhost /]# 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
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false
jira:x:1000:1000:Atlassian Jira:/home/jira:/bin/bash
atlbitbucket:x:1001:1001:Atlassian Bitbucket:/usr/bitbucketdata:/bin/bash
tomcat:x:53:53:Apache Tomcat:/usr/share/tomcat:/sbin/nologin

详解root❌0:0:root:/root:/bin/bash如下图:

实例含义
第一列root用户名
第二列x密码标记位 有x说明root用户有密码
第三列0用户UID。UID规则 0表示root用户 1~499系统用户(伪用户)普通用户 500以后
第四列0用户组ID
第五列root描述信息
第六列/root用户所在的家目录
第七列/bin/bash用户登录默认使用的Shell

2、/etc/shdaow(用户密码文件)
(1)介绍
  用于存储 Linux 系统中用户的密码信息,又称为“影子文件”。
  前面介绍了 /etc/passwd 文件,由于该文件允许所有用户读取,易导致用户密码泄露,因此 Linux 系统将用户的密码信息从 /etc/passwd 文件中分离出来,并单独放到了此文件中。
  /etc/shadow文件只有root用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。

(2)实例

[root@localhost /]# cat /etc/shadow
root:$6$3yknS/b6eeb$HrQ/paKa8Dvduyfytguih9u2X5xK2xgCgPRxeOni.GVzJgn79ny8ooi7i7o8uLhfjWcw0O3bbEndiNvPeVUMBbWT/:18422:0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::
adm:*:17834:0:99999:7:::
lp:*:17834:0:99999:7:::
sync:*:17834:0:99999:7:::
shutdown:*:17834:0:99999:7:::
halt:*:17834:0:99999:7:::
mail:*:17834:0:99999:7:::
operator:*:17834:0:99999:7:::
games:*:17834:0:99999:7:::
ftp:*:17834:0:99999:7:::
nobody:*:17834:0:99999:7:::
systemd-network:!!:18378::::::
dbus:!!:18378::::::
polkitd:!!:18378::::::
sshd:!!:18378::::::
postfix:!!:18378::::::
chrony:!!:18378::::::
nscd:!!:18378::::::
tcpdump:!!:18378::::::
mysql:!!:18422::::::
jira:!!:18422:0:99999:7:::
atlbitbucket:!!:18427:0:99999:7:::
tomcat:!!:18450::::::

(3)详解
参考自:
http://c.biancheng.net/view/840.html
  同 /etc/passwd 文件一样,文件中每行代表一个用户,同样使用 “:” 作为分隔符,不同之处在于,每行用户信息被划分为 9 个字段。

1)用户名
  同 /etc/passwd 文件的用户名有相同的含义。

2)加密密码
  这里保存的是真正加密的密码。
  目前 Linux 的密码采用的是 SHA512 散列加密算法,原来采用的是 MD5 或 DES 加密算法。SHA512 散列加密算法的加密等级更高,也更加安全。
注意:
  这串密码产生的乱码不能手工修改,如果手工修改,系统将无法识别密码,导致密码失效。很多软件透过这个功能,在密码串前加上 “!”、"" 或 “x” 使密码暂时失效。
  所有伪用户的密码都是 “!!” 或 " * ",代表没有密码是不能登录的。当然,新创建的用户如果不设定密码,那么它的密码项也是 “!!”,代表这个用户没有密码,不能登录。
  shadow文件为可读文件,普通用户没有读写权限,超级用户拥有读写权限。
如果密码字符串为
,则表示系统用户不能被登入
如果字符串为!,则表示用户名被禁用
如果字符串为空,则表示没有密码

3)最后一次修改时间
  该字段表示最后一次修改密码的时间。
实例中root用户的18422怎么理解??
  Linux 计算日期的时间是以1970年1月1日作为1不断累加得到的时间,到 1971年1月1日,则为366天。这里显示18422天,也就是说,此 root 账号在1970年1月1日之后的第18422天修改的root用户密码。

[root@localhost /]# date -d "1970-01-01 18422 days"
Tue Jun  9 00:00:00 CST 2020

4)最小修改时间间隔
  该字段规定了从第 3 字段(最后一次修改密码的日期)起,多长时间之内不能修改密码。如果是 0,则密码可以随时修改;如果是 10,则代表密码修改后 10 天之内不能再次修改密码。
  此字段是为了针对某些人频繁更改账户密码而设计的。

5)密码有效期
  经常变更密码是个好习惯,为了强制要求用户变更密码,这个字段可以指定距离第 3 字段(最后一次更改密码)多长时间内需要再次变更密码,否则该账户密码进行过期阶段。
  该字段的默认值为 99999,也就是 273 年,可认为是永久生效。如果改为 90,则表示密码被修改 90 天之后必须再次修改,否则该用户即将过期。管理服务器时,通过这个字段强制用户定期修改密码。

6)密码需要变更前的警告天数
  与第 5 字段相比较,当账户密码有效期快到时,系统会发出警告信息给此账户,提醒用户 “再过 n 天你的密码就要过期了,请尽快重新设置你的密码!”。
  该字段的默认值是 7,也就是说,距离密码有效期的第 7 天开始,每次登录系统都会向该账户发出 “修改密码” 的警告信息。

7)密码过期后的宽限时间
  也称为“口令失效日”,简单理解就是,在密码过期后,用户如果还是没有修改密码,则在此字段规定的宽限天数内,用户还是可以登录系统的;如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用。
  比如说,此字段规定的宽限天数是 10,则代表密码过期 10 天后失效;如果是 0,则代表密码过期后立即失效;如果是 -1,则代表密码永远不会失效。

8)账号失效时间
  同第 3 个字段一样,使用自 1970 年 1 月 1 日以来的总天数作为账户的失效时间。该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用!
  该字段通常被使用在具有收费服务的系统中。

9)保留字段
  这个字段目前没有使用,等待新功能的加入。

(4)忘记密码怎么做?
  对于普通账户的密码遗失,可以通过 root 账户解决,它会重新给你配置好指定账户的密码,而不需知道你原有的密码(利用 root 的身份使用 passwd 命令即可)。
  如果 root 账号的密码遗失,则需要重新启动进入单用户模式,系统会提供 root 权限的 bash 接口,此时可以用 passwd 命令修改账户密码;也可以通过挂载根目录,修改 /etc/shadow,将账户的 root 密码清空的方法,此方式可使用 root 无法密码即可登陆,建议登陆后使用 passwd 命令配置 root 密码。

3、/etc/group(组信息文件)
  /ect/group 文件是用户组配置文件,即用户组的所有信息都存放在此文件中。
  此文件是记录组 ID(GID)和组名相对应的文件。
(1)实例

[root@iZ2ze95cxr3kx9il409khtZ /]# 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:
cdrom:x:11:
mail:x:12:postfix
man:x:15:
dialout:x:18:
floppy:x:19:
games:x:20:
tape:x:33:
video:x:39:
ftp:x:50:
lock:x:54:
audio:x:63:
nobody:x:99:
users:x:100:
utmp:x:22:
utempter:x:35:
input:x:999:
systemd-journal:x:190:
systemd-network:x:192:
dbus:x:81:
polkitd:x:998:
ssh_keys:x:997:
sshd:x:74:
postdrop:x:90:
postfix:x:89:
chrony:x:996:
nscd:x:28:
tcpdump:x:72:
mysql:x:27:
jira:x:1000:
atlbitbucket:x:1001:
tomcat:x:53:

(2)详解
1)组名
  用户组的名称,有字母或数字构成。同 /etc/passwd 中的用户名一样,组名也不能重复。

2)密码
  和 /etc/passwd 文件一样,这里的 “x” 仅仅是密码标识,真正加密后的组密码默认保存在 /etc/gshadow 文件中。
  不过,用户设置密码是为了验证用户的身份,那用户组设置密码是用来做什么的呢?用户组密码主要是用来指定组管理员的,由于系统中的账号可能会非常多,root 用户可能没有时间进行用户的组调整,这时可以给用户组指定组管理员,如果有用户需要加入或退出某用户组,可以由该组的组管理员替代 root 进行管理。但是这项功能目前很少使用,我们也很少设置组密码。如果需要赋予某用户调整某个用户组的权限,则可以使用 sudo 命令代替。

3)GID
  群组的 ID 号,Linux 系统就是通过 GID 来区分用户组的,同用户名一样,组名也只是为了便于管理员记忆。
  这里的组 GID 与 /etc/passwd 文件中第 4 个字段的 GID 相对应,实际上,/etc/passwd 文件中使用 GID 对应的群组名,就是通过此文件对应得到的。

4)该用户组中的用户列表
  此字段列出每个群组包含的所有用户。需要注意的是,如果该用户组是这个用户的初始组,则该用户不会写入这个字段,可以这么理解,该字段显示的用户都是这个用户组的附加用户。
  举个例子,lamp 组的组信息为 “lamp❌502:”,可以看到,第四个字段没有写入 lamp 用户,因为 lamp 组是 lamp 用户的初始组。如果要查询这些用户的初始组,则需要先到 /etc/passwd 文件中查看 GID(第四个字段),然后到 /etc/group 文件中比对组名。
  **每个用户都可以加入多个附加组,但是只能属于一个初始组。**所以我们在实际工作中,如果需要把用户加入其他组,则需要以附加组的形式添加。例如,我们想让 lamp 也加入 root 这个群组,那么只需要在第一行的最后一个字段加入 lamp,即root:x:0:lamp就可以了。
  一般情况下,用户的初始组就是在建立用户的同时建立的和用户名相同的组。

4、login.defs(用户帐号限制文件)
  /etc/login.defs 是设置用户帐号限制的文件。该文件里的配置对root用户无效。

(1)实例

[root@localhost etc]# cat login.defs
#
# 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
#创建用户时,要在目录/var/spool/mail中创建一个用户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
#密码最小长度,对于root无效
PASS_WARN_AGE	7
#密码过期前多少天开始提示

#
# Min/max values for automatic uid selection in useradd
#
#创建用户时不指定UID的话自动UID的范围
UID_MIN                  1000
#用户ID的最小值
UID_MAX                 60000
#用户ID的最大值
# System accounts
SYS_UID_MIN               201
SYS_UID_MAX               999

#
# Min/max values for automatic gid selection in groupadd
#
#自动组ID的范围
GID_MIN                  1000
#组ID的最小值
GID_MAX                 60000
#组ID的最大值
# 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
#使用useradd的时候是够创建用户目录

# 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
#用MD5加密密码

# Use SHA512 to encrypt password.
ENCRYPT_METHOD SHA512

[root@localhost etc]#

(2)详解

5、/etc/default/useradd
(1)实例

[root@localhost etc]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
#如果useradd没有指定组,并且/etc/login.defs中的USERGROUPS_ENAB为no或者useradd使用了-N选项时,此时该参数生效。创建用户时使用此组ID。
HOME=/home
#主目录放在什么目录下
INACTIVE=-1
#帐号是否过期
EXPIRE=
#帐号终止日期
SHELL=/bin/bash
#默认使用哪个shell
SKEL=/etc/skel
#模板目录,骨架目录
CREATE_MAIL_SPOOL=yes
#是否创建邮箱文件

[root@localhost etc]# 

(2)详解

三、用户(组)相关命令

主要涉及到用户账号的添加、修改和删除。
  添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录Shell等资源。刚添加的账号是被锁定的,无法使用。

1、添加用户
  增加用户账号就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow, /etc/group等。Linux提供了集成的系统管理工具userconf,它可以用来对用户账号进行统一管理。
(1)语法

useradd [option] username

参数说明:

参数说明
-ccomment,指定一段注释性描述。
-d目录,指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g用户组,指定用户所属的用户组。
-G用户组,用户组 指定用户所属的附加组。
-sShell文件,指定用户的登录Shell。
-u用户号,指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。

(2)实例
1)useradd –d /home/sam -m sam
  创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录 /home/sam(/home为默认的用户主目录所在的父目录)。
2)useradd -s /bin/sh -g group –G adm,root gem
  新建了一个用户gem,该用户的登录Shell是 /bin/sh,它属于group用户组,同时又属于adm和root用户组,其中group用户组是其主组。这里可能新建组:#groupadd group及groupadd adm。

2、删除用户
  删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。
(1)语法

userdel [option] username

(2)实例

userdel -r username

删除用户username在系统文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的记录,同时删除用户的主目录。

3、修改用户
(1)语法

usermod [option] 用户名

参数说明:
  基本同useradd命令的参数,包括-c, -d, -m, -g, -G, -s, -u以及-o等。

(2)实例

usermod -s /bin/ksh -d /home/z –g developer sam

将用户sam的登录Shell修改为ksh,主目录改为/home/z,用户组改为developer。

4、用户口令
  用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。指定和修改用户口令的Shell命令是passwd
  超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。
(1)语法

passwd [option] username

(2)参数

参数说明
-lcomment,指定一段注释性描述。
-u目录,指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-d用户组,指定用户所属的用户组。
-f用户组,用户组 指定用户所属的附加组。

(3)实例
1)假设当前用户是sam,则下面的命令修改该用户自己的口令:

$ passwd 
Old password:****** 
New password:******* 
Re-enter new password:*******

2)如果是超级用户,可以用下列形式指定任何用户的口令:

# passwd sam 
New password:******* 
Re-enter new password:*******

3)为用户指定空口令

passwd -d sam

此命令将用户 sam 的口令删除,这样用户 sam 下一次登录时,系统就不再允许该用户登录了。
4)锁定某一用户,使其不能登录

passwd -l(lock) sam

普通用户修改自己的口令时,passwd命令会先询问原口令,验证后再要求用户输入两遍新口令,如果两次输入的口令一致,则将这个口令指定给用户;而超级用户为用户指定口令时,就不需要知道原口令。

5、添加用户组
(1)语法

groupadd [option] groupname

参数:

参数说明
-gGID 指定新用户组的组标识号(GID)。
-o一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。

(2)实例
1)groupadd groupname
  表示向系统中增加了一个新组groupname,新组的组标识号(GID)可以与系统已有的最大组标识号的基础上加1。

2)groupadd -g xxx groupname
  表示向系统中增加了一个新组groupname,同时指定新组的组标识号是xxx。

6、删除用户组

groupdel groupname

7、修改用户组
(1)语法

groupmod [option] groupname

参数:

参数说明
-gGID 为用户组指定新的组标识号。
-o与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
-n新用户组 将用户组的名字改为新名字

(2)实例
1)groupmod -g xxx groupname
  将组groupname的组标识号修改为xxx
2)groupmod –g xxx -n groupname2 groupname1
  将组groupname1的标识号改为xxx,组名修改为groupname2

8、用户组之间切换
  如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。用户可以在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户组。

newgrp root

表示将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组。类似于用户账号的管理,用户组的管理也可以通过集成的系统管理工具来完成。

When you talent can not hold up your ambition
you should calm down and learn
When you abilities can not realize you dreams
you shou practice with all you heart

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值