stuart (02/11/83)
The setuid/execution/search problem can be solved by creating a second level of directory. Use the setuid to get you through an otherwise impassable barrier. THEN, switch back to regular other user just before exec. This way, the user does run the program (e.g., game) as user uid, but is unable to access program without using special setuid program. -- Stuart Hollander (ucbvax!decvax!genradbolton!stuart) Here is your example, modified for this method: drwx------ 3 stuart 48 Feb 11 10:01 testdir drwxr-xr-x 2 stuart 48 Feb 11 09:59 testdir/readdir -rwxr-xr-x 1 stuart 7086 Feb 11 10:04 yes doyes.c: main() { printf("A uid=%d euid=%d\n",getuid(), geteuid()); chdir("/us/stuart/public/testdir/readdir"); setuid(getuid()); printf("B uid=%d euid=%d\n",getuid(), geteuid()); execl("yes","yes",0); printf("C uid=%d euid=%d\n",getuid(), geteuid()); perror("yes"); } yes.c main() { printf("Y uid=%d euid=%d\n",getuid(), geteuid()); printf("Yes\n"); }