17 权限管理之用户和用户组

810次阅读
没有评论

共计 6592 个字符,预计需要花费 17 分钟才能阅读完成。

一. 用户概述

1. 什么是用户

  • 用户是操作系统提供的一种安全机制
  • 用户是权限的化身
  • 要使用操作系统必须事先输入正确的用户名与密码

2. 为什么要创建用户, 有什么用

  • 划分权限, 增强安全性

  • 系统上的每一个进程(运行的程序),都需要一个特定的用户运行

3. 如何查看一个用户及用户的权限

🐼# 查看当前用户
[root@shawn ~]# id
uid=0(root) gid=0(root) 组 =0(root)

🐼# 查看 "shawn" 用户
[root@shawn ~]# id shawn
uid=1000(shawn) gid=1000(shawn) 组 =1000(shawn)

🐼# 查看当前用户名字
[root@shawn ~]# whoami
root

🐼# 查看所有用户
[root@shawn ~]# who
root     tty1         2020-10-26 13:58
root     pts/0        2020-10-27 21:11 (192.168.12.179)

🐼# 查看 "ssh" 进程, 可以发现都对应着一个用户
[root@shawn ~]# ps aux |grep "[s]sh"
root       1181  0.0  0.0 105996   312 ?        Ss   01:42   0:00 /usr/sbin/sshd -D
root      55197  0.0  0.5 148316  5380 ?        Ss   21:11   0:00 sshd: root@pts/0

4.Linux 中用户角色的划分

  • Linux 中分为 管理员 用户与 普通 用户
  • 管理员用户拥有 最高权限
  • 其他用户根据管理员的 分配 拥有不同的权限

5.UIDGID

  • Linux 系统通过 UIDGID识别用户角色
  • 那些 用户账户 ( 比如 shawn), 其实都是 给我们人看的, 方便我们
  • Linux 系统能识别的仅仅是 UIDGID这样的数字
  • UID (User Identify)
🌵用户 ID, 在系统中是唯一, 唯一标识一个系统用户的帐号
"UID" 相当于一个人的身份证,用户名就相当于这个人的名字
  • GID (Group Identify)
🌵组 ID, 如果把一个操作系统当成一家公司,uid 相当于这个人的员工号,"GID" 相当于他的部门编号
  • CentOS 7 系统约定
0          #超级管理员, 权限最高, 但风险也很大
1~200      #系统用户,用来运行系统自带的进程,默认已创建
201~999    #系统用户,用来运行安装的程序,所以此类用户无需登录系统
1000 以后   #普通用户,正常可以登录系统的用户,权限比较小,能执行的任务有限
  • 用户和用户组的关系
主组 : 用户本身所在的部门
附加组 : 为用户添加的部门
🌵一对一 :  一个用户可以属于一个组,用户默认就在自己的主组下
🌵多对一 :  多个用户在同一个组
🌵一对多 :  一个用户可以属于多个组,用户只有一个主组,但可以为用户添加多个附加组
🌵多对多 :  多个用户可以属于多个组

5. 超级用户

  • 默认是 root 用户
  • UIDGID都为0
  • root 用户在每台 unix/ linux 操作系统中都是 唯一且真实 存在的
  • 通过它可以登录系统,可以操作系统中任何文件和命令,拥有 最高的管理权限

6. 文件权限分类

  • linux 系统把文件的权限分为了三类
1、属主对应的权限
2、属组对应的权限
3、其他对应的权限
  • 一个用户对文件的权限扫描的优先级
1、先看该用户是否是文件的属主
2、在 1 失败的情况,再看该用户是否是文件的属组
3、在 2 失败的情况,该用户属于其他人权限

二. 用户管理命令

1. 用户与组相关的文件

  • /etc/passwd : 用户文件
  • /etc/shadow : 用户密码文件
  • /etc/group : 组文件
  • /etc/gshadow : 组密码文件
  • /etc/skel : 用户老家模板目录
  • /var/spool/mail/xxx : 用户邮箱文件
  • /home/xxx : 用户家目录

