setuid不工作,linux rhel6,简单示例

时间:2018-03-01 17:46:01

标签: c setuid

这是一个重新发布后被称为“从setuid根C程序调用脚本 - 脚本不以root身份运行”的解决方案

我的问题不同,因为我不想以root身份运行C程序(以及内部调用的c-shell脚本)。相反,我想作为c程序文件的所有者运行。

另外,我尝试使用“setuid(0)”,因为这是引用帖子中的解决方案。这反映在下面的编辑代码中。相同的结果。

此外,我这次使用“chmod 7775”打开了权限(以防万一是权限问题)

以下是带有编辑的原始注释,以反映对“setuid(0)”

的更改

我在实现一个简单示例时遇到问题,该示例将演示如何使用setuid与二进制文件所有者的uid运行二进制文件。我最终想做的是使用这种技术运行c-shell脚本。  我读到这对shell脚本不起作用,但也听说过使用C程序来运行一个运行c-shell脚本的system()调用(例如system(“source my.csh”)) 。我写了一个尝试这个的C程序,还只是报告当前的uid。这就是我试过的......

从我目前的shell中,我做了一个“su katman”成为我想以用户katman身份运行的二进制文件的用户。

我创建了一个C程序try.c. ...

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
  setuid(0);
  printf("In try.c ... sourcing katwhoami.csh...\n");
  system( "source /home/me/su_experiments/katwhoami.csh");
  printf("In try.c ... using straight system call...\n");
  system("whoami");

  return 0;
}

我按照对不同音符的引用推荐的“setuid(0)”。但是之前,我尝试将其设置为使用“id -u”获得的C程序所有者的uid。

katwhoami.csh shell脚本只是......

date
echo "In katwhoami.csh, I am "`whoami`
echo "In katwhoami.csh, I am "$USER
exit

然后我编译了C程序并设置了位......

% gcc -o try try.c
% chmod 7775 try
% ls -l try
-rwsrwsr-x 1 katman design 6784 Mar  1 11:59 try

然后我测试它......

% try
In try.c ... sourcing katwhoami.csh...
Thu Mar  1 12:28:28 EST 2018
In katwhoami.csh, I am ktadmin
In katwhoami.csh, I am ktadmin
In try.c ... using straight system call...
ktadmin

......这就是我的预期。

我退出以回到我开始的shell,希望如果我在那里试试,它会告诉我我是“katman”....

% exit
% whoami
daveg
% try
In try.c ... sourcing katwhoami.csh...
Thu Mar  1 12:30:04 EST 2018
In katwhoami.csh, I am daveg
In katwhoami.csh, I am daveg
In try.c ... using straight system call...
daveg

......这不是我所希望的: - (

正如你可能会说的那样,我很擅长使用它 任何帮助将不胜感激!

...更新

我尝试了一个新的示例程序,a.c ......

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
  FILE *fh;

  setuid(1234);
  system("whoami"); 

  fh=fopen("test.file","w");
  fprintf(fh,"Here I am\n");
  fclose(fh);

  return 0;
}

我编译并设置了位

gcc -o a a.c
chmod 4775 a

然后我退出“su”并以不是二进制文件所有者的用户身份运行。报告的uid(当前的uid)与之前的结果相同,但是,C程序创建的文件的所有者是这个版本的C程序的拥有者!这很有用。

“whoami”命令有什么可疑之处吗? system()调用?

如果我执行“system(”source some.csh“),它会创建一个新的shell,它假设原始的uid(不是C二进制文件的所有者)吗?有类似的东西吗?

我真的需要新的uid来“坚持”到子进程。

0 个答案:

没有答案