sudo를 사용하여 실행 파일의 소유권을 루트로 변경할 수 있습니까?

sudo를 사용하여 실행 파일의 소유권을 루트로 변경할 수 있습니까?

루트로 실행해야 하는 내 사용자 ID로 생성된 실행 파일이 있습니다. 따라서 실행 파일의 소유권을 root:root로 변경하고 setuid를 사용해야 합니다. 내가 시도할 때

sudo chown root:root [EXE_NAME]

오류가 발생합니다.

chown: changing ownership of `[EXE_NAME]`: Operation not permitted

내 제약은 다음과 같습니다

  • sudoers 파일에 내 사용자 ID에 대한 sudo ALL ALL이 있지만 루트로 로그인할 수 없습니다.
  • 루트로 실행해야 하는 실행 파일이 pcap_open_live 함수를 사용하여 무차별 모드에서 네트워크 인터페이스(따라서 루트로 실행해야 함)에 바인딩하려고 합니다.

궁극적인 문제, 즉 안전하고 sudo가 필요하지 않은 네트워크 인터페이스에 바인딩되는 실행 파일을 실행해야 하거나 루트 소유 셸을 생성해야 하는 문제를 해결하는 더 좋은 방법이 있습니까( sudo tcsh)

답변1

실제로 UID 0을 제공하는 경우 sudo( 확인 sudo id) 해당 파일이 권한을 지원하지 않는 파일 시스템(예: FAT32)에 있는 것으로 의심됩니다. 이러한 파일 시스템에서는 파일의 소유권(또는 권한)을 변경할 수 없습니다.

답변2

파일 시스템이 소유권을 지원하는 경우 제가 생각할 수 있는 세 가지 이유가 더 있습니다.

  1. 파티션이 읽기 전용으로 마운트되었습니다.

    파일 이름을 바꾸거나 동일한 디렉터리에 다른 파일을 만들어 보십시오. 가능하다면 그것은 문제가 아닙니다.

  2. 파일이 잠겨 있습니다.

    프로그램이 실행 중인지 확인하세요. 파일 이름을 바꿔보세요.

  3. 파일은 다음과 같이 설정됩니다.추가만또는불변.

    이를 변경하려면 다음 명령을 실행하십시오.

    sudo chattr -ai filename
    

답변3

꼭 바꿔야 한다면소유권(소유권과 그룹이 아닌) 을 사용할 수 있습니다 chown root filename. 루트가 아닌 경우 sudo 접두어가 붙습니다.

그룹을 변경하려면 항상 가 있습니다 chgrp.

(물론 단일 명령으로 모든 것만큼 훌륭하지는 않습니다).

답변4

일반 사용자는 1024 미만의 포트가 아닌 네트워크 인터페이스에 바인딩할 수도 있습니다. 따라서 프로그램을 1024 이상의 포트에 바인딩한 다음 외부적으로 또는 ssh -fN -L 0.0.0.0:<PRIV_PORT>:localhost:<UNPRIV_PORT>.

즉, 문제는 RHEL에서 기본적으로 활성화되는 SElinux와 관련될 수도 있습니다. 비활성화하려면 에서 설정 SELINUX=disabled하십시오 /etc/selinux/config.

관련 정보