chmod 2770 /home/admins,刚看到这个命令,有点不解,后边770分别表示用户,组,其他人,前面的2不知道代表的是什么意思。百度之后发现2是代表八进制数,也是一种权限,它的三个bit的含义分别是SUID,SGID,SBIT

参考博客:https://czj.so/385/chmod%E7%9A%84%E7%AC%AC%E5%9B%9B%E4%BD%8D%E6%95%B0.html

文件权限表示:

文件类型:

文件特殊权限:

1. SUID

  SUID是一种对二进制程序进行设置的特殊权限。可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。PS:这里的执行权限指x。

  例如:所有用户可以执行passwd命令修改自己密码,但是密码保存在/etc/shadow文件中,该文件默认权限为000,除了root用户以外,其他用户都没有查看或编辑该文件的权限。但如果在执行passwd命令时加上SUID特殊权限,就可以使普通用户对该文件获得临时的所有者身份,将密码写入该文件中。如:皇上授予大臣的尚方宝剑,见此剑如见皇上。大臣能使用该宝剑严惩贪官,但并不代表他就是皇上。所以在这里是一种有条件、临时的特殊权限授权方法。

PS:文件属主的x权限,用s代替.表示被设置了SUID。如果属主位没有x权限,会显示为大写S,表示有故障(权限无效)

在理解特殊权限之前,需要先具备几个关于安全上下文的认知:

前提:进程有属主和属组;文件有属主和属组;

1) 任何一个可执行程序文件能不能启动为进程:取决于发起者对程序文件是否拥有执行权限;

2) 启动为进程之后,其进程的属主为发起者;进程的属组为发起者所属的组;

3) 进程访问文件时的权限,取决于进程的发起者:

  a) 进程的发起者,同文件的属主:则应用文件属主权限;

  b) 进程的发起者,属于文件的属组;则应用文件属组权限;

  c) 应用文件“其它”权限;

  通常情况下普通用户test启动vim后,系统会创建一个以当前用户test为属主属组的vim进程。此时vim进程的属主属组为test:test,由于无论是属主还是属组都不具有对/etc/passwd的编辑权限。所以这个vim进程无权编辑/etc/passwd。而给/usr/bin/vim设置了SUID之后,test或任何用户启动vim程序时,系统创建的vim进程的属主则是取了/usr/bin/vim这个程序文件自身的属主root,所以此时vim进程的属主属组为root:test。系统检查发现正好匹配了/etc/passwd的属主,于是放行vim进程。其他命令同理。

权限设置:

# 字母表示法
chmod u+s 文件名
chmod u-s 文件名 # 数字表示法
# 添加SUID权限到二进制程序文件(添加到DIR无意义)在普通三位数字权限位之前,用4代表添加的SUID位
chmod 4755 文件
chmod 0xxx 文件 # 可以删除文件的SUID(无法删除目录的SUID)

2. SGID

  SGID其功能有两点。一是让执行者临时拥有属组的权限,和SUID一样只对拥有二进制的执行文件有效。二是在某目录中创建的文件自动继承该目录的用户组(只对目录进行设置)。

  例如/usr/sbin/sendmail.sendmail文件,权限如下:

格式:

# 字母表示法
chmod g+s 目录/文件...
chmod g-s 目录/文件... # 数字表示法
# 在普通数字权限位前,用2代表添加SGID位
chmod 2755 DIR/FILE # 添加SGID到目录或文件
chmod 0755 DIR/FILE 删除文件的SGID,(目录不受影响)
chmod 755 DIR/FILE 同上

实例:

# 给目录赋予SGID权限
# 1.使用普通用户test1登录。创建目录并分权限
[test1@VM_0_10_centos test]$ mkdir /tmp/dir1
[test1@VM_0_10_centos test]$ chmod 2777 /tmp/dir1/
[test1@VM_0_10_centos test]$ ll -d /tmp/dir1/
drwxrwsrwx 2 test1 test1 4096 Nov 25 17:17 /tmp/dir1/ # 2.使用普通用户test2,在该目录下创建文件和目录
[test2@VM_0_10_centos dir1]$ touch test2file.txt
[test2@VM_0_10_centos dir1]$ mkdir test2dir
[test2@VM_0_10_centos dir1]$ ll
total 4
drwxrwsr-x 2 test2 test1 4096 Nov 25 17:20 test2dir
-rw-rw-r-- 1 test2 test1 0 Nov 25 17:20 test2file.txt

PS:结果显示,test2在dir1目录下创建的文件和目录都自动继承了test1的属组,而且新目录的权限也继承了SGID。所以设定了SGID的目录中的所有新建文件和目录都会自动属于组test1.

# 新建/tmp/test目录,要求 openstack 和docker 用户对其有写权限,且在目录创建的文件的属组都为cloud组;要求每一个用户不能删除别人的文件,但可以编辑
[root@VM_0_10_centos~]# mkdir /tmp/test
[root@VM_0_10_centos~]# groupadd cloud
[root@VM_0_10_centos~]# useradd openstack -g cloud
[root@VM_0_10_centos~]# useradd docker -g cloud
[root@VM_0_10_centos~]# chown :cloud /tmp/test
[root@VM_0_10_centos~]# chmod o+t /tmp/test
[root@VM_0_10_centos~]# chmod g+s /tmp/test/
[root@VM_0_10_centos~]# ls -ld /tmp/test
drwxr-sr-t. 2 root cloud 4096 Mar 14 10:22 /tmp/test

