我试图了解如何setuid
工作。
所以我做了一个虚拟程序,它只打印当前用户:
#include<bits/stdc++.h>
using namespace std;
int main(){
cout << system("id -a") << "\n";
cout << system("whoami") << "\n";
}
Run Code Online (Sandbox Code Playgroud)
我my-binary
在用户下编译并创建了可执行文件anmol
:
-rwxrwxr-x 1 anmol anmol 9972 Feb 1 16:54 my-binary
Run Code Online (Sandbox Code Playgroud)
然后,我setuid
使用chmod +s
以下选项设置选项:
-rwsrwsr-x 1 anmol anmol 9972 Feb 1 16:54 my-binary
Run Code Online (Sandbox Code Playgroud)
如果我正常执行它,我会得到以下输出:
uid=1000(anmol) gid=1000(anmol) groups=1000(anmol),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),122(sambashare)
anmol
Run Code Online (Sandbox Code Playgroud)
现在,如果我使用 更改为另一个用户su user2
,然后执行它,我会得到:
uid=1001(user2) gid=1001(user2) groups=1001(user2)
user2
Run Code Online (Sandbox Code Playgroud)
当我使用 执行它时sudo ./my-binary
,我得到:
uid=1001(root) gid=1001(root) groups=1001(root)
root
Run Code Online (Sandbox Code Playgroud)
据我了解,无论我如何运行它,我不应该每次都得到第一个输出吗?
我在这里检查了其他类似的问题,有些人建议我检查文件系统是否使用nosuid
选项挂载,所以我执行mount | …