루트 권한이 필요한 bash 스크립트를 어떻게 실행합니까?


15

ISP에서 제공하는이 스크립트 줄이 있습니다.

sudo bash
echo "plugin L2TP.ppp">>/etc/ppp/options 
echo "l2tpnoipsec">>/etc/ppp/options

터미널에 한 줄씩 붙여 넣으면 작동합니다. * .command 파일을 만들고 두 번 클릭하여 실행하고 싶습니다. 그러나 내가 얻는 것은 암호 프롬프트와 빈 bash 창입니다. 결과 "옵션"파일이 비어 있습니다.

나는 이것을 시도했다 :

#!/bin/bash

echo "plugin L2TP.ppp">>/etc/ppp/options 
echo "l2tpnoipsec">>/etc/ppp/options

나는 얻다:

/ etc / ppp / options : 권한이 거부되었습니다

bash 내부에서 루트 권한을 얻으려면 명령을 사용해야한다고 생각합니다.


스크립트를 만들 때 sudo ./ispscript.command를 입력하여 스크립트를 실행 했습니까? 또한 bash 스크립트는 일반적으로 .sh 접미사 ipscript.sh를 갖습니다.
Aaron Lake

1
참고이 스크립트는 한 번만 실행하면됩니다. 또한 스크립트를있는 그대로 계속 실행하면 >> 파일에 추가됩니다. 옵션 파일은 스크립트를 실행할수록 크기가 계속 커질 것입니다. 옵션 파일을 읽는 데 문제가 발생할 수 있습니다.
dhempler

@ dennis.hempler, 감사합니다. 실제로이 스크립트를 자주 실행할 것입니다. USB 모뎀 장치가 제대로 작동하려면이 파일이 비어 있어야합니다. 따라서 USB 모뎀을 삽입하기 전에 파일을 지우고 유선 인터넷에 연결하기 전에 해당 옵션을 파일에 씁니다.
Dmitriy

답변:


15

작성한 스크립트를 작성하십시오.

#!/bin/bash

echo "plugin L2TP.ppp">>/etc/ppp/options 
echo "l2tpnoipsec">>/etc/ppp/options

홈 디렉토리 또는 홈 디렉토리 내의 'scripts'디렉토리에 l2tp.sh로 저장하십시오. 실행되도록 허용하십시오 (터미널에이 명령을 작성하십시오).

chmod 700 ~/path/to/l2tp.sh

sudo (루트 권한)를 사용하여 파일을 실행하려면

방법 # 1. 터미널 유형에서 :

$ sudo ~/path/to/l2tp.sh

방법 # 2. 이 내용으로 run_l2tp.command 파일을 작성하십시오.

sudo ~/path/to/l2tp.sh

실행되도록 허용하십시오.

chmod u+x run_l2tp.command

run_l2tp.command를 두 번 클릭하고 비밀번호를 입력하면 l2tp.sh 파일이 루트 권한으로 실행됩니다.

방법 # 3 보안상의 이유로 시스템 사용자가 스크립트를 실행할 수 없도록하려면 대신 관리자 암호를 묻는 메시지를 표시하려는 경우 대체 해결 방법은 셸 스크립트를 저장 한 다음 AppleScript 프로그램 을 사용하여 AppleScript를 생성하십시오.

AppleScript는 한 줄짜리라고 말합니다 do shell script «your script's name here» with administrator privileges. 해당 스크립트를 응용 프로그램으로 저장하십시오. 그런 다음 클릭하면 관리자 암호를 묻고 관리자 권한으로 셸 스크립트를 실행합니다.

분명히 «your script's name here»스크립트 경로로 바꿉니다.

몇 가지 참고 사항 :

  • UNIX와 같은 시스템에서 ~는 "my home directory"의 줄임말입니다.
  • Chmod 700은 사용자 만 파일을 실행 가능하게합니다. 자세한 내용 은이 Wikipedia 페이지를 참조하십시오 .
  • 명령 전에 'sudo'를 입력하면 루트 권한을 사용하여 프로그램이 실행됩니다. 이 작업을 수행 할 때주의하십시오. 수행중인 작업을 잘 모를 경우 나쁜 일이 발생할 수 있습니다.
  • 이 스크립트를 홈 디렉토리에 직접 저장 한 경우 / path / to를 생략 할 수 있습니다.

내 수정 사항을 되 돌린 이유는 무엇입니까? 내 질문에 터미널을 실행하지 않고 수동으로 입력하지 않고 두 번 클릭하는 방법에 대해 묻고있었습니다. 그리고 적절하게 답변을 편집했습니다.
Dmitriy

변경 사항을 다시 적용하십시오.
Aaron Lake

3

이것을 저장하십시오 :

