더 높은 권한을 얻으려면 사용자 이름과 비밀번호로 인증하세요.

더 높은 권한을 얻으려면 사용자 이름과 비밀번호로 인증하세요.

프로세스의 권한을 향상시킬 수 있는 방법이 있습니까? 예를 들면 다음과 같습니다. 프로그램 A가 사용자 모드 권한만으로 C로 컴파일되었다고 가정합니다. 이제 이 프로그램이 루트 권한을 얻으려고 하지만 루트 사용자 이름과 비밀번호가 필요하다고 가정합니다. 따라서 매크로나 라이브러리를 호출한 다음 사용자 이름과 비밀번호를 요청합니다. 사용자 이름이나 비밀번호가 올바르지 않으면 오류가 반환되지만 사용자 이름과 비밀번호가 정확하면 프로세스에 루트 권한이 부여됩니다.

답변1

이건 불가능 해. C에 기능이 없어서가 아니라 Unix 보안 모델이 이를 금지하기 때문입니다.

Unix 보안 모델에서 프로그램은 권한을 줄일 수만 있고 권한을 늘릴 수는 없습니다. 프로세스는 일시적으로효과적인특권을 부여받고 나중에 원래의 "진짜" 특권을 되찾지만, 시작된 곳보다 더 이상 나아갈 수는 없습니다.

사용자가 로그인하는 프로세스는 루트 권한으로 시작되어야 합니다. 즉, 사용자는 모든 작업을 수행할 수 있는 권한을 가지고 있습니다. 사용자가 이름과 비밀번호를 입력하고 로그인 프로그램이 이를 확인하면 프로세스는 원하는 사용자로 영구적으로 변경됩니다. 다음 두 가지 방법으로 루트 권한을 얻을 수 있습니다.

  • 루트로 실행되는 다른 프로세스에 의해 시작될 수 있습니다. 이것이 콘솔 로그인과 SSH 로그인이 작동하는 방식입니다.
  • 그것은 될 수 있습니다설정값루트에 속하는 실행 파일입니다. 이것이 su작동하는 방식입니다 sudo.

여기서는 상황을 조금 단순화하고 있지만 프로그램이 권한을 늘릴 수 없다는 기본 원칙은 항상 사실입니다. 프로세스가 권한을 얻는 방법은 단 하나뿐입니다.구현하다setuid1 실행 파일.

프로그램이 더 높은 권한으로 일부 작업을 수행해야 하는 경우 자체적으로는 해당 작업을 수행할 수 없습니다. 이를 수행하려면 더 높은 권한을 가진 프로세스여야 합니다. 필요한 권한으로 이미 실행 중인 서버에 연결하거나 setuid 실행 파일을 실행하여 이를 수행할 수 있습니다. setuid 실행 파일은 특별한 권한 없이 실행 파일을 실행하는 su또는 와 유사할 수 있지만 권한 상승이 있는 경우 체인에 setuid 실행 파일이 있어야 합니다.sudo

아니면 setgid, setpcap ...

관련 정보