본문 바로가기

Personal Posting/Linux

user 권한에서 Linux 재부팅하기

Crash 이슈 개선 확인을 위해 재부팅을 쉴새 없이 해줘야 하는 상황이 되었다.

처음에는 예전에 하던 방식으로 system 함수로 reboot 해주거나 쉘 스크립트로 reboot해주면 될 거라 생각했고, 스크립트를 만들어 터미널 창에서 동작 여부를 확인 후 빌드를 했다.

 

결론은 동작불가. 원인은 역시나 권한문제였다. reboot 명령어의 경우, superuser만이 실행 가능하기 때문에 내가 빌드한 sp모듈을 통해서는 echo 등은 동작하나 reboot은 동작하지 않았던 것.

 

이를 해결하기 위해 찾았던 방법들을 메모해본다.

 

1. sudoers 수정

 - sudo 는 normal user가 root 권한의 명령을 실행할 수 있게 해주며,

 - sudo 는 bash$ sudo [root권한의 명령어] 형태로 입력한다.

 - sudo를 사용하기 위해서는 /etc/sudoers파일에 일반 사용자의 계정이 등록되어 있어야 한다.

 - /etc/sudoers 모드는 440으로 되어 있어 vi로 바로 편집이 안된다. 즉, chmod로 편집 가능하게 변경 후 편집해야한다.

 - vi를 이용한 편집은 다음과 같다.

bash# ls -al /etc/sudoers
-r--r----- 1 root root 2823 Jun 01 15:22 /etc/sudoers
bash# chmod 777 /etc/sudoers
bash# ls -al /etc/sudoers
-rw-r----- 1 root root 2823 Jun 01 15:22 /etc/sudoers
bash# vi /etc/sudoers
username ALL=NOPASSWD:/usr/sbin/halt, /usr/sbin/reboot
위의 경우 특정 명령어들에 권한부여, 아래의 경우 모든 명령어에 권한부여
username ALL=NOPASSWD:ALL
:wq
bash# chmod 440 /etc/sudoers

 

문제는 이놈의 타겟이 보안 때문인지는 모르겠는데 sudoers가 보이지 않았다는 것 ㅠㅠ

포기할라던 찰나에 Another way를 언급해준 형님이 생겨 결국 이 방법으로 성공하게 된다.

 

2. systemctl 수정

 - shutdown이나 poweroff, reboot은 모두 /bin/systemctl이 링크된 것들이다.

 - 따라서 아래의 명령어로 systemctl 권한을 변경해준다.

sudo chown root:username /bin/systemctl
sudo chmod 4755 /bin/systemctl

이렇게 변경해주면 이후부터 우리 모듈에서 reboot을 시도해도 정상적으로 명령어가 먹히게 된다.

 

참고 링크

http://blog.iotinfra.net/?p=1492

https://unix.stackexchange.com/questions/85663/poweroff-or-reboot-as-normal-user

https://qastack.kr/unix/85663/poweroff-or-reboot-as-normal-user

 

 

해결책은 안되었지만 systemctl 이용한 service restrat하는 가이드

https://gsk121.tistory.com/406

https://www.manualfactory.net/10507

'Personal Posting > Linux' 카테고리의 다른 글

SCP 명령어 for Remote to Remote  (0) 2021.07.27
쉘 스크립트 시작코드  (0) 2020.04.08