【Linux】权限相关知识点

思考

我们平时使用Linux创建文件或目录时的默认权限是多少?

[root@localhost test]# mkdir dir 
[root@localhost test]# touch file
[root@localhost test]# ll
total 0
drwxr-xr-x 2 root root 6 Mar  8 15:23 dir   #755
-rw-r--r-- 1 root root 0 Mar  8 15:23 file  #644

可以看到文件创建时获得的权限是644
目录创建时获得的权限是755


通过对上面问题的思考,我们现在引入下面的概念:

umask

默认情况下内核给文件分配的权限是666,给目录分配的权限是777
而用户创建文件或目录时,会与umask的掩码相减获得对应的权限值
如下所示掩码值为0022
那么创建文件时就是,666-022=644
创建目录时为,777-022=755

[root@localhost test]# umask 
0022
[root@localhost test]# umask -S
u=rwx,g=rx,o=rx

接下来我们试着修改umask的值,再去创建文件和目录会发生什么?

[root@localhost test]# umask 0777
[root@localhost test]# mkdir new_dir
[root@localhost test]# touch new_file
[root@localhost test]# ll
total 0
drwxr-xr-x 2 root root 6 Mar  8 15:23 dir
-rw-r--r-- 1 root root 0 Mar  8 15:23 file
d--------- 2 root root 6 Mar  8 15:45 new_dir
---------- 1 root root 0 Mar  8 15:49 new_file

可以看到新的文件于目录的权限全部为000了。


umask的值,默认是在/etc/profile中的脚本初始化后得到的

cat /etc/profileif [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; thenumask 002
elseumask 022
fi

chmod

格式1:
用户类别
u: 所有者(user)
g: 所属组(group)
o: 其他用户(others)
a: 所有用户(等同于 ugo,默认值)
操作符
+: 添加权限
-: 移除权限
=: 直接设置权限(覆盖原有权限)

chmod u+x file        # 给所有者添加执行权限  
chmod go-w file       # 移除组和其他用户的写权限  
chmod a=rw file       # 所有用户设置为读写权限  
chmod -R o+rX dir     # 递归给其他用户添加读权限,目录加执行权限  

格式2:
权限计算
将权限对应的数值相加:
r (读) = 4
w (写) = 2
x (执行) = 1

chmod nnn 文件或目录
chmod 777 dir_file

目录权限:
目录的 x 权限表示可进入(cd),r 权限表示可列出内容。
若目录无 x 权限,即使有 r 权限也无法读取内部文件列表。

chown

必须是root
用户和组必须存在
格式:

chown 所有者 文件
chown :所属组 文件
chown 所有者:所属组 文件chown luobozi:atri /home/ytl

chgrp

必须是root或者文件的所有者
必须是新的组的成员
格式:

chgrp 所属组 文件

查看常见目录的权限

[root@localhost perm]# ll /home
total 0
drwx------ 2 kotonghitoli bondband  62 Mar  7 14:57 gdyg
drwx------ 2 luobozi      luobozi   62 Mar  7 10:50 luobozi
drwx------ 2 luobozi_1    luobozi_1 62 Mar  7 16:17 luobozi_1
drwx------ 2 luobozi_2    luobozi_2 62 Mar  7 16:17 luobozi_2
drwx------ 2 luobozi_3    luobozi_3 62 Mar  7 16:17 luobozi_3
drwx------ 2 luobozi_4    luobozi_4 62 Mar  7 16:17 luobozi_4
drwx------ 2 luobozi_5    luobozi_5 62 Mar  7 16:17 luobozi_5
[root@localhost perm]# ll -d /
dr-xr-xr-x. 22 root root 4096 Mar  8 16:28 /
[root@localhost perm]# ll -d /root
dr-xr-x---. 15 root root 4096 Mar  8 15:23 /root
[root@localhost perm]# ll -d /tmp/
drwxrwxrwt. 9 root root 255 Mar  8 16:30 /tmp/

sudo授权

在Linux中root用户的权限最大
普通用户的权限很小,那么如何让普通用户也具有一定的权限呢?
修改配置文件,使得普通用户可以使用sudo提权

1.创建一个king用户,使他可以使用sudo提权执行所有命令

root@localhost ~]# useradd king
[root@localhost ~]# echo "123456" |passwd king --stdin
Changing password for user king.
passwd: all authentication tokens updated successfully.#添加如下内容
vim /etc/sudoers
king    ALL=(ALL)       ALL#使用sudo 提权查看root的家目录
su - king
Last login: Sat Mar  8 17:13:00 CST 2025 on pts/1
[king@localhost ~]$ sudo ls /root
[sudo] password for king: 
2025-1-14  anaconda-ks.cfg    dbbackup    functions  grep_file  shell  shell_bk_db   while_read.sh