SBIT(Sticky Bit)

  SBIT称之为特殊权限位之粘滞位。确保用户只能删除自己的文件,而不能删除其他用户的文件。相当于对某目录设置SBIT之后,该目录中的文件只能被其所有者执行删除操作。

  1. 对于一个多人可写的目录,如果设置了sticky,则每个用户仅能删除和改名自己的文件或目录;
  2. 只能作用在目录上.普通文件设置无意义,且会被linux内核忽略
  3. 用户在设置Sticky权限的目录下新建的目录不会自动继承Sticky权限

  如/tmp目录是一个公共共享的目录。

格式:

# 字母表示法:
chmod o+t 目录...
chmod o-t 目录...
chmod +t 目录... # 数字表示法:
# 在普通数字权限位前,用1代表添加Sticky位
chmod 1755 目录

实例:

# 在系统中创建一个很多用户可以共同使用的目录,但是要求用户之间不能互相删除改
# 1.创建共享的目录
[root@VM_0_10_centos test]# mkdir shareSBIT
[root@VM_0_10_centos test]# chmod 1777 shareSBIT/
[root@VM_0_10_centos test]# ll -d shareSBIT/
drwxrwxrwt 2 root root 4096 Nov 25 17:32 shareSBIT/
# 2.登录其他两个用户创建文件或目录(test1,test2)
[test1@VM_0_10_centos shareSBIT]$ touch test1file
[test1@VM_0_10_centos shareSBIT]$ ll
total 0
-rw-rw-r-- 1 test1 test1 0 Nov 25 17:33 test1file
[root@VM_0_10_centos shareSBIT]# su test2
[test2@VM_0_10_centos shareSBIT]$ touch test2file
[test2@VM_0_10_centos shareSBIT]$ ll
total 0
-rw-rw-r-- 1 test1 test1 0 Nov 25 17:33 test1file
-rw-rw-r-- 1 test2 test2 0 Nov 25 17:34 test2file
# 3.测试。在test2用户中删除test1创建的文件(修改,移动同样)
[test2@VM_0_10_centos shareSBIT]$ rm -rf test1file
rm: cannot remove ‘test1file’: Operation not permitted

补充:chmod和chown设置文件权限和设置用户和组

chmod

  用于设置文件或目录权限。

格式:

chmod [选项] 权限 文件或目录

PS:对目录需要加上-R参数,表示递归

chown

  用于设置用户和组。

格式:

chown [选项] 所有者:所属组 文件或目录名

PS:对目录需要加上-R参数,表示递归

总结:

  SUID作用于文件、SGID作用于文件和目录、SBIT作用于目录

添加权限需注意:

# 字母权限法很灵活,无论目录还是文件都可以随意添加删除超级权限
chmod u+s ... 添加SUID
chmod g+s ... 添加SGID
chmod +s ...同时添加SUID和SGID
chmod -s ...同时删除SUID和SGID
chmod o+t ...添加Sticky
chmod +t ...同上 # 数字权限表示法添加/删除时:
# 数字权限法可以同时删除文件的所有三种超级权限
chmod 0755 FILE
chmod 755 FILE # 数字权限法只能删除目录的Sticky.不能删除目录的SUID和SGID.
# 数字权限法每次只能设置一种超级权限.添加权限时:对于文件,会删除掉原有的其他超级权限。对于目录,添加SUID或SGID时,Sticky会被删除.
# 所有表示为大写字母的权限均为无效(故障)权限,因为缺少了相应的x权限. #几个权限位映射参考:
SUID: user, 占据属主的执行权限位;
s: 属主拥有x权限 S:属主没有x权限 SGID: group, 占据group的执行权限位;
s: group拥有x权限 S:group没有x权限 Sticky: other, 占据ohter的执行权限位;
t: other拥有x权限
T:other没有x权限

