Jay*_* Ma -4 c++ linux shell setuid
我试图从一个非常低的用户(几乎没有特权)将一些文件复制到root用户.我需要允许有权访问低帐户的人将某些文件复制到更高的帐户.我曾考虑使用bin/Bash脚本,但我不希望文件中的任何密码被查看.
我决定创建一个C++应用程序,其中包含我想传递给su/setuid命令的帐户的密码.我知道密码可以在二进制文件中查看,但不是问题.不是纯文本的密码就足够了.
我的问题是,我无法弄清楚如何"登录"作为我需要更新该帐户中运行的服务的文件的用户.我有用户帐户名,即localadmin,以及该帐户的密码.但是如何将这些文件传递给Linux以将文件从C++应用程序复制到localadmin帐户主目录/子目录?
我试过用C++:
system("su localadmin"); //这会提示输入密码,但不知道如何传递密码.
的setuid(0); //再次,我在哪里传递密码以获得帐户权限?我得到的只是"不允许操作".
如果这是一个简单的问题,我道歉.我只是尝试将命令作为localadmin运行并完成.
您无需提供密码.使您的应用程序setuid root,以便它以root权限运行.
使用root权限,请执行以下操作:
chown root {program}
chmod 4755 {program}
Run Code Online (Sandbox Code Playgroud)
现在您的可执行文件由root拥有并且设置了setuid位.因此,当任何用户运行它时,它以root身份运行.然后程序可以做它需要做的事情.
在创建setuid根程序时,需要特别注意确保所有输入都已正确清理,以防止缓冲区溢出或格式化字符串漏洞.此外,如果您的程序不只是调用另一个程序,它应该在开始使用时删除权限seteuid({callers_uid}),在需要时提高权限seteuid(0),并在完成后再将其删除.
如果您只希望特定用户运行此程序,则可以使用sudo而不是使程序setuid root.root用户需要更新/ etc/sudoers文件并为相关用户和程序添加条目,并包含不需要密码的选项.
例如:
user_name ALL = (root) NOPASSWD:program_to_run
Run Code Online (Sandbox Code Playgroud)
然后用户可以运行:
sudo program_to_run
Run Code Online (Sandbox Code Playgroud)
然后,该用户(并且只有该用户)可以使用root权限运行程序,以执行它需要执行的任何操作.
| 归档时间: |
|
| 查看次数: |
542 次 |
| 最近记录: |