특정 스크립트 줄이 루트로 실행되는 것을 방지

특정 스크립트 줄이 루트로 실행되는 것을 방지

다음과 같이 실행하려면 루트 권한이 필요한 쉘 스크립트를 작성한다고 가정해 보겠습니다.

#!/bin/sh
ip -s -s neigh flush all
ufw enable

특정 코드 줄이 루트로 실행되는 것을 방지하는 방법, 즉 TOR 브라우저를 시작하기 위해 위 스크립트에 줄을 추가한다고 가정합니다.

#!/bin/sh
ip -s -s neigh flush all
ufw enable
sh -c '"/home/back/Downloads/tor-browser_en-US/Browser/start-tor-browser" --detach || ([ !  -x "/home/back/Downloads/tor-browser_en-US/Browser/start-tor-browser" ] && "$(dirname "$*")"/Browser/start-tor-browser --detach)' dummy %k

TOR는 항상 루트가 아닌 모드에서 실행되므로 Tor가 루트가 아닌 사용자로 실행되고 나머지 스크립트가 루트 사용자로 실행되도록 하려면 위 스크립트에서 무엇을 변경해야 합니까?

답변1

사용 sudo:

#!/bin/sh
ip -s -s neigh flush all
ufw enable
sudo -Hu username sh -c '"/home/back/Downloads/tor-browser_en-US/Browser/start-tor-browser" --detach || ([ !  -x "/home/back/Downloads/tor-browser_en-US/Browser/start-tor-browser" ] && "$(dirname "$*")"/Browser/start-tor-browser --detach)' dummy %k
  • -H: $HOME환경 변수를 대상 사용자의 홈 디렉터리로 설정합니다.
  • -u: 다음 대신 지정된 대상 사용자로 명령을 실행합니다.root
  • username: 인수는 -u대상 사용자의 사용자 이름을 지정합니다.

답변2

이 문제를 해결하는 방법에는 두 가지가 있습니다.

1) 루트가 아닌 사용자로 스크립트를 실행하고 sudo루트에 대한 권한 상승을 사용합니다(루트로 실행하려는 명령 앞에 붙음 sudo).

또는

2) 루트 사용자로 스크립트를 실행하고 su루트가 아닌 사용자로 tor 명령을 실행하십시오. su명령을 실행할 사용자와 -c실행할 명령을 지정할 수 있는 옵션입니다. .tor를 통해 호출하는 경우 "tor" 명령을 스크립트 자체에 넣는 것이 좋습니다 su.

관련 정보