首页 > 系统相关 >Linux-系统权限管理

Linux-系统权限管理

时间:2023-11-04 16:22:56浏览次数:42  
标签:文件 a01 系统 用户 etc Linux 权限 目录

image

from pixiv


管理用户和组


用户账户

image
image

用户配置文件

image

image

根据man的提示我们知道在/etc/passwd下

image

如上这些字段的含义,需要注意的是在password这个字段都是x,即不显示密码



image

image
image

第一个字段是用户名
第二个字段是加密后的密码
第三个字段是最后一次密码修改的日期距离1970年的天数
...

管理用户账户

新建用户账户

image

image

useradd -g f23a55 -m -d /home/cilinmengye cilinmengye 
passwd cilinmengye
su - cilinmengye

image


新建用户账号的默认设置

使用命令man useradd进行查看帮助

image

这里需要注意的是,当我们按照用useradd这个命令去创建用户时没有指定各种参数的时候,是按照默认设置,但是结果并不是与/etc/default/useradd中的默认设置相同
这个可以看man useradd手册得到答案


image

同时还有/etc/login.defs中的设置会影响用户创建时的状态
可以通过man login.def 查看其中的man手册
image


修改用户账号

image

-L 锁定其实就是在/etc/shadow中将用户的密码字段前加上"!","!"表示字段无效
则其实锁定就是让这个用户登入不了了

  • 批量操作
    image

image

userdel tom 其只会将 /etc/passwd 和 /etc/shadow 中关于要删除用户的记录给去除,并不会删除用户的主目录和邮箱
加上选项-r可以
(find /) 是在主目录下寻找 (-user tom) 权限是tom的文件 (-exec -delete) 并删除


组账户

image
image

组配置文件

image

image



image

新建和修改组账号

  • 新建修改
    image

  • 删除
    image

组成员管理

  • 添加

image
image

  • 删除
    image

  • 批量操作
    image

切换组身份

image


超级用户权限

image

这里解释一下为何说su只适用于系统只有单一系统管理员的情况:
当使用su命令的时候,我们需要输入root用户的密码,当有单个root管理员,许多普通用户,当普通用户需要使用某个权限的时候都用su命令,也就是都要知道root用户的密码。这样容易导致root密码泄露
sudo只需要输入自己的命令,但是需要root用户进行配置文件,用户才能使用sudo命令

image

-u 表示切换到其他用户身份进行执行命令


关于sudo的配置文件

image

我们一般是去用visudo命令修改/etc/sudoers文件的
为何不去直接用vim修改/etc/sudoers文件?因为用vim去修改/etc/sudoers不会进行语法检查,但是visudo会

image


如:

image

image


限制使用su命令的配置

image




权限管理

image

文件的基本权限模型

我们在linux中可以通过如下命令:

ls -l file
ls -ld dir

看到如下信息:

image

  • 这些-rw之类的是什么意思?

image

  • 我们有没有什么办法可以改变权限?chmod!

image
image



image

其改变权限的方法有三种:

  • 以字符串符形式

    chmod u=rw-,g=r--,o=--- file
    
  • 以+-的形式

    chmod g+w,o-r file
    
  • 以数字的形式

    chmod 664 file
    

    这里每一个表示的是权限的累加,如6=4+2 表示rw-

拥有的rwx权限后我们只能读,写,执行吗?更多的思考!

image

其实都是错误的
用户对文件的权限取决于这个文件的目录给予了用户什么样的权限


当我们用ls -ld dir列出目录信息后可以看到如下:
image

其中目录权限影响我们对文件的操作映射表如下:

image


改变文件所有者和属组

image

上面chown root: file 这里:后省略了属组,这样是默认将属组为前面的文件所有者组去了
:前面省略表示不改变文件所有者


决定新建文件/目录权限的权限掩码

image

