setuid 是档案权限其中一种特性, 档案加入 setuid 权限后, 其他用户可以用档案持有者身份执行档案。而 setgid 跟 setuid 类以, 是其他用户可以用档案所属群组的身份执行。
如果 setuid 使用不当, 会有很严重的安全问题, 所以使用前要小心。虽然有安全的问题, 但很多情况都要借助 setuid 解决, Linux 最常见的例子有 passwd 及 sudo, 一个普通帐号执行 passwd 修改自己的密码时, 其实是用 root 身份修改系统内的密码档; 而执行 sudo 时同样需要用 root 权限。
要查看档案是否有 setuid 及 setgid 权限, 可以用 ls 及 stat 指令便可以, 在权限字段看到小写 “s” 代表有 setuid 权限, 大写 “S” 代表 setgid 权限, 例如:
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
在上面的 passwd 执行档, 看到权限是 “-rwsr-xr-x”, 前面那个 “s” 代表档案加入了 setuid 权限。
要自行加入 setuid 权限, 跟设定其他档案权限一样使使 chmod 指令, 例如要为 myscript.sh 加入 setuid 权限, 语法是这样:
要移除 setuid 权限, 用 “u-s” 便可以:
设定 setgid 权限, 语法跟上面差不多, 只是将 “u” 改成 “g” 即可, 加入 setgid 权限:
移除 setgid 权限:
除了用以上方法外, 如果将权限设定改成用数字的方法, 是在权限数值前加上 4 及 2, 例如加入 setuid 权限到 myscript.sh, 并设定权限为 777, 数值改成 4777 即可, 例如:
加入 setgid 权限:
要用数值的方法移除 setuid 及 setgid 权限, 只要将 “4” 或 “2” 改成 “0”:
由于 setuid 及 setgid 使用不当会有安全性问题, 有时需要找出所有 setuid 及 setgid 档案, 这个动作可以用 find 指令实现, 以下例子会在 /home/userhome 目录找出所有加入了 setuid 及 setgid 的档案:
只找出 setuid 档案:
只找出 setgid 档案: