账号和权限管理
Linux安全模型
Authentication:认证,验证用户身份
Authorization:授权,不同的用户设置不同权限
Accouting|Audition:审计
1、用户账号和组账号概述
1.1 用户帐号类型
Linux中每个用户是通过 User Id (UID)来唯一标识的 新建用户 1-60000 自动分配 0-65535 端口号
管理员:root, 0
程序用户:1-499 (CentOS 6以前), 1-999 (CentOS 7以后) 不登录的用户 系统默认的情况 普通用户:500+ (CentOS6以前), 1000+(CentOS7以后) 不指定 顺序
1.1.1 超级用户
超级用户:root 用户是 Linux 操作系统中默认的超级用户账号,对本主机拥有至高 无上的权限,类似于 Windows 操作系统中的 Administrator 用户。只有当进行系统 管理、维护任务时,才建议使用 root 用户登录系统,日常事务处理建议只使用普通用户账号。
1.1.2 普通用户 受到系统某一类限制
普通用户:账号需要由 root 用户或其他管理员用户创建,拥有的权限受 到一定限制,处理问题受到限制,一般只在用户自己的宿主目录中拥有完整权限。
[lisi@test1 root]$ ifconfig ens37 192.168.58.100
SIOCSIFADDR: 不允许的操作
SIOCSIFFLAGS: 不允许的操作
[lisi@test1 root]$ su root
密码:
[root@test1 ~]#
1.1.3程序用户
程序用户:在安装 Linux 操作系统及部分应用程序时,会添加一些特定的低权限用 户账号,这些用户一般不允许登录到系统,而仅用于维持系统或某个程序的正常运 行,如 bin、daemon、ftp、mail 等
1.2 组帐号
如何理解组?组相当于 职位 运维工程师 都具有大概相同的权限 看到组最常见的组词是不是组织?组织:按照一定的宗旨和系统建立起来的集体。那linux和windows中的组就是将多个用户集合起来,统一分配某种相同的权限(开通或关闭)。
1.2.1 基本组(私有组)
- 建立账户时,若没有指定账户所属的组,系统会建立一个和用户名相同的组,这个组就是私有组,这个组默认只容纳了一个用户。
- 在用户所属组中的第一个组称为基本组,基本组在 /etc/passwd 文件中指定 基本组:有且唯一
附加组:可有可无,可以有多个
默认新建用户时自动添加同名的组
1.2.2 附加组(公共组)
附加组:除了第一个组外的其他组为附加组或公共组,附加组在 /etc/group 文件中指定
[root@test1 ~]# id lyn
uid=1004(lyn) gid=1004(lyn) 组=1004(lyn),1005(ky18)
1004为基本组或私有 1005为附加组或公共组
[root@localhost ~]# cat /etc/passwd|tail -1
lyn:x:1004:1004:Lyn:/home/lyn:/bin/bash
1 lyn:用户名
2 x:密码占位符
3 1004:uid
4 1004:gid
5 Lyn:描述信息你soft 备注
6/home/lyn:家目录 /root
7/bin/bash:shell环境
1.3 ID
1.3.1 UID
UID(User IDentity,用户标识号):Linux 操作系统中的每一个用户账号都有一个数字形式的身份标记,称为 UID(UserIDentity,用户标识号),对于操作系统核心来说,UID 是区分用户的基本依据,原则上每个用户的 UID 号应该是唯一的。root 用户账号的 UID 号为固定值 0,而程序用户账号的 UID号默认为1~499,500~60000 的 UID 号默认分配给普通用户使用。
centos7登录用户是从1000起到60000
centos6 500~60000
1-999 预留给系统,叫系统用户
1.3.2 GID
GID(Group IDentify,组标识号):与 UID 类似,每一个组账号也有一个数字形式的身份标记,称为 GID(Group IDentity,组标识号)。root 组账号的 GID 号为固定值 0,而程序组账号的 GID 号默认为 1~499,500~60000 的 GID 号默认分配给普通组使用。
1.3.3 用户和组的关系
用户 是员工 组 是职位
员工 可以兼职多个岗位
总有一个最重要的身份 主要组合附加组
主要组 必须要一个组 有且唯一
附加组 可有可无 有可以有多个
默认行为当你创建一个新用户时会自动创建一个和之同名的主组
- 用户的主要组(primary group):用户必须属于一个且只有一个主组,默认创建用户时会自动创建和用户名同名的组,做为用户的主要组,由于此组中只有一个用户,又称为私有组
- 用户的附加组(supplementary group): 一个用户可以属于零个或多个辅助组,附属组
1.4 用户账号管理
1.4.1文件位置
/etc/passwd 存放保存用户名称、宿主目录、登录 Shell 等基本信息
[root@localhost ~]# cat /etc/passwd|tail -1
lyn:x:1004:1004:Lyn:/home/lyn:/bin/bash
1 lyn:用户名
2 x:密码占位符
3 1004:uid
4 1004:gid
5 Lyn:描述信息你soft 备注
6/home/lyn:家目录 /root
7/bin/bash:shell环境
/etc/shadow 存放保存密码
[root@localhost ~]# head -1 /etc/shadow
root:$6$F9xdHRnn$Y7h6DXNH.MbjWN/ws1mK4UKAI4ylimRVwc6zOyE2Zvd7z83e9FF9z02YXlMzeD9Ui/M.rO04gDbdnpkIPEvDr0::0:99999:7:::
第一root:用户名
第二$6$F9xdHRnn$Y7h6DXNH.MbjWN/ws1mK4UKAI4ylimRVwc6zOyE2Zvd7z83e9FF9z02YXlMzeD9Ui/M.rO04gDbdnpkIPEvDr0
密码
第三:19055:最后一次修改密码时间
第四0:修改密码最小天数 0 不限制
第五99999:密码有效期
第六7:提前7天提醒
第7:宽限天数
第8:失效时间 永久
第9:保留
1.4.2添加用户
useradd 【选项】 用户名
添加用户:查看是否在 passwd和shadow文件中生成信息
- 在/etc/passwd 文件和/etc/shadow 文件的末尾增加该用户账号的记录
- 若未明确指定用户的宿主目录,则在/home 目录下自动创建与该用户账号同名的宿 主目录,并在该目录中建立用户的各种初始配置文件。
- 若没有明确指定用户所属的组,则自动创建与该用户账号同名的基本组账号,组账 号的记录信息将保存到/etc/group 和/etc/shadow 文件中。
选项
- -u:指定用户的 UID 号,要求该 UID 号码未被其他用户使用。
- -d:指定用户的宿主目录位置(当与-M 一起使用时,不生效)。
- -e:指定用户的账户失效时间,可使用 YYYY-MM-DD 的日期格式。
- -g:指定用户的基本组名(或使用 GID 号)。
- -G:指定用户的附加组名(或使用 GID 号)。
- -M:不建立宿主目录,即使/etc/login.defs 系统配置中已设定要建立宿主目录。
- -s:指定用户的登录 Shell /sbin/nologin
1.4.3 密码管理
passwd [选项]... 用户名
[root@localhost ~]# passwd lyn
更改用户 lyn 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
#### 用户lyn的密码已更改
选项
- -d:清空指定用户的密码,仅使用用户名即可登录系统。
- -l:锁定用户账户。
- -S:查看用户账户的状态(是否被锁定)。
- -u:解锁用户账户。
1.4.4修改用户账号的属性
usermod命令
usermod [选项]... 用户名
常见选项
- -l 更改用户账号的登录名称(Login Name)
- -L 锁定用户账户
- -u 修改用户的 UID 号
- -U 解锁锁用户账户
- -d:修改用户的宿主目录位置。
- -e:修改用户的账户失效时间,可使用 YYYY-MM-DD 的日期格式。
- -g:修改用户的基本组名(或使用 GID 号)
- -G:修改用户的附加组名(或使用 GID 号)
- -s:指定用户的登录 Shell
[root@localhost ~]# usermod -L lyn //锁定用户
[root@localhost ~]# passwd -S lyn //查看状态
lyn LK 2022-03-20 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# usermod -U lyn //解锁
[root@localhost ~]# passwd -S lyn //查看状态
lyn PS 2022-03-20 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
[root@localhost ~]# usermod -l lyn1 lyn //修改用户名
[root@localhost ~]# id lyn //验证查看
id: lyn: no such user
[root@localhost ~]# id lyn1
uid=1002(lyn1) gid=10(wheel) 组=10(wheel),0(root)
1.4.5 删除用户
userdel [选项] 用户
-r 将宿主目录一起删除
[root@localhost ~]# userdel -r lyn1 //连宿主目录一起删除
[root@localhost ~]# id lyn1 //验证
id: lyn1: no such user
[root@localhost ~]# cd /home/
[root@localhost home]# ls
lyn zhangsan
1.4.6用户账号的初始配置文件
用户宿主目录下的初始配置文件只对当前用户有效
~/ .bash_profile
#此文件中的命令将在该用户每次登录时被执行,他会设置一些环境变量,并且会调用该用户的~/.bashrc文件
~/.bashrc
#此文件中的命令将在该用户每次打开新的bash shell时(包括登录系统)被执行(登录 切换 新的bash环境)
~/.bash_logout
#此文件中的命令将在该用户每次退出时bash shell时使用
/etc/bashrc
1.5组管理
1.5.1组账号文件
与用户帐号文件相类似
/etc/group:保存组帐号基本信息
/etc/gshadow:保存组帐号的密码信息基本不使用
1.5.2添加组
groupadd命令
groupadd [-g GID] 组账号名
[root@localhost home]# groupadd wang ###添加组账号
[root@localhost home]# tail -1 /etc/group
wang:x:1001:
[root@localhost home]#
[root@localhost home]# groupadd -g 88 xiu ### -g 指定组id
[root@localhost home]# tail -1 /etc/group
xiu:x:88:
[root@localhost home]#
1.5.3组内管理
gpasswd 命令——添加、设置、删除组成员
- -a:向组内添加一个用户
- -d:从组内删除一个用户成员
- -M:定义组成员列表,以逗号分隔
1.5.4删除组账号
groupdel 组帐号名
1.5.5查询
finger命令查询用户帐号的详细信息(finger [用户名])
[root@localhost ~]# finger lyn
Login: lyn Name: Lyn
Directory: /home/lyn Shell: /bin/bash
Never logged in.
No mail.
No Plan.
w 查询已登录到主机的用户信息
[root@localhost ~]# w [选项] [用户名]
-h 不显示输出信息的标题
-l 用长格式输出
-s 用短格式输出,不显示登陆时间,JCPU 和 PCPU 时间
-V 显示版本信息
[root@localhost ~]# w
18:47:27 up 3:44, 3 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root :0 :0 四06 ?xdm? 1:03 0.11s /usr/libexec/gnome-session-binary --session gnome-classic
root pts/0 192.168.58.1 18:07 7.00s 0.07s 0.02s w
root pts/1 192.168.58.1 15:18 1:39m 0.05s 0.05s -bash
| 标题 | 含义 |
|---|---|
| USER | 登录到系统的用户 |
| TTY | 登录终端 |
| FROM | 表示用户从哪里登陆进来,一般显示远程登陆主机的 IP 地址或者主机名 |
| LOGIN@ | 用户登陆的日期和时间 |
| IDLE | 表示某个程序上次从终端开始执行到现在所持续的时间 |
| JCPU | 和该终端连接的所有进程占用的 CPU 运算时间。这个时间里并不包括过去的后台作业时间,但是包括当前正在运行的后台作业所占用的时间 |
| PCPU | 当前进程所占用的 CPU 运算时间 |
| WHAT | 当前用户正在执行的进程名称和选项,换句话说,就是表示用户当前执行的是什么命令 |
who 相比较 w 命令,who 命令只能显示当前登陆的用户信息,但无法知晓每个用户正在执行的命令
[root@localhost ~]# who [选项] [file]
who 命令默认是通过 /var/run/utmp 文件来获取登陆用户信息,但如果通过 file 指定另一个文件,则 who 命令将不再默认读取 /var/run/utmp 文件,而是读取该指定文件来获取信息
| 标题 | 含义 |
|---|---|
| -a | 列出所有信息,相当于所有选项 |
| -b | 列出系统最近启动的时间日期 |
| -l | 列出所有可登陆的终端信息 |
| -m | 仅列出关于当前终端的信息,who -m 命令等同于 who am i |
| -q | 列出在本地系统上的用户和用户数的清单 |
| -r | 显示当前系统的运行级别 |
| -s | 仅显示名称、线路和时间字段信息,这是 who 命令的默认选项 |
| -u | 显示当前每个用户的用户名、登陆终端、登陆时间、线路活动和进程标识 |
| -T或-w | 显示 tty 终端的状态,“+”表示对任何人可写,“-”表示仅对 root 用户或所有者可写,“?”表示遇到线路故障 |
2.文件/目录的权限和归属
程序访问文件时的权限,取决于此程序的发起者
- 进程的发起者,同文件的属主:则应用文件属主权限
- 进程的发起者,属于文件属组;则应用文件属组权限
- 应用文件“其它”权限
访问人群分为了三类
- 所属主(u)
- 所属组(g)
- 其他人 (o)
权限分为三种
- 读(r,4)
- 写(w,2)
- 执行(x,1程序,脚本)
对文件的权限
- r 可使用文件查看类工具,比如:cat,可以获取其内容
- w 可修改其内容
- x 可以把此文件提请内核启动为一个进程,即可以执行(运行)此文件(此文件的内容必须是可执行)
对目录的权限
- r 可以使用ls查看此目录中文件列表
- w 可在此目录中创建文件,也可删除此目录中的文件,而和此被删除的文件的权限无关
- x 可以cd进入此目录,可以使用ls -l查看此目录中文件元数据(须配合r权限),属于目录的可访问的最小权限
2.1chmod
模式法:
chmod 对谁(所有者,所属组,其他)操作(+ - =)权限 文件
谁:u,g,o,a
操作:+,-,=
权限:r,w,x(普通权限对root无效)
数字法:
1 2 4
x w r
一般谁新建的文件谁就是所属主
修改所属主
chown 用户:组名 文件名
#修改所属主,和所属组
-R 递归修改
[root@localhost opt]# chown -R lyn:lyn /opt/aa/
##递归修改
[root@localhost opt]# ll
总用量 0
drwxr-xr-x. 2 lyn lyn 6 3月 20 19:17 aa
2.2 umask
umask 的值可以用来保留在创建文件权限
实现方式:
新建文件的默认权限: 666-umask,如果所得结果某位存在执行(奇数)权限,则将其权限+1,偶数不变
新建目录的默认权限: 777-umask
非特权用户umask默认是 002
root的umask 默认是 022