- 論壇徽章:
- 0
|
項目在做由hp-ux 到AIX的遷移, 有個文件opf_exe.c是用來改變用戶id的
首先文件權(quán)限在hp和aix上是相同的,執(zhí)行這個exe預(yù)期結(jié)果應(yīng)該是用戶id改變 組id改變
-rwsr-sr-x 1 asg_op sms 9407 May 12 18:28 /uddereg1/startup/opf_exe
在HP-UX上是成功的
shpu71 /home/md07718>id
uid=1000107718(md0771 gid=165(rddegp)
shpu71 /home/md07718>/uddereg1/startup/opf_exe /bin/ksh
執(zhí)行了opf_exe后 用戶uid成功改變
shpu71 /home/md07718>id
uid=8702(asg_op) gid=8646(sms) groups=165(rddegp)
但是在AIX上
當(dāng)前id
saixu108 /tmp/DDE/compile/c>id
uid=1000107718(md0771 gid=165(rddegp)
執(zhí)行opf_exe 以后卻出現(xiàn)錯誤
Error in setreuid
不清楚為什么會setreuid 失。 是AIX的安全設(shè)置嗎?哪位高手可以解釋下?
謝謝!
附opf_exe.c
#include <unistd.h>
#include <sys/wait.h>
#include <stdio.h>
#include <sys/id.h>
main(int argc, char *argv[])
{
uid_t uid, euid ;
gid_t gid, egid ;
int i ;
char buffer[1024] ;
if (argc == 1)
{
printf ("No arguments passed to program !\n" ;
exit(1) ;
}
gid = getgid() ;
egid = getegid() ;
printf("id is retrieved\n" ;
printf("gid is %d\n",gid);
printf("egid is %d\n",egid);
if ( setregid(egid, egid) != 0 )
{
printf("Error in setresgid \n" ;
exit(1) ;
}
uid = getuid() ;
euid = geteuid() ;
printf("uid is %d\n",uid);
printf ("euid is %d\n",euid);
if ( setreuid(euid, euid) == 0 )
{
/* successful */
strcpy(buffer, argv[1]) ;
for (i=2; i < argc ; i++)
{
strcat(buffer, " '" ;
strcat(buffer, argv) ;
strcat(buffer, "' " ;
}
i = system(buffer) ;
}
else
{
printf("Error in setreuid \n" ;
exit(1) ;
}
exit(0) ;
} |
|