linux文件的特殊权限

1.suid,sgid,sticky介绍

  • a)、SUID:
    限定:只能设置在二进制可执行程序上面,对目录设置无效。
    功能:程序运行时的权限从可执行这变更成程序所有者。
  • b)、SGID:
    限定:既可以给二进制可执行程序设置,也可以对目录设置。
    功能:在设置了SGID权限的目录下建立文件时,新创建的文件的所属组会
    继承上级目录的所属组。
  • c)、Stickybit:
    限定:只作用于目录
    功能:目录下创建的文件只有root、文件的创建者、目录所有者才能删除

2.特殊权限对应的数值

SUID SGID Stickybit
u+s或u=4 g+s或g=2 o+t或o=1

3.实例

3.1、suid权限

passwd就是一个设置了suid的二进制命令,passwd修改密码是通过
修改/etc/shadow文件。但shadow文件只有root才有权限修改,那普通
用户是怎么修改自己密码呢?
[root@zabbix-01 ~]# ll /etc/shadow
----------. 1 root root 860 Aug 26 17:02 /etc/shadow
[root@zabbix-01 ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
==》我们可以看到passwd二进制命令设置了suid,使得用户在执行passwd
的时候成为所有者(root),然后修改密码
=================================================================
普通用户查看shadow文件
[test@zabbix-01 test]$ whoami 
test
[test@zabbix-01 test]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
对cat设置suid
[root@zabbix-01 ~]# ll /usr/bin/cat
-rwxr-xr-x. 1 root root 54048 Nov 20  2015 /usr/bin/cat
[root@zabbix-01 ~]# chmod u+s /usr/bin/cat
[root@zabbix-01 ~]# ll /usr/bin/cat
-rwsr-xr-x. 1 root root 54048 Nov 20  2015 /usr/bin/cat
测试:
[test@zabbix-01 test]$ cat /etc/shadow
root:$6$uXsaeXuHfsVliHd9$XDUtm2BfXIwxhtU.sZi65SP9Bbb/oQpc55VeDeR7up4hC/nzZhto71bxllEET.7KsagFd6FQXOJyUo4JMKdwh1::0:99999:7:::
bin:*:16659:0:99999:7:::
daemon:*:16659:0:99999:7:::

3.2、sgid权限

使用root创建test目录
[root@zabbix-01 ~]# mkdir /test
[root@zabbix-01 ~]# ll -d /test/
drwxr-xr-x. 2 root root 6 Aug 26 18:00 /test/
修改test目录的所属组为test。并设置sguid
[root@zabbix-01 ~]# chmod g+s /test/
[root@zabbix-01 ~]# chown :test /test/
[root@zabbix-01 ~]# ll -d /test/
drwxr-sr-x. 2 root test 6 Aug 26 18:00 /test/
在test下创建文件
[root@zabbix-01 ~]# touch /test/{a,b,c}.txt
查看权限(所有文件的所属组都会继承test的所属组)
[root@zabbix-01 ~]# ll /test/
total 0
-rw-r--r--. 1 root test 0 Aug 26 18:01 a.txt
-rw-r--r--. 1 root test 0 Aug 26 18:01 b.txt
-rw-r--r--. 1 root test 0 Aug 26 18:01 c.txt

3.3、stickybit权限

使用root创建目录与文件并设置权限
[root@zabbix-01 ~]# mkdir /test
[root@zabbix-01 ~]# chmod -R 777 /test
[root@zabbix-01 ~]# touch /test/aaa
使用普通用户删除
[test@zabbix-01 ~]$ whoami 
test
[test@zabbix-01 ~]$ rm -rf /test/aaa 
[test@zabbix-01 ~]$ ls /test/
对目录设置stickybit
[root@zabbix-01 ~]# chmod o+t /test/
[root@zabbix-01 ~]# touch /test/aaa
测试
[test@zabbix-01 ~]$ rm -rf /test/aaa 
rm: cannot remove ‘/test/aaa’: Operation not permitted

4.文件扩展ACL

4.1给文件设置acl权限

例:设置用户test对文件/test/aaa拥有rwx权限,test不属于/test/aaa的所属主和组,test其他用户other,但不能给其他用户有拥有rwx权限。只能test用户拥有(例外)
查看aaa的acl权限
[root@zabbix-01 ~]# getfacl /test/aaa 
getfacl: Removing leading '/' from absolute path names
# file: test/aaa
# owner: root
# group: root
user::rw-
group::r--
other::r--
设置acl权限
[root@zabbix-01 ~]# setfacl -m u:test:rwx /test/aaa
[root@zabbix-01 ~]# getfacl /test/aaa              
getfacl: Removing leading '/' from absolute path names
# file: test/aaa
# owner: root
# group: root
user::rw-
user:test:rwx
group::r--
mask::rwx
other::r--
[root@zabbix-01 ~]# ll /test/aaa
-rw-rwxr--+ 1 root root 0 Aug 26 18:20 /test/aaa

4.2给目录设置acl权限

[root@zabbix-01 ~]# getfacl /test/
getfacl: Removing leading '/' from absolute path names
# file: test/
# owner: root
# group: root
# flags: --t
user::rwx
group::rwx
other::rwx

[root@zabbix-01 ~]# setfacl -m d:u:test:rwx /test
[root@zabbix-01 ~]# getfacl /test/               
getfacl: Removing leading '/' from absolute path names
# file: test/
# owner: root
# group: root
# flags: --t
user::rwx
group::rwx
other::rwx
default:user::rwx
default:user:test:rwx
default:group::rwx
default:mask::rwx
default:other::rwx

4.3去掉acl权限

去掉的单个权限
[root@zabbix-01 ~]# setfacl -x u:test /test/aaa(-x -r -w)
去掉所有
[root@zabbix-01 ~]# setfacl -b u:test /test/aaa

5.chattr与lsattr

5.1命令介绍

  • 有时候发现用root权限都不能修改某个文件,大部分原因是曾经用chattr命令锁定该文件了。
  • chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,不过现在生产绝大部分跑的linux系统都是2.6以上内核了。
  • 通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var目录。lsattr命令是显示chattr命令设置的文件属性。

5.2用法与参数

chattr命令的用法:chattr [ -RVf ] [ -v version ] [ mode ] files…
最关键的是在[mode]部分,[mode]部分是由+-=和[ASacDdIijsTtu]这些字符组合的,这部分是用来控制文件的
属性。

+ :在原有参数设定基础上,追加参数。
- :在原有参数设定基础上,移除参数。
= :更新为指定参数设定。
A:文件或目录的 atime (access time)不可被修改(modified), 可以有效预防例如手提电脑磁盘I/O错误的发生。
S:硬盘I/O同步选项,功能类似sync。
a:即append,设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性。
c:即compresse,设定文件是否经压缩后再存储。读取时需要经过自动解压操作。
d:即no dump,设定文件不能成为dump程序的备份目标。
i:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件 系统的安全设置有很大帮助。
j:即journal,设定此参数使得当通过mount参数:data=ordered 或者 data=writeback 挂 载的文件系统,文件在写入时会先被记录(在journal中)。如果filesystem被设定参数为 data=journal,则该参数自动失效。
s:保密性地删除文件或目录,即硬盘空间被全部收回。
u:与s相反,当设定为u时,数据内容其实还存在磁盘中,可以用于undeletion。
各参数选项中常用到的是a和i。a选项强制只可添加不可删除,多用于日志系统的安全设定。而i是更为严格的安全设定,只有superuser (root) 或具有CAP_LINUX_IMMUTABLE处理能力(标识)的进程能够施加该选项。

5.3例子

防止系统中某个关键文件被修改
[root@zabbix-01 ~]# chattr +i a
[root@zabbix-01 ~]# lsattr a
----i----------- a
[root@zabbix-01 ~]# rm -rf a
rm: cannot remove ‘a’: Operation not permitted
[root@zabbix-01 ~]# echo "aa" > a
-bash: a: Permission denied
去掉i权限
[root@zabbix-01 ~]# chattr -i a
[root@zabbix-01 ~]# rm -rf a 

猜你喜欢

转载自blog.csdn.net/liang_operations/article/details/82084924
今日推荐