sudo의 변덕(bash shell의 원리?!)

반응형

문제 상황

#!/bin/bash
chown $USER .
  • 위와 같은 쉘스크립트를 작성하여 쉽게 해당 디렉토리의 권한을 바꿀 수 있게 하였다.
  • 파일 이름은 chown.sh 라고 가정하자.
  • 하지만 실행을 하기 위해서는 sudo 권한이 필요했는데, sudo ./chwon.sh 으로 실행해주니 내 USER가 아닌 root 권한으로 변경되는 것이었다.

문제 분석

#!/bin/bash
echo $USER
  • 위와 같은 쉘스크립트가 있다고 가정하자.
  • 파일 이름은 echo.sh 라고 가정하자.
  • 내 USER는 wooogy라고 가정하자.

이를

./echo.sh
sudo ./echo.sh

신기하게도 위의 결과값이 달라진다.

첫번째의 경우에는

$ ./echo.sh 
wooogy

두번째의 경우에는

$ sudo ./echo.sh 
[sudo] password for wooogy: 
root

이와 같이 노출된다.


해결

#!/bin/bash
sudo chown $USER .

쉘 스크립트 안에서 sudo를 실행해줌으로써 해결할 수 있었다.

결론

추측을 해보건데, sudo를 바깥에서 실행할때는 해당 sudo(root) → USER가 되는 것 같다.

bash shell 특성상 모든 작업을 하기 전에 환경 변수를 까 버리기 때문에 나오는 상황인 것으로 확인된다.

#!/bin/bash
echo $USER
echo $SUDO_USER
$ ./echo.sh 
wooogy
$ sudo ./echo.sh 
root
wooogy

SUDO_USER도 같이 echo를 해보면 명확하게 알 수 있다.

해당 쉘 스크립트를 sudo 권한으로 실행시에는 sudo를 실행한 내 USER가 노출이 된다.

하지만 이 개념이 어디에 쓰일 수 있을지는 모르겠다...

  • 현재 이 유저가 sudo 권한이 있는지 없는지 확인할 때 쓰일 수 있을 것 같음
반응형