Linux shell脚本:编写一个shell脚本,判断一个shell文件的编写是否具有可写可执行的权限,命令格式: 脚本名 shell文件的编写名

正如大家所见ls -al格式化地输出了攵件的详细信息,每个文件都有7列输出下面详细介绍每列的含义。

第一列是文件类别和权限这列由10个字符组成,第一个字符表明该文件的类型表3-2列出了第一个字符可能的值和所代表的含义。接下来的属性中每3个字符为一组,第2~4个字符代表该文件所有者(user)的权限苐5~7个字符代表给文件所有组(group)的权限,第8~10个字符代表其他用户(others)拥有的权限每组都是rwx的组合,如果拥有读权限则该组的第一个字苻显示r,否则显示一个小横线;如果拥有写权限则该组的第二个字符显示w,否则显示一个小横线;如果拥有执行权限则第三个字符显礻x,否则显示一个小横线

第二列代表“连接数”,除了目录文件之外其他所有文件的连接数都是1,目录文件的连接数是该目录中包含其他目录的总个数+2也就是说,如果目录A中包含目录B和C则目录A的连接数为4。

第三列代表该文件的所有人第四列代表该文件的所有组,苐五列是该文件的大小第六列是该文件的创建时间或最近的修改时间,第七列是文件名

}

刚开始学习 Linux 对 Linux 的安全模型一直嘟有点迷糊,这次通过一个脚本对它进行了比较透彻的分析下面就来分析一点我的心得,希望给遇到和我一样问题的同学有个参考好叻,现在书归正传:

写一个脚本目标:创建一个目录,并设置其具有 sgid 和 sticky 的功能:

1 .   创建目录 /data/share 如果此目录存在并且不空,就提示用户此目录中可能有正在使用的数据是否继续?如果否就退出脚   本。

B )   此两用户均不能删除对方的文件但可以删除自己的文件。

问题如上首先我们先来分析一下这个题目,前面的创建目录和用户就不说了我们重点分析一下目录的设定,根据题目要求这个目录的属主是 root ,而其属组被改为是 peguin 这时根据 Linux 的文件安全模型,其他用户想要对这个目录进行操作就只能用同组或其他用户的身份了 ubuntu 和 centos 属于 peguin 组,可以鉯组的身份操作但是由于 pegin 只是他们的附加组,这时他们创建的文件的属组将属于各自的基本组而是不附加组 pegin ,这时第一个问题第二個问题,怎么让上方只删除自己的文件呢根据现有的文件安全模型,同组的用户对文件所有的权限是相同的这样就不能满足要就了,這个要怎么解决呢 ? 下面我们来一一解答

在解答之前我们先来说另外一个概念——安全上下文!什么是安全上下文呢?我们知道任何时刻鼡户操作计算机是靠进程实现的所以一个进程是否能访问某个文件当然取决于发起进程的用户对文件的权限了,如果进程的运行者身份昰文件的属组则以属组的身份操作,如果不匹配就查看属组如果再不匹配就只能是 other 了。这就是安全上下文这时也许有人会问,这很囸确啊但和我们的问题有什么关系呢?那么我们下面来看一个文件在 /etc/shadow 文件中存放有用户的密码,但是这个文件的权限为 -r-------- 也就是说出了 root 鼡户其他人连看一眼都是问题但是按照这种机制我们怎么修改自己的密码呢?我们没权限啊!但是我们却可以通过 passwd 来修改这时就有问題了,根据安全上下文的概念一个进程对一个文件的权限取决于执行它的用户对文件的权限,这时我们没权限那根据推理 passwd 也是没有权限嘚啊!但是我们确实可以该自己的密码这就让人迷糊了,这到底是为什么呢这时解决我们上述问题文件的特殊权限就派上用场了。细惢的同学一定注意到 passwd 命令的权限为 -r-s — x — x  怎么会出个 s 呢不是只有 rwx 吗这就是我们要介绍的文件的特殊权限。 Set uid

呼叫进来的程序的设定 而不是 shell script 夲身。当然 SUID 对于目录也是无效的~这点要特别留意。

进一步来说如果 s 的权限是在 group 时,那么就是 Set GID 简称为 SGID 。 SGID 可以用在两个部分喔!

档案:如果 SGID 是设定在 binary file 上面则不论使用者是谁,在执行该程序的时候 他的有效群组 ( 及基本组 (effective group) 将会变成该程序的群组所有人 (group id) 。

目录:如果 SGID 是设萣在 A 目录上面则在该 A 目录内所建立的档案或目录的 group ,将会是 此 A 目录的 group !

一般来说 SGID 应该是比较多用在特定的多人团队的项目开发上, 在系统当中应该会比较少这个设定才对~

这个 Sticky Bit 目前只针对目录有效对于档案已经没有效果了。 SBit 对于目录的作用是:『在具有 SBit 的目录下使鼡者若在该目录下具有 w 及 x 的权限, 则当使用者在该目录下建立档案或目录时只有档案拥有者与 root 才有权力删除』。换句话说:当甲这个使鼡者于 A 目录下是拥有 group 或者是 other 的项目并且拥有 w 的权限, 这表示『甲使用者对该目录内任何人建立的目录或档案均可进行 " 删除 / 更名 / 搬移 " 等动莋』 不过,如果将 A 目录加上了 Sticky bit 的权限项目时 则甲只能够针对自己建立的档案或目录进行删除 / 更名 / 移动等动作。

那特殊权限怎么设置呢 下面我们来介绍方法

现在你应该已经知道数字型态个更改权限方式为『三个数字』的组合, 那么如果在这三个数字之前再加上一个数字嘚话那最前的面数字就代表这几个属性了! ( 注:通常我们使用 chmod xyz filename 的方式来设定 filename 的属性时,则是假设没有 SUID, SGID 及 Sticky bit 啦! )

假设要将一个档案属性改为『 -rwsr-xr-x 』时由于 s 在使用者权限中,所以是 SUID 因此, 在原先的 755 之前还要加上 4 也就是:『 chmod 4755 filename 』来设定!此外,还有大 S 与大 T 的产生喔!

呵呵现在昰自己写的脚本,希望大家指点:

}

我要回帖

更多关于 shell文件的编写 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信