2.定义命令别名USERADMINS包含useradd、userdel、passwd、groupadd、groupdel命令

#添加如下内容
vim /etc/sudoers
Cmnd_Alias USERADMINS = /usr/sbin/useradd, /usr/sbin/userdel, /usr/bin/passwd,/usr/sbin/groupadd,/usr/sbin/groupdel

3.新建用户组k,里面的成员有mikoto、reisi、weissman
设置sudoers文件允许k组里的成员可以使用USERADMINS命令别名里的命令,在任何机器上

[root@localhost ~]# groupadd k
[root@localhost ~]# useradd mikoto -G k
[root@localhost ~]# useradd reisi -G k
[root@localhost ~]# useradd weissman -G k
[root@localhost ~]# echo "123456" |passwd mikoto --stdin
[root@localhost ~]# echo "123456" |passwd reisi --stdin
[root@localhost ~]# echo "123456" |passwd weissman --stdin
vim  /etc/sudoers
%k ALL = USERADMINS

验证是否成功:

[root@localhost ~]# su - weissman
[weissman@localhost ~]$ sudo useradd neko -G weissmanWe trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:#1) Respect the privacy of others.#2) Think before you type.#3) With great power comes great responsibility.[sudo] password for weissman: 
[weissman@localhost ~]$ id neko
uid=3013(neko) gid=3015(neko) groups=3015(neko),3012(weissman)

selinux

是Linux系统里的安全子系统(security linux)
它可以限制哪些进程能访问哪些类型的文件
默认情况下它是开启状态,一般情况下我们都是将它关闭的,修改配置文件永久关闭

[root@localhost ~]# cat /etc/selinux/config # This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted [root@localhost ~]# setenforce 0 临时关闭命令
[root@localhost ~]# getenforce 
Disabled

chattr

设置文件的隐藏属性
选项 [+-] 加是授予 减是取消
-R 递归修改
+i 锁定文件,任何人都不能改动,包括root用户
+a 设置文件只能增加,不能修改和删除

[root@localhost ~]# mkdir test1
[root@localhost ~]# chattr +i test1/
[root@localhost ~]# lsattr -d test1
----i----------- test1
[root@localhost ~]# mkdir test1/dir1
mkdir: cannot create directory ‘test1/dir1’: Permission denied
[root@localhost ~]# chattr -i test1
[root@localhost ~]# mkdir test1/dir1
[root@localhost ~]# ll test1
total 0
drwxr-xr-x 2 root root 6 Mar  8 18:05 dir1

lsattr

查看文件的隐藏属性
-R 递归修改
-d 查看目录本身的属性

[root@localhost ~]# lsattr -d test1
----i----------- test1

SET位权限特别权限位

SUID (4): 文件以所有者权限执行(如 /usr/bin/passwd)。
SGID (2): 目录中新文件继承组权限。
粘滞位 (1): 仅文件所有者可删除目录内文件(如 /tmp)。

suid:如果摸个文件具有suid权限位,普通用户在执行这个命令的时候,会以文件拥有者身份去执行
粘滞位(sticky)

使用chmod修改set位

[root@localhost ~]# ll /bin/passwd 
-rwsr-xr-x. 1 root root 27856 Apr  1  2020 /bin/passwd
#可以看到passwd的执行位置就是s

修改mkdir的suid权限位置
注意观察属主的执行位置的权限变化
第1位(可选)
(SUID=4,SGID=2,粘滞位=1)

[root@localhost ~]# chmod u+s /bin/mkdir
[root@localhost ~]# ll /bin/mkdir 
-rwsr-xr-x. 1 root root 79768 Aug 20  2019 /bin/mkdir[root@localhost ~]# chmod 0755 /bin/mkdir 
[root@localhost ~]# ll /bin/mkdir 
-rwxr-xr-x. 1 root root 79768 Aug 20  2019 /bin/mkdir[root@localhost ~]# chmod 4755 /bin/mkdir 
[root@localhost ~]# ll /bin/mkdir 
-rwsr-xr-x. 1 root root 79768 Aug 20  2019 /bin/mkdir

ACL访问控制列表

一个文件/目录的访问控制列表,可以针对任意指定的用户/组使用权限字符分配rwx权限

setfacl

格式 setfacl 选项 规则 文件
-m 新增或修改ACL中的规则
-b 删除所有ACL规则
-x 删除指定的ACL规则

setfacl -m user:(uid/name):(perms)  #指定某个使用者的权限
setfacl -m group:(uid/name):(perms) #指定某一个群组的权限
setfacl -m other::(perms)  #指定其它使用者的权限
setfacl -m mask::(perms)   #设定有效的最大权限

user、group、other、mask简写为:u,g,o,m
perms使用rwx

