출처 : http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=10302&docId=128463841&page=1#answer1
안녕하세요..
답변이 될지 모르겠으나 Set UID / Set GID에 대해 설명드리겠습니다.
Set UID는 chmod 4000 권한으로 실행되며, Set GID는 chmod 2000 권한으로 실행합니다.
둘다 설정하시려면 6000 권한으로 설정 하시면 됩니다.
( 여기서 000은 일반 퍼미션 이며, 파일 실행권한은 꼭 가지고 있어야 합니다. )
파일 퍼미션 설정이 기본적으로 rwx/rwx/rwx 로 이런 식으로 설정이 되나,
Set UID설정 시 rws/rwx/rwx로 변경.
Set GID설정 시 rwx/rws/rwx로 변경.
둘다 설정 시 rws/rws/rwx로 변경 됨
Set UID가 설정되어 있는 파일은 Set UID 권한으로 파일이 실행됩니다.
/usr/bin/passwd가 그 대표적인 파일입니다.
쉽게 설명드려, 일반 사용자가 자신의 password를 변경해야하는데
Set UID가 설정되어 있지 않는다면, 자신의 password를 변경하지 못하게 됩니다.
여기서 중요한 점은 Set UID가 설정되어 있는 파일의 USER가 root면,
이 파일을 실행하는 동안에 root USER로 변신(?)하게 되는데요.
이를 악용하여 해킹이 이루어지기도 합니다. 그래서 퍼미션 변경을 해주시면 보안에 도움이 됩니다.
해당 공개 강좌를 소개해 드릴게요. 강좌 꼭 한번 들어보세요.
http://www.linux.co.kr/home2/edu/linux_sample.php : 출처 리눅스 포털
실제로는 syscall 임
/android/android/kernel/kernel/sys.c
SYSCALL_DEFINE1(setgid, gid_t, gid)
{
struct user_namespace *ns = current_user_ns();
const struct cred *old;
struct cred *new;
int retval;
kgid_t kgid;
kgid = make_kgid(ns, gid);
if (!gid_valid(kgid))
return -EINVAL;
new = prepare_creds();
if (!new)
return -ENOMEM;
old = current_cred();
retval = -EPERM;
if (ns_capable(old->user_ns, CAP_SETGID))
new->gid = new->egid = new->sgid = new->fsgid = kgid;
else if (gid_eq(kgid, old->gid) || gid_eq(kgid, old->sgid))
new->egid = new->fsgid = kgid;
else
goto error;
return commit_creds(new);
error:
abort_creds(new);
return retval;
}
'Programming > Linux_Platform' 카테고리의 다른 글
taskset : user process 를 특정 cpu에서 동작하도록 하기 (0) | 2020.04.29 |
---|---|
[systemd-analyze] systemd debugging & analyze method (0) | 2020.01.22 |
The result of getmntent() function (0) | 2017.09.12 |
signal 7 (SIGBUS), code 1 (BUS_ADRALN), fault addr (0) | 2017.01.23 |
makedev (0) | 2016.10.31 |