๐ฅ๏ธ Computer Science/OS
[OS/Linux] ํ๋ก์ธ์ค ๊ถํ, ID, ํ๋ก์ธ์ค ๊ด๋ฆฌ ์ ๋ณด ๊ด๋ จ ํจ์
Rosieblue
2023. 9. 15. 12:46
728x90
ํ๋ก์ธ์ค์์์ UID
User ID(UID)๋ 32bit์ ์ ์๊ฐ! ์ด๊ฑธ๋ก user๋ฅผ ์๋ณ!
- ruid : Real User ID!! ์ฆ ์ด ํ๋ก์ธ์ค๋ฅผ '์์'ํ ์ ์ ์ ์์ด๋
- euid : '๊ถํ ๊ฒ์ฌ'ํ ๋ ์ฌ์ฉ๋๋ id. ๋ณดํต์ ruid์ ๊ฐ๊ฒ ์ง๋ง SetUID๋นํธ ๋ฑ์ด ์ค์ ๋ ๊ฒฝ์ฐ, ํ์ผ ์์ ์์ ์์ด๋๋ก ๋ฐ๋. ๋ฐ๋ผ์ ์๋ฅผ root๋ก ๋ฐ๊พผ๋ค๋ฉด root๊ถํ์ผ๋ก ํ๋ก์ธ์ค๋ฅผ ์คํํ ์ ์๊ฒ ์ง
- suid : Saved User ID!! Privileged Process(๋ณดํต root๊ฐ ์คํํ ํ๋ก์ธ์ค)๊ฐ ๋ชจ์ข ์ ์ด์ ๋ก ๊ถํ์ ๋ฎ์ถฐ์ผํ์ง๋ง ๋ค์ ๋์์ฌ๋ ํ์ํ ์์ด๋
Non-root process๊ฐ ์์ ์ euid๋ฅผ ๋ฐ๊พธ๋ ค๊ณ ํ ๋, euid๋ ํ์ฌ์ ruid, euid, suid๋ก ๋ฐ์ ์ค์ ํ ์ ์์
์๋์ฒ๋ผ uid๋ค๊ณผ ๊ฐ๊ฐ์ ๊ถํ์ด ๊ตฌ๋ถ๋์ด์๋๋ฐ, ์ปค๋ ๊ถํ์ ๋ ๋ฐ๋ก ๋ถ๋ฅ๋์ด์๋ค!
root ๊ถํ์ ํ๋ก์ธ์ค๋ kernel ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๋ ๊ฒ์ ๊ธ์ง๋์ด์๋ค!
ํ๋ก์ธ์ค ๊ด๋ฆฌ ์ ๋ณด ์ป๊ธฐ
์๋ ํจ์๋ค์ 'ํ์ฌ' ํ๋ก์ธ์ค์ id๋ค์ ์ป๋ ํจ์๋ค์ด๋ค.
pid_t getpid(void); //ํ์ฌ ํ๋ก์ธ์ค์ pid ์ป๊ธฐ
pid_t getppid(void); //ํ์ฌ ํ๋ก์ธ์ค์ ๋ถ๋ชจ ํ๋ก์ธ์ค id ์ป๊ธฐ
pid_t getuid(void); //ํ์ฌ ํ๋ก์ธ์ค์ uid ์ป๊ธฐ
pid_t getgid(void); //ํ์ฌ ํ๋ก์ธ์ค์ gid ์ป๊ธฐ
pid_t geteuid(void); //ํ์ฌ ํ๋ก์ธ์ค์ ์คํจ ์ฌ์ฉ์ id (euid) ์ป๊ธฐ
pid_t getegid(void); //ํ์ฌ ํ๋ก์ธ์ค์ ์คํจ ๊ทธ๋ฃน id(egid) ์ป๊ธฐ
error๋ ๋ฐ์ํ์ง ์๋๋ค.
์ฐธ๊ณ ๋ก ํ๋ก์ธ์ค์ uid๋ผ๋๊ฑด ํ์ผ์ ์์ ์ id๊ฐ ์๋๋ผ ํ์ฌ ํ์ผ์ ์คํํ id๋ฅผ ์๋ฏธํ๋ค!
ํ๋ก์ธ์ค ๊ด๋ฆฌ ์ ๋ณด ์ค์
int setuid(uid_t uid); //ํ์ฌ ํ๋ก์ธ์ค์ uid ์ค์
int setgid(gid_t gid); //ํ์ฌ ํ๋ก์ธ์ค์ gid ์ค์
int seteuid(uid_t euid); //ํ์ฌ ํ๋ก์ธ์ค์ ์คํจ ์ฌ์ฉ์ id ์ค์
int setegid(gid_t egid); //ํ์ฌ ํ๋ก์ธ์ค์ ์คํจ ๊ทธ๋ฃน id ์ค์
int setreuid(uid_t ruid, uid_t euid); //ํ์ฌ ํ๋ก์ธ์ค์ ruid, euid ์ค์
int setrguid(gid_t rgid, gid_t egid); //ํ์ฌ ํ๋ก์ธ์ค์ rgid, egid ์ค์
์๋ ํ์ฌ ํ๋ก์ธ์ค ๊ธฐ์ค!
์ฑ๊ณตํ๋ฉด 0, ์คํจํ๋ฉด -1 ๋ฐํ