사용자에게 Linux 기능을 할당할 수 있습니까?

사용자에게 Linux 기능을 할당할 수 있습니까?

Solaris에서는 사용자에게 권한을 할당할 수 있다고 생각합니다.

Linux에서는 실행 파일에 기능을 할당할 수 있지만 사용자에게도 기능을 할당할 수 있습니까?

답변1

예, Linux에서 루트가 아닌 사용자로 실행되는 프로세스에 추가 기능을 제공할 수 있습니다. 이는 ping이러한 사용자가 setuid가 아닌 바이너리를 실행하거나 권한 있는 포트(< 1024)에 바인딩된 서버를 실행하도록 허용하는 데 유용할 수 있습니다.

많은 경우에 당신은 필요합니다환경 역량이 기능이 제대로 작동하려면 지원이 필요하므로 루트가 아닌 사용자에게 기능을 유용하게 만드는 데 필요한 모든 기능을 잠금 해제하려면 최신 커널과 라이브러리를 사용해야 할 수도 있습니다.

(상속 가능한 함수를 사용할 수도 있지만 이를 위해서는 일치하는 파일 함수로 실행할 바이너리를 표시해야 합니다 setcap.)

사용예카푸스(1)루트가 아닌 사용자로 setuid가 아닌 ping을 실행하는 방법은 다음과 같습니다.

sudo capsh --caps="cap_net_raw+eip cap_setpcap,cap_setuid,cap_setgid+ep" \
    --keep=1 --user=nobody --addamb=cap_net_raw -- \
    -c "./ping -c1 127.0.0.1"

--addamb환경 기능을 지원하려면 capsh 및 libcap 버전 2.25 이상( 의 경우)과 Linux 커널 4.3 이상이 필요합니다 . 바라보다이 문제자세한 내용을 알아보세요(위 명령의 출처).

sudo(루트만 기능을 추가할 수 있기 때문에) 위의 명령이 필요 하지만 ping실행 시 사용자는 "nobody"로 제거되므로 ping전체 루트 권한으로는 절대 실행할 수 없고 cap_net_raw만 실행할 수 있습니다.

이 기능이 유용한 또 다른 상황은 데몬을 시작할 때입니다. 예를 들어 루트로 시작할 필요 없이 포트 80에서 HTTP 서버를 실행하고 해당 포트에 바인딩한 후에만 권한을 제거합니다.

systemd에서 제공기능 구성 지침User=서비스 단위에서는 서비스에 대한 구성을 통해 루트가 아닌 사용자로 프로세스를 실행할 수도 있습니다. 추가 기능이 있는 루트가 아닌 사용자로 프로세스를 실행하는 경우 Linux 커널 4.3 이상이 필요한 환경 기능 지원이 필요할 수도 있습니다.

관련 정보