Linux文件特殊权限和附加权限

1、特殊权限suid

范围:只能针对二进制命令文件

作用:让普通用户拥有二进制命令文件所有者的权限

举例1:普通用户使用passwd命令修改密码

cat /etc/shadow 存放密码的文件,用sha512加密方式加密

echo 123456|passwd --stdin a 非交互式设置密码

[root@localhost ~]# ls -l /usr/bin/passwd

-rwsr-xr-x. 1 root root 30768 Nov 24 2015 /usr/bin/passwd

[root@localhost ~]# ll /etc/shadow

---------- 1 root root 977 Apr 3 14:11 /etc/shadow

可见,passwd具有s权限,具有root用户权限,才能修改密码,普通用户具有执行权限但不一定拥有以root身份执行时的权限,添加s权限后就具有了root用户的执行权限

举例2:netstat命令通过修改s权限可以使普通用户具有root身份

在root用户下使用netstat命令

[root@localhost ~]# netstat -lntup

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 0.0.0.0:52113 0.0.0.0:* LISTEN 1186/sshd

tcp 0 0 :::52113 :::* LISTEN 1186/sshd

udp 0 0 0.0.0.0:68 0.0.0.0:* 1109/dhclient

在普通用户下使用netstat命令

[test@localhost ~]$ netstat -lntup

(No info could be read for "-p": geteuid()=502 but you should be root.)

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 0.0.0.0:52113 0.0.0.0:* LISTEN -

tcp 0 0 :::52113 :::* LISTEN -

udp 0 0 0.0.0.0:68 0.0.0.0:* -

在root用户下查看netstat命令的权限

[root@localhost ~]# ll /bin/netstat

-rwxr-xr-x 1 root root 128216 Mar 22 2017 /bin/netstat

在普通用户下使用stat命令查看命令详细属性,当前的权限为0755

[test@localhost ~]$ stat /bin/netstat

File: `/bin/netstat'

Size: 128216     Blocks: 256 IO Block: 4096 regular file

Device: 802h/2050d    Inode: 788614 Links: 1

Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)

Access: 2018-04-03 14:46:08.529638732 +0800

Modify: 2017-03-22 07:52:14.000000000 +0800

Change: 2018-04-03 14:48:07.523615430 +0800

在root用户下修改权限u+s

[root@localhost ~]# chmod u+s /bin/netstat

[root@localhost ~]# ll /bin/netstat

-rwsr-xr-x 1 root root 128216 Mar 22 2017 /bin/netstat

在普通用户下使用stat命令再次查看命令详细属性,当前的权限为4755

[test@localhost ~]$ stat /bin/netstat

File: `/bin/netstat'

Size: 128216     Blocks: 256 IO Block: 4096 regular file

Device: 802h/2050d    Inode: 788614 Links: 1

Access: (4755/-rwsr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)

Access: 2018-04-03 14:46:08.529638732 +0800

Modify: 2017-03-22 07:52:14.000000000 +0800

Change: 2018-04-03 14:46:46.432625876 +0800

在普通用户下重新使用netstat命令,发现具有了root身份,即和在root用户下执行的结果一样

[test@localhost ~]$ netstat -lntup

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 0.0.0.0:52113 0.0.0.0:* LISTEN 1186/sshd

tcp 0 0 :::52113 :::* LISTEN 1186/sshd

udp 0 0 0.0.0.0:68 0.0.0.0:* 1109/dhclient

使用u-x命令(没有执行权限)

[root@localhost ~]# chmod u-x /bin/netstat

[root@localhost ~]# ll /bin/netstat

-rwSr-xr-x 1 root root 128216 Mar 22 2017 /bin/netstat

 

2、特殊权限sgid    

作用:和SUID一样,只是SGID是获得该程序所属用户组的权限

举例:locate 查找文件原理:把系统中所有文件名存储在一个数据库中并建立索引

所以查找起来locate比find要快很多

updatedb 更新locate命令数据库内容的命令

[root@localhost ~]# chmod g+s /usr/bin/locate

[root@localhost ~]# ll /usr/bin/locate

-rwx--s--x 1 root slocate 38464 Mar 12 2015 /usr/bin/locate

[root@localhost ~]# chmod g-x /usr/bin/locate

[root@localhost ~]# ll /usr/bin/locate

-rwx--S--x 1 root slocate 38464 Mar 12 2015 /usr/bin/locate

[root@localhost ~]# stat /usr/bin/locate

