文件与目录的默认权限与隐藏权限

一个文件有若干个属性, 包括读写运行(r, w, x)等基本权限,及是否为目录 (d)
与文件 (-) 或者是连结档 (l) 等等的属性!
要修改属性的方法在前面也约略提过了(chgrp, chown, chmod)
,本小节会再加强补充一下!

除了基本r, w,
x权限外,在Linux的Ext2/Ext3文件系统下,我们还可以配置其他的系统隐藏属性,
这部份可使用 chattr 来配置,而以 lsattr 来查看,最重要的属性就是可以配置其不可修改的特性!让连文件的拥有者都不能进行修改!
这个属性可是相当重要的,尤其是在安全机制上面 (security)!

 

文件与目录的默认权限与隐藏权限

一个文件有若干个属性, 包括读写运行(r, w, x)等基本权限,及是否为目录 (d)
与文件 (-) 或者是连结档 (l) 等等的属性!
要修改属性的方法在前面也约略提过了(chgrp, chown, chmod)
,本小节会再加强补充一下!

除了基本r, w,
x权限外,在Linux的Ext2/Ext3文件系统下,我们还可以配置其他的系统隐藏属性,
这部份可使用 chattr 来配置,而以 lsattr 来查看,最重要的属性就是可以配置其不可修改的特性!让连文件的拥有者都不能进行修改!
这个属性可是相当重要的,尤其是在安全机制上面 (security)!

 

Linux 文件目录特殊权限设定(SUID,SGID,SBIT)

原文:

Linux文件及目录的权限设定,除了我们孰知的读写执行(rwx)之外,还有一些特殊的权限设定用来满足特定的目录。这些特殊权限的设定主要是SUID,SGID以及SBIT。这几个值并非一个单独的rwx,而是在文件或目录上的x权限上做动作,来达到实现文件或目录特殊权限的目的。本文主要描述这3个特殊权限的用法以及umask。

文件默认权限:umask

OK!那么现在我们知道如何创建或者是改变一个目录或文件的属性了,不过,
你知道当你创建一个新的文件或目录时,他的默认权限会是什么吗?呵呵!那就与
umask 这个玩意儿有关了!那么 umask 是在搞什么呢?基本上, umask 就是指定
『目前使用者在创建文件或目录时候的权限默认值』,
那么如何得知或配置 umask
呢?他的指定条件以底下的方式来指定:

[root@www ~]# umask
0022             <==与一般权限有关的是后面三个数字!
[root@www ~]# umask -S
u=rwx,g=rx,o=rx

查阅的方式有两种,一种可以直接输入 umask
,就可以看到数字型态的权限配置分数, 一种则是加入 -S (Symbolic)
这个选项,就会以符号类型的方式来显示出权限了! 奇怪的是,怎么 umask
会有四组数字啊?不是只有三组吗?是没错啦。
第一组是特殊权限用的,我们先不要理他,所以先看后面三组即可。

在默认权限的属性上,目录与文件是不一样的。从第六章我们知道 x
权限对於目录是非常重要的!
但是一般文件的创建则不应该有运行的权限,因为一般文件通常是用在於数据的记录嘛!当然不需要运行的权限了。
因此,默认的情况如下:

  • 若使用者创建为『文件』则默认『没有可运行( x )权限』,亦即只有 rw
    这两个项目,也就是最大为 666 分,默认权限如下:
    -rw-rw-rw-
  • 若使用者创建为『目录』,则由於 x
    与是否可以进入此目录有关,因此默认为所有权限均开放,亦即为 777
    分,默认权限如下:
    drwxrwxrwx

要注意的是,umask 的分数指的是『该默认值需要减掉的权限!』因为 r、w、x 分别是
4、2、1 分,所以罗!也就是说,当要拿掉能写的权限,就是输入 2
分,而如果要拿掉能读的权限,也就是 4 分,那么要拿掉读与写的权限,也就是
6 分,而要拿掉运行与写入的权限,也就是 3 分,这样了解吗?请问你, 5
分是什么?呵呵! 就是读与运行的权限啦!

如果以上面的例子来说明的话,因为 umask 为 022 ,所以 user
并没有被拿掉任何权限,不过 group 与 others 的权限被拿掉了 2 (也就是 w
这个权限),那么当使用者:

  • 创建文件时:(-rw-rw-rw-) – (—–w–w-) ==> -rw-r–r–
  • 创建目录时:(drwxrwxrwx) – (d—-w–w-) ==> drwxr-xr-x

不相信吗?我们就来测试看看吧!

图片 1

[root@www ~]# umask
0022
[root@www ~]# touch test1
[root@www ~]# mkdir test2
[root@www ~]# ll 
-rw-r--r-- 1 root root     0 Sep 27 00:25 test1
drwxr-xr-x 2 root root  4096 Sep 27 00:25 test2

图片 2

 

文件默认权限:umask 反码计算

OK!那么现在我们知道如何创建或者是改变一个目录或文件的属性了,不过,
你知道当你创建一个新的文件或目录时,他的默认权限会是什么吗?呵呵!那就与
umask 这个玩意儿有关了!那么 umask 是在搞什么呢?基本上, umask 就是指定
『目前使用者在创建文件或目录时候的权限默认值』,
那么如何得知或配置 umask
呢?他的指定条件以底下的方式来指定:

[root@www ~]# umask
0022             <==与一般权限有关的是后面三个数字!
[root@www ~]# umask -S
u=rwx,g=rx,o=rx

查阅的方式有两种,一种可以直接输入 umask
,就可以看到数字型态的权限配置分数, 一种则是加入 -S (Symbolic)
这个选项,就会以符号类型的方式来显示出权限了! 奇怪的是,怎么 umask
会有四组数字啊?不是只有三组吗?是没错啦。
第一组是特殊权限用的,我们先不要理他,所以先看后面三组即可。

在默认权限的属性上,目录与文件是不一样的。从第六章我们知道 x
权限对於目录是非常重要的!
但是一般文件的创建则不应该有运行的权限,因为一般文件通常是用在於数据的记录嘛!当然不需要运行的权限了。
因此,默认的情况如下:

  • 若使用者创建为『文件』则默认『没有可运行( x )权限』,亦即只有 rw
    这两个项目,也就是最大为 666 分,默认权限如下:
    -rw-rw-rw-
  • 若使用者创建为『目录』,则由於 x
    与是否可以进入此目录有关,因此默认为所有权限均开放,亦即为 777
    分,默认权限如下:
    drwxrwxrwx

