针对Linux系统是一个多用户多任务的分时操作系统,产生了用户与用户组的管理
多用户多任务分时操作系统允许多个用户共享使用同一台计算机的资源,即在一台计算机上联接几台甚至几十台终端机,终端机可以没有自己的CPU与内存,只有键盘与显示器,每个用户都通过各自的终端机使用这台计算机的资源,计算机按固定的时间片轮流为各个终端服务。由于计算机的处理速度很快,用户感觉不到等待时间,似乎这台计算机专为自己服务一样。
文章目录
概念
用户
用户:在linux系统中用户名就是一串代表用户身份的字符串,并没有意义,仅是方便人类使用;而Linux 系统是通过 UID 来识别用户身份,分配用户权限的;/etc/passwd 文件中就定义了用户名和 UID 之间的对应关系。
UID:USER ID即用户 ID;每个用户都有唯一的一个 UID,Linux 系统通过 UID 来识别不同的用户;实际上,UID 就是一个 0~65535 之间的数,不同范围的数字表示不同的用户身份,具体如下表所示:
类型 uid范围 作用 超级用户 0 UID 为 0 就代表这个账号是管理员账号
在 Linux 中,只需把其他用户的 UID 修改为 0 就可以了,就可以升级成 为管理员了系统用户 1 ~ 499 与真实用户区分开来,这类用户的最大特点是安装系统后默认就会存在的,且默认情况不能登录系统,它们是系统正常运行必不可少的,他们的存在主要是方便系统管理,满足相应的系统进程都文件属主的要求 普通用户 500~65535 普通用户提供给真实用户使用,这类用户一般是由具备系统管理员root的权限的运维人员添加的
用户组
用户组:linux系统中的用户组(group)就是具有相同特性的用户(user)集合,通过让用户组具有符合需求的操作权限,这样用户组下的所有用户对该文件或目录就会具有相同的权限,这就是用户组的用途;同时用户组的产生很大程度上简化了运维管理工作
GID:全称“Group ID”,简称“组ID”,表示用户初始组的组 ID 号;根据使用性质用户组进行了分类,分类如下表:
类型 作用 初始组 指用户登陆时就拥有这个用户组的相关权限。每个用户的初始组只能有一个,通常就是将和此用户的用户名相同的组名作为该用户的初始组。 附加组 指用户可以加入多个其他的用户组,并拥有这些组的权限。每个用户只能有一个初始组,除初始组外,用户再加入其他的用户组,这些用户组就是这个用户的附加组。附加组可以有多个,而且用户可以有这些附加组的权限。
相关配置文件
用户信息配置文件 /etc/passwd
vi /etc/passwd
# 查看用户信息配置文件
文件使用":"分割,共分割为7个部分,解读如下
位置 名称 作用 字段1 用户名 这是用户登陆时使用的账户名称,在系统中是唯一的,不能重名 字段2 密码占位符x 早期的unix系统中,该字段是存放账户和密码的,由于安全原因,后来把这个密码字段内容移到/etc/shadow中了;这里可以看到一个字母x,表示该用户的密码是/etc/shadow文件中保护的; 字段3 UID 用户中介绍了,范围是0-65535 字段4 GID 范围是0-65535;当添加用户时,默认情况下会同时建立一个与用户同名且UID和GID相同的初始组 字段5 用户说明 这个字段是对这个账户的说明 字段6 用户主目录 用户登陆后首先进入的目录,默认建立在 /home/用户名
这个目录下字段7 登录Shell 当前用户登陆后所使用的shell,在centos/rhel系统中,默认的shell是bash
注意:若设置为/sbin/nologin时,是禁止此用户交互式访问的,一般系统用户常使用
用户信息的影子文件 /etc/shadow
vi /etc/shadow
# 查看用户信息的影子文件
文件使用":"分割,共分割为9个部分,解读如下
位置 名称 作用 字段1 用户名 对应用户信息中的用户名 字段2 密码加密密文 1.已将密码进行加密处理,显示为加密密文,目前 Linux 的密码采用的是 SHA512 散列加密算法
2. “!!” 或 “*”,代表没有密码是不能登录的。当然,新创建的用户如果不设定密码,那么它的密码项也是 “!!”,代表这个用户没有密码,不能登录
3."!密文”表示用户密码冻结,用户账户冻结不能登录字段3 密码的最后一次修改日期 1.计算时间是以 1970 年 1 月 1 日作为 1 不断累加得到的时间
2.空字段表示密码年龄功能被禁用。字段4 密码最短有效期 禁止修改密码的天数,从1970/1/1开始,多少天之内不能修改密码,默认值为0 字段5 密码最长有效期 用户必须在此时期内更改口令的天数;密码的最长有效天数,默认值为99999 字段6 密码警告期限 警告更改密码的期限;密码过期之前警告天数,默认值为7;在用户密码过期前多少天提醒用户更改密码 字段7 密码过期后的宽限天数 在密码过期后,用户如果还是没有修改密码,则在此字段规定的宽限天数内,用户还是可以登录系统的;如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,完全禁用账户 字段8 用户到期日 帐号失效时间,默认值为空;从1970/1/1日起,到用户被禁用的天数 字段9 保留字段 等待新功能
组信息配置文件 /etc/group
vi /etc/group
# 查看组信息配置文件
文件使用":"分割,共分割为4个部分,解读如下
位置 名称 作用 字段1 组名 用户组的名称,在系统中是唯一的,不能重名 字段2 组密码 1.这里的 “x” 仅仅是密码标识,真正加密后的组密码默认保存在 /etc/gshadow 文件中
2.用户组密码主要是用来指定组管理员的,如果有用户需要加入或退出某用户组,可以由该组的组管理员替代 root 进行管理。但是这项功能目前很少使用,也很少设置组密码。字段3 GID Linux 系统就是通过 GID 来区分用户组的,同用户名一样,组名也只是为了便于管理员记忆。 字段4 组中的用户 本组的成员用户列表,加入这个组的所有用户账号
用户组的影子文件/etc/gshadow
vi /etc/gshadow
# 查看用户组的影子文件
文件使用":"分割,共分割为4个部分,解读如下
位置 名称 作用 字段1 组名 用户组的名称 字段2 加密的组密码 加密后的密码字符串,这个字段可以空的或者‘!’;如果是空的或有‘!’,表示没有密码 字段3 组管理员 本组的管理员列表,这个字段也可为空;如果有多个用户组管理员,用‘,’号分隔 字段4 组附加用户列表 本组的成员列表,加入这个组的所有用户账户;列表中多个用户通过‘,’分隔
与建立新账户相关的文件和目录
文件目录 | 作用 |
---|---|
/etc/login.defs | 用来定义创建用户时需要的一些用户的配置信息,在文件中做了默认初始设置 |
/etc/default/useradd | 在使用useradd添加用户时需要调用的一个默认的配置文件,可以使用useradd -D查看参数 |
/etc/skel/*. | /etc/skel目录是用来存放新用户配置文件的目录,当我们添加新用户时,这个目录下的所有文件都会自动被复制到新添加的用户的家目录下;默认情况下,/etc/skel目录下的所有文件都是隐藏文件(以.点开头);通过修改、添加、删除/etc/skel目录下的文件,我们可为新创建的用户提供统一、标准的、初始化用户环境 |
/etc/login.defs
MAIL_DIR /var/spool/mail #创建用户时,创建用户邮件的目录 /var/spool/mail
PASS_MAX_DAYS 99999 #密码有效期,默认99999天
PASS_MIN_DAYS 0 #密码更改最小天数,默认0天。
PASS_MIN_LEN 5 #指定密码的最小长度,默认不小于 5 位
PASS_WARN_AGE 7 #密码到期前多少天提示,默认为7 天。
UID_MIN 1000 #添加用户时指定最小UID 起始数字,默认1000
UID_MAX 60000 #指定普通用户最大的UID,默认60000。
SYS_UID_MIN 201 #添加系统用户指定最大的UID起始数字,默认201
SYS_UID_MAX 999 #指定系统用户最大的UID,默认999
GID_MIN 500 #指定用户组最小GID起始数字,默认500
GID_MAX 60000 #组用户GID最大,默认60000。
CREATE_HOME yes #指定在创建用户时,是否同时创建用户主目录,yes 表示创建,no 则不创建,默认是 yes。
UMASK 077 #用户主目录的权限默认设置为 077。
USERGROUPS_ENAB yes #指定删除用户的时候是否同时删除用户组,准备地说,这里指的是删除用户的初始组,此项的默认值为 yes。
ENCRYPT_METHOD SHA512 #指定用户密码采用的加密规则,默认采用 SHA512
/etc/default/useradd
GROUP=100 #用户默认组
HOME=/home #新建立用户默认家目录
INACTIVE=-1 #是否启动账号过期停权,-1表示不启用
EXPIRE= #账号终止日期,不设置表示不启用
SHELL=/bin/bash #新建立用户默认所用的shell类型
SKEL=/etc/skel #新建立用户默认模板文件目录
CREATE_MAIL_SPOOL=yes #是否创建mail文件
ls -la /etc/skel/
drwxr-xr-x. 3 root root 78 Sep 24 07:38 .
drwxr-xr-x. 142 root root 8192 Oct 8 00:37 ..
-rw-r--r--. 1 root root 18 Jul 12 2016 .bash_logout
-rw-r--r--. 1 root root 193 Jul 12 2016 .bash_profile
-rw-r--r--. 1 root root 231 Jul 12 2016 .bashrc
drwxr-xr-x. 4 root root 39 Sep 24 07:38 .mozilla
管理用户与用户组
查看用户与用户组
whoami
#打印当前有效的用户名称,相当于执行id -un命令
id
#显示真实有效的用户ID(UID)和组ID(GID)
id [-a] [用户名] #显示所有信息,可以不输入-a
id -u [用户名] #显示用户ID
id -g [用户名] #显示初始组ID
id -G [用户名] #显示附加组ID
id -n [用户名] #显示名字而不是id;不能单独使用,需要与-u|-g|-G 联合使用
切换用户
su - 用户名 #切换用户
#'-'表示永华在切换身份同时切换用户当前环境
建立用户与用户组
创建新用户
useradd命令
useradd [选项] [用户名]
-u #指定用户id
-g #指定用户初始组,对应passwd字段3
-G #指定用户所属的附加群组,对应passwd字段4
-c #添加用户说明,对应passwd字段5
-d #指定用户登录的其起始目录,对应passwd字段6
-s #指定用户登入后所使用的shell,对应passwd字段7
-m #自动建立用户的登入目录,默认不输入是开启使用的
-M #不要自动建立用户的登入目录,主要给系统用户建立使用
-n #取消建立以用户名称为名的群组
-r #建立系统帐号
-D #变更预设值,对应etc/default/useradd文件
useradd -D 配合下方参数一起使用:
-b HOMEDIR #设置所创建的主目录所在的默认目录
-e EXPIRE #设置密码失效时间,EXPIRE 参数应使用 YYYY-MM-DD 格式,例如 useradd -D -e 2019-10-17。
-f INACTIVE #设置密码过期的宽限天数,例如 useradd -D -f 7。
-k SKELDIR #设置‘骨架’目录路径
-g GROUP #设置新用户所在的初始组,例如 useradd -D -g hahagroup
-s SHELL #设置新用户的默认 shell,SHELL 必须是完整路径,例如 useradd -D -s /usr/bin/csh
用户密码建立与修改
passwd命令
passwd [用户名] #新用户创建密码;已建立用户修改密码
passwd [选项] [用户名]
-d #删除密码,仅有系统管理者才能使用
-f #强制执行
-k #设置只有在密码过期失效后,方能更新
-l #锁住密码,对应shadow文件字段2,冻结效果
-u #解开已上锁的帐号,对应shadow文件字段2,解冻效果
chage命令
chage [选项] 用户名
-d #最后一次更改的日期,对应shadow文件字段3
-m #密码最短有效期,对应shadow文件字段4
-M #密码最长有效期,对应shadow文件字段5
-w #密码警告期限,对应shadow文件字段6
-i #密码过期后的宽限时间,对应shadow文件字段7
-E #帐号到期的日期,对应shadow文件字段8
-l #列出用户的密码相关信息
创建新用户组
groupadd命令
groupadd [选项] [用户名]
-g #指定新建工作组的id;
-r #创建系统工作组
删除用户与用户组
删除用户
userdel命令
userdel [选项] [用户名]
-f #强制删除用户,即使用户当前已登录;
-r #删除用户的同时,删除与用户相关的所有文件。
删除用户组
groupdel命令
groupdel [用户名]
修改用户与用户组
修改用户信息
usermod命令
usermod [选项] [用户名]
-u #修改用户id
-l #修改用户帐号名称,对应passwd字段1
-g #修改用户初始组,对应passwd字段3
-G #修改用户所属的附加群组,对应passwd字段4
-c #修改用户说明,对应passwd字段5
-d #修改用户登录的其起始目录,对应passwd字段6
-s #修改用户登入后所使用的shell,对应passwd字段7
-L #锁定用户密码,使密码无效,对应shadow文件字段2,冻结效果
-U #解除用户密码锁定,对应shadow文件字段2,解除冻结效果
-e #修改帐号的有效期限,对应shadow文件字段5
-f #修改在密码过期后多少天即关闭该帐号,对应shadow文件字段7
修改用户组信息
groupmod命令
groupmod [选项] [用户名]
-g #修改用户组gid信息
-n #修改用户组名称