权限掩码是不同用户都有的,通过umask命令查看
比如如果是0002,在权限掩码中我们先不管最左边的0,看后3位,每一位都是8进制数。
每位从左到右分别代表的所有者权限掩码,属组用户权限掩码,其他用户权限掩码
比如上面的例子中就是000,000,010(二进制下)

新建文件/目录开始申请的权限是0666/0777,但是这是他申请的,最终其权限要与取反后的用户权限掩码进行相与才是真正得到的权限

  • 为何是与取反后的用户权限掩码进行相与?
    根据权限掩码中值为1的为对应权限被禁止,我们在计算的时候应该取反才对
    比如我们用户权限掩码为0002,这个时候这位用户创建了一个新文件,这个文件申请权限为0666
    然后我们对0002进行取反,得到7775,然后与0666相与,得到0664。
    则表示这个文件的权限为rw-rw-r--

特殊权限

这里有三种特殊权限:setuid(suid),setgid(sgid),sticky bit(sbit)
我们之前不是说要忽视权限掩码的最左边一位八进制数吗?其实最左边一位数八进制数对应的正好是这三个权限,分别为4,2,1

  • 为何需要这三种权限?

我们来思考一下如下问题:

image

本来确实我们的mike用户没有权限去修改/etc/shadow文件,但是我们设置了特殊权限suid
image

我们来看下passwd命令的权限:

image
这里的s就表示我们设置了suid权限,这样即使是mike用户也可以在运行这个程序的时候以root身份运行。(注意前提是mike用户有执行这个passwd命令(文件)的权限)

image


  • sgid
    image

  • sbit
    image

image

这里的这个t表示我们设置了sbit权限

文件扩展属性

image

image

比如如果设置了i,则表示文件不能更改(写,删除等操作)


文件访问控制列表(FACL)

  • 为何需要文件访问控制列表?

前面我们权限控制的方法无法实现指定某个特定的用户/组有权对某个指定的文件/目录进行操作
想一下,无论是我们通过chmod命令修改文件/目录的权限(无法只限定某个用户/组进行操作),
还是使用将用户加入组的方式(用户会还可以对组中其他文件/目录有权操作)

所以我们有了文件访问控制列表(FACL)


image
image

image

这里的访问控制项就是我们要指定的权限,其写法如下:
image
image

在使用setfacl后可以看到image
这里后面有"+"


一个具体案例

image

user::rw-表示文件所有者和其所在组对这个文件的权利
user:mary:rwx和group::rw-,group:groupB:r--是指定其他用户和本组用户,其他组中用户的权限
如user:mary:rwx和group::rw-,group:groupB:r--设置的权限的并集就是mask默认的权限(当然我们也可以修改mask权限)
mask的权限会反应到ls -l 的属组权限结果中

image


ACL访问权限检查算法

image

上述表明,我们其实可以通过手动设置mask权限来“压制”指定用户的权限
image
image

这三者的权限不能大于mask的权限


设置默认ACL和删除ACL

image
image

前面这个d:就表示设置默认的ACL权限了,然后在这个目录下的所有文件都会继承这个目录的默认ACL


还记得这个吗?

image

当一个文件/目录继承其父目录的默认ACL后,还要与用户的默认掩码的反码进行与操作,才是其最终的权限

训练

如何手动地创建一个用户而不用useradd命令?

首先man useradd 查看下帮助,得到一下有用信息:

image

可以看到首先第一步是会更新系统文件,那更新哪些文件呢?

可以再次在man useradd 中找到

image

  • 修改/etc/passwd文件
    man 5 passwd 可以查看passwd的一些字段
    image
    感觉不够直观,我们先随便创建一个用户test来看看他影响了哪些文件吧
    首先来看看/etc/passwd
    发现新加了如下一条记录:
    test❌1004:1004::/home/test:/bin/bash
    同时发现在我的/home下多了一个test目录!

我们仔细看看这个test目录,发现是空的
但是我们重启登入test后目录下就有如下内容
image

