문제 상황 #!/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 권한이 있는지 없는지 확인할 때 쓰일 수 있을 것 같음
sudo의 변덕(bash shell의 원리?!)
문제 상황
sudo ./chwon.sh
으로 실행해주니 내 USER가 아닌 root 권한으로 변경되는 것이었다.문제 분석
이를
신기하게도 위의 결과값이 달라진다.
첫번째의 경우에는
두번째의 경우에는
이와 같이 노출된다.
해결
쉘 스크립트 안에서 sudo를 실행해줌으로써 해결할 수 있었다.
결론
추측을 해보건데, sudo를 바깥에서 실행할때는 해당 sudo(root) → USER가 되는 것 같다.
bash shell 특성상 모든 작업을 하기 전에 환경 변수를 까 버리기 때문에 나오는 상황인 것으로 확인된다.
SUDO_USER도 같이 echo를 해보면 명확하게 알 수 있다.
해당 쉘 스크립트를 sudo 권한으로 실행시에는 sudo를 실행한 내 USER가 노출이 된다.
하지만 이 개념이 어디에 쓰일 수 있을지는 모르겠다...