要注意的是,umask 的分数指的是『该默认值需要减掉的权限!』因为 r、w、x 分别是
4、2、1 分,所以罗!也就是说,当要拿掉能写的权限,就是输入 2
分,而如果要拿掉能读的权限,也就是 4 分,那么要拿掉读与写的权限,也就是
6 分,而要拿掉运行与写入的权限,也就是 3 分,这样了解吗?请问你, 5
分是什么?呵呵! 就是读与运行的权限啦!

如果以上面的例子来说明的话,因为 umask 为
022 ,所以 user 并没有被拿掉任何权限,不过 group 与 others
的权限被拿掉了 2 (也就是 w 这个权限),那么当使用者:

  • 创建文件时:(-rw-rw-rw-) – (—–w–w-) ==> -rw-r–r–
  • 创建目录时:(drwxrwxrwx) – (d—-w–w-) ==> drwxr-xr-x

不相信吗?我们就来测试看看吧!

图片 3

[root@www ~]# umask
0022   #目录默认权限
[root@www ~]# touch test1
[root@www ~]# mkdir test2
[root@www ~]# ll 
-rw-r--r-- 1 root root     0 Sep 27 00:25 test1
drwxr-xr-x 2 root root  4096 Sep 27 00:25 test2  # 此新目录权限为777-022为755

 

 

一、文件类型及权限

umask的利用与重要性:专题制作

想像一个状况,如果你跟你的同学在同一部主机里面工作时,因为你们两个正在进行同一个专题,
老师也帮你们两个的帐号创建好了相同群组的状态,并且将 /home/class/
目录做为你们两个人的专题目录。
想像一下,有没有可能你所制作的文件你的同学无法编辑?果真如此的话,那就伤脑筋了!

这个问题很常发生啊!举上面的案例来看就好了,你看一下 test1
的权限是几分? 644 呢!意思是『如果 umask
订定为 022 ,那新建的数据只有使用者自己具有 w 的权限, 同群组的人只有 r
这个可读的权限而已,并无法修改喔!』这样要怎么共同制作专题啊!您说是吧!

所以,当我们需要新建文件给同群组的使用者共同编辑时,那么 umask
的群组就不能拿掉 2 这个 w 的权限! 所以罗, umask 就得要是 002
之类的才可以!这样新建的文件才能够是 -rw-rw-r– 的权限模样喔!
那么如何配置 umask 呢?简单的很,直接在 umask 后面输入 002 就好了!

[root@www ~]# umask 002
[root@www ~]# touch test3
[root@www ~]# mkdir test4
[root@www ~]# ll 
-rw-rw-r-- 1 root root     0 Sep 27 00:36 test3
drwxrwxr-x 2 root root  4096 Sep 27 00:36 test4

所以说,这个 umask
对於新建文件与目录的默认权限是很有关系的!这个概念可以用在任何服务器上面,
尤其是未来在你架设文件服务器 (file server) ,举例来说, SAMBA
Server 或者是 FTP
server 时,
都是很重要的观念!这牵涉到你的使用者是否能够将文件进一步利用的问题喔!不要等闲视之!

在默认的情况中, root 的 umask 会拿掉比较多的属性,root 的 umask 默认是
022 , 这是基於安全的考量啦~至於一般身份使用者,通常他们的 umask 为 002
,亦即保留同群组的写入权力! 其实,关於默认 umask 的配置可以参考
/etc/bashrc 这个文件的内容,不过,不建议修改该文件。

 

umask的利用与重要性:专题制作

想像一个状况,如果你跟你的同学在同一部主机里面工作时,因为你们两个正在进行同一个专题,
老师也帮你们两个的帐号创建好了相同群组的状态,并且将 /home/class/
目录做为你们两个人的专题目录。
想像一下,有没有可能你所制作的文件你的同学无法编辑?果真如此的话,那就伤脑筋了!

这个问题很常发生啊!举上面的案例来看就好了,你看一下 test1
的权限是几分? 644 呢!意思是『如果 umask
订定为 022 ,那新建的数据只有使用者自己具有 w 的权限, 同群组的人只有 r
这个可读的权限而已,并无法修改喔!』这样要怎么共同制作专题啊!您说是吧!

所以,当我们需要新建文件给同群组的使用者共同编辑时,那么 umask
的群组就不能拿掉 2 这个 w 的权限! 所以罗, umask 就得要是 002
之类的才可以!这样新建的文件才能够是 -rw-rw-r– 的权限模样喔!
那么如何配置 umask 呢?简单的很,直接在 umask 后面输入 002 就好了!

[root@www ~]# umask 002
[root@www ~]# touch test3
[root@www ~]# mkdir test4
[root@www ~]# ll 
-rw-rw-r-- 1 root root     0 Sep 27 00:36 test3
drwxrwxr-x 2 root root  4096 Sep 27 00:36 test4

所以说,这个 umask
对於新建文件与目录的默认权限是很有关系的!这个概念可以用在任何服务器上面,
尤其是未来在你架设文件服务器 (file server) ,举例来说, SAMBA
Server 或者是 FTP
server 时,
都是很重要的观念!这牵涉到你的使用者是否能够将文件进一步利用的问题喔!不要等闲视之!

在默认的情况中, root 的 umask 会拿掉比较多的属性,root 的 umask 默认是
022 , 这是基於安全的考量啦~至於一般身份使用者,通常他们的 umask 为 002
,亦即保留同群组的写入权力! 其实,关於默认 umask 的配置可以参考
/etc/bashrc 这个文件的内容,不过,不建议修改该文件。

 

1、文件类型

如下示例文件,

[root@desktop ~]# ###演示环境
[root@desktop ~]# more /etc/redhat-release 
Red Hat Enterprise Linux Server release 7.2 (Maipo)

crw--w----. 1 root tty 4, 1 Jul 7 09:12 /dev/tty1
brw-rw----. 1 root disk 8, 1 Jul 7 09:11 /dev/sda1
lrwxrwxrwx. 1 root root 3 Oct 14 2016 ex -> vim
srwx------. 1 root root 0 Mar 10 16:08 mongodb-27001.sock
drwx------. 2 root root 4.0K Oct 14 2016 keyring-GLsfkK
-rw-r--r--. 1 root root 49K Oct 14 2016 install.log
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

通过上面列出的文件描述,我们将最左边部分按9-0进行表示,如下 
9876543210

则相应的表示位的含义如下:

第9位 
   表示文件类型,可以为p、d、l、s、c、b和-: 
      p表示命名管道文件 
      d表示目录文件 
      l表示符号连接文件 
      -表示普通文件 
      s表示socket文件 
      c表示字符设备文件 
      b表示块设备文件

第8-6位 
   表示当前文件的属主(所有者)