然后看看/etc/shadow
多了如下记录
test:$1$.3l.bjLr$F6KJTFPmMKevXNBlookOA1:19664:0:99999:7:::简单来说各个字段的含义为
用户名:密码(当然是不能看到的,所以用加密过后的密码来替代了):上一次密码改动的距离时间:密码能够被改动的最小等待时间:密码的有效时间:距离在密码快过期多少时间来提醒用户:(后面的一般用不到)
(好像密码如果是!!这样的,说明是非法的,好像不能登入)

image

再看看/etc/group
发现多了如下记录
test❌1004:

image
image

看来useradd 不但会改动/etc/passwd和/ect/shadow 这些关于用户的记录
还确实会在/home下创建用户目录
而且还会创建这个用户的组,用户作为这个组的所有者

  • 来看看/ect/gshadow,添加了如下内容
    test:!::

  • /etc/default/useradd 是默认设置没什么好说了

  • /etc/skel 我的/etc/skel是一个空文件夹,没啥好说了

  • /etc/subgid 加上了如下内容
    test:231072:65536

  • /etc/subuid 加上了如下内容
    test:231072:65536

/etc/subuid 和 /etc/subgid 是用于管理用户和组的子用户ID(Sub-User ID)和子组ID(Sub-Group ID)的配置文件

通常在Linux系统中使用。它们的作用是为用户和组分配附加的用户ID和组ID,通常与容器技术如Docker或LXC等一起使用,以确保容器内的进程能够正常运行,而不会与主机上的其他进程发生冲突。

这些文件中保存的内容指定了哪些用户或组可以使用子用户ID和子组ID范围。这有助于限制哪些用户或组可以创建容器或其他需要分配额外用户ID和组ID的任务。
字段含义为:
用户名:起始ID:范围
组名:起始ID:范围
如我这里表示/etc/subuid中的字段test:231072:65536
表示子用户的ID开始为231072~231072+65536

  • /etc/login/defs 一个配置文件没啥好说的

所以下面开始解题:
在/etc/passwd下:
image

生成密码:
image
$6$01234567$OB.0uFDHHIuZXCWlYC56JNDt30Pg6jNU/JiQsPbMALYTidZX4OITEUdawteO89njUF7EjRVDIQobP2dRCBFXI0

在/etc/shadow下:
image

image

image

附件

参照博客

  • Linux文件 profile、bashrc、bash_profile区别

image


完成公司开发项目的权限分配问题

问题描述

假设A公司的总经理兼总裁为a01-carl,公司下设4个部门:
(1)技术部(tech):部门经理为a01-tony,部门员工包括a01-t1、a01-t2,a01-t3、a01-t4,他们都属于组a01-tech,组管理员为a01-tech。
(2)市场部(marcket):部门经理为a01-mary,部门员工包括a01-m1、a01-m2,a01-m3、a01-m4,他们都属于组a01-market,组管理员为a01-marcket。
(3)服务部(service):部门经理为a01-sandy,部门员工包括a01-s1、a01-s2,a01-s3、a01-s4,他们都属于组a01-service,组管理员为a01-service。
(4)财务部(finance):部门经理为a01-frank,部门员工包括a01-f1、a01-f2,a01-f3、a01-f4,他们都属于组a01-finance,组管理员为a01-finance。
(5)各部门经理均属于a01-managers组
假设公司新承接了一个项目,项目编号为prj01,需要为该项目成立一个新项目组group01,
假设该项目组从各部门抽调如下员工参与该项目并加入组group01:
技术部:a01-t1、a01-t2
市场部:a01-m1
服务部:a01-s1
财务部:a01-f1
现在指派a01-t2为prj01的项目负责人兼group01组的组管理员,由他负责该组的管理。
指定目录/Prj01专门用于存放prj01项目的相关资料,该目录属于root用户和group01组,权限为770,并要求所有在该目录中创建的文件和目录自动属于group01组,目录中创建一个项目合同文件contract01,要求任何人不得更改、删除、移动该文件,还要创建一个prj01.log文件用于记录项目日志,要求该文件只能从尾部添加内容。另外要求允许总裁a01-carl对该目录中的文件具有读写权限,而属于a01-managers组的各部门经理均对该目录中的文件具有只读权限。

