Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29094
  • 博文数量: 6
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 60
  • 用 户 组: 普通用户
  • 注册时间: 2017-11-02 19:46
个人简介

刚开始接触linux运维开发,希望有个自己的博客,能够记录自己生活学习的点点滴滴,能够记录自己的成长,学过的东西,学过的技术,说忘就忘。同时希望以后入行后有个地方能够分享自己的工作经验,这大概就是我的申请理由,希望这个博客能够实现为这个小小的运维人员的需求,谢谢

我的朋友
最近访客

分类: LINUX

2017-11-05 23:14:51

suid/guid是什么?

suid意味着如果A用户对属于他自己的shell脚本文件设置了这种权限,那么其他用户在执行这个脚本的时候就拥有了A用户的权限。所以,如果 root用户对某一脚本设置了这一权限的话则其他用户执行该脚本的时候则拥有了root用户权限。同理,guid意味着执行相应脚本的用户则拥有了该文件 所属用户组中用户的权限。

为什么使用suid/guid?

举个例子:要对数据库系统进行备份需要有系统管理权限,那么我可以写几个脚本,并设置了它们的guid,这样我指定的一些用户只要执行这些脚本就 能够完成相应的工作,而无须以数据库管理员的身份登录,以免不小心破坏了数据库服务器。通过执行这些脚本,他们可以完成数据库备份及其他管理任务,但是在 这些脚本运行结束之后,他们就又回复到他们作为普通用户的权限。

有相当一些命令也设置了suid和guid。如果想找出这些命令,可以进入/bin或/sb in目录,执行下面的命令:

$ ls -l | grep '^...s'
上面的命令是用来查找suid文件的;

$ ls -l | grep '^...s..s'
上面的命令是用来查找suid和guid的。

如何设置suid/guid?

如果希望设置suid,那么就将相应的权限位之前的那一位设置为4;如果希望设置guid,那么就将相应的权限位之前的那一位设置为2;如果希望两者都置位,那么将相应的权限位之前的那一位设置为4+2。

一旦设置了这一位,一个s将出现在x的位置上。记住:在设置suid或guid的同时,相应的执行权限位必须要被设置。例如,如果希望设置guid,那么必须要让该用户组具有执行权限。

如果想要对文件login设置suid,它当前所具有的权限为rwx rw- r-- (764),需要在使用chmod命令时在该权限数字的前面加上一个4,即chmod 4764,这将使该文件的权限变为rws rw- r--。

$ chmod 4764 login

还可以使用符号方式来设置suid/guid。如果某个文件具有这样的权限: rwx r-x r-x,那么可以这样设置其suid/guid:

chmod u+s
chmod u+g

代码:
      命令          结果        含义
chmod 4755   rws r-x r- x   文件被设置了s u i d,文件属主具有读、写和执行的权限,其他用户具有读和执行的权限
chmod 6711   rws --s --x    文件被设置了s u i d和g u i d,文件属主具有读、写和执行的权限,其他用户具有执行的权限
chmod 4764   rws rw- r- -   文件被设置了s u i d,文件属主具有读、写和执行的权限,属组用户具有读和执行的权限,用户具有读权限
4、还可以使用符号方式来设置s u i d / g u i d。如果某个文件具有这样的权限: rwx r-x r- x,那么可以这样设置其s u i d:
代码:
chmod u+s
于是该文件的权限将变为: rws r-x r-x


在查找设置了s u i d的文件时,没准会看到具有这样权限的文件:rwS r-x r- x,其中S为大写。
它表示相应的执行权限位并未被设置,这是一种没有什么用处的s u i d设置,可以忽略它的存在。

********************************************************************************************************************

如何计算umask