【linux命令 】文件特殊权限(SUID、SGID、SBIT)的更多相关文章

  1. CentOS 文件特殊权限SUID,SGID,SBIT

    1.SUID ,是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有所有者的权限(仅对拥有执行权限的二进制程序有效). (1)SUID权限仅对二进制程序有效: (2)本权限仅在执行该 ...

  2. Linux 文件特殊权限 SUID SGID SBIT

    文件除了常规的权限r, w, x 还有一些特殊的权限,s与t权限,具体的用处如下 1 SetUID 当s 这个标志出现在文件所有者的x权限上时, 例如/usr/bin/passwd, [root@or ...

  3. 【Linux】文件特殊权限 SUID/SGID/Sticky Bit

    linux中除了常见的读(r).写(w).执行(x)权限以外,还有3个特殊的权限,分别是setuid.setgid和stick bit 1.setuid.setgid 先看个实例,查看你的/usr/b ...

  4. chmod 4777? 文件特殊权限 SUID SGID StickyBit

    故事引入 今天碰到了一条指令, test 怎么在777前还有一位,颠覆了我的认知啊,这时候必须翻鸟哥神书了,找到一个链接<7.4.3 文件特殊权限:SUID/SGID/Sticky Bit> ...

  5. Linux 特殊权限 SUID,SGID,SBIT

    setuid 和 setgid 分别是 set uid ID upon execution 和 set group ID upon execution 的缩写.我们一般会再次把它们缩写为 suid 和 ...

  6. linux 文件三大特殊权限(SUID SGID SBIT)

    SGID(这个应该是文件共享里面最常用权限管理手段) 作用于目录或可执行程序,作用于目录代表在此目录创建的文件或目录,默认的属组继承此目录的属组.例如 我这个testgroup 没有设置SGID .我 ...

  7. Linux下文件的权限

    一.Linux下查看文件属性 命令为: [root@localhost ~]# ls -al 结果: ls是『list』的意思,重点在显示文件的文件名与相关属性.而选项『-al』则表示列出所有的文件详 ...

  8. Linux文件与目录的默认权限与隐藏权限 - umask, chattr, lsattr, SUID, SGID, SBIT, file

    文件默认权限:umask [root@www ~]# umask 0022 <==与一般权限有关的是后面三个数字! [root@www ~]# umask -S u=rwx,g=rx,o=rx ...

  9. centos 特殊权限 各种搜索命令 lsattr ,chattr,suid,sgid,sbit,file,type是否是内置命令,stat文件属性 ,whereis,locate,find,ln 内部命令和外部命令 第五节课

    centos 特殊权限 各种搜索命令 lsattr ,chattr,suid,sgid,sbit,file,type是否是内置命令,stat文件属性 ,whereis,locate,find,ln   ...

  10. 文件的特殊权限(SUID,SGID,SBIT)

    文件的一般权限:r w x  对应 421  文件的特殊权限:SUID SGID SBIT对应 421  文件的隐藏权限:chattr设置隐藏权限,lsattr查看文件的隐藏权限. 文件访问控制列表: ...

随机推荐

  1. python爬虫--多任务异步协程, 快点,在快点......

    多任务异步协程asyncio 特殊函数: - 就是async关键字修饰的一个函数的定义 - 特殊之处: - 特殊函数被调用后会返回一个协程对象 - 特殊函数调用后内部的程序语句没有被立即执行 - 协程 ...

  2. 建议2:注意Javascript数据类型的特殊性---(1)防止浮点数溢出

    1.防止浮点数溢出 二级制的浮点数不能正确地处理十进制的小数,因此 0.1+0.2不等于0.3 num = 0.1+0.2; //0.30000000000000004 这是JavaScript中经常 ...

  3. 牛客NOIP暑期七天营-提高组5+普及组5

    ————提高组———— 第一题:deco的abs 题目链接:https://ac.nowcoder.com/acm/contest/934/A 因为每个数都可以加任意次 d ,所以可以推出 0 < ...

  4. Android Studio 安装教程

    前言 前段时间周围有很多认识的人学习Android,看蛮多人在装Android Studio,然而看他们装的过程不是那么顺利?然后也有高中同学来问我,于是乎就自己也试着去装了下,也方便日后学习Andr ...

  5. C# 中的栈和堆

    程序运行时,它的数据必须存储在内存中.一个数据项需要多大的内存.存储在内存中的什么位置.以及如何存储都依赖于该数据项的类型. 运行中的程序使用两个内存区域来存储数据:栈和堆. 栈 栈是一个内存数组,是 ...

  6. gdisk转fdisk

    分区测试的时候发现之前用gdisk分区之后,就无法用fdisk进行分区了,哪怕格式化了也不行,通过fdisk 查看硬盘,发现硬盘都变成了GPT分区,无法通过fdisk进行分区操作,所以要通过parte ...

  7. 精通awk系列(14):细说awk中的变量和变量赋值

    回到: Linux系列文章 Shell系列文章 Awk系列文章 awk变量 awk的变量是动态变量,在使用时声明. 所以awk变量有3种状态: 未声明状态:称为untyped类型 引用过但未赋值状态: ...

  8. unittest---unittest封装方法

    前面我们写了一个关于查询歌曲的接口测试,但是代码重复性比较大,进行一次简单的优化 封装方法 在编写自动化脚本的时候,都要求代码简介,上一篇unittest---unittest断言中代码重复性比较多, ...

  9. js解决客户端与服务器时间不一致的问题

    引出 最近在写一个项目时,要根据时间进行不同的展示,直接用new Date().getTime()获取当前时间,结果就出问题了.有些用户擅自修改自己的本地时间,导致获取到的时间并不是当前时间,尴尬. ...

  10. Java用广度优先搜索快速搜索文件

    背景 在开发的过程中,经常需要在文件系统里按某些条件搜索文件,比如音乐播放器扫描音乐,而搜索文件,大多人喜欢用递归的方式,而这也是最容易想到的方式.递归方式如果文件夹很深就容易造成栈溢出,而且不断的压 ...