#!/bin/bash

echo "plugin L2TP.ppp">>/etc/ppp/options 
echo "l2tpnoipsec">>/etc/ppp/options

라는 파일로 데스크탑에 script.sh.

터미널 창을 열고 다음을 입력하십시오.

sudo bash ~/Desktop/script.sh

프롬프트가 표시되면 비밀번호를 입력하면 파일의 모든 명령이 수퍼 유저 권한으로 실행됩니다.


올바른 권한을 가진 실행 파일에 스크립트를 가질 수 있습니다 (권한이있는 것이 무엇이든).
bmike

@geotavros 나는 당신이 그것을 클릭 가능하게하고 싶었던 것을 놓쳤다. 죄송합니다. 그래도 투표에 감사하십시오.
Ian C.

1

보안상의 이유로 시스템 사용자가 스크립트를 실행할 수 없도록하려면 대신 관리자 암호를 묻는 메시지가 표시되도록하려면 셸 스크립트를 저장 한 다음 프로그램을 사용하는 것이 좋습니다. AppleScript 를 작성하는 AppleScript 편집기

AppleScript는 한 줄짜리라고 말합니다 do shell script «your script's name here» with administrator privileges. 해당 스크립트를 응용 프로그램으로 저장하십시오. 그런 다음 클릭하면 관리자 암호를 묻고 관리자 권한으로 셸 스크립트를 실행합니다.

분명히 «your script's name here»스크립트 경로로 바꿉니다.


1
이것은 sudo 방법과 동일합니다. sudo를 사용하려면 관리자 수준 계정이 있어야합니다. 당신이 제안하는 것은 스크립트를 가져 와서 스크립트로 래핑합니다.
Aaron Lake

아니요, 동일하지 않습니다. 이것은 터미널 스크립트를 가져 와서 GUI 스크립트로 래핑하므로 사용자는 터미널로 넘어갈 필요가 없으며 터미널 창이 아닌 친숙한 Mac GUI에서 암호를 입력하라는 메시지가 표시됩니다. 기술 사용자에게는 동일한 것으로 보일 수 있습니다. 대부분의 최종 사용자에게는 터미널을 사용하지 않아도 세상이 달라집니다.
다니엘

1
유용성을 위해 "보안 목적으로"라고 언급 했어야합니다. 그럼에도 불구하고 더 많은 솔루션이 더 낫습니다.
Aaron Lake

최종 사용자에게 가장 유용한 솔루션은 setuid를 호출하고 수퍼 유저로 실행하고 스크립트 파일을 호출 할 수있는 바이너리를 생성하여 최종 사용자가 무언가를 두 번 클릭하면 원하는 결과가 발생하는 것입니다. 해당 솔루션에는 오클라호마 크기의 보안 허점이 있지만 이는 보안 강화 기능입니다.
다니엘

1
@DanielLawson, 나는 내용으로 텍스트 파일을 만들었습니다 : 관리자 권한으로 쉘 스크립트 "~ / vpn_enable.sh"를 수행하십시오. 그런 다음 .app 파일로 이름을 바꿨습니다. 클래식 환경이 더 이상 지원되지 않기 때문에 AppleScritpTest.app 응용 프로그램을 열 수 없습니다.
Dmitriy

1

문제는 당신이 명령 줄에서 작업을 수행 할 때, 당신이하고있는 것은 시작 것을의 bash아래에 sudo, 다음에 그 다음 두 명령을 전송 bash하지 원래 쉘. (표시는 exit두 번 필요하다는 것 )

스크립트에서 수행하면 bash명령이 종료되지 않으므로 다음 두 명령은 실행되지 않습니다.

AppleScript 솔루션만큼 우아하지는 않지만 명령 줄에서 스크립트 로이 작업을 수행하려는 경우 다음과 같습니다.

#!/bin/sh --
sudo bash -c 'echo "plugin L2TP.ppp">>/etc/ppp/options' 
sudo bash -c 'echo "l2tpnoipsec">>/etc/ppp/options'

io 리디렉션 ( >>비트)이 sudo필요하지 않은 경우 sudo sh -c트릭 을 사용 하지 않고 직접 명령을 호출 할 수 있습니다 . (그리고 sh -c에코를 루트로 실행하지 않고 파일을 원래 사용자로 추가하지 못하게 하려면 인수를 인용 해야합니다.)

그것은 것이다 A와 작동 .command파인더에서 파일, 그러나 당신의 암호를 묻는 터미널 창을 가져올 것이고, 올바르게 입력 한 경우, 명령을 실행합니다. (최근에 인증을받지 않았다고 가정하면 확인 메시지가 표시되지 sudo않고 계속 실행 됨)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.