在执行带有密码的C++二进制文件时切换到Linux根帐户,可能
Switch to Linux root account in executing C++ binary with password, POSSIBLE?
我正试图将一些文件从一个权限非常低(几乎没有权限)的用户复制到根用户。我需要允许有权访问低帐户的人将一些文件复制到高帐户上。我曾考虑过使用bin/Bash脚本,但我不希望查看文件中的任何密码。
我决定创建一个C++应用程序,它有我想传递给su/setuid命令的帐户的密码。我知道密码可以在二进制文件中查看,但这不是一个问题。密码不是纯文本就足够了。
我的问题是,我不知道如何作为用户"登录",我需要为该帐户中运行的服务更新文件。我有用户帐户名,即localadmin,以及该帐户的密码。但是,我如何将这些文件传递到Linux,以便将文件从C++应用程序复制到localadmin帐户home/子目录?
我尝试过C++:
系统("su localadmin")//提示输入密码,但不确定如何传递密码。
setuid(0)//再说一遍,我在哪里传递密码才能获得帐户权限?我得到的只是一个"不允许的手术"。
如果这是一个简单的问题,我深表歉意。我只是想以localadmin的身份运行命令,然后就可以完成了。
您不需要提供密码。使您的应用程序setuid为root,以便使用root权限运行。
使用root权限,执行以下操作:
chown root {program}
chmod 4755 {program}
现在,您的可执行文件归root所有,并设置了setuid位。因此,当任何用户运行它时,它都以root身份运行。然后程序可以做它需要做的事情。
在创建setuid根程序时,需要特别注意确保所有输入都经过了正确的消毒,以防止缓冲区溢出或格式字符串漏洞。此外,如果您的程序不仅仅调用另一个程序,那么它应该在开始使用seteuid({callers_uid})
时放弃权限,在需要使用seteuid(0)
时提高权限,并在完成后再次将其放下。
如果你只想让特定的用户运行这个程序,你可以使用sudo
,而不是让程序成为setuid root。根用户需要更新/etc/sudoers文件,为有问题的用户和程序添加一个条目,并包括一个不需要密码的选项。
例如:
user_name ALL = (root) NOPASSWD:program_to_run
然后用户可以运行:
sudo program_to_run
然后这个用户(并且只有这个用户)可以用root权限运行程序来执行它需要做的任何事情
我认为您误解了setuid
的一般工作方式。不需要在应用程序中存储任何类型的密码:您只需像root
一样正常地对其进行编码,即可完成需要执行的操作。一旦您拥有二进制文件(由root拥有),就可以使用chmod
将其setuid
权限设置为二进制文件的属性。
在执行二进制文件之后,任何被允许执行二进制文件的用户都会将其提升为root用户,以执行二进制文件代码。无需为此提供密码。
请注意,您需要小心使用setuid
程序:它们可能会由于其root
权限而导致安全问题。最好让它们尽可能简单和集中,尽可能少地执行实际需要root权限的操作,让其他非setuid
程序执行任何非特权操作,以最大限度地减少潜在的可利用漏洞。
- 在C++/Linux中设置单调时钟的一些技巧
- Linux的Cpp上的计时器
- 给定使用 C++ 或 C,我如何测量在 linux 下进行线程切换需要多长时间?可能吗?
- 是否有可能构建面向Linux和Windows的.Net Core C++ / CLI应用程序?
- 在 Linux C++ 中,HANDLE 的数据类型可能是什么
- 使用 __builtin_expect() 或 Linux 内核时可能和不太可能时"very likely"多少
- OpenGL渲染不适用于Linux Machine(Windows Renders)---可能与CMAKE脚本有关(请参
- 检测到QT UTC linux时钟偏移.您的构建可能不完整
- 数据报管道在Linux中可能吗?
- 是否有可能通过远程方法调用将linux中的c++程序与作为服务器的c#程序进行通信?
- 只有一个线程可能会导致 Linux 上的程序死锁或冻结
- 是否有可能绑定和监听一个IP地址与TCP/IP套接字?(Linux / C)
- OpenCV:在Linux进程之间共享网络摄像头是可能的吗?
- 编译一个在所有Linux发行版中执行而不重新编译的C/ c++源代码是否可能?
- 识别Linux友好代码的可能方法
- 是否有可能在Linux中以编程方式单击另一个应用程序的按钮
- 是否有可能检测到一个线程在Linux中被上下文切换[挂起]
- 有可能在linux上编译VST吗
- 在执行带有密码的C++二进制文件时切换到Linux根帐户,可能
- 用户可能无法在 Linux 系统上打开共享内存对象的原因