第5-3位 
   表示文件的属组(用户组)

第2-0位 
   表示其它组所拥有的权限

文件隐藏属性:

什么?文件还有隐藏属性?光是那九个权限就快要疯掉了,竟然还有隐藏属性,真是要命~
但是没办法,就是有文件的隐藏属性存在啊!不过,这些隐藏的属性确实对於系统有很大的帮助的~
尤其是在系统安全 (Security) 上面,重要的紧呢!不过要先强调的是,底下的chattr命令只能在Ext2/Ext3的文件系统上面生效,
其他的文件系统可能就无法支持这个命令了。底下我们就来谈一谈如何配置与检查这些隐藏的属性吧!

文件隐藏属性:

什么?文件还有隐藏属性?光是那九个权限就快要疯掉了,竟然还有隐藏属性,真是要命~
但是没办法,就是有文件的隐藏属性存在啊!不过,这些隐藏的属性确实对於系统有很大的帮助的~
尤其是在系统安全 (Security) 上面,重要的紧呢!不过要先强调的是,底下的chattr命令只能在Ext2/Ext3的文件系统上面生效,
其他的文件系统可能就无法支持这个命令了。底下我们就来谈一谈如何配置与检查这些隐藏的属性吧!

2、权限

权限的表现形式为rwx: 
   r表示可读,可以读出文件的内容 
   w表示可写,可以修改文件的内容 
   x表示可执行,可运行这个程序,对于目录为可以进入该目录

chattr (配置文件隐藏属性)

图片 4

[root@www ~]# chattr [+-=][ASacdistu] 文件或目录名称
选项与参数:
+   :添加某一个特殊参数,其他原本存在参数则不动。
-   :移除某一个特殊参数,其他原本存在参数则不动。
=   :配置一定,且仅有后面接的参数

A  :当配置了 A 这个属性时,若你有存取此文件(或目录)时,他的存取时间 atime
     将不会被修改,可避免I/O较慢的机器过度的存取磁碟。这对速度较慢的计算机有帮助
S  :一般文件是非同步写入磁碟的(原理请参考第五章sync的说明),如果加上 S 这个
     属性时,当你进行任何文件的修改,该更动会『同步』写入磁碟中。
a  :当配置 a 之后,这个文件将只能添加数据,而不能删除也不能修改数据,只有root 
     才能配置这个属性。 
c  :这个属性配置之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,
     但是在储存的时候,将会先进行压缩后再储存(看来对於大文件似乎蛮有用的!)
d  :当 dump 程序被运行的时候,配置 d 属性将可使该文件(或目录)不会被 dump 备份
i  :这个 i 可就很厉害了!他可以让一个文件『不能被删除、改名、配置连结也无法
     写入或新增数据!』对於系统安全性有相当大的助益!只有 root 能配置此属性
s  :当文件配置了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘
     空间,所以如果误删了,完全无法救回来了喔!
u  :与 s 相反的,当使用 u 来配置文件时,如果该文件被删除了,则数据内容其实还
     存在磁碟中,可以使用来救援该文件喔!
注意:属性配置常见的是 a 与 i 的配置值,而且很多配置值必须要身为 root 才能配置

#请尝试到/tmp底下创建文件,并加入 i 的参数,尝试删除看看。
[root@www ~]# cd /tmp
[root@www tmp]# touch attrtest     <==创建一个空文件
[root@www tmp]# chattr +i attrtest <==给予 i 的属性
[root@www tmp]# rm attrtest        <==尝试删除看看
rm: remove write-protected regular empty file `attrtest'? y
rm: cannot remove `attrtest': Operation not permitted  <==操作不许可
# 看到了吗?呼呼!连 root 也没有办法将这个文件删除呢!赶紧解除配置!

请将该文件的 i 属性取消!
[root@www tmp]# chattr -i attrtest

图片 5

这个命令是很重要的,尤其是在系统的数据安全上面!由於这些属性是隐藏的性质,所以需要以 lsattr 才能看到该属性呦!其中,个人认为最重要的当属
+i 与 +a 这个属性了。+i
可以让一个文件无法被更动,对於需要强烈的系统安全的人来说,
真是相当的重要的!里头还有相当多的属性是需要 root 才能配置的呢!

此外,如果是 log file 这种的登录档,就更需要 +a
这个可以添加,但是不能修改旧有的数据与删除的参数了!

 

chattr (配置文件隐藏属性)

图片 6

[root@www ~]# chattr [+-=][ASacdistu] 文件或目录名称
选项与参数:
+   :添加某一个特殊参数,其他原本存在参数则不动。
-   :移除某一个特殊参数,其他原本存在参数则不动。
=   :配置一定,且仅有后面接的参数

A  :当配置了 A 这个属性时,若你有存取此文件(或目录)时,他的存取时间 atime
     将不会被修改,可避免I/O较慢的机器过度的存取磁碟。这对速度较慢的计算机有帮助
S  :一般文件是非同步写入磁碟的(原理请参考第五章sync的说明),如果加上 S 这个
     属性时,当你进行任何文件的修改,该更动会『同步』写入磁碟中。
a  :当配置 a 之后,这个文件将只能添加数据,而不能删除也不能修改数据,只有root 
     才能配置这个属性。 
c  :这个属性配置之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,
     但是在储存的时候,将会先进行压缩后再储存(看来对於大文件似乎蛮有用的!)
d  :当 dump 程序被运行的时候,配置 d 属性将可使该文件(或目录)不会被 dump 备份
i  :这个 i 可就很厉害了!他可以让一个文件『不能被删除、改名、配置连结也无法
     写入或新增数据!』对於系统安全性有相当大的助益!只有 root 能配置此属性
s  :当文件配置了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘
     空间,所以如果误删了,完全无法救回来了喔!
u  :与 s 相反的,当使用 u 来配置文件时,如果该文件被删除了,则数据内容其实还
     存在磁碟中,可以使用来救援该文件喔!
注意:属性配置常见的是 a 与 i 的配置值,而且很多配置值必须要身为 root 才能配置

#请尝试到/tmp底下创建文件,并加入 i 的参数,尝试删除看看。
[root@www ~]# cd /tmp
[root@www tmp]# touch attrtest     <==创建一个空文件
[root@www tmp]# chattr +i attrtest <==给予 i 的属性
[root@www tmp]# rm attrtest        <==尝试删除看看
rm: remove write-protected regular empty file `attrtest'? y
rm: cannot remove `attrtest': Operation not permitted  <==操作不许可
# 看到了吗?呼呼!连 root 也没有办法将这个文件删除呢!赶紧解除配置!

请将该文件的 i 属性取消!
[root@www tmp]# chattr -i attrtest

