Featured image of post Linux文件/目录setuid和setgid

Linux文件/目录setuid和setgid

1480 words

setuid

setuid的作用是让执行该命令的用户以该命令拥有者的权限去执行。

例如:普通用户执行passwd时会拥有root的权限,这样就可以修改/etc/passwd这个文件,正是因为passwd命令被设置了setuid权限,passwd命令的详细权限如下所示:

图片

可以看到passwd命令的拥有者的可执行位是s,则说明passwd命令被设置了setuid权限。

设置setuid命令有两种方法,一种是数字设置,另一种是通过助记语法。(建议使用助记语法设置)

  • 数字设置命令:chmod 4xxx 文件/目录

其中xxx表示文件/目录的所有者、同组用户和其他用户的权限(读写执行)。

  • 助记语法设置命令:chmod u [+|-] s 文件/目录
1
2
+ 添加setuid权限;
- 取消setuid权限;

注意: chmod命令的其他参数都可以与setuid权限设置结合使用。 在设置setuid前必须保证文件/目录的所有者具有可执行权限,否则设置则无效。

执行权限: chmod必须以root权限才能执行,如果是普通用户想执行chmod时,需要在命令前加sudo命令来提升权限为root权限。

案例演示1:

创建一个新文件testFile,使用数字设置方法为文件testFile添加setuid权限,具体使用如下命令:

1
2
3
4
touch testFile
ls -l testFile
sudo chmod 4764 testFile
ls -l testFile

第一条命令是创建新文件testFile;

第二条命令是查看testFile现有的权限;

第三条命令是在保证testFile原有权限的情况下为其添加setuid权限;

第四条命令是查看是否添加成功。

案例演示2:

创建一个新目录testDir,使用助记语法设置方法为目录testDir添加setuid权限,具体使用如下命令:

1
2
3
mkdir testDir
sudo chmod u+s testDir
ls -l .

图片

案例演示3:

创建一个新文件testFile,使用助记语法为文件testFile添加setuid权限,具体使用如下命令:

1
2
3
touch testFile
sudo chmod u+x,u+s testFile
ls -l testFile

第一条命令是创建新文件testFile;

第二条命令是在设置testFile为可执行权限并为其添加setuid权限;

第三条命令是查看是否添加成功。

如果不给文件testFile设置可执行权限直接设置setuid权限后,标记为是S而不是s,详细结果如下图所示:

图片

setgid

setgid的作用是让执行该命令的用户以该命令所有者的同组用户的权限去执行。

设置setgid命令有两种方法,一种是数字设置,另一种是通过助记语法。建议使用助记语法设置setgid权限。

数字设置命令:

chmod 2xxx 文件/目录

其中xxx表示文件/目录的所有者、同组用户和其他用户的权限(读写执行)。

助记语法设置命令:

chmod g [+|-] s 文件/目录

1
2
+ 添加setgid权限;
-  取消setgid权限;

注意: chmod命令的其他参数都可以与setgid权限设置结合使用。在设置setgid前必须保证文件/目录的同组用户具有可执行权限,否则设置则无效。

执行权限: chmod必须以root权限才能执行,如果是普通用户想执行chmod时,需要在命令前加sudo命令来提升权限为root权限。

案例演示1:

创建一个新文件testFile,使用数字设置方法为文件testFile添加setgid权限,具体使用如下命令:

1
2
3
4
touch testFile
ls -l testFile
sudo chmod 2674 testFile
ls -l testFile

第一条命令是创建新文件testFile;

第二条命令是查看testFile现有的权限;

第三条命令是在保证testFile原有权限的情况下为其添加setgid权限;

第四条命令是查看是否添加成功。

案例演示2:

创建一个新目录testDir,使用助记语法设置方法为目录testDir添加setgid权限,具体使用如下命令:

1
2
3
mkdir testDir
sudo chmod g+s testDir
ls -l .

图片

使用 Hugo 构建
主题 StackJimmy 设计