2. 用户文件及组文件对应解释

3. 手动创建用户

手动添加用户:https://www.cnblogs.com/songhaixing/p/13893637.html

3.useradd : 添加用户

🌵添加用户
[root@shawn ~]# useradd xing

🌵查看用户
[root@shawn ~]# id xing
uid=1003(xing) gid=1003(xing) 组 =1003(xing)

🌵查看所有登入的用户信息
[root@shawn ~]# who

🌵查看当前登入的用户名
[root@shawn ~]# whoami

注意: 当创建一个用户没有指定用户主组, 将会创建一个同名的组作为用户的主组

  • 常用选项

选项 功能
-u 指定用户的UID
-g 指定用户所属的 主组
-G 指定用户所属的附加组
-d 指定用户的 家目录
-c 指定用户的备注信息
-s 指定用户所用的shell
-e 修改过期时间
-M 不创建 家目录
-r 创建系统用户, uid1000 以内, 默认没有家目录
  • 示例
🌵先搞个组做实验, 创建一个用户并指定 "UID", 指定主组 "xing1"
[root@shawn ~]# groupadd xing1
[root@shawn ~]# groupadd xing2
[root@shawn ~]# useradd -u 1111 -g xing1 song1
[root@shawn ~]# id song1
uid=1111(song1) gid=1000(xing1) 组 =1000(xing1)

🌵创建 "song2" 指定家目录
[root@shawn ~]# useradd song2 -d /home/SONG2 

🌵创建 "song3" 不创建家目录
[root@shawn ~]# useradd song3 -M

🌵创建 "song4" 指定 Shell
[root@shawn ~]# useradd song4 -s /sbin/nologin

🌵创建 "song2\5" 指定附属组
[root@shawn ~]# useradd song5 -G xing1
[root@shawn ~]# id song5
uid=1115(song5) gid=1115(song5) 组 =1115(song5),1000(xing1)

🌵创建 "song6" 指过期时间
[root@shawn ~]# useradd song6 -e 2022-12-12

🌵创建系统用户 "song7",Uid 在 1000 以内
[root@shawn ~]# useradd -r song7
[root@shawn ~]# id song7
uid=997(song7) gid=995(song7) 组 =995(song7)

4.usermod : 修改用户信息

  • 常用选项

与 useradd 选项基本一致, 但这是修改

选项 功能
-u 指定修改用户的 UID
-g 指定修改用户的主组
-G 指定修改用户附属组, 使用逗号分隔多个附属组, 覆盖原有的附属组
-a 与 "-G" 连用, 让其变成追加附加组, 而不是覆盖
-d 指定修改用户家目录
-c 指定修改用户注释信息
-s 指定修改用户的 Bash Shell
  • 示例
🌵将用户 "song1" 的主组由 "xing1" 改成 "xing2"
[root@shawn ~]# usermod -g xing2 song1
[root@shawn ~]# id song1
uid=1111(song1) gid=1117(xing2) 组 =1117(xing2)

🌵用户 "song1" 追加一个附加组 "xing1","-a" 表示追加, 没有 "-a" 则是覆盖
[root@shawn ~]# usermod -a -G xing1 song1
[root@shawn ~]# id song1
uid=1111(song1) gid=1117(xing2) 组 =1117(xing2),1000(xing1)

🌵修改用户 "song1" 的过期时间
[root@shawn ~]# usermod -e 2044-12-12 song1
  • 其他参数

选项 功能
-l 指定修改用户的登入名
-L 指定要锁定的用户
-U 指定要解锁的用户
  • 演示
🐼为用户设置密码
🌵交互式
[root@shawn ~]# passwd song1
更改用户 song1 的密码。新的 密码:无效的密码:密码少于 8 个字符
重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。🌵非交互式
[root@shawn ~]# echo "123" | passwd song1 --stdin