图片 7

这个命令是很重要的,尤其是在系统的数据安全上面!由於这些属性是隐藏的性质,所以需要以 lsattr 才能看到该属性呦!其中,个人认为最重要的当属
+i 与 +a 这个属性了。+i
可以让一个文件无法被更动,对於需要强烈的系统安全的人来说,
真是相当的重要的!里头还有相当多的属性是需要 root 才能配置的呢!

此外,如果是 log file 这种的登录档,就更需要 +a
这个可以添加,但是不能修改旧有的数据与删除的参数了!

 

二、SUID,SGID,Sticky Bit

特殊权限指的是针对第一点描述的rwx权限之外的权限,即x执行权限可以发生变化为s或者S等。 
由于文件存在属主与属组,因此也就有属主与属组的s或者S权限。

lsattr (显示文件隐藏属性)

图片 8

[root@www ~]# lsattr [-adR] 文件或目录
选项与参数:
-a :将隐藏档的属性也秀出来;
-d :如果接的是目录,仅列出目录本身的属性而非目录内的档名;
-R :连同子目录的数据也一并列出来! 

[root@www tmp]# chattr +aij attrtest
[root@www tmp]# lsattr attrtest
----ia---j--- attrtest

图片 9

使用 chattr 配置后,可以利用 lsattr 来查阅隐藏的属性。不过,
这两个命令在使用上必须要特别小心,否则会造成很大的困扰。例如:某天你心情好,突然将
/etc/shadow 这个重要的密码记录文件给他配置成为具有 i
的属性,那么过了若干天之后,
你突然要新增使用者,却一直无法新增!别怀疑,赶快去将 i 的属性拿掉吧!

 

lsattr (显示文件隐藏属性)

图片 10

[root@www ~]# lsattr [-adR] 文件或目录
选项与参数:
-a :将隐藏档的属性也秀出来;
-d :如果接的是目录,仅列出目录本身的属性而非目录内的档名;
-R :连同子目录的数据也一并列出来! 

[root@www tmp]# chattr +aij attrtest
[root@www tmp]# lsattr attrtest
----ia---j--- attrtest

图片 11

使用 chattr 配置后,可以利用 lsattr 来查阅隐藏的属性。不过,
这两个命令在使用上必须要特别小心,否则会造成很大的困扰。例如:某天你心情好,突然将
/etc/shadow 这个重要的密码记录文件给他配置成为具有 i
的属性,那么过了若干天之后,
你突然要新增使用者,却一直无法新增!别怀疑,赶快去将 i 的属性拿掉吧!

 

1、SUID

SUID 是 Set User ID的缩写 
SUID:
当运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者; 
  chmod u+s FILE 
  chmod u-s FILE 
  如果FILE本身原来就有执行权限,则SUID显示为s;否则显示S; 
  简言之,当我们启动某个二进制程序,该程序调用了其他非对象,此对象非启动者所有,也不具备相应权限时,此时无法成功执行。但是当我们为这个二进制程序赋予了SUID,则被调用的这个对象会被临时赋予该对象的所有者权限

下面直接演用鸟哥的示例来描述这个问题

# ls -hltr /usr/bin/passwd /etc/shadow 
-rwsr-xr-x. 1 root root 31K Feb 22 2012 /usr/bin/passwd
###权限为rws 
———-. 1 root root 950 Aug 25 2016 /etc/shadow

密码文件/etc/shadow只有root用户拥有修改权限,那其他用户是如何修改自身密码的呢,那就是由于命令passwd拥有SUID权限 
  a、vbird 对於 /usr/bin/passwd 这个程序来说是具有 x 权限的,表示 vbird
能运行 passwd; 
  b、passwd 的拥有者是 root 这个帐号; 
  c、vbird 运行 passwd 的过程中,会『暂时』获得 root 的权限; 
  d、/etc/shadow 就可以被 vbird 所运行的 passwd 所修改。 
但如果 vbird 使用 cat 去读取 /etc/shadow 时,他能够读取吗?因为 cat
不具有 SUID 的权限,所以 vbird 运行 『cat /etc/shadow』 时,是不能读取
/etc/shadow 的。 
如下示意图来说明: 
图片 12

对于上面的情形,假定希望vbird用户能够通过cat访问/etc/shadow,肿么实现呢,那就是赋予s权限啊

# ls -hltr /bin/cat
-rwxr-xr-x. 1 root root 48K Nov 22 2013 /bin/cat
# chmod u+s /bin/cat
# ls -hltr /bin/cat 
-rwsr-xr-x. 1 root root 48K Nov 22 2013 /bin/cat ###属主的x权限变成了s权限
$ cat /etc/shadow | head -3
root:$6$3KDwLJ7Cb.J2.ZMcmhHqThe/YvQ1tQtQOZX5gfbyOg/N.jl7OBzV.ZAzVzA/:17163:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

STID使用总结 
  SUID 权限仅对二进制程序(binary program)有效; 
  运行者对于该程序需要具有 x 的可运行权限; 
  本权限仅在运行该程序的过程中有效 (run-time); 
  运行者将具有该程序拥有者 (owner) 的权限。

STID使用示例:添加非oracle用户到dba,
oinstall组

文件特殊权限: SUID, SGID, SBIT

[root@www ~]# ls -ld /tmp ; ls -l /usr/bin/passwd
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 跟 t
)啊?啊…..头又开始昏了~ @_@ 因为 s 与 t
这两个权限的意义与帐户和进程较为相关!底下的说明先看看就好,如果看不懂也没有关系,
先知道s放在哪里称为SUID/SGID以及如何配置即可!

 

文件特殊权限: SUID, SGID, SBIT

[root@www ~]# ls -ld /tmp ; ls -l /usr/bin/passwd
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 跟 t
)啊?啊…..头又开始昏了~ @_@ 因为 s 与 t
这两个权限的意义与帐户和进程较为相关!底下的说明先看看就好,如果看不懂也没有关系,
先知道s放在哪里称为SUID/SGID以及如何配置即可!

 

2、SGID

SGID 是 Set Group
ID的缩写,SUID是在文件的所有者级别,而SGID则是在用户组级别生效,即 
  SGID 对二进制程序有用; 
  程序运行者对于该程序来说,需具备 x 的权限; 
  运行者在运行的过程中将会获得该程序用户组权限

SGID:
运行某程序时,相应进程的属组是程序文件自身的属组,而不是启动者所属的基本组; 
  chmod g+s FILE 
  chmod g-s FILE

