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
来源: http://www.bubuko.com/infodetail-2657535.html