Linux权限控制:s选项的含义解析 (linux权限的增加选项中s表示什么)

在Linux系统中,文件或目录的权限管理是非常重要的。每个文件或目录都有三种权限分别是:读取权限、写入权限和执行权限。除此之外,在Linux系统中,还可以使用s选项来进一步控制文件或目录的权限。

什么是s选项?

s选项指的是Set-User-ID和Set-Group-ID。当文件或目录启用了Set-User-ID或Set-Group-ID特性时,执行该文件或访问该目录的用户或组将自动继承该文件或目录的所有者和组。简而言之,启用了s选项后,文件或目录将使用其所有者或组的权限而不是执行用户或组的权限。

s选项有两种类型:

1. Set-User-ID

2. Set-Group-ID

Set-User-ID

Set-User-ID标志为“s”。当文件启用Set-User-ID特性后,任何执行该文件的用户将自动继承该文件的所有者的权限。这意味着即使执行该文件的用户没有访问该文件的权限,他们也可以执行该文件,并以文件所有者的身份访问该文件。这种功能通常用于需要管理员特权的程序。

例如,/usr/bin/passwd程序允许用户更改自己的密码。该程序只有在拥有root用户权限时才能修改/etc/shadow文件。为了让该程序在普通用户权限下正常工作,passwd程序可以使用Set-User-ID特性,这样它将始终以root用户的身份运行,即使普通用户执行该程序也是如此。

下面是一个简单的例子来说明Set-User-ID的用法:

创建一个test脚本:

“`

$ cat > test.sh

#!/bin/bash

touch /tmp/file.txt

EOF

$ chmod +x test.sh

$ ls -l test.sh

-rwxr-xr-x 1 user user 36 May 15 10:33 test.sh

“`

使用普通用户身份运行该脚本:

“`

$ ./test.sh

touch: cannot touch ‘/tmp/file.txt’: Permission denied

“`

直接运行该脚本是不行的,因为普通用户没有在/tmp目录下创建文件的权限。

现在启用Set-User-ID特性:

“`

$ chmod u+s test.sh

$ ls -l test.sh

-rwsr-xr-x 1 user user 36 May 15 10:33 test.sh

“`

再次运行该脚本:

“`

$ ./test.sh

“`

再次使用普通用户的身份运行该脚本时将会成功,因为此时所有者的权限继承了该文件的执行用户的权限。

Set-Group-ID

Set-Group-ID标志为“s”。当目录启用Set-Group-ID特性后,任何在该目录内创建文件或目录的用户将自动继承该目录的组。这意味着即使这些文件或目录的所有者是创建它们的用户本身,它们的组将是该目录的组。这种功能通常用于多用户访问同一目录的情况下,希望所有文件的组始终与目录的组相同。

下面是一个简单的例子来说明Set-Group-ID的用法:

创建一个test目录:

“`

$ mkdir test

$ chmod 777 test

$ ls -ld test

drwxrwxrwx 2 user user 4096 May 15 14:29 test

“`

用普通用户user1创建一个文件:

“`

$ touch test/file.txt

$ ls -l test

total 0

-rw-r–r– 1 user1 user 0 May 15 14:30 file.txt

“`

现在启用Set-Group-ID特性:

“`

$ chmod g+s test

$ ls -ld test

drwxrwsrwx 2 user user 4096 May 15 14:29 test

“`

现在再次用用户user1访问test目录:

“`

$ touch test/file1.txt

$ ls -l test

total 0

-rw-r–r– 1 user1 user 0 May 15 14:30 file.txt

-rw-r–r– 1 user1 user 0 May 15 14:32 file1.txt

“`

这时,创建的文件的组将与目录test的组相同。

在Linux系统中,s选项可以进一步控制文件或目录的访问权限。启用Set-User-ID或Set-Group-ID特性后,文件或目录将使用其所有者或组的权限而不是执行用户或组的权限。使用Set-User-ID和Set-Group-ID特性能够提高系统的安全性以及多用户共享目录的管理效率。

相关问题拓展阅读:

Linux权限管理基本知识

Linux权限管理基本知识大全

  Linux系统有什么基本权限,权限管理命令是什么?下面跟我一起来看看吧!

  一、基本权限

  linux权限机制采用UGO模式。其中 u(user)表示所属用户、g(group)表示所属组、o(other)表示除了所属用户、所属组之外的情况。

  u、g、o 都有读(read)、写(write)、执行(excute) 三个权限,所以UGO模式是三类九种基本权限。

  用命令 ls -l 可列出文件的权限,之一列输出明确了后面的输出(后面一列代表 ugo权限)。之一个字母对应的关系:

  罩野“-” 普通文件

  “d” 目录

  ”l“ 符号链接

  ”c“ 字符设备

  ”b” 块设备

  ”s” 套接字

  ”p” 管道

  修改文件或目录的所属用户: chown 文件名 | 目录名 用户