🌵"-l" 修改用户登入名
[root@shawn ~]# usermod -l SONG1 song1
[root@shawn ~]# id SONG1
uid=1111(SONG1) gid=1117(xing2) 组 =1117(xing2),1000(xing1)

🌵"-L" 锁定用户
[root@shawn ~]# usermod -L SONG1
[root@shawn ~]# exit
#使用用户 "SONG1" 进行登入
'''
shawn login: SONG1
Password:   #输入了正确的密码
Login incorrect  #显示登入不正确
'''

🌵"-U" 解锁用户
[root@shawn ~]# usermod -U SONG1
[root@shawn ~]# exit
#再次使用 "SONG1" 用户登入
'''
shawn login: SONG1
Password:   #输入了正确的密码
Last failed login: Thu OCt 29.........
[SONG1@shawn ~]$   #登入成功了
'''

5.userdel : 删除用户

🌵删除用户, 但不删除用户家目录和 "mail"
[root@shawn ~]# userdel xing

🌵"-r" 可以彻底删除
[root@shawn ~]# userdel -r xing

三. 组管理命令

1.groupadd : 创建组

  • 常用选项
选项 功能
-g 指定 GID
-r 创建系统组
  • 示例
🌵创建基本组, 不指定 GID, 会自动帮你设置一个
[root@shawn ~]# groupadd xing1
[root@shawn ~]# tail -1 /etc/group
xing1:x:1003:

🌵指定 GID
[root@shawn ~]# groupadd -g 4444 xing2
[root@shawn ~]# tail -1 /etc/group
xing2:x:4444:

🌵创建系统组,GID 在 1000 以内
[root@shawn ~]# groupadd -r xing3
[root@shawn ~]# tail -1 /etc/group
xing3:x:995:

2.groupmod : 修改组

  • 常用参数
选项 功能
-g 修改成指定的 GID
-n 修改组名称
  • 示例
🌵将 "xing1" 的 GID 改成 "5555"
[root@shawn ~]# groupmod -g 5555 xing1
[root@shawn ~]# tail -3 /etc/group
xing1:x:5555:
xing2:x:4444:
xing3:x:995:

🌵修改组名
[root@shawn ~]# groupmod -n new_xing3 xing3
[root@shawn ~]# tail -1 /etc/group
new_xing3:x:995:

3.groupdel : 删除组

  • 如果一个组是一个用户的主组的话, 那么该组不能被删除
  • 删掉用户会默认一起删掉它的主组
  • 能删掉的只能是不是任何用户主组的组
🌵先查看一下 "start" 的信息
[root@shawn ~]# id start
uid=1002(start) gid=1002(start) 组 =1002(start)

🌵指定追加一个组 "xing1"(之前创建的), 然后查看一下
[root@shawn ~]# usermod -a -G xing1 start
[root@shawn ~]# id start
uid=1002(start) gid=1002(start) 组 =1002(start),5555(xing1)

🌵删掉这个组 "xing1", 再查看发现没有了
[root@shawn ~]# groupdel xing1
[root@shawn ~]# id start
uid=1002(start) gid=1002(start) 组 =1002(start)

🌵当删除主组 "start" 的时候会提示失败
[root@shawn ~]# groupdel start
groupdel:不能移除用户“start”的主组

四. 组成员管理命令

1. 组的分类

  • 一类是基本组或称主组,用户只能有一个基本组,创建时可通过 -g 指定,如未指定则创建一个默认的组(与用户同名)
  • 二是附加组,基本组不能满足授权要求时,可以创建附加组,将用户加入该组,用户可以属于多个附加组,加入一个组后就拥有了该组的权限

2.gpasswd : 设置组密码及对用户和组的操作

  • 常用选项
