Linux特殊权限
Linux特殊权限
特殊权限1:SetUID
我们知道权限有r,w,x。其实除了这三个,还有特殊权限。比如:
root@localhost ~]# ll /bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /bin/passwd
[root@localhost ~]# ll /bin/write
-rwxr-sr-x. 1 root tty 19624 Oct 31 2018 /bin/write
[root@localhost ~]# ll /tmp/ -d
drwxrwxrwt. 9 root root 215 Apr 1222:06 /tmp
可以发现权限位,有个s。特殊权限有如下3种:
-
SUID
-
SGID
-
STICKY
下面将由五个问题来说明什么是SUID:
# 1.普通用户可不可以修改密码?
可以,修改自己的密码
# 2./etc/shadow文件的作用?
存储用户密码的文件
# 3./etc/shadow文件的权限?
[root@localhost ~]# ll /etc/shadow
----------1 root root 16404 Apr 8 11:41 /etc/shadow
# 4.普通用户,是否可以修改/etc/shadow文件?
不可以,/etc/shadow文件,对于普通用户没有任何权限,所以不能读取,也不能写入内容
普通用户的信息保存在 /etc/passwd文件中,与用户的密码在 /etc/shadow 文件中,也就是说,普通用户在更改自己密码时,修改了 /etc/shadow 文件中的加密密码,但是文件权限显示。普通用户对这两个文件都没有写权限。
# 5.那么普通用户,为什么可以修改密码?
1)因为使用了passwd这个命令
2)passwd命令在属主权限位上,原本是x权限,变成了s权限
3)s权限在属主权限位,又叫做SetUID权限,SUID
4)作用:普通用户在使用有SUID权限的文件或命令时,会以该文件的属主身份去执行该命令
总结:当一个具有执行权限的文件设置了SetUID权限后,用户在执行这个文件时,将以文件所有者身份来执行。当普通用户使用passwd命令来更改自己的密码时,实际上是在用passwd命令的所有者,所有者是谁?就是root的身份在执行passwd命令。那root,当然可以将密码写入 /etc/shadow 文件中了啊,所以普通与用户也可以修改 /etc/shadow文件,命令执行完成后该身份也就消失了。
SetUID权限的特性:
-
有无x权限
- 原本属主位上如果有x权限,则SetUID为 s
- 原本属主位上如果没有x权限,则SetUID为 S
-
授权方式
-
chmod u+s 文件名
-
chmod 4xxx 文件名
-
-
SetUID权限的数字是4000
特殊权限2:SetGID
将目录设置为SGID后,如果在该目录下创建文件,都将与该目录的所属组保持一致。
#创建一个目录
[root@db04 ~]# mkdir /tmp/test
#赋予sgid权限
[root@db04 ~]# chmod g+s /tmp/test/
#查看目录权限
[root@db04 ~]# ll /tmp/test/ -d
drwxr-sr-x 2 root root 4096 6月 21 16:26 /tmp/test/
#使用root用户创建文件
[root@db04 ~]# touch /tmp/test/root_file
#查看文件
[root@db04 ~]# ll /tmp/test/
总用量 0
-rw-r--r-- 1 root root 0 6月 21 16:30 root_file
#切换用户
[root@db04 ~]# su - lamp
#创建文件
[lamp@db04 ~]$ touch /tmp/test/lamp_file
touch: cannot touch `/tmp/test/lamp_file': Permission denied
#赋予目录777权限
[root@db04 ~]# chmod 777 /tmp/test/
#查看目录权限
[root@db04 ~]# ll -d /tmp/test/
drwxrwsrwx 2 root root 4096 6月 21 16:26 /tmp/test/
#切换至普通用户
[root@db04 ~]# su - lamp
#创建文件
[lamp@db04 ~]$ touch /tmp/test/lamp_file
#查看权限
[lamp@db04 ~]$ ll /tmp/test/lamp_file
-rw-rw-r-- 1 lamp root 0 Jun 21 16:34 /tmp/test/lamp_file
#将test目录属主和属组改为oldboy
[root@db04 ~]# chown oldboy.oldboy /tmp/test/
#查看权限
[root@db04 ~]# ll -d /tmp/test/
drwxrwsrwx 2 oldboy oldboy 4096 6月 21 16:34 /tmp/test/
#切换用户
[root@db04 ~]# su - lamp
#创建文件
[lamp@db04 ~]$ touch /tmp/test/lamp_file2
#查看文件权限
[lamp@db04 ~]$ ll /tmp/test/lamp_file2
-rw-rw-r-- 1 lamp oldboy 0 Jun 21 16:35 /tmp/test/lamp_file2
SetGID权限的特性:
-
有无x权限
- 原本属主位上如果有x权限,则SetUID为 s
- 原本属主位上如果没有x权限,则SetUID为 S
-
授权方式
-
chmod g+s 文件名
-
chmod 2xxx 文件名
-
-
SetUID权限的数字是2000
特殊权限3:SbIt
sticky(SI TI KI)粘滞,目前只对目录有效,作用如下: 普通用户对该目录拥有w和x权限,即普通用户可以在此目录中拥有写入权限,如果没有粘滞位,那么普通用户拥有w权限,就可以删除此目录下的所有文件,包括其他用户简历的文件。但是一旦被赋予了粘滞位,除了root可以删除所有文件,普通用户就算有w权限也只能删除自己建立的文件,而不能删除其他用户简历的文件。
- 带有粘滞位权限的目录下的所有文件,谁都可以读、写 2.
- 带有粘滞位权限的目录下的文件只有属主能删除自己的文件,其他用户无法删除
- 带有粘滞位权限的目录,只有root能删除
SbIt权限的特性:
-
有无x权限
- 原本属主位上如果有x权限,则SetUID为 t
- 原本属主位上如果没有x权限,则SetUID为 T
-
授权方式
-
chmod o+t 文件名
-
chmod 1xxx 文件名
-
-
SetUID权限的数字是2000
Linux权限属性chattr
chattr只有root用户可以使用,用来修改文件系统的权限属性,建立凌驾于rwx基础权限之上的授权
chattr命令格式:[root@db04 ~]# #chattr [+-=] [选项]文件名或目录名
设置文件属性(权限),针对所有用户,包括root
#选项:+增加权限 -减少权限 =等于某个权限
#a:让文件或目录仅可追加内容
#i:不得任意更动文件或目录
#创建文件并设置属性
[root@zls ~]# touch file_a file_i
[root@zls ~]# lsattr file_a file_i
---------------- file_a
---------------- file_i
#设置属性
[root@zls ~]# chattr +a file_a
[root@zls ~]# chattr +i file_i
[root@zls ~]# lsattr file_a file_i
-----a---------- file_a
----i----------- file_i
#a权限, 无法覆盖写入和删除文件
[root@zls ~]# echo "aa" > file_a
bash: file_a: Operation not permitted
[root@zls ~]# rm -f file_a
rm: cannot remove ‘file_a’: Operation not permitted
#a权限, 只能追加, 适用于日志文件
[root@zls ~]# echo "aa" >> file_a
#i权限, 无法写入, 无法删除
[root@zls ~]# echo "i" > file_i
bash: file_i: Permission denied
[root@zls ~]# echo "i" >> file_i
bash: file_i: Permission denied
[root@zls ~]# rm -f file_i
rm: cannot remove ‘file_i’: Operation not permitted
#解除限制
[root@zls ~]# chattr -a file100
[root@zls ~]# chattr -i file200
设置这个权限
chattr
i:只能查看文件内容,无法编辑
a:只能查看和追加文件内容,无法修改或覆盖源文件内容
+:设置,增加该权限
-:取消该权限
查看这个权限
lsattr 文件名
Linux进程掩码umask
查看当前系统默认的umask
[root@localhost ~]# umask
0022
修改系统默认的umask[root@localhost ~]
umask 025
计算方法:
目录使用777 - umask
文件使用666 - umask
如果umask的位数上有奇数文件使用666 - umask 在奇数位上加1