Linux系统中的用户管理
用户及用户组存在的意义
用户存在的意义
- 系统的资源有限
- 要对有限的资源进行合理的分配,使用身份授权认证的方式进行分类管理时高效的
身份(Account), 授权(Author), 认证(Auth),统称3A.
3A机制构成了最底层的安全架构.
用户组存在的意义
大量的用户同样需要分类管理.
用户组是一个逻辑容器,用于对用户进行归类和统一授权.
用户相关知识
人对于用户的记忆偏向于用户名
,而计算机为了方便存储和效率,更偏向于使用用户ID
等数字化的方式对用户进行记录,对于用户组也是同样的道理.每个用户都有自己的用户ID,每个用户组也同样具有组ID.
用户的存在形式就是/etc/passwd文件中的一行字符;
用户组的存在形式就是/etc/group 文件中的一行字符.
用户的切换与查看
用户查看
whoami ##顾名思义,显示当前用户的用户名
当然绝大多数使用场景下我们需要使用ID而不是用户名.
可以通过id
命令获取相关信息.
id ##用户信息查询命令
id ##查看当前用户id信息,包含用户id,主组id,用户所有组的id
id -u 用户名 ##查看指定用户的用户ID
id -g 用户名 ##查看指定用户的主组ID
id -G 用户名 ##查看指定用户所有的组的ID
id -n 其他参数 ##显示名称,与其他参数同时使用
##不附加-n参数时,输出为id,附加-n参数时输出为名称
用户ID范围
用户id范围: 0-65535
0: Linux超级用户ID
1-999: Liunx系统自用ID
1000-65535: 用户级ID
以上ID设定规则都被记录在/etc/login.defs
用户切换
su - username ##切换用户到username用户
- #表示切换用户环境
##从root用户切换到普通用户不需要输入密码
##从普通用户切换到root用户需要输入密码
##从普通用户切换到普通用户需要输入密码
##换言之,从高权限切换到低权限不需要密码,反之需要.
注意: 在做用户切换时当使用完毕用户身份及时退出,不要在一个shell中反复执行su命令,避免不必要的权限错误.
用户涉及的系统文件
/etc/passwd ##用户身份信息文件
/etc/group ##组身份信息文件
#组名称:组密码:组id:组的附加成员
/etc/skel/.* ##用户环境配置文件模板
/etc/shadow ##用户认证信息文件
/home/username ##用户家目录
/root ##超级用户家目录
/var/spool/mail/username ##用户邮箱文件
顺便一提,/sbin/nologin
表示不用于登陆的系统用户.
用户和用户组建立及删除
#用户相关
useradd ##创建用户
useradd username ##建立用户名为username的用户
useradd -u id username ##建立同时设置其用户ID
useradd -g id username ##建立同时设置其组ID
useradd -G id username ##建立同时为其设置附加组
useradd -d dir username ##建立同时指定其家目录
useradd -M username ##不为其同步建立家目录
useradd -c word username ##建立同时增加用户说明
useradd -s shell username ##建立同时指定其默认Shell
userdel ##删除用户
##默认不会清除家目录和邮件目录等等,会留下残留
userdel -r username ##删除用户同时清除其系统配置
##组相关
groupadd ##建立用户组
groupadd groupname ##建立名为iegroupname的用户组
groupname -g id groupname ##建立同时设置其组ID
groupdel ##删除用户组
同理可进行组的创建和删除实验.
用户和用户组的信息管理
对已经存在的用户和用户组进行信息修改使用usermod
和groupmod
命令.
参数可指定想要修改的信息.
usermod
-l #更改用户名称
-u #更改用户id
-g #更改主组id
-G #更改用户附加组身份
-aG #添加用户附加组身份
-c #更改用户说明
-d #更改家目录指向
-g id-md #更改家目录指向同时更改家目录名称
-s #更改默认shell
-L #冻结账号
-U #解锁
##冻结和解锁在下文的用户认证部分有进行讲解
groupmod -g ##更改用户组id
用户认证信息管理
上文提到过,用户认证相关信息存储在/etc/shadow
文件中,浏览/etc/shadow
可以看到用户认证相关的设置,当然,用户密码部分是加密的.
这里对上述格式中的部分内容进行解释.
密码使用时间为1970/1/1到现在的时间
最短有效期指修改密码后最短多长时间无法修改密码
最长有效期指最长使用多少天后必须修改密码
过期前警告期指必须修改密码前的多少天发送邮件对用户进行提醒.
账号非活跃期指虽然账号已经过期但仍可暂时使用的缓冲时间
账号到期时间指到设定的时间账号将被冻结
以上这些信息都可以通过passwd
或chage
指令进行更改
passwd -S username ##查看指定用户的密码设置状态
passwd username ##更改指定用户的密码
##只有root可以执行 “echo 123 | passwd --stdin lee”
passwd ##更改用户密码
passwd -l username ##冻结账号认证
passwd -u username ##解索账号认证
passwd -d username ##删除指定用户的密码
##修改默认使用时间
passwd -e username ##修改默认使用时间为0
chage -d 0 username ##效果同上
##修改最短有效期
passwd -n 1 username ##指定用户1天内不能修改密码
chage -m 1 username ##效果同上
##修改最长有效期
passwd -x 30 username ##指定用户30天内必须更改密码,否则用户会被冻结
chage -M 30 username ##效果同上
#密码过期警告
passwd -w 5 username ##密码过期前5天进行邮件警告
chage -W 5 username ##效果同上
#非活跃天数
passwd -i 5 username ##用户认证最大时间超过5天内仍可登陆,5天后冻结
chage -I 5 username ##效果同上
#账号认证到期时间
chage -E "2021-01-25" ##2021/1/25日账号会被冻结
用户权力下放
Linux对于权限的管理可以说是比较严格的了.
普通用户通常是无法执行系统管理命令的,如果需要普通用户执行系统管理动作,那么必须root用户来进行授权.这种操作称之为权力下放或者"提权".
普通用户授权方式
sudo
作用:
使普通用户使用指定的用户身份运行系统管理命令.
但能够运行什么指令是需要提前预定义的.
授权方法:
visudo
此命令作用是编辑/etc/sudoers
并提供语法检测.用vim
也可以打开该文件编辑,但不提供语法检测,为了保证操作的正确,还是推荐使用visudo
.
用户授权相关信息在文件的100行左右,使用:100
可快速跳转到100行所在位置.
授权时应注意主机名 授权对象 命令的绝对地址.
可通过以下指令查询所需要的信息
hostname ##查看主机名
which 命令 ##查看命令对应的文件在系统中的绝对地址
授权操作时可允许免密 在绝对地址前增加NOPASSWD:
即可,否则每次进行sudo
操作时都需要输入密码.