[root@localhost test]# setfacl -m u:luobozi:rw test.txt
[root@localhost test]# getfacl test.txt
# file: test.txt
# owner: root
# group: root
user::rw-
user:luobozi:rw-
group::r--
mask::rw-
other::r--

getfacl

格式:getfacl 文件

[root@localhost test]# getfacl test.txt
# file: test.txt
# owner: root
# group: root
user::rw-
user:luobozi:rw-
group::r--
mask::rw-
other::r--

acl练习

  1. 创建三个组homura 、silver、scepter4
  2. 创建三个用户,anna属于homura组,seri属于scepter4组,neko属于silver组
  3. 在根目录下创建新目录sword,再将/etc/passwd文件复制到sword目录下
  4. 设置权限,passwd文件能被homura组读写,seri这个用户能读写执行,neko这个用户不能进行任何操作。
[root@localhost test]# groupadd homura
[root@localhost test]# groupadd silver
[root@localhost test]# groupadd scepter4
[root@localhost test]# useradd -G homura anna
[root@localhost test]# useradd -G scepter4 seri
[root@localhost test]# useradd -G silver neko[root@localhost sword]# mkdir /sword
[root@localhost ~]# chmod 777 /sword/
[root@localhost sword]# cp /etc/passwd /sword[root@localhost sword]# setfacl -m g:homura:rw passwd
[root@localhost sword]# setfacl -m u:seri:rwx passwd
[root@localhost sword]# setfacl -m u:neko:--- passwd[root@localhost sword]# getfacl passwd
# file: passwd
# owner: root
# group: root
user::rw-
user:seri:rwx
user:neko:---
group::r--
group:homura:rw-
mask::rwx
other::r--

验证结果

[root@localhost sword]# su neko
neko@localhost sword]$ echo "hellp" >> passwd
bash: passwd: Permission denied
[neko@localhost sword]$ cat passwd
cat: passwd: Permission denied[root@localhost sword]# su seri
[seri@localhost sword]$ ./passwd   #可以执行
./passwd: line 1: root:x:0:0:root:/root:/bin/bash: No such file or directory
[seri@localhost sword]$ echo "hello" >> passwd
[seri@localhost sword]$ tail -1 passwd
hello[root@localhost sword]# su anna
[anna@localhost sword]$ ./passwd   #无法执行
bash: ./passwd: Permission denied
[anna@localhost sword]$ echo "hello,anna" >> passwd
[anna@localhost sword]$ tail -1 passwd
hello,anna

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/30686.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用Deepseek写一个五子棋微信小程序

在当今快节奏的生活中,休闲小游戏成为了许多人放松心情的好选择。五子棋作为一款经典的策略游戏,不仅规则简单,还能锻炼思维。最近,我借助 DeepSeek 的帮助,开发了一款五子棋微信小程序。在这篇文章中,我将…

Qwen2.5-7B-Instruct进行自我认知微调

使用镜像: modelscope/ms-swift/swift_lora_qwen2:v1 数据集和模型下载: 数据集内容: 启动命令: CUDA_VISIBLE_DEVICES0 \ swift sft \ --model Qwen/Qwen2.5-7B-Instruct \ --train_type lora \ --dataset AI-Mod…

百问网提供的烧写工具将各镜像文件烧写到eMMC存储器的各脚本的解析

重要说明:本文的烧写目标存储器是eMMC存储器 百问网提供的烧写工具不仅可以把各镜像文件烧写到eMMC存储器,还可以烧写到NADN,SD卡等存储设备,如下图所示: 但是本文的烧写目标存储器是eMMC存储器,这点是前提&#xff…

android studio开发文档

android基本样式 1.文本 2.设置文本大小 3.字体颜色 背景 资源文件 xml’引用资源文件 4.视图宽高 5.间距 6.对齐方式 常用布局 1.linearLayout线性布局 2.相对布局 RelativeLayout 3.网格布局GridLayout 4.scrollview滚动视图 Button 点击事件与长按事件 长按 按钮禁用与…

Unity Dots

文章目录 什么是DotsDOTS的优势ECS(实体组件系统)Job System作业系统Burst编译器最后 什么是Dots DOTS(Data-Oriented Technology Stack)是Unity推出的一种用于开发高性能游戏和应用的数据导向技术栈,包含三大核心组件…

Flink-DataStreamAPI-执行模式

一、概览 DataStream API支持不同的运行时执行模式,我们可以根据用例的要求和作业的特征进行选择。 STREAMING执行模式:被称为“经典”执行模式为,主要用于需要持续增量处理并且预计无限期保持在线的无界作业BATCH执行模式:类似…

DeepSeek DeepEP学习(三)normal dispatch

