zoukankan      html  css  js  c++  java
  • ②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/

  • 相关阅读:
    变量的创建和初始化
    HDU 1114 Piggy-Bank (dp)
    HDU 1421 搬寝室 (dp)
    HDU 2059 龟兔赛跑 (dp)
    HDU 2571 命运 (dp)
    HDU 1574 RP问题 (dp)
    HDU 2577 How to Type (字符串处理)
    HDU 1422 重温世界杯 (dp)
    HDU 2191 珍惜现在,感恩生活 (dp)
    HH实习 acm算法部 1689
  • 原文地址:https://www.cnblogs.com/yangtao416/p/14484609.html
Copyright © 2011-2022 走看看