概述
setgid 位是文件系统权限的一种,它在文件和目录上的行为有所不同。当应用于目录时,在该目录中创建的所有新文件和子目录将自动继承父目录的组所有权。当应用于可执行文件时,该文件在执行时将以文件所有者的组 ID 运行进程。
主要特点
- 目录:在该目录中创建的文件和子目录将继承父目录的组所有权。
- 可执行文件:该文件在执行时将以文件所有者的组 ID 运行进程。
- 使用 `chmod` 命令设置和取消设置。
使用示例
setgid 位使用 `chmod` 命令设置。您可以使用数字模式 (2xxx) 或符号模式 (g+s)。
在目录上设置 setgid (符号模式)
sudo chmod g+s /shared_data
在 `/shared_data` 目录上设置 setgid 位,以便在该目录中创建的所有文件和子目录继承 `/shared_data` 的组所有权。
在目录上设置 setgid (数字模式)
sudo chmod 2770 /shared_data
将 setgid 位 (2) 添加到现有权限 (rwxrwx---) 中,设置为 2770。
在可执行文件上设置 setgid
sudo chmod g+s /usr/local/bin/my_tool
使特定可执行文件始终以特定组权限运行。(例如:`my_tool` 以 `tool_group` 权限运行)
移除 setgid 位
sudo chmod g-s /path/to/item
从文件或目录中移除 setgid 位。
检查 setgid 设置
ls -l /path/to/item
使用 `ls -l` 命令检查文件或目录的权限。如果组权限位置有 's',则表示已设置 setgid。
提示与注意事项
setgid 位是一项强大功能,使用时需要谨慎。
目录 setgid 的利用
- 当多个用户需要在共享工作目录中以同一组身份创建文件时,它非常有用。
- 它可以保持新创建文件的组所有权的统一性,从而减少权限问题。
可执行文件 setgid 的注意事项
- 在可执行文件上设置 setgid 可能会导致安全漏洞,因此应谨慎使用。
- 仅应将其应用于可信且经过安全验证的可执行文件。
与 umask 的交互
当在设置了 setgid 位的目录中创建文件时,还会考虑 `umask` 设置。`umask` 会限制新创建文件的默认权限,因此需要与 setgid 一起正确设置。