上节介绍了normal kernel执行过程中会分成两部分,第一步通过notify_dispatch计算meta信息,然后本节介绍数据dispatch的过程。 notify_dispatch过程中会计算其他所有rank发送给当前rank多少token,写入到host的moe_recv_counter_mapped&#x…

mysql创建数据库和表

登录 MySQL 并选择数据库 登录 MySQL 命令行:mysql -u root -p 查看所有数据库:SHOW DATABASES; 创建数据库:CREATE DATABASE my_database; 查看数据库是否创建成功:SHOW DATABASES; 选择数据库:USE 你的数据库名…

Python 实现图片提取文字

文章目录 一、效果图 二、库安装 三、使用示例 四、完整代码 一、效果图 使用的图片: 返回文字: 二、库安装 pip install easyocr opencv-python numpy 三、使用示例 ocr EasyOCRProcessor() results ocr.extract_text("test.png",&…

根目录下的两个包相互没有import成功

问题1: import models 或者import models.Models不成功 问题2:在项目名称后面出现unnamed的提示 查阅资料,说错误可能是:.idea 文件夹配置缺失或损坏 PyCharm 的项目配置信息(包括名称)存储在 .idea 目录中…

什么样的物联网框架适合开展共享自助KTV唱歌项目?

现在物联网的广泛应用,也让更多用户们看到了它的实力,也使得共享经济遍地开花。其中共享自助唱歌设备也备受欢迎,那么适合开展共享自助KTV唱歌项目的物联网框架都应具备哪些特点呢? 智能化与自动化管理 物联网技术在共享KTV中的应…

《白帽子讲 Web 安全》之深入同源策略(万字详解)

目录 引言 一、同源策略基础认知 (一)定义 (二)作用 (三)作用机制详解 二、同源策略的分类 (一)域名同源策略 (二)协议同源策略 (三&…

【Linux篇】调试器-gdb/cgdb使用

📌 个人主页: 孙同学_ 🔧 文章专栏:Liunx 💡 关注我,分享经验,助你少走弯路! 文章目录 1. 前言2.关于gdb2.1 快速认识gdb2.2 安装cgdb2.3 gdb命令2.4 调试 & 断点 3.常见技巧3.…

推荐一些免费开源支持Vue3甘特图组件

文章目录 前言一、dhtmlxGantt二、frappe-gantt三、vue-ganttastic四、gantt-elastic五、v-gantt六、vue-gantt-schedule-timeline-calendar七、vue-gantt八、总结 前言 在现代项目管理和任务调度中,甘特图是一种非常实用的工具。它能够直观地展示任务的时间安排、…

十大数据科学Python库

十大数据科学Python库 1、NumPy:脊髓2、Pandas:数据操纵专家3、Matplotlib:艺术之魂4、Scikit-Learn:瑞士军刀5、TensorFlow:聪明的家伙6、PyTorch:叛逆者7、Selenium:操纵大师8、NLTK&#xff…

【C++初阶】类与对象(下)

目录 再探构造函数:初始化列表 使用方法: 特点: 1、初始化列表是每个成员变量定义初始化的地方 2、每一成员变量在初始化列表只出现一次 3、必须在初始化列表中出初始化的成员变量 4、成员变量给缺省值 5、在构…

Android设备是如何进入休眠的呢?

首先我们手机灭屏后,一般需要等一段时间CPU才真正进入休眠。即Android设备屏幕暗下来的时候,并不是立即就进入了休眠模式;当所有唤醒源都处于de-avtive状态后,系统才会进入休眠。在手机功耗中从灭屏开始到CPU进入休眠时间越短&…

多线程知识概述

目录 1. 基本知识概述 2. 多线程概述 2.1 优点 2.2 使用场景 3. 创建线程 3.1 继承 Thread 类 3.2 实现 Runnable 接口 3.3 比较 3.4 创建 Callable 接口 3.5 使用线程池 4. Thread 类常用方法 5. 线程生命周期 6. 线程安全机制 6.1 同步代码块 6.2 同步方法 6.3 …

elasticsearch是哪家的

Elasticsearch:数据搜索与分析的领航者 在当今这个信息爆炸的时代,快速且准确地处理海量数据成为了众多企业和组织追求的目标。而Elasticsearch正是在这个背景下脱颖而出的一款强大的开源搜索引擎。它是由位于美国加利福尼亚州的Elastic公司所开发和维护…

Spring学习笔记:工厂模式与反射机制实现解耦

1.什么是Spring? spring是一个开源轻量级的java开发应用框架,可以简化企业级应用开发 轻量级 1.轻量级(对于运行环境没有额外要求) 2.代码移植性高(不需要实现额外接口) JavaEE的解决方案 Spring更像是一种解决方案,对于控制层,它有Spring…