R 该参数以递归的方式修改目录下所有文件的所属用户,参数可以敲 chown –help 查看。

  修改文件或目录的所属组: chgrp 文件名 | 目录名 组名

R 该参橘闷世数以递归的方式修改目录下的所有文件的’所属组。

  命令chmod 用来修改文件或目录的权限: chmod -参数 模式 文件 | 目录

  例子: 修改目录 log下所有文件的权限为700

  chmod -R 700 log

  注:700的来历是 u g o

  rwx rwx rwx

000

  关于 chmod 命令的权限模式除了数字表示,还可以是 u、g、o 、a 加 +、- 来表示。格式如下:u、g、o分别代表用户、属组和其他,a 就是

  all ,可以代替ugo。 +、- 代表增加或删除对应的权限,r、w、x 代表三种权限,分别是读、写、执行。

  例子:对于目录 log下的所有文件(已有权限是700)增加所属组(g)的读(r)、执行(x)权限。

  chmod -R g+rx log

  类似的命令可能还有很多,这里只是举几个最基本且常用的例子。很多命令用到时,再去查也可以。还可参考《鸟哥的Linux私房菜》。

  二、特殊权限

  Linux的3个特殊的权限,分别是setuid、setgid和stick bit。

  setuid权限(S):只有用户可拥有,出现在执行权限(x)的位置。

  setuid权限允许用户以其拥有者的权限来执行可执行文件,即使这个可执行文件是由其他用户运行的。

  setgid权限(S):对应于用户组,出现在执行权限(x)的位置。

  setgid权限允许以同该目录拥有者所在组相同的有效组权限来允许可执行文件。但是这个组和实际发起命令的用户组不一定相同。

  stick bit (t /T):又名粘滞位,只有目录才有的权限,出现在其他用户权限(o)中的执行位置(x)。当一个目录设置了粘滞位,只有创建了该目录的用户才能删除目录中的文件,但是其他用户组和其他用户也有写权限。使用 t 或 T来表示。若没有设置执行权限,但是设置了粘滞圆肢位,使用 t;若同时设置了执行权限和粘滞位使用 T。典型的粘滞位使用是 /tmp 目录,粘滞位属于一种写保护。

  设置特殊权限:

  setuid: chmod u+s filename

  setgid: chmod g+s directoryname

  stick bit: chmod o+t directoryname

  用数字表示特殊权限,是在基本权限之上的。浊嘴笨腮说不清楚,看例子:

  例子:将上面例子中的log日志目录(已有权限 700)权限设置为755。特殊权限是类似 /tmp目录的 stick bit有效。

  特殊权限 基本权限

  setuid setgid stick bit user group other

rwx rwx rwx

000

  所以,设置特殊权限(stick bit)的命令应该是:chmod 1755 log

  设置特殊权限后,ls -dl 查看该目录:drwxr-xr-t 2 gg gg月 11 19:05 log ( 注意 other 的 x 位是代表特殊权限的字母 t )

  取消该特殊权限的命令:chmod 755 log 。如此 stick bit的权限就没有了。

  再次 ls -dl 查看该目录: drwxr-xr-x 2 gg gg月 11 19:15 log ( 注意最后一位已经变为代表普通权限的字母x )

  需要注意的是,最前面一位 ”1“ 就是特殊权限位。其他两个特殊权限的设置也类似。setuid使用不是无限制的。出于安全目的,只能应用在Linux ELF格式二进制文件上,而不能用于脚本文件。

  三、高级权限

  ACL(Access Control List),访问控制列表是Linux下的的高级权限机制,可实现对文件、目录的灵活权限控制。ACL 允许针对不同用户、

  不同组对同一个目标文件、目录进行权限设置,而不受UGO限制。

  在一个文件系统上使用ACL需要在挂载文件系统的时候打开ACL功能。而根分区(ROOT)默认挂载的时候支持ACL。

  命令:mount -o acl /挂载路径

  例子:mount -o acl /dev/sdb1 /mnt

  查看一个文件的ACL设置的命令: getfacl file

  (针对一个用户)为一个文件设置指定用户的权限的命令: setfacl -m u:username:rwx filename

  (针对一个组)为一个文件设置指定组的权限的命令: setfacl -m g:groupname:r-x filename

  删除一个ACL设置的命令: setfacl -x u:username filename

;

关于linux权限的增加选项中s表示什么的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Linux权限控制:s选项的含义解析 (linux权限的增加选项中s表示什么)