Linux 账号和权限管理
导图
Linux安全模型
Authorization:授权,不同的用户设置不同权限
1.用户账户和组账户概述
Linux基于用户身份对资源访问进行控制
1.1用户账户类型
用户账户类型分为三类:
- 超级用户:root用户是Linux操作系统中默认的超级用户账号,对本主机拥有最高的权限,系统中超级用户是唯一的。
- 普通用户:由root用户或其他管理员用户创建,拥有的权限会受到限制,一般只在用户自己的宿主目录中拥有完整权限。
- 程序用户:在安装Linux操作系统及部分应用程序时,会添加一些特定的低权限用户账号,这些用户一般不允许登录到系统,仅用于维持系统或某个程序的正常运行,如bin、daemon、ftp、mail等。
[root@localhost ~]# su suoluo //超级账户符号后符号为# [suoluo@localhost root]$ //普通账户符号位$
Linux中每个用户是通过 User Id (UID)来唯一标识的
新建用户 1-60000 自动分配 0-65535 端口号
用户 | uid | |
管理员root | 0 | |
程序用户 |
1-499(centos 6 以前) 1-999(centos 7) |
|
普通用户 |
500+(centos 6以前) 1000+(centos 7) |
#查看当前用户 [root@localhost ~]# whoami root [root@localhost ~]# who root pts/1 2022-10-03 12:59 (192.168.61.1) root pts/2 2022-10-04 13:17 (192.168.61.1) [root@localhost ~]# who -b 系统引导 2022-10-02 16:56 #lastlog 查看所有用户的最近一次登录 #查看指定用户 [root@localhost ~]# lastlog -u root 用户名 端口 来自 最后登陆时间 root pts/2 192.168.61.1 二 10月 4 13:17:38 +0800 2022 #查看近几天内的用户 [root@localhost ~]# lastlog -t 1 //1天 用户名 端口 来自 最后登陆时间 root pts/2 192.168.61.1 二 10月 4 13:17:38 +0800 2022
补充命令:last
选项 | 作用 |
-x | 显示系统开关机以及执行等级信息 |
-a | 将登陆的ip显示在最后一行 |
-f | 读取特定文件,可以选择 -f /var/log/btmp文件 |
-d | 将ip地址转换为主机名 |
-n | 设置列出名单的显示列数 |
-t | 查看指定时间的用户登陆历史 |
1.2组账户
组账户:将多个用户集合起来,统一分配某种相同的权限(开通或关闭)
组账户分为:基本组(私有组)和附件组(公共组)
基本组有且只有一个,附加组可有可无可多个。
基本组:1. 建立账户时,若没有指定账户所属的组,系统会建立一个和用户名相同的组,这个组就是私有组,这个组默认只容纳了一个用户;
2. 在用户所属组中的第一个组称为基本组,基本组在 /etc/passwd 文件中指定。
附加组:除了第一个组外的其他组为附加组或公共组,附加组在 /etc/group 文件中指定。
passwd:保存账户文件 shadow:影子文件,保存密码文件 #账户信息字段含义 #所有用户都能访问,只有root用户才能修改 [root@localhost ~]# head -2 /etc/passwd //查看passwd开头两个账户 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin #系统中新增的用户账户信息都保存到passwd文件的末尾,并且用 : 分隔配置字段 #第一字段:root,用户账户名,也是登陆系统时的识别名称 #第二字段:x,经过加密的用户密码字串,或者密码占位符“x”。 #第三字段:用户账户的uid号 , 0代表管理员(linux默认超级用户) #第四字段:所属基本组账户的GID号 #第五字段:用户全名,可以填写用户相关的信息说明 #第六字段:宿主目录,该用户登陆后所在的默认工作目录 #第七字段:登陆shell等信息,用户登陆完成后默认使用的shell #密码文件的字段含义 #只有root账户能够读取文件内容,不允许直接编辑内容 [root@localhost ~]# head -2 /etc/shadow root:$6$yyZahmO---::0:99999:7::: bin:*:17110:0:99999:7::: #第一字段:账户名称 #第二字段:加密的字符串信息,当位*或者!!时表示该用户不能登陆,该字段为空时,无需密码登陆 #第三字段:上次修改密码的时间,自1970-1-1算起到最近修改的时间 #第四字段:密码的最短有效期,本次改密后,至少过多少天再改密,默认0不进行限制 #第五字段:密码的最长有效期 #第六字段:提前多少天提醒用户口令过期,默认值7天 #第七字段:在密码过期多少天后禁止此用户 #第八字段:账号失效时间,指定用户作废的天数 #第九字段:保留字段,无特定用途
1.3ID
1.3.1 UID(User IDentity,用户标识号):Linux 操作系统中的每一个用户账号都有一个数字形式的身份标记,UID 号应该是唯一的。
root 用户账号的 UID 号为固定值 0;
centos 6的UID 1-499留给程序用户,500-60000分配给普通用户使用;
centos 7的UID 1-999留给程序用户,1000-60000分配给普通用户使用;
1.3.2 GID(Group IDentify,组标识号):与 UID 类似,每一个组账号也有一个数字形式的身份标记
root 组账号的 GID 号为固定值 0;
1.3.3 用户账户和组账户的关系:
主要组(基本组):有且唯一
附加组:可有可无可多个
1.4用户账户管理
1.4.1用户账户文件的位置
/etc/passwd //存放账户 /etc/shadow //存放密码
1.4.2 添加用户
格式:
useradd [选项] 用户名
选项:
选项 | 作用 |
-u |
指定用户的 UID 号,要求该 UID 号码未被其他用户使用 |
-t |
指定用户的宿主目录位置(当与-M 一起使用时,不生效) |
-e |
指定用户的账户失效时间,可使用 YYYY-MM-DD 的日期格式 |
-g |
指定用户的基本组名(或使用 GID 号) |
-G |
指定用户的附加组名(或使用 GID 号) |
-M |
不建立宿主目录,即使/etc/login.defs 系统配置中已设定要建立宿主目录。 |
-s |
指定用户的登录 Shell /sbin/nologin |
添加用户:查看是否在 passwd和shadow文件中生成信息 [root@localhost ~]# useradd 111 [root@localhost ~]# id 111 uid=1001(111) gid=1001(111) 组=1001(111) [root@localhost ~]# cat /etc/passwd |grep 111 //查看并过滤111 [root@localhost ~]# tail -1 /etc/passwd //新建一般用户在最后一行 ,查看是否添加 111:x:1001:1001::/home/111:/bin/bash [root@localhost ~]# tail -1 /etc/shadow 111:!!:19269:0:99999:7:::
1.4.3删除账户
格式:
userdel [选项] 用户名
选项:
选项 | 作用 |
-r | 将宿主目录一起删除 |
#删除用户 [root@localhost ~]# userdel -r 111 //将宿主目录一起删除 [root@localhost ~]# id 111 //查看是否删除成功 id: 111: no such user [root@localhost ~]# cd /home/ [root@localhost home]# ls suoluo
1.4.4修改账户(修改属性)
格式:
usermod [选项] 用户名
选项:
选项 | 功能 |
-l | 更改用户账号的登陆名称(login name) |
-L | 锁定用户账户 |
-u | 修改用户的UID号 |
-U | 解锁用户账户 |
-d | 修改用户的宿主目录位置 |
-e | 修改用户账户的失效使时间,可用yyyy-mm-dd的时间格式 |
-g | 修改用户的基本组名 (或使用GID号) |
-G | 修改用户的附加组名(或使用GID号) |
-s | 指定用户的登陆shell |
1.4.5密码管理
为用户账户设置密码
格式:
passwd [选项] 用户名
选项:
选项 | 作用 |
-d | 清空指用户的密码,仅使用用户名就可登陆系统 |
-l | 锁定用户帐户 |
-S | 查看用户账户的状态(是否被锁定) |
-u | 解锁用户账户 |
1.4.6用户账户的初始配置文件
~/ .bash_profile
#此文件中的命令将在该用户每次登录时被执行,他会设置一些环境变量,并且会调用该用户的~/.bashrc文件:
#此文件中的命令将在该用户每次打开新的bash shell时(包括登录系统)被执行(登录 切换 新的bash环境):
~/.bash_logout
#此文件中的命令将在该用户每次退出时bash shell时使用:
/etc/bashrc
1.5组账户账号管理
1.5.1组账户文件位置
/etc/group //保存组帐号基本信息 /etc/gshadow //保存组帐号的密码信息,基本不使用
1.5.2添加组
格式:
groupadd [选项] 组名
选项:
选项 | 作用 |
-g | 指定组id(GID) |
1.5.3删除组
格式:
groupdel 组名
1.5.4管理组
格式:
gpasswd [选项] 组名
选项:
选项 | 作用 |
-a | 向组内添加一个用户 |
-d | 从组内删除一个用户 |
-M | 定义组成员列表,用逗号分隔 |
1.5.5查询
1.finger
查询用户账户的详细信息
格式:
finger 用户名
[root@localhost /]# finger suoluo bash: finger: 未找到命令... [root@localhost /]# yum install finger -y [root@localhost /]# finger suoluo Login: suoluo Name: suoluo Directory: /home/suoluo Shell: /bin/bash Last login 二 10月 4 16:19 (CST) on pts/2 No mail. No Plan.
2.w
查询已登录到主机的用户信息
格式:
w [选项] 用户名
选项 | 作用 |
-h | 不显示输出信息格式 |
-l | 用长格式输出 |
-s | 用短格式输出,不显示登陆时间,JCPU和PCUP时间 |
-V | 显示版本信息 |
[root@localhost /]# w //显示当前登陆用户 15:29:14 up 1 day, 9:02, 1 user, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.168.61.1 12:19 2.00s 0.06s 0.02s w [root@localhost /]# w -V root //查看版本信息 w from procps-ng 3.3.10
3.who
相比较 w 命令,who 命令只能显示当前登陆的用户信息,但无法知晓每个用户正在执行的命令
who 命令默认是通过 /var/run/utmp 文件来获取登陆用户信息,但如果通过 file 指定另一个文件,则 who 命令将不再默认读取 /var/run/utmp 文件,而是读取该指定文件来获取信息
格式:
who [选项] [file]
选项:
含义 | |
---|---|
-a | 列出所有信息,相当于所有选项 |
-b | 列出系统最近启动的时间日期 |
-l | 列出所有可登陆的终端信息 |
-m | 仅列出关于当前终端的信息,who -m 命令等同于 who am i |
-q | 列出在本地系统上的用户和用户数的清单 |
-r | 显示当前系统的运行级别 |
-s | 仅显示名称、线路和时间字段信息,这是 who 命令的默认选项 |
-u | 显示当前每个用户的用户名、登陆终端、登陆时间、线路活动和进程标识 |
-T 或 -w |
4.user
[root@localhost /]# users //查看用户
root
2.文件/目录的权限和归属
① 访问权限
读取r (数字4表示): 允许查看文件内容、显示目录列表
写入w (数字2表示): 允许修改文件内容,允许在目录中新建、移动、删除文件或子目录
可执行x (数字1表示): 允许运行程序、切换目录
② 归属(所有权)
属主: 拥有该文件或目录的用户帐号
属组: 拥有该文件或目录的组帐号
文件的权限 [root@localhost /]# cd /data [root@localhost data]# touch 123 [root@localhost data]# ll 总用量 0 -rw-r--r--. 1 root root 0 10月 5 19:30 123
2.1chmod
模式法:
谁:u,g,o,a
操作:+,-,=
u //表示用户
g //表示用户组
o //表示其它
a //表示所有
2.2umask
umask 的值可以用来保留在创建文件权限
新建目录的默认权限: 777-umask
非特权用户umask默认是 002
2.3三种特殊权限
#suid [root@localhost aa]#which passwd /usr/bin/passwd [root@localhost aa]#ll /usr/bin/passwd #此处s表示当使用这个命令程序时,把当前用户当成文件的所属主 -rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd [root@localhost aa]#which vim /usr/bin/vim [root@localhost aa]#chmod u+s /usr/bin/vim #给vim加上suid权限,代表所有用户可以使用vim打开并编辑所有文件 [root@localhost aa]#ll /usr/bin/vim -rwsr-xr-x. 1 root root 2289640 8月 2 2017 /usr/bin/vim #SGID [root@localhost aa]#chmod g+s /usr/bin/vim [root@localhost aa]#ll /usr/bin/vim -rwxr-sr-x. 1 root root 2289640 8月 2 2017 /usr/bin/vim # Sticky 位 #具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权 #在目录设置Sticky 位,只有文件的所有者或root可以删除该文件 #sticky 设置在文件上无意义 #Sticky权限设定: chmod o+t DIR... chmod o-t DIR.. [root@localhost aa]#chmod o+t /opt/aa # 添加Sticky 位 [root@localhost opt]#chmod o-t /opt/aa #减少Sticky 位
3.特殊权限
ACL:Access Control List,实现灵活的权限管理
除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
CentOS7 默认创建的xfs和ext4文件系统具有ACL功能
用法: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ... -m, --modify-acl 更改文件的访问控制列表 -M, --modify-file=file 从文件读取访问控制列表条目更改 -x, --remove=acl 根据文件中访问控制列表移除条目 -X, --remove-file=file 从文件读取访问控制列表条目并删除 -b, --remove-all 删除所有扩展访问控制列表条目 -k, --remove-default 移除默认访问控制列表 --set=acl 设定替换当前的文件访问控制列表 --set-file=file 从文件中读取访问控制列表条目设定 --mask 重新计算有效权限掩码 -n, --no-mask 不重新计算有效权限掩码 -d, --default 应用到默认访问控制列表的操作 -R, --recursive 递归操作子目录 -L, --logical 依照系统逻辑,跟随符号链接 -P, --physical 依照自然逻辑,不跟随符号链接 --restore=file 恢复访问控制列表,和“getfacl -R”作用相反 --test 测试模式,并不真正修改访问控制列表属性 -v, --version 显示版本并退出 -h, --help 显示本帮助信息
4.总结:
学习对用户账户和组账户的管理(增删改查)
学习对文件或目录权限的管理
本文作者:索罗
本文链接:https://www.cnblogs.com/suoluo212/p/16734572.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步