`
elfkingw
  • 浏览: 11211 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

unix文件权限详解

 
阅读更多

SUID - UNIX下关于文件权限的表示方法和解析

SUIDSUID

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 - 详细解析

SUIDSUID

由于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 idgroup 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文件权限的错误信息,我将在本文对这些问题做一个澄清。请看如下例子中的ls命令的输出结果:

    HP-UNIX基础详解(内部培训)

    第3章 第3章文件访问权限 第4章 第4章 Shell的特性和功能 第5章 第5章使用vi编辑器 第6章 SAM概述 第7章 第7章用户和组管理. 第8章 第8章配置设备文件. 第9章 第9章配置硬盘设备. 第10章 第10章文件系统的创建和维护...

    ftp命令详解--linux/unix

    ftp命令的详细讲解,对于经常在linux/unix下进程文件传输的人员是份不错的参考资料。

    UNIX操作系统学习教程

    3.5 UNIX文件存取权限 18 3.6 重定向与管道 21 3.6.1 UNIX重定向 21 3.6.2 UNIX管道 22 3.7 常用配置文件 22 3.7.1 /etc/passwd文件 22 3.7.2 /etc/group文件 22 3.7.3 /etc/hosts 23 3.7.4 /etc/services 23 3.8 ...

    Linux文件系统详解

    从操作系统的角度详解Linux文件系统层次、文件系统分类、文件系统的存储...这样带来优势也是显而易见的:UNIX权限模型也是围绕文件的概念来建立的,所以对设备也就可以同样处理了。常见的硬盘类型有PATA,SATA和AHCI等

    Mac中文件权限查看和设置详解

    在 Mac 系统的终端上修改文件权限使用的是 Linux 中的 chmod 命令。本文将给大家介绍Unix、Linux下文件和权限。下面话不多说了,来一起看看详细的介绍吧 举例 # 我们先创建一个测试目录 $ mkdir test && cd test #...

    TCPIP协议详解(4-1)

    私钥加密 204 19.1.2 对称私钥加密 205 19.1.3 DES、IDEA及其他 205 19.2 数字签名认证 206 19.3 破译加密的数据 207 19.4 保护网络 207 19.4.1 登录名和口令 208 19.4.2 文件的目录允许权限 ...

    linux中如何添加用户并赋予root权限详解

    一、linux添加用户并赋予root权限 1、添加用户,首先用adduser命令添加一个普通用户,命令如下: #adduser eric //添加一个名为eric的用户 ...Changing password for user ...方法一:修改 /etc/sudoers 文件,找到下面

    入门学习Linux常用必会60个命令实例详解doc/txt

    Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上工作离不开使用系统提供的命令。要想真正理解Linux系统,就必须从Linux...

    Linux chmod命令用法详解

    Linux/Unix 的文件调用权限分为三级 : 文件拥有者、群组、其他。利用 chmod 可以藉以控制文件如何被他人所调用。 使用权限 : 所有使用者 语法 chmod [-cfvR] [--help] [--version] mode file... 参数说明 mode : ...

    TCP/IP详解

    19.4.2 文件的目录允许权限 208 19.4.3 信任关系 209 19.4.4 UNIX和Linux系统上的UUCP 209 19.5 应付最坏情况 210 19.6 小结 210 第六部分 实现TCP/IP 第20章 一般配置问题 211 20.1 安装网卡 211 20.1.1 网卡 211 ...

    crontab用法详解

    99 %的UNIX和LINUX用户都使用vi,如果你也是这样,那么你就编辑$HOME目录下的.profile文件,在其中加入这样一行: EDITOR=vi; export EDITOR 然后保存并退出。 不妨创建一个名为<user>cron的文件,其中是用户名,...

    cmd操作命令和linux命令大全收集

    操作详解 net use ipipc$ " " /user:" " 建立IPC空链接 net use ipipc$ "密码" /user:"用户名" 建立IPC非空链接 net use h: ipc$ "密码" /user:"用户名" 直接登陆后映射对方C:到本地为H: net use h: ipc$ 登陆后...

    oracle详解

    可以是cp(unix)或copy(windows)或通过ftp传输文件(一定要在bin方式) 4.把本地的表空间设置为读写 5.在目标数据库附加该数据文件 imp file=expdat.dmp userid=”””sys/password as sysdba””” transport_...

    moosefs:MooseFS –开源,PB,容错,高性能,可扩展的网络分布式文件系统(软件定义的存储)

    对于标准文件操作,MooseFS的行为类似于普通的类似Unix的文件系统: 层次结构–目录树 存储POSIX文件属性-权限,上次访问和修改时间等。 支持ACL 支持POSIX和BSD文件锁定-包括对分布式文件锁定的支持 支持特殊...

    Linux使用教程(教程)

    文件权限位 42 ※3.文件类型 43 ※4.改变权限chmod 43 ※4.1符号模式 43 ※4.2绝对模式 44 ※目录 44 ※5.chown和chgrp 44 ※6.umask 45 7.Set UID、Set GID、Sticky Bit 46 8.文件隐藏属性 47 9.lsattr(显示文件的...

Global site tag (gtag.js) - Google Analytics