SUID - UNIX下关于文件权限的表示方法和解析
UNIX下可以用ls -l 命令来看到文件权限。用ls命令所得到的表示法的格式是类似这样的:-rwxr-xr-x 。
下面解析一下格式所表示的意思,这种表示方法一共有十位:
9 8 7 6 5 4 3 2 1 0
- r w x r - x r - x
第9位表示文件类型,可以为p、d、l、s、c、b和-:
p表示命名管道文件
d表示目录文件
l表示符号连接文件
-表示普通文件
s表示socket文件
c表示字符设备文件
b表示块设备文件
第8-6位、5-3位、2-0位分别表示文件所有者的权限,同组用户的权限,其他用户的权限,其形式为rwx:
r表示可读,可以读出文件的内容
w表示可写,可以修改文件的内容
x表示可执行,可运行这个程序
没有权限的位置用-表示
例子:
rwxr-x--- 1 foo staff 7734 Apr 05 17:07 myfile
表示文件myfile是普通文件,文件的所有者是foo用户,而foo用户属于staff组,文件只有1个硬连接,长度是7734个字节,最后修改时间4月5日17:07。
所有者foo对文件有读写执行权限,staff组的成员对文件有读和执行权限,其他的用户对这个文件没有权限。
如果一个文件被设置了SUID或SGID位,会分别表现在所有者或同组用户权限的可执行位上。例如
1、-rwsr-xr-x 表示SUID和所有者权限中可执行位被设置
2、-rwSr--r-- 表示SUID被设置,但所有者权限中可执行位没有被设置
3、-rwxr-sr-x 表示SGID和同组用户权限中可执行位被设置
4、-rw-r-Sr-- 表示SGID被设置,但同组用户权限中可执行位没有被设置
其实在UNIX的实现中,文件权限用12个二进制位表示,如果该位置上的值是1,表示有相应的权限:
11 10 9 8 7 6 5 4 3 2 1 0
S G T r w x r w x r w x
第11位为SUID位,第10位为SGID位,第9位为sticky位,第8-0位对应于上面的三组rwx位。
-rwsr-xr-x的值为: 1 0 0 1 1 1 1 0 1 1 0 1
-rw-r-Sr--的值为: 0 1 0 1 1 0 1 0 0 1 0 0
给文件加SUID和SUID的命令如下:
chmod u+s filename 设置SUID位
chmod u-s filename 去掉SUID设置
chmod g+s filename 设置SGID位
chmod g-s filename 去掉SGID设置
另外一种方法是chmod命令用八进制表示方法的设置。如果明白了前面的12位权限表示法也很简单。
由于SUID和SGID是在执行程序(程序的可执行位被设置)时起作用,而可执行位只对普通文件和目录文件有意义,所以设置其他种类文件的SUID和SGID位是没有多大意义的。
普通文件的SUID和SGID的作用
例子:如果普通文件myfile是属于foo用户的,是可执行的,现在没设SUID位,ls命令显示如下:
-rwxr-xr-x 1 foo staff 7734 Apr 05 17:07 myfile
任何用户都可以执行这个程序。UNIX的内核是根据什么来确定一个进程对资源的访问权限的呢?是这个进程的运行用户的(有效)ID,包括user id和group id。用户可以用id命令来查到自己的或其他用户的user id和group id。除了一般的user id 和group id外,还有两个称之为effective id,就是有效id,上面的四个id表示为:uid,gid,euid,egid。内核主要是根据euid和egid来确定进程对资源的访问权限。
一个进程如果没有SUID或SGID位,则euid=uid egid=gid,分别是运行这个程序的用户的uid和gid。例如kevin用户的uid和gid分别为204和202,foo用户的uid和gid为200,201,kevin运行myfile程序形成的进程的euid=uid=204,egid=gid=202,内核根据这些值来判断进程对资源访问的限制,其实就是kevin用户对资源访问的权限,和foo没关系。
如果一个程序设置了SUID,则euid和egid变成被运行的程序的所有者的uid和gid,例如kevin用户运行myfile,euid=200,egid=201,uid=204,gid=202,则这个进程具有它的属主foo的资源访问权限。
SUID的作用就是这样:让本来没有相应权限的用户运行这个程序时,可以访问没有权限访问的资源。passwd就是一个很鲜明的例子。SUID的优先级比SGID高,当一个可执行程序设置了SUID,则SGID会自动变成相应的egid。
讨论一个例子:
UNIX系统有一个/dev/kmem的设备文件,是一个字符设备文件,里面存储了核心程序要访问的数据,包括用户的口令。所以这个文件不能给一般的用户读写,权限设为:cr--r----- 1 root system 2, 1 May 25 1998 kmem
但ps等程序要读这个文件,而ps的权限设置如下:
-r-xr-sr-x 1 bin system 59346 Apr 05 1998 ps
这是一个设置了SGID的程序,而ps的用户是bin,不是root,所以不能设置SUID来访问kmem,bin和root都属于system组,而且ps设置了SGID,一般用户执行ps,就会获得system组用户的权限,而文件kmem的同组用户的权限是可读,所以一般用户执行ps就没问题了。但有些人说,为什么不把ps程序设置为root用户的程序,然后设置SUID位,不也行吗?这的确可以解决问题,但实际中为什么不这样做呢?因为SGID的风险比SUID小得多,所以出于系统安全的考虑,应该尽量用SGID代替SUID的程序,如果可能的话。
SUID对目录没有影响。如果一个目录设置了SGID位,那么如果任何一个用户对这个目录有写权限的话,在这个目录所建立的文件的组都会自动转为这个目录的属主所在的组,而文件所有者不变,还是属于建立这个文件的用户。
相关推荐
《Unix操作系统详解》是一部深入解析Unix操作系统的权威之作,它涵盖了Unix系统的基础概念、设计哲学、内核机制、用户界面以及系统管理等多个方面。通过学习这部资料,读者可以全面了解Unix这一经典操作系统的核心...
其中包含的主要文件为“unix 命令详解.pdf”,我们可以通过这个文档来学习和掌握Unix命令的精髓。 1. **ls**:用于列出目录中的文件和子目录。通过添加不同的选项,如`-l`显示详细信息,`-a`显示隐藏文件,`-r`反转...
### UNIX 文件属性与存取权限详解 在UNIX系统中,文件和目录的权限管理是非常重要的一个环节,它确保了系统的安全性和数据的完整性。通过`ls -la`命令,我们可以查看到文件或目录的详细信息,包括它们的权限设置。 ...
chmod - 更改文件权限命令 `chmod`用于修改文件的访问权限,包括读、写、执行权限。用户可以根据需要设置不同的权限组合,以控制文件的访问级别。 这些命令是UNIX系统中最基础但也是最核心的工具,掌握它们对于...
在深入探讨Unix知识详解以及高级编程这一主题之前,先让我们明确一下Unix系统的基本概念。Unix是一种多用户、多任务的操作系统,由贝尔实验室的工程师们于20世纪60年代末开发出来。它以其简洁、高效和可移植性著称,...
### UNIX操作系统命令详解 #### 一、概述 UNIX操作系统是一种多用户、多任务的操作系统,广泛应用于服务器领域。本文档将详细介绍UNIX中的常用命令及其功能,并通过实例展示这些命令的具体应用。特别关注了vi编辑...
以下是对一些常用UNIX命令的详解: 1. **ls**:列出目录内容。`ls`命令用于查看当前目录下的文件和子目录。通过添加选项,如`-l`可以显示详细信息,`-a`显示隐藏文件。 2. **pwd**:打印工作目录。这个命令会显示...
### UNIX基本命令详解 #### 第一章:目录及文件操作 **1.1 `ls`** - **功能**:列出指定目录中的文件和子目录名。 - **语法**:`ls [选项] [文件或目录]` - **常用选项**: - `-l`:以长格式列出文件详情(包括...
文件权限是文件系统中的一个重要概念,允许文件所有者设定不同用户对文件的读、写、执行权限。此外,文件还可以根据类型(如文本、二进制、设备文件等)、长度和时间戳(创建、修改、执行、读取时间)进行分类。 ...
### 通用Unix命令详解 #### 引言 Unix系统作为现代操作系统的重要组成部分,其命令行工具为用户提供了强大而灵活的操作环境。对于Oracle DBA(数据库管理员)等专业人士而言,熟练掌握常用Unix命令是必不可少的基本...
2. **-perm**: 按照文件权限进行匹配。例如:`find . -perm 755`。 3. **-prune**: 跳过当前目录,避免递归进入该目录。通常与`-depth`选项一起使用。 4. **-user**: 按照文件所有者进行匹配。例如:`find . -user ...
### Unix 常用命令详解 #### 档案/目录处理指令 ##### 1. ls(列出目录内容) **简介:** `ls` 是 Unix 和 Linux 系统中最基本的命令之一,用于显示目录中的文件和子目录列表。默认情况下,`ls` 命令会列出当前...
### UNIX文件格式分析 #### 可执行文件格式概述 在UNIX和LINUX平台上,可执行文件格式至关重要,因为它们直接关系到程序的执行效率、安全性和兼容性等问题。本文将探讨三种主要的可执行文件格式——`a.out`、`COFF...
chmod - 更改文件权限 - **基本用法**:`chmod`命令用于更改文件或目录的访问权限。 - **示例**: - `chmod [-fR] mode filename`:更改文件或目录的权限。 - `-f`:强制模式。 - `-R`:递归应用权限更改到目录...
### Unix命令大全详解 #### 一、登录工作站 在Unix系统中,远程登录是非常常见的操作方式之一,通过这种方式用户可以从一台计算机(例如个人电脑)连接到另一台远程计算机(工作站)。这种方式极大地提高了工作...
在UNIX操作系统中,掌握一些基本的命令是至关重要的,这些命令可以帮助用户进行文件和目录的管理。以下是对一些常用UNIX命令的详细解释: 1. **ls**:`ls`是最基础的列出目录内容的命令。它能显示指定目录下的文件...
- `chmod`:更改远程文件权限。 - `macdef`:定义宏命令。 - `prompt on/off`:开启或关闭批量操作时的提示模式。 - `close`:关闭当前连接但不退出FTP客户端。 - `system`:显示远程服务器的操作系统类型。 - `user...