"sudo"없이 루트로 프로그램을 실행하는 방법은 무엇입니까?


10

OS X에는 루트로만 실행할 수있는 특정 바이너리 프로그램이 있습니다.

sudo암호를 입력하고 입력 할 때마다 앞에 싫증이 났 으며 암호를 묻지 않고 정기적으로 호출 할 때 자동으로 루트로 실행 되기를 원합니다.

프로그램의 소유자는 루트이고 그룹은 wheel입니다.

chmod ug+s실행시 userid와 groupid를 root / wheel로 설정 하려고했지만 sudo없이 프로그램을 실행할 때 여전히 sudo 또는 root로만 실행할 수 있다고 불평합니다.


특정 시간 또는 일부 이벤트가 발생할 때 실행할 수 있습니까?
user151019

9
예전의 유닉스 전문가들은 루트 전용 작업을 정기적으로 수동으로 호출하면 잘못하고 있음을 시사합니다. 이것이 자동화 가능한 것입니까? 아니면 데몬으로 실행합니까? 더 자세한 내용은 다른 종류의 솔루션에 대한 제안을 가져올 수 있습니다.
dmckee --- 전 운영자 고양이

프로그램은 실제로 루트가 소유하고 있습니까? Setuid / gid는 파일의 사용자 / 그룹을 사용합니다.
Daniel Beck

2
… "자세한 내용"에는이 프로그램의 바이너리가 NFS 마운트 볼륨에 있는지 여부 및 nosuid마운트 옵션 을 사용할지 여부와 함께 정기적으로 수퍼 유저로서 프로그램을 실행해야하는 이유가 포함됩니다.
JdeBP

@dmckee 많은 맥 사용자들이 자신의 워크 스테이션에서 서버 소프트웨어를 실행하고 실제로 필요하지 않은 것들에 대해 루트를 요구하도록 설정되는 경우가 많지만 루트없이 실행되도록 LAMP 스택을 재구성하는 것은 어려운 일입니다. 반면에, 아파치를 하루에 20 번 다시 시작하고 매번 sudo를 입력하는 것은 엉덩이에 고통입니다. 이것은 간단한 해결책입니다.
Abhi Beckert

답변:


2

실행하려는 프로그램이 실제로는 바이너리이고 쉘 스크립트가 아닌지 확인하십시오. 대부분의 쉘은 실제로 안전하게 수행하기가 어렵 기 때문에 suid 스크립트를 무시합니다. 확인하는 쉬운 방법 file은 프로그램 에서 명령 을 사용하는 것 입니다.


17

문제에 대한 반 해결책 :

sudoers 파일에서 다음을 추가하십시오.

username ALL= NOPASSWD: /path/to/command

그런 다음 명령 행에서 다음을 입력 할 수 있습니다.

sudo command

암호를 묻지 않고 명령을 실행합니다. 이 명령은 루트로 실행됩니다.

사용자 이름을 실제 사용자 이름으로 바꿔야합니다.


가장 좋은 답을 찾기 위해 놀랐습니다. 감사합니다!
CDR

참고로, 명령에 sudo는 포함 된 쉘 별명 작성 (sudo는 명령을 입력 할 필요 없음) 나머지 절반을 해결하기 위해 (surm = sudo는 RM처럼 "$를 @")
월터

4

어떤 이유로 든 데몬으로 실제로 호출 할 수없는 경우 (이 질문은 해당 인스턴스와 관련이 있습니다) 이 방법 함께 해킹 수 있지만 꽤 더럽고 전혀 안전하지 않습니다.

개념은 AppleScript로 시작하는 것입니다. 먼저 명령 행에서 프로세스를 호출하는 방법을 알아야합니다 (이미 sudo를 사용중인 경우 모두 설정되어 있어야 함). do shell script명령을 사용하여 해당 프로세스를 시작하고 sudo를 사용하는 대신 AppleScript에 자격 증명을 작성합니다.

do shell script "/path/to/your/executable/here" user name "me" password "mypassword" with administrator privileges

나는 이것이 안전하지 않다는 것에 대해 다시 한 번 강조한다. 이것은 귀하의 관리자 암호가 일반 텍스트로 저장 될 것임을 의미합니다. 가능하다면 이것을 LaunchDaemon으로 배경을 지정할 수있는 방법을 찾아야합니다.


Mac을위한 "Runas"방법 :) 감사합니다
Vlueboy

2

OSX에서 사용하는 프로그램이 / usr / local / bin / YourProgramName에 있다고 가정합니다.이 문제를 해결하려면 다음 명령을 수행하십시오. 파일 자체가 아닌 파일에 뿌리를 둔 파일 계층의 사용자 ID / 그룹 ID를 변경하려면 .

sudo chown -R $(whoami) /usr/local/bin/

... 그런 다음 터미널에서 programName, $ YourProgramName을 호출하십시오.


내 문제는 설치된 프로그램이 적절한 권한없이 설치 되었기 때문에 해당 프로그램의 디렉토리에서 이것을 실행했으며 이제는 sudo없이 잘 실행됩니다. 감사!
atwixtor

0

넌 할 수있어

sudo tcsh

루트 쉘에 넣을 것입니다.


0

프로그램 자체가 ID = 0으로 실행 중인지 확인하는 것처럼 보입니다.


1
… 물론 set-UID 수퍼 유저 인 경우 (위에 언급 된 문제는 제외) 될 것입니다. 아마도 당신이 말하는 것은 프로그램이 단지 효과적인 UID 0이 아닌 실제 UID 0을 검사하고 있다는 것입니다.
JdeBP

-1

당신은 할 수 sudo chown YOUR-USERNAME-HERE BINARY-NAME-HERE있습니다.

여전히 dmckee의 의견에 전적으로 동의합니다.


이것이 어떻게 도움이 되겠습니까? ⁠
Scott
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.