网络安全 频道

企业安全分享:Linux文件系统安全攻略

  在上述例子中,当其他用户执行 test3 这个程序时,他的身份将由于这个程序而暂时变成该 test3 程序的拥有者(由于 chmod 命令中使用了 s 选项),所以他就能够读取 test3.c 文件(虽然这个文件被设定为其他人不具备任何权限),这就是 s 的功能。在整个系统中特别是 root 本身,最好不要过多地设置这种类型的文件(除非必要),这样可以保障系统的安全,避免因为某些程序的 bug 而使系统遭到入侵。

  数字设定法

  数字设定法是与文字设定法功能等价的设定方法,只不过比文字设定法更加简便。数字表示的属性的含义为:0 表示没有权限,1 表示可执行权限,2 表示可写权限,4 表示可读权限,然后将其相加。所以数字属性的格式应为 3 个从 0 到 7 的八进制数,其顺序是(u)、(g)、(o)。其他的与文字设定法基本一致。

  如果想让某个文件的属主有“读 / 写”二种权限,须要把 4(可读)+2(可写)=6(读 / 写)。

  数字设定法的一般形式为:chmod [mode] 文件名。图 3 给出使用该数字设定法的例子:

企业安全分享:Linux文件系统安全攻略
▲图 3. chmod 命令数字设定法示意

  可以看到,图 3 中设定文件 test1 的属性为:文件属主(u)拥有读、写权限 ; 与文件属主同组人用户(g)拥有读权限;其他人(o)拥有读权限,而设定 test2 这个文件的属性为:文件主本人(u)具有可读 / 可写 / 可执行权限;与文件主同组人(g)可读 / 可执行权;其他人(o)没有任何权限。

  2、更改文件 / 目录的所有权

  该命令用来更改某个文件或目录的属主和属组。举个例子,root 用户把自己的一个文件拷贝给用户 xu,为了让用户 xu 能够存取这个文件,root 用户应该把这个文件的属主设为 xu,否则,用户 xu 无法存取这个文件。

  该命令的使用形式为:chown [ 选项 ] 用户或组 文件。

  Chown 的功能是将指定文件的拥有者改为指定的用户或组。用户可以是用户名或用户 ID。组可以是组名或组 ID。文件是以空格分开的要改变权限的文件列表,支持通配符。该命令的选项为:

  • -R:递归地改变指定目录及其下面的所有子目录和文件的拥有者。
  • -v:显示 chown 命令所做的工作。

  图 4 给出了使用该命令的例子,笔者把文件 test1 的所有者改为 super,把目录 ./test_dir 及其下面的所有文件和子目录的属主改成 super,属组改成 super。

企业安全分享:Linux文件系统安全攻略
▲图 4. chown 命令使用示意

  3、改变文件的执行权限

  通过前面的介绍我们知道,Linux 系统中的每一个文件都有一个所有者,表示该文件是谁创建的。同时,该文件还有一个组编号,表示该文件所属的组,一般为文件所有者所属的组。并且,在一般情况下,我们也可以通过设定对文件的权限来控制对其的相关操作。

  在此情况中,如果是一个可执行文件,那么在执行时,一般该文件只拥有调用该文件的用户具有的权限。而 setuid/setgid 则可以来改变这种设置:

  • setuid:设置使文件在执行阶段具有文件所有者的权限。典型的文件是 /usr/bin/passwd。如果一般用户执行该文件,则在执行过程中,该文件可以获得 root 权限,从而可以更改用户的密码

  • setgid:该权限只对目录有效。目录被设置该位后,任何用户在此目录下创建的文件都具有和该目录所属的组相同的组。

  • sticky bit:该位可以理解为防删除位。一个文件是否可以被某用户删除,主要取决于该文件所属的组是否对该用户具有写权限。如果没有写权限,则这个目录下的所有文件都不能被删除,同时也不能添加新的文件。如果希望用户能够添加文件但同时不能删除文件。则可以对文件使用 sticky bit 位。设置该位后,j 即便用户对目录具有写权限,也不能删除该文件。

  在前面我们讨论了通过文字设定和数字设定的方法来设定文件 / 目录的访问权限问题,同样的道理,下面我们通过这两种方法来介绍如何操作这些标志。操作这些标志与操作文件权限的命令是一样的,都是使用 chmod 命令来进行:

  文字设定法

  chmod u+s filename:为文件 filename 加上 setuid 标志。

  chmod g+s dirname:为目录 dirname 目录加上 setgid 标志。

  chmod o+t filename:为文件 filename 加上 sticky 标志。

  数字设定法

  对一般文件通过三组八进制数字来置标志,如 444、777、644 等。如果设置这些特殊标志,则在这组数字之前外加一组八进制数字。如 4666、4777 等。这一组八进制数字三位的意义如下:

  • setuid 位:如果该位为 1,显示为“S”,则表示设置 setuid,其显示在原来的 x 标志位上;

  • setgid 位:如果该位为 1,显示为“S”,则表示设置 setgid,其显示在原来的 x 标志位上;

  • sticky 位:如果该位为 1,显示为“T”,则表示设置 sticky,其显示在原来的 x 标志位上。

  设置完这些标志后,可以用 ls – l 命令来查看。如果有这些标志,则会在原来的执行标志位置上显示。如下所示:

  r-srw-r--:表示有 setuid 标志;

  rwxrwsrw-:表示有 setgid 标志;

  rwxrw-rwt:表示有 sticky 标志。

  如果本来在该位上有 x,则这些特殊标志显示为小写字母(s,s,t)。否则,显示为大写字母(S,S,T)。

  另外非常值得读者注意的是,虽然 setuid/setgid 机制非常方便实用,但是由于提升了执行者的权限,因而不可避免地存在许多安全隐患和风险,所以作者并不太赞成广大读者广泛使用,并且,在实际的系统管理过程中,我们还经常需要找出设置有这些标志的文件,并对他们进行检查和清理,那么,一般我们可以使用如下命令来对系统中的具有特殊标志的文件进行寻找:

  #find -perm +6000 – type f – exec ls – ld {}\; > setuid.txt&
0
相关文章