对于具有SGID的目录,除了可执行的二进制程序外,支持一些群组特性。 
假定当前服务器存在用户组 dbateam以及用户oracle mysql sybase 
现在希望这个3个用户能够共享某一个特定的挂载目录,都有相应的权限进行读写以及能够编辑读写其他用户创建的文件

###以下创建一个组以及三个用户,并将组作为用户的附加组
# groupadd dbateam 
# useradd mysql -G dbateam
# useradd oracle -G dbateam
# useradd sybase -G dbateam

###创建一个目录并挂载
# mkdir -pv /dbateam 
# mount /dev/sdb1 /dbateam
# ls -hltr / |grep dbateam
drwxr-xr-x 2 root root 4.0K Aug 14 17:17 dbateam

# ### Author : Leshami QQ/Weixin : 645746311
# ### Blog : http://blog.csdn.net/leshami

###更改目录的属组为dbateam
# chown -R :dbateam /dbateam/
# ls -hltr / |grep dbateam
drwxr-xr-x. 2 root dbateam 6 Aug 14 17:17 dbateam

###使用创建的用户登陆并测试目录权限,如下,无写权限
[root@desktop ~]# su - sybase
[sybase@desktop ~]$ echo "sysbase">/dbateam/sybase.01
-bash: /dbateam/sybase.01: Permission denied

[root@desktop ~]# su - oracle
[oracle@desktop ~]$ echo "oracle">/dbateam/oracle.01
-bash: /dbateam/oracle.01: Permission denied

###对目录授予写入权限
[root@desktop ~]# chmod g+w /dbateam/
[root@desktop ~]# ls -hltr / |grep dbateam
drwxrwxr-x. 2 root dbateam 6 Aug 14 17:17 dbateam

###再次写入文件,此时成功
[sybase@desktop ~]$ echo "sysbase">/dbateam/sybase.01
[sybase@desktop ~]$ ls -hltr /dbateam/sybase.01
-rw-rw-r--. 1 sybase sybase 8 Aug 14 17:25 /dbateam/sybase.01 
###如上,此时文件的属主和属组都是sybase,非附加组,也就是说其他用户可以读取,但是无法修改

###下面为目录设定SGID,如下,目录属组权限变为rws
[root@desktop ~]# chmod g+s /dbateam/
[root@desktop ~]# ls -hltr / |grep dbateam
drwxrwsr-x. 2 root dbateam 22 Aug 14 17:25 dbateam

###再次写入一个文件
[sybase@desktop ~]$ echo "sybase02" >/dbateam/sybase.02
[sybase@desktop ~]$ ls -hltr /dbateam/
total 8.0K
-rw-rw-r--. 1 sybase sybase 8 Aug 14 17:25 sybase.01
-rw-rw-r--. 1 sybase dbateam 9 Aug 14 17:30 sybase.02
###如上,此时文件sybase.02的所属组变成了dbateam,而不是先前的sybase,此时其他用户可以进行修改。

###其他用户尝试修改
[oracle@desktop ~]$ echo "add oracle comment" >>/dbateam/sybase.02
[oracle@desktop ~]$ more /dbateam/sybase.02
sybase02
add oracle comment
[oracle@desktop ~]$ ls -hltr /dbateam
total 8.0K
-rw-rw-r--. 1 sybase sybase 8 Aug 14 17:25 sybase.01
-rw-rw-r--. 1 sybase dbateam 28 Aug 14 17:32 sybase.02

通过上面的例子得知,
当目录的属组具备了s权限后,该目录下创建的文件不再以用户自身的属组(基本组)作为文件的属组,而是上级目录的属组
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65

Set UID

当 s 这个标志出现在文件拥有者的 x 权限上时,例如刚刚提到的
/usr/bin/passwd 这个文件的权限状态:『-rwsr-xr-x』,此时就被称为 Set UID,简称为 SUID
的特殊权限。
那么SUID的权限对於一个文件的特殊功能是什么呢?基本上SUID有这样的限制与功能:

  • SUID 权限仅对二进位程序(binary program)有效;
  • 运行者对於该程序需要具有 x 的可运行权限;
  • 本权限仅在运行该程序的过程中有效 (run-time);
  • 运行者将具有该程序拥有者 (owner) 的权限。

讲这么硬的东西你可能对於 SUID
还是没有概念,没关系,我们举个例子来说明好了。 我们的 Linux
系统中,所有帐号的密码都记录在 /etc/shadow
这个文件里面,这个文件的权限为:『-r——–
1 root root』,意思是这个文件仅有root可读且仅有root可以强制写入而已。
既然这个文件仅有 root 可以修改,那么鸟哥的 vbird
这个一般帐号使用者能否自行修改自己的密码呢?
你可以使用你自己的帐号输入『passwd』这个命令来看看,嘿嘿!一般使用者当然可以修改自己的密码了!

唔!有没有冲突啊!明明 /etc/shadow 就不能让 vbird
这个一般帐户去存取的,为什么 vbird 还能够修改这个文件内的密码呢? 这就是
SUID 的功能啦!藉由上述的功能说明,我们可以知道

  1. vbird 对於 /usr/bin/passwd 这个程序来说是具有 x 权限的,表示 vbird
    能运行 passwd;
  2. passwd 的拥有者是 root 这个帐号;
  3. vbird 运行 passwd 的过程中,会『暂时』获得 root 的权限;
  4. /etc/shadow 就可以被 vbird 所运行的 passwd 所修改。

但如果 vbird 使用 cat 去读取 /etc/shadow 时,他能够读取吗?因为 cat
不具有 SUID 的权限,所以 vbird 运行 『cat /etc/shadow』 时,是不能读取
/etc/shadow 的。我们用一张示意图来说明如下:

图片 13
图4.4.1、SUID程序运行的过程示意图

另外,SUID 仅可用在binary program 上,
不能够用在 shell script 上面!这是因为 shell script 只是将很多的 binary
运行档叫进来运行而已!所以 SUID 的权限部分,还是得要看 shell script
呼叫进来的程序的配置, 而不是 shell script 本身。当然,SUID
对於目录也是无效的~这点要特别留意。

 

Set UID

当 s 这个标志出现在文件拥有者的 x 权限上时,例如刚刚提到的
/usr/bin/passwd 这个文件的权限状态:『-rwsr-xr-x』,此时就被称为 Set UID,简称为 SUID
的特殊权限。
那么SUID的权限对於一个文件的特殊功能是什么呢?基本上SUID有这样的限制与功能:

  • SUID 权限仅对二进位程序(binary program)有效;
  • 运行者对於该程序需要具有 x 的可运行权限;
  • 本权限仅在运行该程序的过程中有效 (run-time);
  • 运行者将具有该程序拥有者 (owner) 的权限。

