Linux文件权限标志uid gid
2015-12-15 17:05
531 查看
首先我们来熟悉一下linux系统中文件属性。
Linux 文件或目录的属性主要包括:文件或目录的节点、种类、权限模式、链接数量、所归属的用户和用户组、最近访问或修改的时间等内容;
第一字段:inode
第二字段:第一个字符表示文件类型,后面9个字符表示文件权限;
第三字段: 硬链接个数;
第四字段: 属主;
第五字段:所归属的组;
第六字段:文件或目录的大小;
第七字段和第八字段:最后访问或修改时间;
第九字段:文件名或目录名
我们这里就是要讨论第二个字段里表示文件权限的九个字符,拿文件lsfile.sh举例说明:
"rwxr-xr--"中前三个字符“rwx”表示文件所属用户对该文件有读,写和运行权限;中间三个字符“r-x”表示该文件所属用户组成员对该文件有读和运行权限,没有写权限;最后三个字符“r--”表示其他用户对该文件只有读权限,没有写权限和运行权限。
这九个字符中还包含特殊权限SUID, SGID, SBIT:
当 s 这个标志出现在文件拥有者的 x 权限上时,如上 /usr/bin/passwd 这个文件的权限状态,此时就被称为 Set UID,简称为 SUID 的特殊权限。基本上SUID有这样的限制与功能:
SUID 权限仅对二进位程序(binary program)有效(不能够用在 shell script 上面)
运行者对於该程序需要具有 x 的可运行权限
本权限仅在运行该程序的过程中有效 (run-time)
运行者将具有该程序拥有者 (owner) 的权限
以passwd文件为例:
vbird 对於 /usr/bin/passwd 这个程序来说是具有 x 权限的,表示 vbird 能运行 passwd;passwd 的拥有者是 root 这个帐号;vbird 运行 passwd 的过程中,会『暂时』获得 root 的权限;/etc/shadow 就可以被 vbird 所运行的 passwd 所修改。但如果 vbird 使用 cat 去读取 /etc/shadow 时,他能够读取吗?因为 cat 不具有 SUID 的权限,所以 vbird 运行 『cat /etc/shadow』 时,是不能读取
/etc/shadow 的。我们用一张示意图来说明如下:
图 SUID程序运行的过程示意图
SGID:
与 SUID 不同的是,SGID 可以针对文件或目录来配置!
如果是对文件来说, SGID 有如下的功能:
SGID 对二进位程序有用,程序运行者对於该程序来说,需具备 x 的权限
运行者在运行的过程中将会获得该程序群组的权限
如果针对的是目录,SGID 有如下的功能:
使用者若对於此目录具有 r 与 x 的权限时,该使用者能够进入此目录;
使用者在此目录下的有效群组(effective group)将会变成该目录的群组;
Sticky Bit:
这个 Sticky Bit, SBIT 目前只针对目录有效作用是:
当使用者对於此目录具有 w, x 权限,亦即具有写入的权限时;
当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件
换句话说:当甲这个使用者於 A 目录是具有群组或其他人的身份,并且拥有该目录 w 的权限, 这表示『甲使用者对该目录内任何人创建的目录或文件均可进行 "删除/更名/搬移" 等动作。』 不过,如果将 A 目录加上了 SBIT 的权限项目时, 则甲只能够针对自己创建的文件或目录进行删除/更名/移动等动作,而无法删除他人的文件。
chmod :改变文件的权限, SUID, SGID, SBIT等等的特性
1.数字类型改变文件权限
各权限的分数对照表如下:
例如当权限为: [-rwxrwx---] 分数则是:
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0
例如当权限为: [-rwsr-sr-x] 分数则是:
特殊权限 = SUID&&SGID = 4+2 = 6
owner = rws = 4+2+1 = 7
group = r-s = 4+1 = 5
others= r-x = 4+1 = 5
所以等一下我们设定权限的变更时,该文件的权限数字就是770啦!变更权限的指令chmod的语法是这样的:
2.符号类型改变文件权限
还有一个改变权限的方法呦!从之前的介绍中我们可以发现,基本上就九个权限分别是(1)user (2)group (3)others三种身份啦!那么我们就可以藉由u, g, o来代表三种身份的权限!此外, a 则代表 all 亦即全部的身份!那么读写的权限就可以写成r, w, x!SUID 为 u+s ,而 SGID 为 g+s ,SBIT 则是 o+t !也就是可以使用底下的方式来看:
来实作一下吧!假如我们要『设定』一个文件的权限成为『-rwxr-xr-x』时,基本上就是:
user (u):具有可读、可写、可执行的权限;
group 与 others (g/o):具有可读与执行的权限。
所以就是:
Linux 文件或目录的属性主要包括:文件或目录的节点、种类、权限模式、链接数量、所归属的用户和用户组、最近访问或修改的时间等内容;
[root@localhost ~]# ls -lih 总计 104K 2408949 -rwxr-xr-- 1 root root 7 04-21 12:47 lsfile.sh 2408258 lrwxrwxrwx 1 root root 7 04-21 22:16 sun001.txt -> sun.txt 2408263 -rw-r--r-- 2 root root 11 04-20 14:17 sun002.txt 2408263 -rw-r--r-- 2 root root 11 04-20 14:17 sun.txt解释:
第一字段:inode
第二字段:第一个字符表示文件类型,后面9个字符表示文件权限;
第三字段: 硬链接个数;
第四字段: 属主;
第五字段:所归属的组;
第六字段:文件或目录的大小;
第七字段和第八字段:最后访问或修改时间;
第九字段:文件名或目录名
我们这里就是要讨论第二个字段里表示文件权限的九个字符,拿文件lsfile.sh举例说明:
"rwxr-xr--"中前三个字符“rwx”表示文件所属用户对该文件有读,写和运行权限;中间三个字符“r-x”表示该文件所属用户组成员对该文件有读和运行权限,没有写权限;最后三个字符“r--”表示其他用户对该文件只有读权限,没有写权限和运行权限。
这九个字符中还包含特殊权限SUID, SGID, SBIT:
[root@www ~]# ls -ld /tmp ; ls -l /usr/bin/passwd /usr/bin/locate /var/lib/mlocate/mlocate.db drwxrwxrwt 7 root root 4096 Sep 27 18:23 /tmp -rwsr-xr-x 1 root root 22984 Jan 7 2007 /usr/bin/passwd -rwx--s--x 1 root slocate 23856 Mar 15 2007 /usr/bin/locate -rw-r----- 1 root slocate 3175776 Sep 28 04:02 /var/lib/mlocate/mlocate.dbSet UID:
当 s 这个标志出现在文件拥有者的 x 权限上时,如上 /usr/bin/passwd 这个文件的权限状态,此时就被称为 Set UID,简称为 SUID 的特殊权限。基本上SUID有这样的限制与功能:
SUID 权限仅对二进位程序(binary program)有效(不能够用在 shell script 上面)
运行者对於该程序需要具有 x 的可运行权限
本权限仅在运行该程序的过程中有效 (run-time)
运行者将具有该程序拥有者 (owner) 的权限
以passwd文件为例:
vbird 对於 /usr/bin/passwd 这个程序来说是具有 x 权限的,表示 vbird 能运行 passwd;passwd 的拥有者是 root 这个帐号;vbird 运行 passwd 的过程中,会『暂时』获得 root 的权限;/etc/shadow 就可以被 vbird 所运行的 passwd 所修改。但如果 vbird 使用 cat 去读取 /etc/shadow 时,他能够读取吗?因为 cat 不具有 SUID 的权限,所以 vbird 运行 『cat /etc/shadow』 时,是不能读取
/etc/shadow 的。我们用一张示意图来说明如下:
图 SUID程序运行的过程示意图
SGID:
与 SUID 不同的是,SGID 可以针对文件或目录来配置!
如果是对文件来说, SGID 有如下的功能:
SGID 对二进位程序有用,程序运行者对於该程序来说,需具备 x 的权限
运行者在运行的过程中将会获得该程序群组的权限
如果针对的是目录,SGID 有如下的功能:
使用者若对於此目录具有 r 与 x 的权限时,该使用者能够进入此目录;
使用者在此目录下的有效群组(effective group)将会变成该目录的群组;
Sticky Bit:
这个 Sticky Bit, SBIT 目前只针对目录有效作用是:
当使用者对於此目录具有 w, x 权限,亦即具有写入的权限时;
当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件
换句话说:当甲这个使用者於 A 目录是具有群组或其他人的身份,并且拥有该目录 w 的权限, 这表示『甲使用者对该目录内任何人创建的目录或文件均可进行 "删除/更名/搬移" 等动作。』 不过,如果将 A 目录加上了 SBIT 的权限项目时, 则甲只能够针对自己创建的文件或目录进行删除/更名/移动等动作,而无法删除他人的文件。
[root@www tmp]# chmod 7666 test; ls -l test <==具有空的 SUID/SGID 权限 -rwSrwSrwT 1 root root 0 Sep 29 03:06 testuser, group 以及 others 都没有 x 这个可运行的标志( 因为 666 ),所以,这个 S, T 代表的就是『空的』
chmod :改变文件的权限, SUID, SGID, SBIT等等的特性
1.数字类型改变文件权限
各权限的分数对照表如下:
SUID: 4 SGID: 2 SBIT: 1 r: 4 w: 2 x: 1每种身份特殊权限(SUID/SGID/SBIT)和(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的
例如当权限为: [-rwxrwx---] 分数则是:
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0
例如当权限为: [-rwsr-sr-x] 分数则是:
特殊权限 = SUID&&SGID = 4+2 = 6
owner = rws = 4+2+1 = 7
group = r-s = 4+1 = 5
others= r-x = 4+1 = 5
所以等一下我们设定权限的变更时,该文件的权限数字就是770啦!变更权限的指令chmod的语法是这样的:
[root@www ~]# chmod [-R] xyzw 文件或目录
选项与参数:
x : 可有可无,代表的是特殊权限,即 SUID/SGID/SBIT
yzw : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加
-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更
[root@www ~]# cd /tmp
[root@www tmp]# touch test <==创建一个测试用空档
[root@www tmp]# chmod 4755 test; ls -l test <==加入具有 SUID 的权限
-rwsr-xr-x 1 root root 0 Sep 29 03:06 test
[root@www tmp]# chmod 6755 test; ls -l test <==加入具有 SUID/SGID 的权限
-rwsr-sr-x 1 root root 0 Sep 29 03:06 test
[root@www tmp]# chmod 1755 test; ls -l test <==加入 SBIT 的功能!
-rwxr-xr-t 1 root root 0 Sep 29 03:06 test
[root@www tmp]# chmod 7666 test; ls -l test <==具有空的 SUID/SGID 权限 -rwSrwSrwT 1 root root 0 Sep 29 03:06 test
2.符号类型改变文件权限
还有一个改变权限的方法呦!从之前的介绍中我们可以发现,基本上就九个权限分别是(1)user (2)group (3)others三种身份啦!那么我们就可以藉由u, g, o来代表三种身份的权限!此外, a 则代表 all 亦即全部的身份!那么读写的权限就可以写成r, w, x!SUID 为 u+s ,而 SGID 为 g+s ,SBIT 则是 o+t !也就是可以使用底下的方式来看:
chmod | u g o a | +(加入) -(除去) =(设定) | r w x | 文件或目录 |
user (u):具有可读、可写、可执行的权限;
group 与 others (g/o):具有可读与执行的权限。
所以就是:
[root@www ~]# chmod u=rwx,go=rx .bashrc # 注意喔!那个 u=rwx,go=rx 是连在一起的,中间并没有任何空格! [root@www ~]# ls -al .bashrc -rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc [root@www tmp]# chmod g+s,o+t test; ls -l test -rws--s--t 1 root root 0 Aug 18 23:47 test摘录自linux 文件属性与权限
相关文章推荐
- Linux socket 初步
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- 基于 Linux 集群环境上 GPFS 的问题诊断
- 谁是桌面王者?Win PK Linux三大镇山之宝
- vivi下重新调整分区