Set User Id - ggubuk97/apue GitHub Wiki

๊ฐ ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ป๊ฒŒ passwd๋ฅผ ์‹คํ–‰ํ•ด์„œ superuser ๊ถŒํ•œ์œผ๋กœ ์ž๊ธฐ์˜ password๋ฅผ ๋ฐ”๊พธ๋ƒ๊ฐ€ ์žฌ๋ฏธ์žˆ๋Š” ๋‚ด์šฉ์ธ๋ฐ

bart@bear:/usr/bin$ cd /usr/bin/
bart@bear:/usr/bin$ ls -al passwd
-rwsr-xr-x 1 root root 42824 Sep 13  2012 passwd

user ๊ถŒํ•œ์ด rws๋กœ ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๊ณ  rws๋Š” ์‹คํ–‰๋œ process๊ฐ€ superuser ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ chomod u+s ๋กœ shell์—์„œ ๋ฐ”๊ฟ€์ˆ˜๋„ ์žˆ๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒ˜ํ”Œ ํ”„๋กœ๊ทธ๋žจ์„ ์งœ๋ด๋„ ๋ฉ๋‹ˆ๋‹ค.

bart@bear:~/ws/bart$ ll
total 24
drwxrwxr-x 2 bart bart 4096 Oct  8 09:08 ./
drwxrwxr-x 8 bart bart 4096 Oct  7 21:12 ../
-rwxrwxr-x 1 bart bart 8542 Oct  7 22:04 a.out*
-rw-rw-rw- 1 bart bart  245 Oct  8 09:08 passwd.c
bart@bear:~/ws/bart$ 
bart@bear:~/ws/bart$ cat passwd.c 

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

int main(int argc, char* argv[])
{
    struct stat buf;
    if (stat("passwd.c", &buf) < 0) {
        printf("error\n");
    }

    chmod("passwd.c", buf.st_mode | S_ISUID);
}

์‹คํ–‰ํ•˜๊ณ  ๋‚˜๋ฉด

bart@bear:~/ws/bart$ ./a.out 
bart@bear:~/ws/bart$ ll
total 24
drwxrwxr-x 2 bart bart 4096 Oct  8 09:08 ./
drwxrwxr-x 8 bart bart 4096 Oct  7 21:12 ../
-rwxrwxr-x 1 bart bart 8542 Oct  7 22:04 a.out*
-rwSrw-rw- 1 bart bart  245 Oct  8 09:08 passwd.c

rwS๊ฐ€ ๋˜์–ด ์žˆ๋„ค์š” rwx์— s๋ฅผ ๋”ํ•˜๋ฉด rws๊ฐ€ ๋˜๊ณ  rw-์— s๋ฅผ ๋”ํ•˜๋ฉด rwS๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