讲这么硬的东西你可能对於 SUID
还是没有概念,没关系,我们举个例子来说明好了。 我们的 Linux
系统中,所有帐号的密码都记录在 /etc/shadow
这个文件里面,这个文件的权限为:『-r——–
1 root root』,意思是这个文件仅有root可读且仅有root可以强制写入而已。
既然这个文件仅有 root 可以修改,那么鸟哥的 vbird
这个一般帐号使用者能否自行修改自己的密码呢?
你可以使用你自己的帐号输入『passwd』这个命令来看看,嘿嘿!一般使用者当然可以修改自己的密码了!

唔!有没有冲突啊!明明 /etc/shadow 就不能让 vbird
这个一般帐户去存取的,为什么 vbird 还能够修改这个文件内的密码呢? 这就是
SUID 的功能啦!藉由上述的功能说明,我们可以知道

  1. vbird 对於 /usr/bin/passwd 这个程序来说是具有 x 权限的,表示 vbird
    能运行 passwd;
  2. passwd 的拥有者是 root 这个帐号;
  3. vbird 运行 passwd 的过程中,会『暂时』获得 root 的权限;
  4. /etc/shadow 就可以被 vbird 所运行的 passwd 所修改。

但如果 vbird 使用 cat 去读取 /etc/shadow 时,他能够读取吗?因为 cat
不具有 SUID 的权限,所以 vbird 运行 『cat /etc/shadow』 时,是不能读取
/etc/shadow 的。我们用一张示意图来说明如下:

图片 14
图4.4.1、SUID程序运行的过程示意图

另外,SUID 仅可用在binary program 上,
不能够用在 shell script 上面!这是因为 shell script 只是将很多的 binary
运行档叫进来运行而已!所以 SUID 的权限部分,还是得要看 shell script
呼叫进来的程序的配置, 而不是 shell script 本身。当然,SUID
对於目录也是无效的~这点要特别留意。

 

3、Sticky Bit

Sticky Bit:
在一个公共目录,每个都可以创建文件,删除自己的文件,但不能删除别人的文件; 
chmod o+t DIR 
chmod o-t DIR

###针对前面的示例,在公共目录dbateam中,需要设定在该目录创建文件的用户只能删除自身的文件,而不能删除其他用户创建的文件
[root@desktop ~]# chmod o+t /dbateam
[root@desktop ~]# ls -hltr / |grep dbateam
drwxrwsr-t. 2 root dbateam 38 Aug 14 17:30 dbateam

###下面使用sybase用户创建文件
[sybase@desktop ~]$ echo "don't touch">>/dbateam/sybase.03

###下面使用oracle用户来删除文件
[oracle@desktop ~ ]$ cd /dbateam
[oracle@desktop dbateam]$ ls -hltr
-rw-rw-r--. 1 sybase sybase 8 Aug 14 17:25 sybase.01
-rw-rw-r--. 1 sybase dbateam 28 Aug 14 17:32 sybase.02
-rw-rw-r--. 1 sybase dbateam 12 Aug 15 09:08 sybase.03
[oracle@desktop dbateam]$ rm -rf sybase.03
rm: cannot remove ‘sybase.03’: Operation not permitted ###此处提示没有权限
[oracle@desktop dbateam]$ echo "Oraclefile">oracle.01
[oracle@desktop dbateam]$ rm oracle.01 ###此处可以删除自身创建的文件
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

Set GID

当 s 标志在文件拥有者的 x 项目为 SUID,那 s 在群组的 x 时则称为 Set GID,
SGID 罗!是这样没错!^_^。 举例来说,你可以用底下的命令来观察到具有
SGID 权限的文件喔:

[root@www ~]# ls -l /usr/bin/locate
-rwx--s--x 1 root slocate 23856 Mar 15  2007 /usr/bin/locate

 

SGID 对二进位程序有用;与 SUID 不同的是,SGID
可以针对文件或目录来配置!如果是对文件来说, SGID 有如下的功能:

  • 程序运行者对於该程序来说,需具备 x 的权限;
  • 运行者在运行的过程中将会获得该程序群组的支持!

举例来说,上面的 /usr/bin/locate 这个程序可以去搜寻
/var/lib/mlocate/mlocate.db 这个文件的内容 (详细说明会在下节讲述),
mlocate.db 的权限如下:

[root@www ~]# ll /usr/bin/locate /var/lib/mlocate/mlocate.db
-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.db

除了 binary program 之外,事实上 SGID
也能够用在目录上,这也是非常常见的一种用途! 当一个目录配置了 SGID
的权限后,他将具有如下的功能:与 SUID 非常的类似,若我使用 vbird
这个帐号去运行 locate 时,那 vbird 将会取得 slocate 群组的支持,
因此就能够去读取 mlocate.db 啦!非常有趣吧!

  • 使用者若对於此目录具有 r 与 x 的权限时,该使用者能够进入此目录;
  • 使用者在此目录下的有效群组(effective group)将会变成该目录的群组;
  • 用途:若使用者在此目录下具有 w
    的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同。

SGID 对於专案开发来说是非常重要的!因为这涉及群组权限的问题。

 

Set GID

当 s 标志在文件拥有者的 x 项目为 SUID,那 s 在群组的 x 时则称为 Set GID,
SGID 罗!是这样没错!^_^。 举例来说,你可以用底下的命令来观察到具有
SGID 权限的文件喔:

[root@www ~]# ls -l /usr/bin/locate
-rwx--s--x 1 root slocate 23856 Mar 15  2007 /usr/bin/locate

 

SGID 对二进位程序有用;与 SUID 不同的是,SGID
可以针对文件或目录来配置!如果是对文件来说, SGID 有如下的功能:

  • 程序运行者对於该程序来说,需具备 x 的权限;
  • 运行者在运行的过程中将会获得该程序群组的支持!

举例来说,上面的 /usr/bin/locate 这个程序可以去搜寻
/var/lib/mlocate/mlocate.db 这个文件的内容 (详细说明会在下节讲述),
mlocate.db 的权限如下:

[root@www ~]# ll /usr/bin/locate /var/lib/mlocate/mlocate.db
-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.db

除了 binary program 之外,事实上 SGID
也能够用在目录上,这也是非常常见的一种用途! 当一个目录配置了 SGID
的权限后,他将具有如下的功能:与 SUID 非常的类似,若我使用 vbird
这个帐号去运行 locate 时,那 vbird 将会取得 slocate 群组的支持,
因此就能够去读取 mlocate.db 啦!非常有趣吧!

  • 使用者若对於此目录具有 r 与 x 的权限时,该使用者能够进入此目录;
  • 使用者在此目录下的有效群组(effective group)将会变成该目录的群组;
  • 用途:若使用者在此目录下具有 w
    的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同。