基础知识的回顾

useradd //创建新用户
groupadd //创建新组
# 需要注意的是我们在创建新用户的同时也会自动创建出组来,这个组与用户同名

gpasswd -A //为组设置管理员用户
gpasswd -a //为组添加用户
groups //查看当前用户的属组


chown // 改变文件的所有者和属组
# 需要注意的是,如果要改变dir的属组要用
如:chgrp group01 dirname


chmod //改变文件或目录的权限
|
|-当我们想要为文件设置一些独有的,特殊的权限,我们就要设置这个文件的扩展属性
 -举个例子:在某个目录下单独要求一个文件需要不能删改只能看
 -[文件扩展属性](https://www.cnblogs.com/cilinmengye/p/17758959.html#%E6%96%87%E4%BB%B6%E6%89%A9%E5%B1%95%E5%B1%9E%E6%80%A7)
 	|
	|-lsattr //查看文件扩展权限
	|-chattr +i //设置文件为只读(即不能删改只能看)
	|-需要注意的是chattr 是个很强的权限限定
	|-比如当root设置chattr +i (只读)给某个文件的时候,连root用户都无法进行修改写等操作,甚至修改这个文件的权限都不行!除非对这个文件执行chattr -i(去除只读),然后才能够操作
|
|-当我们想要在某个目录下创建文件时,这个文件的属组不属于创建者(文件本来是默认属于文件创建者的属组的),而是属于这个目录的所有者,如何办?
|-当遇到这样的奇怪要求可以思考一下文件的特殊权限
|-[文件特殊权限](https://www.cnblogs.com/cilinmengye/p/17758959.html#%E7%89%B9%E6%AE%8A%E6%9D%83%E9%99%90)
	|
	|-chmod g+s dir //让这个目录下的文件运行时(创建,执行等)是以这个目录的属组身份进行运行,则创建时文件自然是属于目录的属组
|
|-当我们想要指定某一个用户具有特殊的权限,那来看看ACL(文件访问控制列表)吧
	|
	|- getfacl //查看当前文件下的权限设置
	|- 需要注意的是这个命令显示的才真正是详细的哪些用户对这个文件有何权限,平时我们用ls -al 看的其实是"虚假"的!
|-当我们想要指定一个组中的全部用户或者是某个用户 对目录下的全部文件有特殊权限,那来看看ACL的默认权限吧
	|-比如我想要a01这个组的成员对dir01这个目录下的文件有读操作
	|-setfacl -m d:g:a01:r dir01
	|-[默认ACL](https://www.cnblogs.com/cilinmengye/p/17758959.html#%E8%AE%BE%E7%BD%AE%E9%BB%98%E8%AE%A4acl%E5%92%8C%E5%88%A0%E9%99%A4acl)

来具体讲讲上面的getfacl吧!

这里我有一个prjf23a55文件,他是属于grou01组的,同时我也有个用户f23a55-t1他也是属于group01组的,同时ls -al 显示prjf23a55对group01组成员给了rw权限,但是我作为f23a55-t1却无法写,这是什么原因?

image

是因为其实ls -al 中反应的权限并不是真实的用户组的权限,而是这些权限的并集
image

所以其实要看
image
则用户组group01的用户其实是没有写权限的,而只有读权限

标签:文件,a01,系统,用户,etc,Linux,权限,目录
From: https://www.cnblogs.com/cilinmengye/p/17758959.html

相关文章

  • Linux操作脚本说明
    查看java进程是否存在 ps-ef|grepjava-e所有进程-f全格式PS是LINUX下最常用的也是非常强大的进程查看命令查看系统日志tail-fserver.log杀进程kill-923398重启服务不显示日志./startservernohup.sh重启服务显示日志./startserver.sh......
  • Linux 下使用串口的简易教程
    1、检查串口的配置。查看串口的波特率、数据位、校验位等可以使用以下命令: $stty-F/dev/ttyS02、修改串口的配置。使用stty命令可以修改串口的波特率、数据位、校验位等选项,例如,将串口波特率修改为115200,按如下方式操作:$stty-F/dev/ttyS01152003、stty命令功......
  • 液压设备远程监控运维管理系统解决方案
    液压设备是利用液体的压力进行能量传递和控制的设备。液压设备通常由液压泵、液压缸、液压控制阀、管路和油箱等组成。在数字化车间的生产线中,通常接入PLC进行自动化控制,实现液压动力的精准供给,广泛应用于工业、制造业、建筑业、交通、军事等领域,如机床、工程机械、船舶等。对设备......
  • 名片管理系统
    以前学习python时候敲的终端交互功能,分享下cards_main.py#!/usr/bin/python3importcards_tools#无限循环,由用户主动决定什么时候退出系统!whileTrue:#TODO()显示功能菜单cards_tools.show_menu()action_str=input("请选择希望执行的操作:")print("你......
  • 基于微信小程序的短文写作竞赛管理系统-计算机毕业设计源码+LW文档
    摘 要随着世界经济信息化、全球网络化的到来推动信息线上管理的飞速发展,为短文写作竞赛行业的改革起到关键作用。若想达到安全,快捷的目的,就需要拥有信息化的组织和管理模式,建立一套合理、畅通、高效的短文写作竞赛管理系统小程序。当前的短文写作竞赛管理存在工作效率低下,人员和......
  • 基于微信小程序的上门维修系统-计算机毕业设计源码+LW文档
    摘 要随着科学研究的不断深入,有关上门维修的各种信息量也在成倍增长。面对庞大的信息量,就需要有上门维修系统来提高管理工作的效率。通过这样的系统,我们可以做到信息的规范管理和快速查询,从而减少了管理方面的工作量。建立基于微信小程序的上门维修系统,进一步提高用户对上门维......
  • 基于小程序的物流管理系统-计算机毕业设计源码+LW文档
    摘 要随着世界经济信息化、全球网络化的到来推动信息线上管理的飞速发展,为物流行业的改革起到关件作用。若想达到安全,快捷的目的,就需要拥有信息化的组织和管理模式,建立一套合理、畅通、高效的物流管理系统。当前的物流系统存在工作效率低下,人员和资源调配不充分的问题,基于信息化......
  • 二手商城系统(课设) springboot 免费源码
    项目源码获取方式放在文章末尾处项目技术数据库:Mysql5.7数据表数:6张开发工具:idea前端技术:html后端技术:Springboot+Mybatis功能简介该项目是一个校园二手商城系统,分为用户端,管理员端。管理员端:  用户管理   商品管理  分类管理  订单管理  留言管理商家端:  ......
  • 音乐推荐与管理系统Python+Django网页界面+协同过滤推荐算法
    一、介绍音乐推荐与管理系统。本系统采用Python作为主要开发语言,前端使用HTML、CSS、BootStrap等技术搭建界面平台,后端使用Django框架处理请求,并基于Ajax等技术实现前端与后端的数据通信。在音乐个性推荐功能模块中采用通过Python编写协同过滤推荐算法模块,实现对当前登录用户的个性......
  • CH32V307 使用PLL2配置系统时钟
    在进行系统时钟配置时,可以选择HSI、HSE、PLL作为系统时钟来源。而PLL时钟来源有几下几种,如下图: 以下为CH32V307时钟树框图,如下图: 关于使用HSE或HSI作为系统时钟,在CH32V307EVT都有相应例程,在system_ch32v30x.c文件中直接使用相关宏定义即可,如下图: 本篇文章主要讲解使......