文件权限之特殊权限
文件权限之特殊权限
一、特殊权限
linux系统权限共12位权限,基本权限为rwx,rwx,rwx,特殊权限为suid(setuid)、sgid(setgid)、sbit(sticky)
-
特殊权限比较
类别 suid sgid sbit 字符表示 S S T 出现位置 u--x g--x o--x 基本权限位有x s s t 基本权限位无x S - - 数字表示法 4 2 1 八进制表示法 4000 2000 1000 生效对象 属主 属组 其他用户 作用文件 二进制可执行文件 二进制文件或目录文件 权限为777的目录文件
二、suid
-
suid原理
- suid仅限于可执行文件,也就是 二进制文件,比如系统下的/usr/bin下提供的命令,/usr/bin/ls、/usr/bin/rm
- suid特殊权限只要用户对设有suid的文件有执行权限,那么当用户执行此文件时,会以属主的身份去执行
- 一旦文件执行结束,身份的企融合也会随之消失
-
注意事项
-
suid功能是针对二进制命令设置的,不能用在shell脚本上
-
用户权限位x位置处,如果有则为s,无则为S,表示该命令存在suid权限
-
suid的作用是让普通用户在执行设置了suid权限命令是,可以由于其属主的权限
-
二进制命令,如系统提供的ls、mkdir等命令,都需要属主权限
-
suid是一个危险的命令,一般使用sudo命令代替suid
-
-
示例
#01:/etc/passwd的权限为0,为什么普通用户可以修改自己的密码 [USER01@server ~]$ ls -l /etc/shadow ----------. 1 root root 1312 Jul 3 00:55 /etc/shadow #除了root,其他人对/etc/shadow的权限为0 [USER01@server ~]$ ls -l /usr/bin/passwd -rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd #passwd命令的属主和属组都是root,但是该二进制文件具有suid权限,也就是运行passwd时,普通用户会获得root权限,即可以修改/etc/shadow文件 #02:find根据权限搜索 [root@server ~]# find / -type f -perm +4000 -ls #03:为/usr/bin/touch的属主加上suid属性 [root@server ~]# ls -l /usr/bin/touch -rwxr-xr-x. 1 root root 62568 Oct 31 2018 /usr/bin/touch [root@server ~]# chmod u+s /usr/bin/touch [root@server ~]# ls -l /usr/bin/touch -rwsr-xr-x. 1 root root 62568 Oct 31 2018 /usr/bin/touch 普通用户USER01能以root身份执行touch命令,故可以在root家目录下创建文件 [USER01@server ~]$ touch /root/test2 [root@server ~]# ls -l total 0 -rw-r--r--. 1 root root 0 Jul 8 23:15 test1 -rw-rw-r--. 1 root USER01 0 Jul 8 23:16 test2
三、sgid
-
sgid原理
- 对于二进制文件,若g具有x权限,并设置了sgid权限,其他用户可以获得属组的权限去执行该二进制文件
- 对于文件夹,为某个目录设置了sgid后,该目录文件属于属组;在这个目录下创建的文件、文件夹都会保留sgid属性
-
示例
[root@server ~]# ls -ld /test drwxrws---. 2 root GROUP01 6 Jul 3 01:24 /test #该/test文件夹属于GROUP01用户组,具有sgid权限,即GROUP01组内成员可以对/test文件夹下的文件及目录目录文件进行ls、mkdir、touch、rm、cd等操作,mkdir、touch创建的子文件同样具有sgid特性,属于GROUP01用户组 [root@server test]# grep 'GROUP01' /etc/group GROUP01:x:2500:USER02,USER01 #GROUP01用户组的组内成员有USER01、USER02,则该成员可以对/test目录文件具有rwx权限 [USER01@server test]$ mkdir USER01文件夹 [USER01@server test]$ touch USER01.log [USER02@server test]$ mkdir USER02.文件夹 [USER02@server test]$ touch USER02.log [root@server test]# ls -l total 0 -rw-rw-r--. 1 USER01 GROUP01 0 Jul 3 01:30 USER01.log drwxrwsr-x. 2 USER01 GROUP01 6 Jul 3 01:30 USER01文件夹 -rw-rw-r--. 1 USER02 GROUP01 0 Jul 3 01:31 USER02.log drwxrwsr-x. 2 USER02 GROUP01 6 Jul 3 01:30 USER02.文件夹 #GROUP01组内成员在/test目录文件下创建的子文件均具有sgid特性,属于GROUP01,即组内成员可以对子文件执行ls、rm、mkdir、touch、cd等操作 [USER01@server test]$ rm -rf USER02.文件夹 [USER01@server test]$ [USER01@server test]$ rm -rf USER02.log [root@server test]# ls -l total 0 -rw-rw-r--. 1 USER01 GROUP01 0 Jul 3 01:30 USER01.log drwxrwsr-x. 2 USER01 GROUP01 6 Jul 3 01:30 USER01文件夹 #用户组成员USER01可以删除USER02的文件,而是“USER02.log”和“USER02.文件夹”文件对属组的权限为“rw-”和“rws”,是因为具有sgid权限的目录文件是以属组的权限为准,即为"rws"
四、sbit
-
sbit原理
- 在一个权限为777的文件夹下,所有用户都可以进行rwx操作,也就意味着,任何用户可以随意删除别人的资料
- linux系统中/tmp的权限为777,并且具有sbit权限,所以除了root外,任何用户只能删除、移动自己的文件,而不能影响别人的文件
-
示例
[root@server tmp]# ls -ld /tmp drwxrwxrwt. 7 root root 93 Jul 3 01:55 /tmp #/tmp权限为777,并且具有sbit权限,即除了root用户外,任何人不可以影响别人的文件 [root@server tmp]# ls -l total 0 -rw-rw-r--. 1 USER01 USER01 0 Jul 3 01:57 USER01.log drwxrwxr-x. 2 USER01 USER01 6 Jul 3 01:56 USER01文件夹 -rw-rw-r--. 1 USER02 USER02 0 Jul 3 01:57 USER02.log drwxrwxr-x. 2 USER02 USER02 6 Jul 3 01:57 USER02文件夹 #“USER02.log”和“USER02文件夹”对其他用户的权限分别为“r--”和“r-x” [USER01@server tmp]$ rm -rf USER02.log rm: cannot remove ‘USER02.log’: Operation not permitted [USER01@server USER02文件夹]$ touch ianuser01 touch: cannot touch ‘ianuser01’: Permission denied #USER01不可以对USER02.log文件进行vim、cat追加、rm等操作;USER01不可以对USER02文件夹进行rm、touch、mkdir等操作
五、拓展
1、系统环境变量--set
#查看系统所有用户的环境变量,且过滤出于root相关信息
[root@server ~]# set | grep 'root'
2、用户个人环境变量--env
#查看用户个人的环境变量,且过滤出与root相关的变量
[root@server ~]# env | grep 'root'
3、控制命令提示符的变量--PS1
#命令提示符[root@server ~]#
#参数:
\u #显示用户名
\h #显示主机名
\W #显示用户所处目录的最后一级
\w #显示用户所处的绝对路径,省去敲pwd
\t #以24小时制显示时间
$ #显示用户身份的提示符,‘#’为root,‘$’为普通用户
#命令格式(不能有空格,临时生效):
PS1='[\u@\h\w\t]$'
#永久生效:
#将定义的变量写入系统全局环境变量配置文件/etc/profile,那么就有关于个人的配置文件文件,在建立下~/.bash_profile
①临时生效
#01:修改命令提示符为‘[用户名@主机绝对路径时间]#’
[root@serverUSER01文件夹]#PS1='[\u@\h\w\t]#'
[root@server/tmp/USER01文件夹03:04:13]#
#02:退出重新登录后,系统重新加载环境变量,该设置消失
[root@server/tmp/USER01文件夹03:04:35]#logout
[C:\~]$ ssh root@192.168.10.128
[root@server ~]#
②永久生效
#01:普通用户永久生效(该文件,存在于用户家目录下的)
[andy@server ~]$vim ~/.bash_profile
PS1='[\u@\h \W]\]$ '
#02:root用户永久生效
[root@server ~]#vim ~/.bash_profile
PS1='[\u@\h \W]\]# '
#03:所有用户永久生效
[root@server ~]#vim /etc/profile
PS1='[\u@\h \W]\]$ '
4、修改创建文件及目录的默认权限--umask
#01:root用户
[root@server ~]# umask
0022
root用户umask默认为022
文件:666-022=644
目录:777-022=755
#02:普通用户
[USER01@server ~]$ umask
0002
普通用户umask默认为002
文件:666-002=664
目录:777-002=775
#修改umask
#01:临时修改
[USER01@server ~]$ umask 004
#02:永久修改
[USER01@server ~]$ vim .bashrc
umask 004
5、锁定文件--lsattr、chattr
+a 锁定文件,限制⽂件只能追加写⼊数据,不得删除⽂件、或清除⽂件内容
+i 锁定⽂件,限制⽂件不得被删除、改名、修改
- 示例
锁定⽂件/var/spool/cron/root,限制⽂件不得被删除、改名、修改内容
#01:创建测试文件
[root@server ~]# touch /var/spool/cron/root
#02:锁定⽂件/var/spool/cron/root,限制⽂件不得被删除、改名、修改内容
[root@server ~]# chattr +i /var/spool/cron/root
[root@server ~]# lsattr /var/spool/cron/root
----i----------- /var/spool/cron/root
#03:测试⽂件不得被删除、改名、修改内容
[root@server ~]# rm -rf /var/spool/cron/root
rm: cannot remove ‘/var/spool/cron/root’: Operation not permitted
[root@server ~]# mv /var/spool/cron/root /var/spool/cron/root01
mv: cannot move ‘/var/spool/cron/root’ to ‘/var/spool/cron/root01’: Operation not permitted
[root@server ~]# echo "123123" > /var/spool/cron/root
-bash: /var/spool/cron/root: Permission denied

浙公网安备 33010602011771号