• ②linux 特殊权限SUID


    1.特殊权限概述

    前面我们已经学习过 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 的特殊权限。这种权限有什么作用呢?或者说能干啥?别急,先往下看.....
    2.特殊权限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。
    3.特殊权限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

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

    chmod 2755 directory

    chmod g+s directory

    3.sgid作用
    1.针对用户组权限位修改,用户创建的目录或文件所属组和该目录的所属组一致。
    2.当某个目录设置了sgid后,在该目录中新建的文件不在是创建该文件的默认所属组
    3.使用sgid可以使得多个用户之间共享一个目录的所有文件变得简单。
    4.特殊权限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/

    2.sticky授权方法,1000 权限字符t(T),其他用户位的x位上设置。

    chmod 1755 /tmp

    chmod o+t /tmp

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

    chatrr 只有 root 用户可以使用,用来修改文件系统的权限属性,建立凌驾于 rwx 基础权限之上的授权。
    chatrr 命令格式:[root@bgx ~]# chattr [+-=] [选项] 文件或目录名

    选项: + 增加权限 -减少权限 =等于某个权限

    a:让文件或目录仅可追加内容

    i:不得任意更动文件或目录

    1.创建文件并设置属性

    [root@xuliangwei ~]# touch file_a file_i
    [root@xuliangwei ~]# lsattr file_a file_i
    ---------------- file_a
    ---------------- file_i

    2.使用chattr设置属性,lsattr查看权限限制

    [root@xuliangwei ~]# chattr +a file_a
    [root@xuliangwei ~]# chattr +i file_i
    [root@xuliangwei ~]# lsattr file_a file_i
    -----a---------- file_a
    ----i----------- file_i

    3.a权限,无法写入和删除文件,但可以追加数据,适合/etc/passwd这样的文件

    [root@xuliangwei ~]# echo "aa" > file_a
    bash: file_a: Operation not permitted
    [root@xuliangwei ~]# rm -f file_a
    rm: cannot remove ‘file_a’: Operation not permitted
    [root@xuliangwei ~]# echo "aa" >> file_a

    5.i权限, 无法写入,无法删除,适合不需要更改的重要文件加锁

    [root@xuliangwei ~]# echo "i" > file_i
    bash: file_i: Permission denied
    [root@xuliangwei ~]# echo "i" >> file_i
    bash: file_i: Permission denied
    [root@xuliangwei ~]# rm -f file_i
    rm: cannot remove ‘file_i’: Operation not permitted

    6.解除限制

    [root@tianyun ~]# chattr -a file100
    [root@tianyun ~]# chattr -i file200

    3.进程掩码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@xuliangwei ~]# umask
    0022
    [root@xuliangwei ~]# touch file0022
    [root@xuliangwei ~]# mkdir dir0022
    [root@xuliangwei ~]# 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@xuliangwei ~]# umask 000
    [root@xuliangwei ~]# mkdir dir000
    [root@xuliangwei ~]# touch file000
    [root@xuliangwei ~]# 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@xuliangwei ~]# vim /etc/login.defs
    UMASK 077
    [root@xuliangwei ~]# useradd dba
    [root@xuliangwei ~]# ll -d /home/dba/
    drwx------. 4 dba dba 4096 3 月 11 19:50 /home/dba/

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

  • 相关阅读:
    osip状态机分析
    配置tomcat 加载指定的jar
    oracle创建用户并指定表空间
    CentOS7通过rsync+crontab实现两台服务器文件同步
    CentOS7配置MySQL5.7主备
    CentOS7本地安装MySQL5.7
    设置mysql 事务锁超时时间 innodb_lock_wait_timeout
    获取指定年月的第一天与最后一天
    Nginx 反向代理504 Gateway Time-out
    ubuntu下安装配置apache2与php
  • 原文地址:https://www.cnblogs.com/yangtao416/p/14484609.html
Copyright © 2020-2023  润新知