# set_uid - u的特殊权限 setuid(即suid:保存设置用户ID):当一个可执行文件或程序设置为setuid时,任何一个用户执行这个进程时对应的euid(effective user id)都会被设置为文件所有者的uid。 ## 扩展知识ruid和euid 每一个linux进程都会包含这两个uid。 * ruid(实际用户ID)(real user id):当前使用系统的用户id,在用户登录时由系统设置。 * euid(有效用户ID)(effective user id):用于系统判断用户对系统资源有哪些权限。用户执行任意操作时,都会由euid进行判断,有则成功,没有则报错。正常情况下,用户登陆系统后,euid和ruid是相同的,但是当用户想要执行某些特殊程序时(如当前ruid无法执行的程序),euid和ruid可以发生变化,这里的变化可以通过suid改变。 ## 语法 $ chmod {u,g,o,a}{+,-,=}s file 或者 $ chmod 4775 file 4775中的4表示:所属主。 2:所属组。 1:其他。 ## 实例 ### 添加setuid位: ``` 有执行权限: [root@lwz01 ~]# chmod u+s /usr/bin/ls [root@lwz01 ~]# ll /usr/bin/ls -rwsr-xr-x. 1 root root 117608 Aug 20 2019 /usr/bin/ls 没有执行权限: [root@lwz01 ~]# chmod 4664 /usr/bin/passwd [root@lwz01 ~]# ll /usr/bin/passwd -rwSrw-r--. 1 root root 27832 Jun 10 2014 /usr/bin/passwd ``` > * *当文件有执行权限或者增加了执行权限时,添加的setuid位为小写"s",即setuid生效,所有用户执行此文件都以拥有者的权限来执行(一般拥有者都是root用户)。* > * *当文件没有执行权限或者取消了执行权限时,添加的setuid位为大写"S",即setuid失效,所有人无法执行文件。* ### 取消setuid位: ``` [root@lwz01 ~]# chmod u-s /usr/bin/ls 或者 [root@lwz01 ~]# chmod 0755 /usr/bin/ls ``` ### 验证 切换普通用户修改密码: ``` [root@lwz01 ~]# su - lwz [lwz@lwz01 ~]$ /usr/bin/passwd lwz -bash: /usr/bin/passwd: Permission denied ```