WHAT IS SUID AND HOW TO SET SUID IN LINUX

查看原文

Linux 权限管理不是只有 rwx 三个这么简单,还有 SUID, SGID, Sticky Bit, ACL’s, SUDO 等等。本文简单介绍了 SUID - Set owner User ID up on execution 这个概念,它可以让获得权限的程序运行的时候获得 file owner 的权限,获得 owner UID,GID。听起来很危险,但它是 passwd, ping, crontab 等程序的基本原理。譬如说,passwd 将会修改密码,数据写入 /etc/passwd, /etc/shadow,而这两个文件owner都是 root。

$ ls -al `which passwd`
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd

$ ls -al /etc/shadow
--w------- 1 root root 859 May 19 21:41 /etc/shadow

$ ls -al /etc/passwd
-rw-r--r-- 1 root root 1429 May 19 21:41 /etc/passwd
  • 如何设置 suid:
    • +s: chmod u+s your-file
    • 4: chmod 4750 your-file
  • 如何检查:
    • 检查 ls 结果中 owner x 位是不是 s: ls -l your-file, (查看上面 passwd 的结果
    • 如果结果中是 s 就有升格 root 运行的权限,如果结果中是 S 那就光设置了 SUID 但没有运行权限。
    • find / -perm +4000 也可以找出所有被设置了 SUID 的文件。
  • 使用场景:
    • 程序需要 root login 才能跑
    • 你不想让用户获得 sudo 密码,但又想让他跑一些程序