2010-04-06 4 views
2

Objective-C (Snow Leopard의 Xcode 3.2)에서 특정 사이트를 선택적으로 차단하거나 특정 사이트 만 허용 (따라서 다른 모든 사이트 차단) 할 수있는 프로그램을 작성하고 있습니다. 이 프로그램의 논리는 다소 단순합니다. 나는 완전한 인터넷 접속이있을 때 산만 해지는 경향이있다. 그러나 일과 관련된 웹 사이트에 도착하기 위해서는 근무 시간 동안 인터넷에 접속해야한다. 분명히 이것은 영구적 인 블록이 아니지만 너무 많이 방황하는 것을 보았을 때만 집중하는 데 도움이됩니다.관리자 암호를 묻지 않고 root로 응용 프로그램을 실행하는 방법은 무엇입니까?

현재 관리자 권한을 얻기 위해 AppleScript를 통해 호출되는 Unix 스크립트를 사용하고 있습니다. 그런 다음 ipfw 규칙을 활성화하고 특정 기간이 지나면 전체 인터넷 액세스를 복원합니다. 간단하고 효과적이지만 표준 사용자로 실행하고 있기 때문에 "오프라인"으로 갈 때마다 관리자 암호를 입력하는 것이 번거로워집니다. 또한 Xcode 및 Objective-C로 작업하는 방법을 배울 수있는 좋은 기회입니다. 현재 모든 것은 예상대로 작동하여 실제 차단을 뺀 것입니다. 목록에 여러 사이트를 추가하고 이러한 웹 사이트를 차단하거나 허용할지 여부를 지정할 수 있으며 "오프라인"상태를 유지할 시간을 지정하여 차단을 "시작"할 수 있습니다.

그러나 Objective-C에서 권한이 부여 된 Unix 명령을 어떻게 실행할 수 있는지에 대한 명확한 정보를 얻기가 어렵습니다. 이상적으로, 관리자 계정에 관한 정보를 키 체인에 저장하여 나중에 사용할 수 있기를 바랍니다. 버튼을 클릭하면 편리하게 "오프라인"모드로 이동할 수 있습니다. 좀 더 이상적으로, 특권이 부여 된 유닉스 명령에 의존 할 필요없이이 특정 사용자에 대한 일부/모든 웹 사이트에 대한 액세스를 차단할 수있는 Objective-C 클래스가있을 수 있습니다. 세 번째 가능성은 루트 권한으로이 프로그램을 시작하고 필요할 때까지 사용 권한을 줄이는 것입니다.하지만이 프로그램은 OS X의 메뉴 표시 줄에 중첩 된 GUI 응용 프로그램이므로 결과는 다소 어색하며 각각을 실행하게됩니다. 루트 권한으로 항상 쉬운 작업이 아닙니다.

나에게 조언이나 조언을 해 줄 수있는 사람은 누구입니까? 제발, 안보 경고, 나는 완전히 내가 알고 싶은 일은 잠재적 인 보안 위협입니다.

+0

Firefox를 사용하는 경우 이미 LeechBlock이라는 플러그인이 있습니다. https://addons.mozilla.org/en-US/firefox/addon/4476 (물론 Safari 나 다른 브라우저를 사용하지 않도록 조처해야합니다. ;)) –

+1

질문을 짧게 한 단락으로 줄이면 더 많은 사람들이 반응 할 것이라고 확신합니다. 이 경우 모든 상황을 알 필요가 없습니다. –

답변

2

admin 권한으로 무언가를하고 싶을 때마다 매번 인증하지 않으려는 경우 setuid를 확인해야하는 것처럼 들립니다.

규칙을 변경하려면 명령 줄 실행 파일을 조금만 만든 다음 해당 도구의 소유자를 root로 설정하십시오. 그런 다음 setuid 비트를 설정하십시오. 이제 사용자로 실행할 수 있으며 루트로 실행됩니다. 추가 정보를 원하시면 여기를

봐 : http://en.wikipedia.org/wiki/Setuid

+0

Setuid를 더 이상 사용하면 안됩니다. launchd가 대신 사용할 수 있습니다. (비록 사용하는 것이 훨씬 어렵습니다.) –

2

당신은 더 높은 권한으로 실행되는 별도의 프로세스를 만들어야합니다. launchd를 사용하여 이러한 도우미 응용 프로그램을 실행하는 방법에 대해서는 BetterAuthorizationSample을 살펴보십시오.

+2

네, 이것도 효과가 있습니다. 그것은 불합리하게 복잡하다;) –

+0

@Ken : +1, 당신은 절대적으로 옳다. 나는 나의 어플리케이션 중 하나를 위해 launchd를 사용하고 있으며, 함께 일하는 것은 무서운 것이다. (나는 그것이 단순한 작업을 위해 꽤 좋다라고 확신한다. ..) –

+1

나는 Ken의 접근법을 선호 할 것이다. 나는 BetterAuthorizationSample을 통해 자신의 길을 찾으려고 노력했지만, 성취하려고하는 다소 단순한 작업을 위해 대단히 복잡합니다. :) – kvaruni

관련 문제