2011-12-01 2 views
2

프로세스를 루트로 스폰하고, 루트 권한이없는 사용자에게 권한을 위임해야하므로 구현하려면 setbit를 이진 파일로 사용하고 소유자를 root로 변경하십시오. 루트가 아닌 사용자로 프로세스를 생성하고 처음에는 root로 시작했습니다. setuid (getuid()) 호출을 사용하여 권한이없는 사용자에게 권한을 삭제했습니다./proc/(pid) 위치의 모든 파일 그룹은 root : root로 남습니다. 그 이유는 내 프로세스에 의해 생성 된 스레드 (권한을 삭제 한 후) 때문입니다./proc/(pid)/exe에서 액세스가 거부되었습니다. setuid가 소유자를 설정하지 않은 이유를 알고있는 사람 : group at files location/proc/(pid)?파일 소유자 : setuid() 후에/proc/<pid>/group 위치에서 그룹이 변경되지 않습니까?

답변

3

Linux에서 프로세스가 시작되었을 때 프로세스 ID가 설정되었거나 사용자가 바이너리를 실행할 수는 있지만 읽지 않은 권한이있는 경우 다른 조건에서도 "덤프 가능"플래그가 내부에서 지워집니다 커널. 보안상의 이유로이 플래그는 몇 가지를 방지합니다. 핵심 덤프 (코어 덤프가 권한있는 정보를 유출 할 수 있음)를 허용하지 않으며 일반 사용자가 디버거를 부착하지 못하도록하고 해당 프로세스에 대해 /proc/<pid>에있는 대부분의 파일에 대한 액세스를 제한합니다.

일단 해제되면 프로세스가 권한이 삭제 된 경우에도 해당 플래그를 다시 설정할 수 없습니다.

(사실,이 플래그의 값을 변경할 수있는 시스템 호출 prctl(PR_SET_DUMPABLE)하지만 난이 시스템 호출은 일반적으로 사용하기위한 것이 아닙니다 생각합니다.)

더 중요한 것은, 나는 당신이 무엇을하고 있는지 궁금하여 프로그램은 /proc/<pid>/exe 또는 /proc/<pid>에있는 다른 파일을 읽고/열 수 있습니다.

+0

실제로이 프로세스는 여러 개의 스레드를 생성합니다. 복제본을 사용하여 20 개의 스레드가 생성되고 18 개의 스레드가 생성 된 후 setuid() (코드 흐름)가 발생하면 나머지 스레드 2 개가/proc에 저장된 파일/pid. 코어 덤프 세대를 활성화하려면 setuid() 호출 후 prctl (pr_set_dumpable, 1)을 사용했습니다. prctl (pr_set_dumpable, 1)을 사용하면/proc/(pid) 위치에있는 모든 파일의 소유자 : 그룹도 변경된다는 것을 알았습니다. 그게 내가 원하는 걸 해냈어. –