我需要编写一个 C 程序,它允许我读/写 root 拥有的文件。但是,我只能在另一个用户下运行代码。我有 root 密码,但系统上没有“sudo”或“su”命令,所以我无法访问 root 帐户(实际上几乎没有任何 shell 命令)。我不太了解 UNIX 权限,所以我不知道是否真的可以在不以某种方式利用系统或运行 root 本身拥有的程序(使用 +s 或其他)的情况下做到这一点. 有什么建议吗?
谢谢!
PS 不,这不是恶意的,这是在 iPhone 上。
我需要编写一个 C 程序,它允许我读/写 root 拥有的文件。但是,我只能在另一个用户下运行代码。我有 root 密码,但系统上没有“sudo”或“su”命令,所以我无法访问 root 帐户(实际上几乎没有任何 shell 命令)。我不太了解 UNIX 权限,所以我不知道是否真的可以在不以某种方式利用系统或运行 root 本身拥有的程序(使用 +s 或其他)的情况下做到这一点. 有什么建议吗?
谢谢!
PS 不,这不是恶意的,这是在 iPhone 上。
在 UNIX 权限系统下,您需要运行一个属于 root 本身的文件,该文件标记为 setuid-root (+s,如您所说),或者与某个已经以 root 身份运行的进程通信。
如果没有这样的文件,你就不走运了。
您可以通过将 suid 位设置为应用程序来执行此操作,但如果您想从此c application
运行某个 shell,如果您正常执行此操作,则该 shell 将在本地用户上运行,这是安全系统。
但是,您可以read/write/execute
拥有 root 拥有的文件,但如果您的用户不在文件组中,则您的目标文件必须设置read/write/execute
在最后 3 位,或者当您的用户在文件所有者组中时,您必须检查/将其应用于中间位置的 3 位。(3个第一位为所有者设置权限,但这可能不是您可用的信息)。
如果您没有任何root
帐户访问权限。然后,如果组和其他用户权限无法访问您必须拥有的功能,那么除了尝试让一些特权用户访问此文件之外,您将无法做任何事情。在其他情况下,您可以对文件访问权限进行一些修复,但不能从该系统进行修复,您必须从该设备获取硬盘驱动器并连接到其他设备以更改它或在该设备上加载一些实时系统以更改它。但是,您可以在私有系统上执行此操作,而不是在此系统上执行此操作。
SUID bits
有关您的更多信息,请访问:
http://www.codecoffee.com/tipsforlinux/articles/028.html
http://www.everyjoe.com/newlinuxuser/explain-what-is-setuid-and-setgid/
iPhone SDK 不允许这样做。您的应用程序已被沙箱化,除非 Apple 提供了非常特殊的方式,否则它不允许离开该沙箱。在 iPhone 上执行此操作的唯一方法是越狱。