选项 功能
-a 将某个用户加入到某个组
-M 将多个用户加入到一个组
-A 将某个用户设为某个组的组长, 那么也有了增和删成员的权限
-d 将用户从组中删除
  • 示例
🌵首先创建一个组 "xing1"
[root@shawn ~]# groupadd -g 5555 xing1
[root@shawn ~]# tail -1 /etc/group
xing1:x:5555:

🌵"-a" 将用户 "song" 加入到组 "xing1" 中
[root@shawn ~]# gpasswd -a song xing1
正在将用户“song”加入到“xing1”组中 #这是 Xshell 的中文提示

🌵"-M" 将多个用户 "shawn","start" 将入到组 "xing1" 中
[root@shawn ~]# gpasswd -M shawn,start xing1

🌵"-A" 将用户 "start" 设置为这个组的组长
[root@shawn ~]# gpasswd -A start xing1

🌵查看 "xing1" 这个组的成员, 第三段参数为组长
[root@shawn ~]# grep 'xing1' /etc/gshadow
xing1:!:start:song,shawn,start

🌵"-d" 将用户 "song" 从组 "xing1" 中删除
[root@shawn ~]# gpasswd -d song xing1
正在将用户“song”从“xing1”组中删除

🌵再次查看组成员, 可以发现没有用户 "song"
[root@shawn ~]# grep 'xing1' /etc/gshadow
xing1:!:start:shawn,start
  • 设置密码
🐼我们可以为组设置密码,然后让非组用户通过命令 "newgrp [组名]" 临时切换到组内
🐼并以输入密码的方式获取用户组的权限和特性

🌵先为组 "xing1" 设置一个密码
[root@shawn ~]# gpasswd xing1
正在修改 xing1 组的密码
新密码:#输入密码
请重新输入新密码:#确认密码

3.newgrp : 切换主组

  • 语法
# newgrp [组名]
  • 创建一个文件
🐼首先我们制作一个文件 "a.txt"
🐼属主 "root", 属组 "xing1"
🐼属主和属组对文件都可读可写
🐼那么你想要修改只能是 root 或者组员

🌵创建一个 "a.txt", 并查看其信息
[root@shawn ~]# touch /tmp/a.txt
[root@shawn ~]# ll !$
ll /tmp/a.txt
-rw-r--r-- 1 root root 0 10 月 28 23:40 /tmp/a.txt

🌵将属组改为组 "xing1", 并查看
[root@shawn ~]# chown root.xing1 /tmp/a.txt 
[root@shawn ~]# ll !$
ll /tmp/a.txt
-rw-r--r-- 1 root xing1 0 10 月 28 23:40 /tmp/a.txt

🌵将属组对文件权限改为可读可写, 并查看信息
[root@shawn ~]# chmod 664 !$
chmod 664 /tmp/a.txt
[root@shawn ~]# ll !$
ll /tmp/a.txt
-rw-rw-r-- 1 root xing1 0 10 月 28 23:40 /tmp/a.txt
  • 切换用户操作文件
🌵将用户切换到 "song", 并对文件进行写操作
[root@shawn ~]# su song
[song@shawn root]$ echo "I am song" >> /tmp/a.txt 
bash: /tmp/a.txt: 权限不够

🌵可以发现权限不够, 使用 "newgrp" 临时加入到组 "xing1" 中
[song@shawn root]$ newgrp xing1
密码:#输入之前设置的密码

🌵再对文件进行写操作, 查看发现可以写进去
[song@shawn root]$ echo "I am song" >> /tmp/a.txt 
[song@shawn root]$ cat /tmp/a.txt 
I am song

🌵"exit" 可退出临时的组, 退出后再进行写操作就不行了
[song@shawn root]$ exit
exit
[song@shawn root]$ echo "I am song" >> /tmp/a.txt 
bash: /tmp/a.txt: 权限不够
正文完
 
shawn
版权声明:本站原创文章,由 shawn 2023-06-16发表,共计6592字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)