SGID 对於专案开发来说是非常重要的!因为这涉及群组权限的问题。

 

4、基于数字方法权限设定

对于文件目录的权限设定,可以基于数字的方法设定,如以下: 
r:4 
w:2 
x:1

由于有了特殊权限位,因此在rwx的基础之上,又增加了一个新的位,即除了前面描述的方法之外,基于数字方法设定也可以。 
SUID:4 
SGID:2 
SBIT:1

假设要将一个文件权限改为『-rwsr-xr-x』时,由于s在使用者权限中,所以是
SUID ,因此, 在原先的 755 之前还要加上 4 ,也就是:『 chmod 4755
filename 』来配置! 
此外,还有大 S 与大 T 的产生喔!大 S 与大 T
是由于被设定的文件或目录上的user, group 以及 others 都没有 x
这个可运行的标志( 因为 666 嘛 ),所以,这个 S, T
代表的就是『空的』啦!即文件或目录的拥有者都无法运行了,哪里来的权限给其他人使用?当然就是空的啦!
^_^

演示
###创建一个临时目录
[root@desktop ~]# mkdir -pv /tmp/project
mkdir: created directory ‘/tmp/project’
[root@desktop ~]# ls -hltr /tmp |grep project
drwxr-xr-x. 2 root root 6 Aug 15 09:28 project

###为临时目录配置SUID,如下属主位置产生了s
[root@desktop ~]# chmod 4755 /tmp/project/
[root@desktop ~]# ls -hltr /tmp |grep project
drwsr-xr-x. 2 root root 6 Aug 15 09:28 project

###修改目录权限为4766
[root@desktop ~]# chmod 4766 /tmp/project/
[root@desktop ~]# ls -hltr /tmp |grep project
drwsrw-rw-. 2 root root 6 Aug 15 09:28 project

###再次修改目录权限,此时产生了大S和大T,因为属组和其他组没有x权限
[root@desktop ~]# chmod 7766 /tmp/project/
[root@desktop ~]# ls -hltr /tmp |grep project
drwsrwSrwT. 2 root root 6 Aug 15 09:28 project
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

Sticky Bit

这个 Sticky Bit, SBIT 目前只针对目录有效,对於文件已经没有效果了。 SBIT
对於目录的作用是:

  • 当使用者对於此目录具有 w, x 权限,亦即具有写入的权限时;
  • 当使用者在该目录下创建文件或目录时,仅有自己与 root
    才有权力删除该文件

换句话说:当甲这个使用者於 A
目录是具有群组或其他人的身份,并且拥有该目录 w 的权限,
这表示『甲使用者对该目录内任何人创建的目录或文件均可进行
“删除/更名/搬移” 等动作。』 不过,如果将 A
目录加上了 SBIT 的权限项目时,
则甲只能够针对自己创建的文件或目录进行删除/更名/移动等动作,而无法删除他人的文件。

举例来说,我们的 /tmp 本身的权限是『drwxrwxrwt』,
在这样的权限内容下,任何人都可以在 /tmp
内新增、修改文件,但仅有该文件/目录创建者与 root
能够删除自己的目录或文件。这个特性也是挺重要的啊!你可以这样做个简单的测试:

  1. 以 root 登陆系统,并且进入 /tmp 当中;
  2. touch test,并且更改 test 权限成为 777 ;
  3. 以一般使用者登陆,并进入 /tmp;
  4. 尝试删除 test 这个文件!

 

Sticky Bit

这个 Sticky Bit, SBIT 目前只针对目录有效,对於文件已经没有效果了。 SBIT
对於目录的作用是:

  • 当使用者对於此目录具有 w, x 权限,亦即具有写入的权限时;
  • 当使用者在该目录下创建文件或目录时,仅有自己与 root
    才有权力删除该文件

换句话说:当甲这个使用者於 A
目录是具有群组或其他人的身份,并且拥有该目录 w 的权限,
这表示『甲使用者对该目录内任何人创建的目录或文件均可进行
“删除/更名/搬移” 等动作。』 不过,如果将 A
目录加上了 SBIT 的权限项目时,
则甲只能够针对自己创建的文件或目录进行删除/更名/移动等动作,而无法删除他人的文件。

举例来说,我们的 /tmp 本身的权限是『drwxrwxrwt』,
在这样的权限内容下,任何人都可以在 /tmp
内新增、修改文件,但仅有该文件/目录创建者与 root
能够删除自己的目录或文件。这个特性也是挺重要的啊!你可以这样做个简单的测试:

  1. 以 root 登陆系统,并且进入 /tmp 当中;
  2. touch test,并且更改 test 权限成为 777 ;
  3. 以一般使用者登陆,并进入 /tmp;
  4. 尝试删除 test 这个文件!

 

三、umask

umask指的就是文件或目录的默认权限。当我们登陆到服务器之后,需要创建文件或者目录,缺省的情况下,会为当前文件或目录设定一个权限,那这个权限到底是什么呢?那就由umask的值来确定。我们知道,基于文件或目录的权限包含了所属用户,所属组以及其他组,因此,至少需要三个位来设定。结合上面描述的SUID,SGID,SBIT这组,也就是说需要4个位来设定umask。下面直接通过演示来理解umask的用法及作用。

当前umask为0022,也就是说新创建的目录和文件需要减掉0022这些权限
即需要减掉-----w--w-,因此新创建的目录和文件的权限应当如下:

文件: (-rw-rw-rw-) - (-----w--w-) = -rw-r--r--
目录: (drwxrwxrwx) - (-----w--w-) = drwxr-xr-x

###演示
[root@desktop ~]# umask
0022
[root@desktop ~]# echo "test mask">/tmp/project/umask.01
[root@desktop ~]# ls -hltr /tmp/project/
total 4.0K
-rw-r--r--. 1 root root 10 Aug 15 09:43 umask.01

假定umask 为 0003 ,所以拿掉的权限为 --------wx,因此:
文件: (-rw-rw-rw-) - (--------wx) = -rw-rw-r--
目录: (drwxrwxrwx) - (--------wx) = drwxrwxr--

[root@desktop ~]# umask 0003
[root@desktop ~]# umask
0003
[root@desktop ~]# mkdir -pv /tmp/temp01
mkdir: created directory ‘/tmp/temp01’
[root@desktop ~]# ls -hltr /tmp |grep temp
drwxrwxr--. 2 root root 6 Aug 15 09:55 temp01

