一、linux下的文件基本权限
chmod是linux下面的权限管理命令,我们可以通过chmod来对文件的权限进行修改。
普通文件的权限有三种,rwx分别是读,写和执行。再加上三个用户分组:owner,group,other 我们可以很方便的使用三个0-7的数字来表示一个文件的权限。
举个例子,我们创建一个文件:
touch test.log
看一下默认的文件权限:
ll test.log
-rw-r–r– 1 flydean wheel 0B 8 16 10:36 test.log
默认的文件权限是644,也就是说owner权限是读写,group权限是读,其他权限是读。
我们可以使用chmod命令对其进行修改,比如:
chmod 777 test.log
ll test.log
-rwxrwxrwx 1 flydean wheel 0B 8 16 10:36 test.log
可以看出权限被本文来源gao@daima#com搞(%代@#码@网2修改成为777。
二、linux文件的特殊权限
讲完普通权限,我们接下来讲一下linux文件中的特殊权限。
2.1、Set UID 和 Set GID
考虑一个常用的修改密码的例子,修改密码调用的是/usr/bin/passwd,看下这个文件的权限:
ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
可以看到有个很奇怪的s权限。这个s是什么意思呢?s实际是x的变种,是一种特殊的可执行权限。
特殊在哪里呢?passwd是修改用户的密码,密码文件实际上是存放在 /etc/shadow中的。
我们看下/etc/shadow的权限:
ll /etc/shadow
———- 1 root root 707 Jan 2 2020 /etc/shadow
/etc/shadow的owner是root,只有root才权限强行写入这个文件。
那么问题来了,普通用户调用passwd是怎么修改的/etc/shadow呢?
这就是s的妙用,s表示Set UID,简称为SUID,这个UID表示User的ID,而User表示这个程序(/usr/bin/passwd)的拥有者(root),那么我们在调用passwd的过程时候,就会暂时拥有passwd owner的权限,也就是root权限。
注意,SUID只能用在二进制文件中,它是对x权限的一个替换,并且SUID对目录是无效的。
同样的,我们也可以给group设置UID权限,也就是Set GID。
不同的是SGID可以使用在文件和目录两个地方。
用在文件中是和SUID一样的,用在目录中的意思是在该目录中所建的文件或目录的用户组都和该目录的用户组是一样的。