![Unix에서는 프로세스 사용자를 변경하는 세 가지 방법이 있습니다.](https://linux55.com/image/144835/Unix%EC%97%90%EC%84%9C%EB%8A%94%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%20%EC%82%AC%EC%9A%A9%EC%9E%90%EB%A5%BC%20%EB%B3%80%EA%B2%BD%ED%95%98%EB%8A%94%20%EC%84%B8%20%EA%B0%80%EC%A7%80%20%EB%B0%A9%EB%B2%95%EC%9D%B4%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
~에 따르면https://unix.stackexchange.com/a/489913/674
cron 작업은 사용자가 로그인하지 않고도 모든 사용자로 실행할 수 있습니다.
다행히도 init 프로세스를 시작하기 위해 루트에 로그인할 필요는 없습니다(수천 대의 서버와 수백만 대의 가상 머신 대기열을 처리한다고 상상해 보세요).
나를 소유자로 두고 로그인하지 않고 프로세스를 실행하려면 두 곳에서 어떻게 해야 합니까?시스템/라이브러리 호출레벨과 유틸리티 레벨?
root
하고 싶다면 어떻게 해야 할까요 ?
어쩌다로그인할 수 없는 서비스 사용자프로세스 소유자로 프로세스를 시작하시겠습니까, 아니면 나중에 프로세스 소유자가 되시겠습니까?
유일한 방법은 프로그램에서 프로세스를 호출 setuid()
하거나 실행하는 것입니까?seteuid()
감사해요.
답변1
Unix에서는 프로세스 사용자를 변경하는 세 가지 방법이 있습니다.
프로세스 사용자를 변경하는 2가지 시스템 수준 방법
- 프로세스에 루트가 전통적으로 가지고 있는 CAP_SETUID 기능(및 기타 모든 기능)이 있는 경우 시스템 호출을 사용하여 다른
setuid
사용자 로 변경할 수 있습니다 . 다른 사용자는 uid를 뒤섞을 수 있습니다. 프로세스에는 3개의 uid가 있으며 마음대로 이동할 수 있습니다. 하나만 남을 때까지 uid를 교환하거나 삭제할 수 있습니다. CAP_SETUID 기능이 없으면 추가할 수 없습니다 . 일반적으로 프로세스는 권한을 해제하거나 이동하기 위해 이러한 시스템 호출만 사용할 수 있습니다. 이러한 호출을 통해 프로그램을 계속할 수 있습니다.setreuid
setresuid
setfsuid
uids
exec
실행 파일suid
: 실행 파일에suid
비트가 설정되어 있고 유효한 유형(스크립트가 아닌 java가 아닌...)인 경우 실행 시 유효 사용자 ID가 파일의 사용자 ID로 변경됩니다. 소유자. (이것은 비트가 있는 그룹에 대해서도 수행될 수 있습니다sgid
). 이것이 특권을 얻는 유일한 방법입니다. 현재 프로그램은exec
호출되면 종료되고 새 프로그램으로 대체되지만 프로세스는 동일하며 열린 파일(예: stdin, stdout, stderr)도 상속합니다.
fork
정량아니요사용자를 변경합니다. 분기된 프로세스는 몇 가지 예외를 제외하면 상위 프로세스와 동일합니다(참고자료 참조 man fork
). 특히 uid, gid 및 기능은 변경되지 않았습니다.
실용적인 방법
이러한 프로그램은 위에 설명된 2가지 체계적인 접근 방식을 사용합니다.
sudo
또는 사용su
:su
다른 사용자에게는 비밀번호를 묻는 메시지가 표시됩니다.sudo
비밀번호를 묻는 메시지가 표시되지만 파일에 등록된 경우에만 유효합니다sudoers
.
sudo
, 등은 su
2 가지 시스템 메소드를 사용합니다. (그리고 새로운 프로세스가 생성됩니다. 다른 시스템 메소드에서는 새로운 프로세스가 생성되지 않습니다.)login
cron
sudo
,무엇을 합니까 su
?
#↳ ll /usr/bin/sudo
-rwsr-xr-x 1 root root 155K Sep 9 2017 /usr/bin/sudo*
사용자가 볼 수 있듯이 sudo
실행 파일은 루트가 소유하고 suid 비트가 설정되어 있습니다( s
첫 번째 비트가 표시될 것으로 예상되는 위치 x
).
실행 하면 sudo
루트로 실행됩니다(무엇을 하고 있는지 모르면 시도하지 마세요). 그런 다음 보안 검사를 수행합니다. 그런 다음 set??uid
원하는 사용자가 되는 데 사용되며 , 그런 다음 해당 프로그램 exec
(포크일 수도 있음)이 원하는 프로그램이 됩니다.
로그인하지 않고 프로세스 실행
예정된 시작 서비스를 사용하십시오.
- 예약 된 일들
- 존재하다
네트워크 서버가 작업 실행을 위한 네트워크 요청에 응답할 수 있도록 네트워크 메시지를 보냅니다.
자동 로그인 사용: ssh
다른 컴퓨터의 스크립트에서 프로세스를 시작하는 데 사용됩니다.