1. 特殊权限
SUID:(set uid)当我们为某个命令设定了suid,无论谁使用该命令都会使用该命令的 "属主" 运行该命令。
我们知道在Linux中,每个用户可以通过passwd命令更改自己的密码。密码存放的位置为/etc/shadow。我们可以查看一下/etc/shadow的权限。
[root@MiWiFi-R3L-srv ~]# ll /etc/shadow
----------. 1 root root 1088 Aug 7 16:07 /etc/shadow
通过上结果,我们可以知道任何人对/etc/shawow都是没有任何权限的。当然root除外,因为root在Linux系统中有着最高的权限。
我们时通过passwd这个命令来修改密码的,在Linux中一切皆文件,我们可以查看一下passwd这个命令的权限。
[root@MiWiFi ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
我们发现属主的权限中有个s(若原先权限为为空的话,会显示 S),这就是SUID,这表示当任何人想要执行passwd这条命令时,都会以该命令的属主身份运行该命令。
使用普通用户ennan执行passwd修改密码
[ennan@MiWiFi ~]$ passwd
Changing password for user ennan.
Changing password for ennan.
(current) UNIX password:
我们发现其实是以root的身份在运行这条命令。
[root@MiWiFi ~]# ps aux |grep passwd
root 2251 0.0 0.0 170704 1992 pts/0 S+ 18:19 0:00 passwd
SUID的设置与取消
可通过
chmod u+s 文件名称
chmod 4XXXX 文件名称设置
[root@MiWiFi-R3L-srv ~]# ll /usr/bin/vim
-rwxr-xr-x. 1 root root 2294216 Jun 28 21:59 /usr/bin/vim
[root@MiWiFi-R3L-srv ~]# chmod 4755 /usr/bin/vim
[root@MiWiFi-R3L-srv ~]# ll /usr/bin/vim
-rwsr-xr-x. 1 root root 2294216 Jun 28 21:59 /usr/bin/vim
[root@MiWiFi-R3L-srv ~]# chmod u-s /usr/bin/vim
[root@MiWiFi-R3L-srv ~]# ll /usr/bin/vim
-rwxr-xr-x. 1 root root 2294216 Jun 28 21:59 /usr/bin/vim
进程能够以何种形式访问文件,取决于运行这个进程的用户对这个文件有没有相应的权限。
比如:passwd要修改/etc/shadow,要看运行passwd这条命令的人对/etc/shadow用怎么样的权限。
SGID:将目录设置为sgid后,如果在该目录下创建文件,都将与该目录的所属组保持一致。
[root@MiWiFi-R3L-srv /]# chmod 2777 /test/
[root@MiWiFi-R3L-srv /]# ll -d /test/
drwxrwsrwx. 2 root root 23 Aug 7 18:41 /test/
切换用户在/test中创建文件
[ennan@MiWiFi-R3L-srv test]$ touch ennan.txt
[ennan@MiWiFi-R3L-srv test]$ ll
total 0
-rw-rw-r--. 1 ennan root 0 Aug 7 18:42 ennan.txt
这时候,我们发现ennan.txt的属组已经变成了root,即/test/这个目录的属组。
SBIT:如果一个目录设定了粘滞位, 那么谁都可以在该目录下创建文件。删除文件只能是 谁创建的谁删除. 除此以外 root 和目录的所属主都能删除该目录下的所有内容。
给/test/设置粘滞位
[root@MiWiFi-R3L-srv /]# chmod 1777 /test/
[root@MiWiFi-R3L-srv /]# ll /test/ -d
drwxrwxrwt. 2 root root 23 Aug 7 18:42 /test/
ennan在该目录下创建文件
[ennan@MiWiFi-R3L-srv test]$ touch ennan.txt
test用户虽然对目录/test/有足够的权限,但是仍然无法删除ennan.txt
[test@MiWiFi-R3L-srv test]$ rm ennan.txt -f
rm: cannot remove ‘ennan.txt’: Operation not permitted
取消粘滞位后,test用户可以删除ennan.txt
[root@MiWiFi-R3L-srv /]# chmod o-t /test/
[root@MiWiFi-R3L-srv /]# ll /test/ -d
drwxrwxrwx. 2 root root 23 Aug 7 18:48 /test/
[test@MiWiFi-R3L-srv test]$ rm ennan.txt -f
[test@MiWiFi-R3L-srv test]$ ll /test/
total 0
2. 特殊属性
chattr:只有 root 用户可以使用,用来修改文件系统的权限属性,建立凌驾于 rwx 基础权限之上的授权。
lsattr:查看文件的特殊属性。
chattr常用选型及解释
选项 | 解释 |
---|---|
+i | 锁定文问,任何人无法对文件进行操作 |
+a | 无法写入和删除文件,可追加文件内容 |
例:当文件被+i后,包括root在内的所有用户无法对文件进行操作。
[root@MiWiFi-R3L-srv test]# touch ennan.txt
[root@MiWiFi-R3L-srv test]# lsattr ennan.txt
---------------- ennan.txt
[root@MiWiFi-R3L-srv test]# chattr +i ennan.txt
[root@MiWiFi-R3L-srv test]# lsattr ennan.txt
----i----------- ennan.txt
[root@MiWiFi-R3L-srv test]# rm -f ennan.txt
rm: cannot remove ‘ennan.txt’: Operation not permitted
[root@MiWiFi-R3L-srv test]# echo "hello" > ennan.txt
-bash: ennan.txt: Permission denied
若对/etc/passwd设置了+i选项后,任何人无法增加或者删除用户
[root@MiWiFi-R3L-srv test]# chattr +i /etc/passwd
[root@MiWiFi-R3L-srv test]# useradd yan
useradd: cannot open /etc/passwd
[root@MiWiFi-R3L-srv test]# userdel ennan
userdel: cannot open /etc/passwd
# 取消文件锁定
[root@MiWiFi-R3L-srv test]# chattr -i /etc/passwd
文件使用了+a选项后,尽可追加文件内容,不可进行其他任何操作
[root@MiWiFi-R3L-srv test]# chattr +a ennan.txt
[root@MiWiFi-R3L-srv test]# lsattr ennan.txt
-----a---------- ennan.txt
[root@MiWiFi-R3L-srv test]# rm ennan.txt -f
rm: cannot remove ‘ennan.txt’: Operation not permitted
[root@MiWiFi-R3L-srv test]# echo "hello" >> ennan.txt
[root@MiWiFi-R3L-srv test]# echo "My name" >> ennan.txt
[root@MiWiFi-R3L-srv test]# cat ennan.txt
hello
My name
# 取消a选项
[root@MiWiFi-R3L-srv test]# chattr -a ennan.txt
[root@MiWiFi-R3L-srv test]# lsattr ennan.txt
---------------- ennan.txt
3.进程掩码umask
通过umask可查看当前登陆用户的umask
[root@MiWiFi-R3L-srv ~]# umask
0022
Linux在/etc/bashrc中定义了umask的值
[root@MiWiFi-R3L-srv ~]# vim /etc/bashrc
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
umask 002
else
umask 022
fi
用户也可以通过umask临时设置umask的值
[root@MiWiFi-R3L-srv ~]# umask 002
[root@MiWiFi-R3L-srv ~]# umask
0002
用户家目录的umask可以通过/etc/login.defs指定
[root@MiWiFi-R3L-srv ~]# grep UMASK /etc/login.defs
UMASK 077
[root@MiWiFi-R3L-srv ~]# ll /home/
total 0
drwx------. 2 bgx students 62 Aug 2 07:58 bgx
drwx------. 3 ennan ennan 95 Aug 8 04:24 ennan
drwx------. 2 oldboy edu 62 Aug 7 14:39 oldboy
drwx------. 2 oldgirl edu 62 Aug 7 14:41 oldgirl
当用户的umask为045的时候(其他用户组位为奇数)
[root@MiWiFi-R3L-srv ~]# umask
0045
[root@MiWiFi-R3L-srv ~]# touch test
[root@MiWiFi-R3L-srv ~]# mkdir dir
[root@MiWiFi-R3L-srv ~]# ll
total 0
drwx-wx-w-. 2 root root 6 Aug 8 06:43 dir
# 777-045=032
-rw--w--w-. 1 root root 0 Aug 8 06:42 test
# 666-045=621,而创建出来的文件权限是622,所以当umask的其他用户组位为奇数时,在其他用户组位再加1
umask值的所有位为奇数时
[root@MiWiFi-R3L-srv ~]# umask
0035
[root@MiWiFi-R3L-srv ~]# touch test
[root@MiWiFi-R3L-srv ~]# mkdir dir
[root@MiWiFi-R3L-srv ~]# ll
total 0
drwxr---w-. 2 root root 6 Aug 8 06:50 dir
# 777-035=742
-rw-r---w-. 1 root root 0 Aug 8 06:50 test
# 666-035=631,而创建出来的文件的权限时642,所以当umask的所有位为奇数时,在为奇数的位再加1
umask的计算方式
文件:666-umask
目录:777-umask
网友评论