如何计算umask值
u m a s k命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、属组、其他用户)存在一个相应的u m a s k值中的数字。对于文件来说,这一数字的最大值分别是6。系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用c h m o d命令增加这一权限。目录则允许设置执行权限,这样针对目录来说, u m a s k中各个数字最大可以到7。
该命令的一般形式为:
代码:
umask nnn
其中n n n为u m a s k置0 0 0 - 7 7 7。
计算u m a s k值:
可以有几种计算u m a s k值的方法,通过设置u m a s k值,可以为新创建的文件和目录设置缺省权限。
与权限位相对应的u m a s k值。
代码:
umask      文件      目录
0      6      7
1       6      6                  
2      4      5
3      4      4
4      2      3
5      2      2
6      0      1
7      0      0
在计算u m a s k值时,可以针对各类用户分别按上面那张表中按照所需要的文件/目录创建缺省权限查找对应的u m a s k值。
例如,u m a s k值
代码:
0       6    7
0       6    7
2       4    5
所以002所对应的文件和目录创建缺省权限分别为6 6 4和7 7 5。
还有另外一种计算u m a s k值的方法。我们只要记住u m a s k是从权限中“拿走”相应的位即可。
代码:
umask      文件      目录
0      6      7
1       6      6                  
2      4      5
3      4      4
4      2      3
5      2      2
6      0      1
7      0      0
例如,对于u m a s k值0 0 2,相应的文件和目录缺省创建权限是什么呢?
引用:
第一步,我们首先写下具有全部权限的模式,即7 7 7 (所有用户都具有读、写和执行权限)。
第二步,在下面一行按照u m a s k值写下相应的位,在本例中是0 0 2。
第三步,在接下来的一行中记下上面两行中没有匹配的位。这就是目录的缺省创建权限。
稍加练习就能够记住这种方法。
第四步,对于文件来说,在创建时不能具有文件权限,只要拿掉相应的执行权限比特即可。
这就是上面的例子,其中u m a s k值为0 0 2:
引用:
1) 文件的最大权限rwx rwx rwx (777)
2) umask值为0 0 2 - - - - - - -w-
3) 目录权限rwx rwx r-x (775) 这就是目录创建缺省权限
4) 文件权限rw- rw- r-- (664) 这就是文件创建缺省权限
下面是另外一个例子,假设这次u m a s k值为0 2 2:
引用:
1) 文件的最大权限rwx rwx rwx (777)
2 ) u m a s k值为0 2 2 - - - -w- -w-
3) 目录权限rwx r-x r-x (755) 这就是目录创建缺省权限
4) 文件权限rw- r-- r-- (644) 这就是文件创建缺省权限
如果想知道当前的umask 值,可以使用u m a s k命令:
代码:
#su sam    /*切换到sam用户玩境下
#umask    /*查看sam的umask
0022
前面多了个0,是suid/guid的
代码:
$ touch file1
$ mkdir file2
$ ls -l
总用量 8
-rw-r--r--    1 sam      adm             0 10月 30 19:27 file1
drwxr-xr-x    2 sam      adm          4096 10月 30 19:28 file2
引用:
新建文件file1和目录file2,查看新建文件和目录的默认权限,umask为022时
目录权限rwx r-x r-x (755)
文件权限rw- r-- r-- (644)
更改umask默认值由022至002
代码:
$ umask 002
$ touch file3
$ ls -l
总用量 12
-rw-r--r--    1 sam      adm             0 10月 30 19:27 file1
drwxr-xr-x    2 sam      adm          4096 10月 30 19:28 file2
-rw-rw-r--    1 sam      adm             0 10月 30 19:34 file3
drwxrwxr-x    2 sam      adm          4096 10月 30 19:34 file4
引用:
可以看到,新建文件和目录的默认权限改变了,umask为002时
目录权限rwx rwx r-x (775)
文件权限rw- rw- r-- (664)
可以看见,$ umask 002已生效
说明
当新增文件或目录时,预设的使用权限,由 umask 这个内设值所规定的。
一般情况下,umask 会被设定在 shell 的启始档案中。
引用:
对 bash 的使用者来说,个人的启始档案是 $HOME/.bashrc,使用者可以将 umask 设定在其中。像 RedHat 9 是放 /etc 之下,档名为 bashrc。
当使用者没有自行设定,umask 设定值便来自于此系统的默认设定。
tcsh 的个人启始档案为 ~/.tcshrc,系统设定文件在 /etc/csh.cshrc。
代码:
linux 操作系统的角度,完整的权限设定值是四位数字。
第一位数,代表档案或目录的特殊属性。 4 代表 "suid"﹔2 代表 "sgid"﹔1 代表 "粘滞位 - save text image"。
后三位数,依序代表 "user-档案拥有者","group-群组","other-其它"。
每一位数,代表三种权限的叠加,4-读(r),2-写(w),1-执行(x)。
被禁止的权限则以 0 带入。
引用:
对 umask 来说,有效的设定值只有后三位数。在 bash 中,虽然可带入四位数字,但第一个数字,必须为 0。这点请注意。
代码:
指令 umask 的设定值以三个八进位的数字“nnn”代表。
第一个设定数字给使用者自己(owner user),
第二个则是设定给用使用者所属的群体(group),
第三个给不属于同群体的其它使用者(other)。
每一位数字的设定值都是三项不同权限的数值加总,read 权限数值为 4;write 权限数值为 2;execute 权限数值为 1。
结合了前三者的权限数值,单一的数字可设定的范围是 0 ~ 7;整体的可设定范围是 000 ~ 777。
umask 的设定值,对目录,与对档案的实质作用是有差别的。
代码:
注意:
当我们设定为 000 时,会得到完全开放的目录权限 777,以及文件权限 666。为何文件只得到 666 呢?因为文件权限中的 execute 权限已被程序移除,因此,不管你设定什么 umask 数值,文件都不会出现 execute 权限。
umask 语法如下:
代码:
umask who operator permissions
其中,参数的含义如下:
代码:
who:表示下列字符中的一个、两个或全部:
u(表示用户权限)
g(表示组用户权限)
o(表示其他用户权限)
a (ugo 的缩写形式)
如果忽略了字符 who,operator 和 permissions 将适用于所有类(等同于 a 或 ugo)。
代码:
operator:字符 +、- 或 = 之一:
+ 增加权限。
- 取消权限。
= 设定权限。
代码:
permissions:字符或字符组合 r、w、x、rx、wx、rw 或 rwx 之一,用于为相应的 who 和 operator 指定读、写和(或)执行(搜索)权限。
如果未指定 permissions,则相应的 who 中的现有文件创建模式掩码不会发生更改。
如果在 shell 提示符下设置 umask,它将只适用于当前登录会话中的 shell 和 subshell。但不适用于以后登录的会话。要在登录时自动应用 umask 设置,请将 umask 命令添加到 .profile 文件(对于 POSIX 和 Bourne Shell 用户)或 .login 文件中(对于 C Shell 用户)。
选项说明
代码:
bash
          -S