既然umask有4个位,能否在第一位也设定值呢,答案是否定的。无法设定特殊位。
[root@desktop ~]# umask 4003
-bash: umask: 4003: octal number out of range
[root@desktop ~]# umask 1003
-bash: umask: 1003: octal number out of range
[root@desktop ~]# umask 7003
-bash: umask: 7003: octal number out of range

SUID/SGID/SBIT 权限配置

 现在你应该已经知道数字型态更改权限的方式为『三个数字』的组合,
那么如果在这三个数字之前再加上一个数字的话,最前面的那个数字就代表这几个权限了!

  • 4 为 SUID
  • 2 为 SGID
  • 1 为 SBIT

假设要将一个文件权限改为『-rwsr-xr-x』时,由於 s 在使用者权限中,所以是
SUID ,因此, 在原先的 755 之前还要加上 4 ,也就是:『 chmod 4755
filename 』来配置!此外,还有大 S 与大 T 的产生喔!参考底下的范例啦!

图片 15

[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

图片 16

 

最后一个例子就要特别小心啦!怎么会出现大写的 S 与 T 呢?不都是小写的吗?
因为 s 与 t 都是取代 x 这个权限的,但是你有没有发现阿,我们是下达 7666
喔!也就是说, user, group 以及 others 都没有
x 这个可运行的标志( 因为 666 嘛 ),所以,这个 S, T
代表的就是『空的』啦!怎么说? SUID
是表示『该文件在运行的时候,具有文件拥有者的权限』,但是文件
拥有者都无法运行了,哪里来的权限给其他人使用?当然就是空的啦!
^_^

而除了数字法之外,你也可以透过符号法来处理喔!其中 SUID 为 u+s ,而 SGID
为 g+s ,SBIT 则是 o+t 罗!来看看如下的范例:

图片 17

# 配置权限成为 -rws--x--x 的模样:
[root@www tmp]# chmod u=rwxs,go=x test; ls -l test
-rws--x--x 1 root root 0 Aug 18 23:47 test

# 承上,加上 SGID 与 SBIT 在上述的文件权限中!
[root@www tmp]# chmod g+s,o+t test; ls -l test
-rws--s--t 1 root root 0 Aug 18 23:47 test

图片 18

 

SUID/SGID/SBIT 权限配置

 现在你应该已经知道数字型态更改权限的方式为『三个数字』的组合,
那么如果在这三个数字之前再加上一个数字的话,最前面的那个数字就代表这几个权限了!

  • 4 为 SUID
  • 2 为 SGID
  • 1 为 SBIT

假设要将一个文件权限改为『-rwsr-xr-x』时,由於 s 在使用者权限中,所以是
SUID ,因此, 在原先的 755 之前还要加上 4 ,也就是:『 chmod 4755
filename 』来配置!此外,还有大 S 与大 T 的产生喔!参考底下的范例啦!

图片 19

[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

图片 20

 

最后一个例子就要特别小心啦!怎么会出现大写的 S 与 T 呢?不都是小写的吗?
因为 s 与 t 都是取代 x 这个权限的,但是你有没有发现阿,我们是下达 7666
喔!也就是说, user, group 以及 others 都没有
x 这个可运行的标志( 因为 666 嘛 ),所以,这个 S, T
代表的就是『空的』啦!怎么说? SUID
是表示『该文件在运行的时候,具有文件拥有者的权限』,但是文件
拥有者都无法运行了,哪里来的权限给其他人使用?当然就是空的啦!
^_^

而除了数字法之外,你也可以透过符号法来处理喔!其中 SUID 为 u+s ,而 SGID
为 g+s ,SBIT 则是 o+t 罗!来看看如下的范例:

图片 21

# 配置权限成为 -rws--x--x 的模样:
[root@www tmp]# chmod u=rwxs,go=x test; ls -l test
-rws--x--x 1 root root 0 Aug 18 23:47 test

# 承上,加上 SGID 与 SBIT 在上述的文件权限中!
[root@www tmp]# chmod g+s,o+t test; ls -l test
-rws--s--t 1 root root 0 Aug 18 23:47 test

图片 22

 

观察文件类型:file

如果你想要知道某个文件的基本数据,例如是属於 ASCII 或者是 data
文件,或者是 binary , 且其中有没有使用到动态函式库 (share library)
等等的资讯,就可以利用 file 这个命令来检阅喔! 举例来说:

图片 23

[root@www ~]# file ~/.bashrc
/root/.bashrc: ASCII text  <==告诉我们是 ASCII 的纯文字档啊!
[root@www ~]# file /usr/bin/passwd
/usr/bin/passwd: setuid ELF 32-bit LSB executable, Intel 80386, version 1 
(SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for 
GNU/Linux 2.6.9, stripped
# 运行档的数据可就多的不得了!包括这个文件的 suid 权限、兼容於 Intel 386
# 等级的硬件平台、使用的是 Linux 核心 2.6.9 的动态函式库连结等等。
[root@www ~]# file /var/lib/mlocate/mlocate.db
/var/lib/mlocate/mlocate.db: data  <== 这是 data 文件!

图片 24

透过这个命令,我们可以简单的先判断这个文件的格式为何喔!

观察文件类型:file

如果你想要知道某个文件的基本数据,例如是属於 ASCII 或者是 data
文件,或者是 binary , 且其中有没有使用到动态函式库 (share library)
等等的资讯,就可以利用 file 这个命令来检阅喔! 举例来说:

图片 25

[root@www ~]# file ~/.bashrc
/root/.bashrc: ASCII text  <==告诉我们是 ASCII 的纯文字档啊!
[root@www ~]# file /usr/bin/passwd
/usr/bin/passwd: setuid ELF 32-bit LSB executable, Intel 80386, version 1 
(SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for 
GNU/Linux 2.6.9, stripped
# 运行档的数据可就多的不得了!包括这个文件的 suid 权限、兼容於 Intel 386
# 等级的硬件平台、使用的是 Linux 核心 2.6.9 的动态函式库连结等等。
[root@www ~]# file /var/lib/mlocate/mlocate.db
/var/lib/mlocate/mlocate.db: data  <== 这是 data 文件!

图片 26

透过这个命令,我们可以简单的先判断这个文件的格式为何喔!

创建目录默认权限:777-umask

1
2
3
4
5
6
7
[root@soysauce ~]# umask             # 默认umask为022
0022
[root@soysauce ~]# mkdir testdir        # 新建一个空目录
[root@soysauce ~]# ll
total 8
-rw------- 1 root root  518 Nov  1 20:02 iptables.sh
drwxr-xr-x 2 root root 4096 Nov  6 16:05 testdir        # 此新目录权限为777-022为755

相关文章