File: `/usr/bin/locate'

Size: 38464     Blocks: 80 IO Block: 4096 regular file

Device: 802h/2050d    Inode: 658161 Links: 1

Access: (2701/-rwx--S--x) Uid: ( 0/ root) Gid: ( 21/ slocate)

Access: 2018-04-02 15:23:19.000000000 +0800

Modify: 2015-03-12 17:21:21.000000000 +0800

Change: 2018-04-03 15:19:24.432622176 +0800

[root@localhost ~]# chmod g+x /usr/bin/locate

[root@localhost ~]# stat /usr/bin/locate

File: `/usr/bin/locate'

Size: 38464     Blocks: 80 IO Block: 4096 regular file

Device: 802h/2050d    Inode: 658161 Links: 1

Access: (2711/-rwx--s--x) Uid: ( 0/ root) Gid: ( 21/ slocate)

Access: 2018-04-02 15:23:19.000000000 +0800

Modify: 2015-03-12 17:21:21.000000000 +0800

Change: 2018-04-03 15:20:09.750626919 +0800

 

3、特殊权限sbit

Sticky Bit 粘滞位

作用:只针对目录有效,对于目录的作用是:当用户在该目录下建立文件或目录时,仅有自己与 root才有权力删除

最具有代表的就是/tmp目录,任何人都可以在/tmp内增加、修改文件(因为权限全是rwx),但仅有该文件/目录建立者与 root能够删除自己的目录或文件

[root@localhost ~]# stat /tmp/

File: `/tmp/'

Size: 4096     Blocks: 8 IO Block: 4096 directory

Device: 802h/2050d    Inode: 1048577 Links: 3

Access: (1777/drwxrwxrwt) Uid: ( 0/ root) Gid: ( 0/ root)

Access: 2018-04-03 13:49:59.000000000 +0800

Modify: 2018-04-03 14:14:02.000000000 +0800

Change: 2018-04-03 14:14:09.311623966 +0800

[root@localhost ~]# chmod o-x /tmp/

[root@localhost ~]# stat /tmp/

File: `/tmp/'

Size: 4096     Blocks: 8 IO Block: 4096 directory

Device: 802h/2050d    Inode: 1048577 Links: 3

Access: (1776/drwxrwxrwT) Uid: ( 0/ root) Gid: ( 0/ root)

Access: 2018-04-03 13:49:59.000000000 +0800

Modify: 2018-04-03 14:14:02.000000000 +0800

Change: 2018-04-03 15:21:02.341604692 +0800

 

4、附加权限

又叫做扩展权限

命令格式

chattr [+-=] 选项 文件或目录名

+增加权限

- 删除权限

= 等于某权限

chattr                change attributes改变附加权限

The letters 'acdeijstuADST' select the new attributes for the files: append only (a), com-pressed (c), no dump (d), extent format (e), immutable (i), data journalling (j), secure dele-tion (s), no tail-merging (t), undeletable (u), no atime updates (A), synchronous directory updates (D), synchronous updates (S), and top of directory hierarchy (T).

部分常用参数说明:

+a append (可读,如果有执行权限可执行,可追加,但是不能删除)

+i immutable(可读,如果有执行权限可执行,不能追加,不能删除)

用途:给系统的关键文件加把锁

+s secure dele-tion(安全删除。若误删除,数据无法恢复)

+A no atime updates(访问时不更新访问时间)

用途:超大并发的情况下,关闭更新访问时间来降低服务器压力

+c com-pressed(压缩)

+d no dump(不备份)

用途:不希望被恢复的文件,linux 找回误删除的文件

+t no tail-merging(尾部合并)

 

lsattr test.txt    list attributes查看附加权限位

说明:可根据实际需要对某些文件添加附加权限

 

参考来源:

https://www.cnblogs.com/dyh004/p/6378456.html

https://www.cnblogs.com/Q--T/p/7864795.html

