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.总结:
学习对用户账户和组账户的管理(增删改查)
学习对文件或目录权限的管理
 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号