ps
명령 을 사용하여 프로세스 소유자를 결정할 수 있습니다 . 이것은 다른 사용자가 해당 프로세스를 실행 / 종료 / 다시 시작할 수 없다는 것을 의미합니까?
ps
명령 을 사용하여 프로세스 소유자를 결정할 수 있습니다 . 이것은 다른 사용자가 해당 프로세스를 실행 / 종료 / 다시 시작할 수 없다는 것을 의미합니까?
답변:
자격 증명 (7) , fork (2) , execve (2)를 읽으십시오 . 포크 시스템 호출 프로세스가 생성되는 방법입니다 (오늘, fork
종종 구현된다 클론 (2) 하지만 당신은 구현 세부 같은 것을 볼 수 있습니다.) 간부 시스템 호출 방법입니다 실행 프로그램이 시작됩니다. 모든 프로세스 는 syscalls (2)에 나열된 일부 시스템 호출로 일부 프로세스에서 수행됩니다 . 첫 번째 프로세스 ( init 또는 systemd )는 부팅시 커널에 의해 마술처럼 시작되었습니다. 다른 프로세스는 fork (2)에 의해 시작되었습니다. 현대 리눅스 때로는 커넬 - 드물게 - 마술 몇 가지 특별한 프로세스 (예를 들어 시작하지 /sbin/hotplug
) 또는 커널 스레드 (예를 들어 kworker
, kswapd
....).
따라서 모든 프로세스 (및 모든 파일)에는 소유자 (기술적으로 uid , 음이 아닌 작은 숫자) 및 그룹 (gid)이 있습니다. 0 uid는 루트 용이며 추가 권한이 있습니다.
setuid (그리고 setreuid (2) ...)에 대해서도 읽어보십시오 .
다른 소유자가 해당 프로세스를 실행할 수 없다는 것을 의미합니까?
프로세스가 이미 실행 중이지만 유휴 상태이거나 대기 중일 수 있으므로 아무도 다시 실행할 수 없습니다. 프로세스 (동적 인 무언가 )를 내부 에서 실행되는 프로그램 ( 주로 ELF 형식 의 실행 파일 )과 혼동하지 마십시오 .
주어진 프로그램 (예 /bin/bash
:)은 여러 프로세스 에서 실행될 수 있습니다 . 많은 실행 파일은 실행중인 프로세스가 없어도 디스크에 남아 있습니다.
Linux에서 proc (5) 는 프로세스 상태에 대해 커널을 쿼리하는 데 매우 유용합니다. 예제를 시도 cat /proc/$$/status
하고 cat /proc/self/maps
. pgrep (1) , ps (1) , top (1) 도 참조하십시오 .
각 프로세스에는 자체 가상 주소 공간 , 자체 파일 설명자 테이블, 자체 작업 디렉토리 (및 여러 스레드 , pthreads (7) 참조 ) 등이 있습니다.
다른 소유자가 해당 프로세스를 실행 / 종료 / 다시 시작할 수 없다는 의미입니까?
프로세스 실행은 의미가 없습니다 ( 이미 실행 중임). 그러나 pid 1234 프로세스의 실행 파일은 /proc/1234/exe
심볼릭 링크 로 사용할 수 있으며 execve (2)에 사용할 수는 있지만 아마도 - 해서는 안됩니다 . 에 대한 권한 규칙이 execve
적용됩니다.
프로세스 를 kill (2) 하려면 일반적으로 동일한 uid가 있어야합니다. 그러나 설명서에는 다음이 나와 있습니다.
For a process to have permission to send a signal, it must either be privileged (under Linux: have the CAP_KILL capability in the user namespace of the target process), or the real or effective user ID of the sending process must equal the real or saved set-user-ID of the target process. In the case of SIGCONT, it suffices when the sending and receiving processes belong to the same session.
프로세스 를 중지 하려면 kill (2) 와 함께 사용 된 SIGSTOP
(또는 SIGTSTP
) 신호를 사용하십시오 . signal (7)을 참조하십시오 .
중지 된 프로세스 를 재개 하려면 SIGCONT
신호를 사용하십시오 .
소유자는 일반적으로 해당 프로세스를 시작한 사용자입니다. 이 명령은 다른 사용자가 실행할 수 있지만 다른 프로세스입니다.
다른 소유자가 해당 프로세스를 실행할 수 없다는 것을 의미합니까?
다른 소유자가 없습니다. 프로그램 (실행 파일)과 프로세스 (프로그램 실행)를 혼동하지 마십시오.
다른 소유자가 해당 프로세스를 실행 / 종료 / 다시 시작할 수 없다는 의미입니까?
단일 소유자가 이미 프로세스를 시작했습니다. 소유자가 아닌 다른 사용자 를 의미하는 경우에 따라 다릅니다.
루트, 즉 uid
0 과 같은 사용자 는 최대 전력을 갖습니다. uid
OS 관점에서 동일한 사용자를 공유하는 다른 사용자 는 동일한 사용자이므로 프로세스를 최대한 활용할 수 있습니다.
uid가 다른 사용자는 sudo
비슷한 명령을 통해 소유자 또는 루트 권한으로 전환 하거나 프로세스와 관련이있는 경우 더 적은 범위로 프로세스를 종료 / 중지 / 재개 할 수 없습니다. 그들의 계층에서.