Linux学习之十五-Linux文件特殊权限和附加权限的更多相关文章

  1. Linux学习(十五)LVM

    一.前言 LVM,逻辑卷管理工具,它的作用是提供一种灵活的磁盘管理办法.通常我们的某个分区用完了,想要扩容,很麻烦.但是用lvm就可以很方便的扩容,收缩. 看它的原理图: 它的原理大致是:首先将磁盘做 ...

  2. Linux学习之十四-Linux文件和目录权限

    Linux文件和目录权限 在Linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录. 通过设定权限可以从以下三种访问方式限制访问权限:只允许用户自己访问:允 ...

  3. 攻城狮在路上(叁)Linux(十五)--- 文件与目录的默认权限与隐藏权限

    一.文件默认权限:umask <==需要被减去的权限. 1.umask指的是当前用户在新建文件或者目录时的默认权限,如0022; 2.默认情况下,用户创建文件的最大权限为666; 创建目录的最大 ...

  4. linux 学习第十五天(vsftpd配置)

    一.vstapd配置 vsftpd 服务(a.匿名公开 b.系统本地账户验证c.虚拟专用用户验证) iptables -F  (清空防火墙) service iptables save  (保存防火墙 ...

  5. Linux学习之十五、基础正规表示法\延伸正规表示法

    原文地址: http://vbird.dic.ksu.edu.tw/linux_basic/0330regularex_2.php 基础正规表示法 既然正规表示法是处理字串的一种表示方式,那么对字节排 ...

  6. Linux学习之十六、文件的格式化与相关处理

    原文地址:http://vbird.dic.ksu.edu.tw/linux_basic/0330regularex_4.php 文件的格式化与相关处理 接下来让我们来将文件进行一些简单的编排吧!底下 ...

  7. linux学习第十五天 (Linux就该这么学) 找到一本不错的Linux电子书,附《Linux就该这么学》章节目录

    今天收尾DNS内容复习了,还有分享解析配置,都没有记,主要访问同一个域名,就近访问,

  8. Linux学习之十九-Linux磁盘管理

    Linux磁盘管理 1.相关知识 磁盘,是计算机硬件中不可或缺的部分磁盘,是计算机的外部存储器中类似磁带的装置,将圆形的磁性盘片装在一个方的密封盒子里,这样做的目的是为了防止磁盘表面划伤,导致数据丢失 ...

  9. Linux学习之十六-Linux用户管理

    Linux用户管理 Linux系统跟Windows系统一样,可以创建不同的用户,不同的用户组.在不同用户下使用系统具有相应的权限 创建一个普通用户时,会修改几个文件,拷贝一些初始文件到用户家目录中 修 ...

随机推荐

  1. 【LeetCode】Implement strStr()(实现strStr())

    这道题是LeetCode里的第28道题. 题目描述: 实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle ...

  2. shell之常用命令

    一些技巧 ctrl+alt+f1切换至命令行模式 ctrl+alt+f7切换至图形界面 命令行编辑: 光标跳转 ctrl+a 行首 ctrl+e 行尾 ctrl+d 删除 ctrl+u 删除光标至行首 ...

  3. hihocoder #1415 : 后缀数组三·重复旋律3

    #1415 : 后缀数组三·重复旋律3 Time Limit:5000ms Case Time Limit:1000ms Memory Limit:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢 ...

  4. 【CF1073B】Vasya and Books(模拟)

    题意:给你一个栈里书的编号,每次能捞出栈顶的一本书,每次询问捞出某本编号的书需要捞几次 n<=2e5 思路: #include<cstdio> #include<cstring ...

  5. [LeetCode] Longest Common Prefix 字符串公有前序

    Write a function to find the longest common prefix string amongst an array of strings. Hide Tags Str ...

  6. Codeforces 920E Connected Components? 补图连通块个数

    题目链接 题意 对给定的一张图,求其补图的联通块个数及大小. 思路 参考 ww140142. 维护一个链表,里面存放未归入到任何一个连通块中的点,即有必要从其开始进行拓展的点. 对于每个这样的点,从它 ...

  7. 享元模式FlyweightPattern(转)

    解释一下概念:也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象.比如说一个文本系统,每个字母定一个对象,那么大小写字母一共就是52个,那么就要定义52个对象 ...

  8. C++ 求幂的运算符是什么?

    1.VB里面求幂的运算符是“^” 2.C++没有求幂的运算符, c++头文件加 #include<math.h>使用pow(x,y),可算出x的y次幂 3.C++中 “^”是按位“异或”运 ...

  9. 转:C#制作ORM映射学习笔记三 ORM映射实现

    现在开始实现ORM的主体模块,首先需要在项目中新建一个类,命名为DbAccess,然后在项目的引用中添加两个dll,分别是MySql.Data.dll和System.Data.SQLite.dll,这 ...

  10. poj 2892(二分+树状数组)

    Tunnel Warfare Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 7749   Accepted: 3195 D ...