首页 > 系统相关 >【8.0】Linux之特殊权限

【8.0】Linux之特殊权限

时间:2023-08-22 10:15:31浏览次数:37  
标签:8.0 lqz 文件 umask file Linux 权限 root

【一】特殊权限概述

  • 前面我们已经学习过 r(读)、w(写)、 x(执行)这三种普通权限,但是我们在査询系统文件权限时会发现出现了一些其他权限字母
  • 比如:
[root@bgx ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
  • 在属主本来应该是 x(执行)权限的位置出现了一个小写s,这是什么权限?
  • 我们把这种权限称作 SetUID 权限,也叫作 SUID 的特殊权限。
  • 这种权限有什么作用呢?或者说能干啥?别急,先往下看…..

【二】特殊权限SUID

【1】问题抛出

  • 在 Linux 系统中,每个普通用户都可以更改自己的密码,这是合理的设置。
  • 问题是
    • 普通用户的信息保存在 /etc/passwd 文件中
    • 用户的密码在 /etc/shadow 文件中
    • 也就是说,普通用户在更改自己的密码时修改了 /etc/shadow 文件中的加密密码,
  • 但是文件权限显示,普通用户对这两个文件其实都是没有写权限的
  • 那为什么普通用户可以修改自己的权限呢?……(难道学了个假的权限)
[root@bgx ~]# ll /etc/passwd
-rw-r--r-- 1 root root 6209 Apr 13 03:26 /etc/passwd
[root@bgx ~]# ll /etc/shadow
---------- 1 root root 11409 Apr 13 03:26 /etc/shadow

【2】解决方案

  • 其实,普通用户可以修改自己的密码在于 passwd 命令。
    • 该命令拥有特殊权限 SetUID,也就是在属主的权限位的执行权限上是 s。
    • 可以这样来理解它:当一个具有执行权限的文件设置 SetUID 权限后,用户在执行这个文件时将以文件所有者的身份来执行。
  • PS: 当普通用户使用 passwd 命令更改自己的密码时,实际上是在用 passwd 命令所有者 root 的身份在执行 passwd 命令,root 当然可以将密码写入 /etc/shadow 文件,所以普通用户也可以修改 /etc/shadow 文件,命令执行完成后,该身份也随之消失。

【3】示例演示

  • 举个例子,有一个用户 lamp,她可以修改自己的权限,因为 passwd 命令拥有 SetUID 权限;
  • 但是她不能査看 /etc/shadow 文件的内容,因为査看文件的命令(如 cat)没有 SetUID 权限。
  • 命令如下:
#自己可以修改自己的密码,从而改变/etc/shadow中的数据
[lamp@bgx ~]$ passwd

#但无法使用cat命令查看/etc/shadow
[lamp@bgx ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
  • 我们画一张示意图来理解上述过程

【4】例子解释

  • passwd 是系统命令,可以执行,所以可以赋予 SetUID 权限。
  • lamp 用户对 passwd 命令拥有 x(执行)权限。
  • lamp 用户在执行 passwd 命令的过程中,会暂时切换为 root 身份,所以可以修改 /etc/shadow 文件。
  • 命令结束,lamp 用户切换回自己的身份。
  • PS:
    • cat命令没有 SetUID权限,所以使用 lamp 用户身份去访问 /etc/shadow 文件,当然没有相应权限了。
  • F: 但如果将passwd命令的suid去掉会发生什么???

(2)suid授权方法4000 权限字符s(S)

  • 用户位置上的x位上设置
# chmod 4755 passwd
# chmod  u+s  passwd

(3)suid的作用

  • 1.让普通用户对可执行的二进制文件,临时拥有二进制文件的所属主权限。
  • 2.如果设置的二进制文件没有执行权限,那么suid的权限显示就是大S。
  • 3.特殊权限suid仅对二进制可执行程序有效,其他文件或目录则无效。
  • 注意: suid极度危险,不信可以尝试对vim或rm进行设定SetUID。

【三】特殊权限SGID

  • 将目录设置为sgid后,如果在该目录下创建文件,都将与该目录的所属组保持一致,演示如下
#1.建立测试目录
[root@bgx ~]# cd /tmp/ && mkdir dtest

#2.给测试目录赋予SetGID权限,检查SetGID是否生效
[root@bgx tmp]# chmod g+s dtest/ && ll -d dtest/
drwxr-sr-x 2 root root 6 Apr 13 05:21 dtest/

#3.给测试目录赋予777权限,让普通用户可以写
[root@bgx tmp]# chmod 777 dtest/

#4.切换成普通用户lamp,并进入该目录
[root@bgx tmp]# su - lamp
[lamp@bgx ~]$ cd /tmp/dtest/

#5.普通用户创建测试文件,检查文件的信息
[lamp@bgx dtest]$ touch lamp_test
[lamp@bgx dtest]$ ll
-rw-rw-r-- 1 lamp root 0 Apr 13 05:21 lamp_test

【1】sgid授权方法: 2000权限字符s(S),取决于属组位置上的x

# chmod 2755  directory 
# chmod  g+s  directory

【2】sgid作用

  • 1.针对用户组权限位修改,用户创建的目录或文件所属组和该目录的所属组一致。

  • 2.当某个目录设置了sgid后,在该目录中新建的文件不在是创建该文件的默认所属组

  • 3.使用sgid可以使得多个用户之间共享一个目录的所有文件变得简单。

【四】特殊权限SBIT

  • Sticky(SI TI KI)粘滞位目前只对目录有效,作用如下:
  • 普通用户对该目录拥有 w 和 x 权限,即普通用户可以在此目录中拥有写入权限。如果没有粘滞位,
  • 那么普通用户拥有 w 权限,就可以删除此目录下的所有文件,包括其他用户建立的文件。
  • 但是一旦被赋予了粘滞位,除了 root 可以删除所有文件,普通用户就算拥有 w 权限,也只能删除自己建立的文件,而不能删除其他用户建立的文件。
[root@bgx tmp]# ll -d /tmp/
drwxrwxrwt. 12 root root 4096 Apr 13 05:32 /tmp/

【1】sticky授权方法

  • 1000 权限字符t(T),其他用户位的x位上设置。
# chmod 1755  /tmp
# chmod o+t /tmp

【3】sticky作用

  • 1.让多个用户都具有写权限的目录,并让每个用户只能删自己的文件。
  • 2.特殊sticky目录表现在others的x位,用小t表示,如果没有执行权限是T
  • 3.一个目录即使它的权限为”777”如果是设置了粘滞位,除了目录的属主和”root”用户有权限删除,除此之外其他用户都不允许删除该目录。

【五】权限属性chattr

  • chatrr 只有 root 用户可以使用,用来修改文件系统的权限属性,建立凌驾于 rwx 基础权限之上的授权。
  • chatrr 命令格式:[root@bgx ~]# chattr [+-=] [选项] 文件或目录名
#选项: + 增加权限 -减少权限 =等于某个权限
# a:让文件或目录仅可追加内容
# i:不得任意更动文件或目录

#1.创建文件并设置属性
[root@lqz ~]# touch file_a file_i
[root@lqz ~]# lsattr file_a file_i
---------------- file_a
---------------- file_i

#2.使用chattr设置属性,lsattr查看权限限制
[root@lqz ~]# chattr +a file_a
[root@lqz ~]# chattr +i file_i
[root@lqz ~]# lsattr file_a file_i
-----a---------- file_a
----i----------- file_i

#3.a权限,无法写入和删除文件,但可以追加数据,适合/etc/passwd这样的文件
[root@lqz ~]# echo "aa" > file_a
bash: file_a: Operation not permitted
[root@lqz ~]# rm -f file_a
rm: cannot remove ‘file_a’: Operation not permitted
[root@lqz ~]# echo "aa" >> file_a

#5.i权限, 无法写入,无法删除,适合不需要更改的重要文件加锁
[root@lqz ~]# echo "i" > file_i
bash: file_i: Permission denied
[root@lqz ~]# echo "i" >> file_i
bash: file_i: Permission denied
[root@lqz ~]# rm -f  file_i
rm: cannot remove ‘file_i’: Operation not permitted

#6.解除限制
[root@tianyun ~]# chattr -a file100 
[root@tianyun ~]# chattr -i file200

【六】进程掩码umask

【1】umask是什么?

  • 当我们登录系统之后创建一个文件总是有一个默认权限的
  • 比如: 目录755、文件644、那么这个权限是怎么来的呢?
    • 这就是umask干的事情。umask设置了用户创建文件的默认权限。

【2】umask是如何改变创建新文件的权限

  • 系统默认umask为022,那么当我们创建一个目录时,正常情况下目录的权限应该是777,但umask表示要减去的值,所以新目录文件的权限应该是777 - 022 =755。
  • 至于文件的权限也依次类推666 - 022 =644。

【3】umask涉及哪些配置文件

  • umask涉及到的相关文件/etc/bashrc /etc/profile ~/.bashrc ~/.bash_profile
  • shell (vim,touch) –umask–> 会影响创建的新文件或目录权限
  • vsftpd服务如果修改–umask–> 会影响ftp服务中新创建文件或创建目录权限
  • useradd如果修改umask–> 会影响用户HOME家目录权限

【4】umask演示示例

#1.假设umask值为:022(所有位为偶数)
#文件的起始权限值
6 6 6  -  0 2 2  = 6 4 4 

#2.假设umask值为:045(其他用户组位为奇数)
#计算出来的权限。由于umask的最后一位数字是5,所以,在其他用户组位再加1。
6 6 6  -   0 4 5 = 6 2 1

#3.默认目录权限计算方法
7 7 7  -  0 2 2 = 7 5 5
 
#umask所有位全为偶数时
# umask 044
# mkdir d044   目录权限为733
# touch f044   文件权限为622

#umask部分位为奇数时
# umask 023
# mkdir d023   目录权限为754
# touch f023   文件权限为644

#umask值的所有位为奇数时
# umask 035
# mkdir d035   目录权限为742
# touch f035   文件权限为642

示例1: 在 shell 进程中创建文件

#查看当前用户的umask权限
[root@lqz ~]# umask
0022
[root@lqz ~]# touch file0022
[root@lqz ~]# mkdir dir0022
[root@lqz ~]# ll -d file0022  dir0022/
drwxr-xr-x 2 root root 6 Jan 24 09:02 dir0022/
-rw-r--r-- 1 root root 0 Jan 24 09:02 file0022

示例2: 修改 shell umask 值(临时生效)

[root@lqz ~]# umask 000
[root@lqz ~]# mkdir dir000
[root@lqz ~]# touch file000
[root@lqz ~]# ll -d dir000 file000
drwxrwxrwx 2 root root 6 Jan 24 09:04 dir000
-rw-rw-rw- 1 root root 0 Jan 24 09:04 file000

示例3: 通过 umask 决定新建用户 HOME 目录的权限

[root@lqz ~]# vim /etc/login.defs
UMASK 077
[root@lqz ~]# useradd dba
[root@lqz ~]# ll -d /home/dba/
drwx------. 4 dba dba 4096 3 月 11 19:50 /home/dba/

[root@tianyun ~]# vim /etc/login.defs
UMASK 000
[root@lqz ~]# useradd sa
[root@lqz ~]# ll -d /home/sa/
drwxrwxrwx. 4 sa sa 4096 3 月 11 19:53 /home/sa/

标签:8.0,lqz,文件,umask,file,Linux,权限,root
From: https://www.cnblogs.com/dream-ze/p/17647793.html

相关文章

  • 【7.0】Linux之基本权限
    【一】什么是权限?我们可以把它理解为操作系统对用户能够执行的功能所设立的限制,主要用于约束用户能对系统所做的操作,以及内容访问的范围,或者说,权限是指某个特定的用户具有特定的系统资源使用权力。【二】为什么要有权限?因为系统中不可能只存在一个root用户,一定会存在多个用......
  • 【9.0】Linux之软件管理
    【一】RPM介绍【1】什么是rpm?RPM全称RedHatPackageManager缩写,由红帽开发用于软件包的安装升级卸载与查询【2】rpm包名组成部分?RPM包命名以-将软件分成了若干部分bash-4.2.46-28.el7.x86_64.rpmbash:软件名4.2.46-28.el7:4是大版本,2是小版本,46是修订次数,28是发布次......
  • 【10.0】Linux之系统服务
    【一】Linux启动流程CentOS6启动级别CentOS6VSCentos7开机启动流程图解【二】Linux运行级别【1】什么是运行级别运行级别就是操作系统当前正在运行的功能级别SystemVinit运行级别systemd目标名称作用0runlevel0.target,poweroff.target关机1runlevel......
  • 【11.0】Linux之进程管理
    【一】介绍【1】什么是进程比如:开发写的代码我们称为程序,那么将开发的代码运行起来。我们称为进程。总结一句话就是:当我们运行一个程序,那么我们将运行的程序叫进程。PS1:当程序运行为进程后,系统会为该进程分配内存,以及进程运行的身份和权限。PS2:在进程运行的过程中,系......
  • 【12.0】Linux之计划任务
    【一】计划任务基本概述【1】什么是crondcrond就是计划任务,类似于我们平时生活中的闹钟。定点执行。【2】为什么要使用crondcrond主要是做一些周期性的任务,比如:凌晨3点定时备份数据。比如:11点开启网站抢购接口,12点关闭网站抢购接口。【3】计划任务主要分为以下两种使用......
  • 【3.0】Linux之网络
    【一】网络相关名字【1】子网掩码子网掩码是用于确定IP地址中网络部分和主机部分的标识符。它是一个32位的二进制数字,与IP地址进行按位与运算,用以划分IP地址的网络号和主机号。子网掩码中的1表示对应位置是网络号,而0表示对应位置是主机号。子网掩码的主要作用是用来确定局域......
  • 【2.0】Linux初识
    【一】虚拟环境搭建详解虚拟环境搭建是一种在计算机上创建和模拟多个独立操作系统实例的技术,从而使得一个物理计算机能够同时运行多个虚拟的操作系统环境。这种技术可以提供更好的资源利用、隔离性、灵活性和可移植性。【1】KVM(Kernel-basedVirtualMachine)KVM是一个基于......
  • 【1.0】Linux引入
    【一】什么是操作系统OperatingSystem(操作系统)简称OSWindows,MacOS,Linux都是操作系统操作系统(OperatingSystem)是计算机系统中的核心软件,它管理并控制计算机硬件和软件资源,为用户和应用程序提供统一的接口和环境。操作系统负责调度任务、分配内存、管理文件系统、提供......
  • CSharp在Linux上使用Tesseract-OCR
    CSharp在Linux上使用Tesseract-OCR 1主要思路在Linux环境中使用ASP.NETCore调用TesseractOCR引擎可以按照以下步骤进行操作: 1确保你已经在Linux上安装和配置了TesseractOCR引擎。2在你的ASP.NETCore项目中,使用NuGet包管理器或dotnet命令行工具将Tesseract包添加......
  • linux 单网卡双IP设置
    [root@xinyin-redis-mq-1~]#vim/etc/sysconfig/network-scripts/ifcfg-ens192TYPE="Ethernet"PROXY_METHOD="none"BROWSER_ONLY="no"BOOTPROTO="none"DEFROUTE="yes"IPV4_FAILURE_FATAL="no"IPV6INIT=......