以 "u=rwx,g=rx,o=rx" 这种较人性的格式取代数字显示。
代码:
-p
当使用 -p 选项,但 mode 省略,输出格式为 umask mode (可以做为下 umask 指令使用)。当模式改变成功,或 mode 参数被省略,执行的状态值为 0。否则状态值为 1。
实例说明
bash
首先,让我们先显示目前环境的 umask 设定情况
代码:
# umask
0022
#
得到的数值为 "0022"。所以,建立新档案的预设权限是 644,目录则是755。如果不习惯看数字,我们可以使用 -S 选项来显示设定值
代码:
# umask -S
u=rwx,g=rx,o=rx
#
实际建个档案与目录看看
代码:
# ls > fileA
# mkdir dirB
# ls -l
总计 8
drwxr-xr-x    2 root     root         4096 12月 21 16:42 dirB
-rw-r--r--    1 root     root            6 12月 21 16:42 fileA
#
可以看到文件和目录的不同
代码:
tcsh
$ umask
22
$
$ umask 000
$ umask
0
$  
从以上,我们可以知道,tcsh 简单到连 0 都懒的显示...
要设置 umask 值,使文件所有者具有读写执行权限,属组的其他用户具有只读权限,除此之外的其他用户没有访问权限 (-rw-r-------),请输入以下内容:
代码:
$ umask u=rwx,g=r,o=r
$ touch file5
$ mkdir file6
$ ls -l
总用量 16
-rw-r--r--    1 sam      adm             0 10月 30 19:48 file5
drwxr--r--    2 sam      adm          4096 10月 30 19:48 file6
要确定当前的 umask 设置,请键入:
代码:
$ umask -S
u=rwx,g=r,o=r

阅读(1346) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~