OS/Linux

[Linux:CentOS] sudo 명령어 권한을 주는 방법

릴리코더 2024. 10. 18. 12:13

 

아래 명령어로 sudo 권한 부여 설정 파일을 연다

$ sudo visudo

 

그러면 vi편집기로 /etc/sudoers 파일이 열리는데,

 

위와 같은 명령어를 통해 파일 편집기를 여는 이유는 기본적으로 /etc/sudoers 파일은 쓰기 권한이 없기 때문이다.

그렇기 때문에 다른 편집기로 해당 파일을 편집하기 위해서는

'쓰기 권한 주기 → 수정 → 쓰기 권한 빼기' 의 과정을 겪어야 하기 때문이다.

 

'쓰기 권한 주기 → 수정 → 쓰기 권한 빼기' 하는 방법은 더보기 참고

더보기
더보기
# 쓰기 권한 부여
$ sudo chmod u+w /etc/sudoers

# nano 편집기로 파일 수정
$ sudo nano /etc/sudoers

# 쓰기 권한 제거
$ sudo chmod u-w /etc/sudoers

 

파일의 아래쪽으로 쭉 내리다보면, 아래와 같은 내용이 나온다.

## Allow root to run any commands anywhere
root ALL=(ALL)  ALL

 

이 바로 아래에 `권한을 줄 사용자 ALL=(ALL)  ALL`을 입력해주면 된다.

예시) gitlab-runner ALL=(ALL) ALL

[ALL=(ALL) ALL의 의미]

첫 번째 "ALL"은 이 규칙이 모든 호스트에 적용됨을 나타냅니다.
두 번째 "ALL"은 루트 사용자가 모든사용자로 명령을 실행할 수 있음을 나타냅니다.
세 번째 "ALL"은 루트 사용자가 모든그룹으로 명령을 실행할 수 있음을 나타냅니다.
네 번째 "ALL"은 이 규칙이 모든 명령에 적용된다는 것을 나타냅니다.

출처 : https://askubuntu.com/questions/546219/what-is-the-difference-between-root-all-allall-all-and-root-all-all-all

 

 

 

특정 명령어 패스워드 없이 사용하기

GitLab-Runner로 CI/CD를 구축하던 중, sudo 명령어에 대한 오류가 떨어졌다.

관련 포스트 : https://stirringdev.tistory.com/123

 

두 가지 원인의 오류였는데,

 

1. gitlab-runner 사용자에게 sudo권한이 없다는 것

2. script가 실행될 때, password 입력할 수 없다는 것

 

두개를 모두 만족시킬만한 권한 부여가 필요 했다.

처음에 사용한 방법은 모든 sudo 명령어를 password를 입력하지 않아도 sudo 권한을 사용할 수 있게 하는 것

gitlab-runner ALL=(ALL) NOPASSWD: ALL

 

 

하지만 이내 gitlab-runner는 .gitlab-ci.yml에서 작성한 스크립트를 모두 실행시키기 때문에,

보안상 문제가 있을 것이라는 생각이 들었다.

 

그래서 특정 명령어에 대해서만 NOPASSWD가 적용되도록 수정했다.

gitlab-runner ALL=(ALL) NOPASSWD: /bin/rm -rf /home/project/app, /bin/cp -r build /home/project/app
  • rm과 cp라는 쉘 명령어의 경로와 명령어를 입력
  • 명령어가 여러개인 경우 ',' (comma)로 구분하여 작성