Skip to content

Sudo가 계속 비밀번호를 요청함

Seungheon Han edited this page Nov 15, 2024 · 1 revision

문제 발생

  • Ubuntu 서버에 root 계정으로 접속하는 것은 보안상 위험하기 때문에, 새로운 사용자 계정을 생성하여 sudo 그룹에 추가하고 사용하기로 결정했다.
  • 수동으로 sudo 명령어를 입력하면 비밀번호를 한 번만 요구하지만, GitHub Actions의 자동화된 스크립트에서 SSH 접속 후 sudo 명령을 실행하면, 계속해서 비밀번호를 요구하는 문제가 발생했다.

문제 원인

  1. sudo 그룹에 사용자 추가만으로는 비밀번호 없이 sudo를 사용할 수 없다.
    • sudo 그룹에 추가되면 사용자는 sudo 명령어를 실행할 수 있는 권한을 가지지만, 기본적으로 sudo 명령을 사용할 때 비밀번호 입력을 요구한다.
    • 비밀번호 없이 sudo를 사용하려면 추가적인 설정이 필요하다.

해결 과정

  1. /etc/sudoers 파일 편집

    • sudo 명령어를 비밀번호 없이 사용하려면, /etc/sudoers 파일에서 특정 사용자나 그룹에 대해 NOPASSWD 옵션을 설정해야 한다.
    • sudoers 파일을 직접 편집하는 대신, visudo 명령어를 사용하여 안전하게 편집할 수 있다.
    visudo
  2. NOPASSWD 설정 추가

    • NOPASSWD 옵션을 사용하면 해당 사용자는 sudo 명령어 실행 시 비밀번호를 묻지 않는다.
    • ubuntu 사용자에게 비밀번호 없이 sudo 명령어를 실행할 수 있도록 아래와 같이 sudoers 파일에 추가해야 한다.
    # User privilege specification
    root    ALL=(ALL:ALL) ALL
    ubuntu  ALL=(ALL) NOPASSWD:ALL  # 비밀번호 없이 sudo 허용
    %admin ALL=(ALL) ALL
    %sudo   ALL=(ALL:ALL) ALL
    @includedir /etc/sudoers.d
  3. 중간에 추가한 것이 문제가 된 이유

    • sudoers 파일에서 NOPASSWD 설정은 가능한 한 마지막에 추가해야 한다.
    • sudoers 파일은 순서가 중요하며, NOPASSWD 항목이 제대로 적용되지 않을 수 있다. 중간에 설정을 추가하면, 이전의 설정들이 영향을 미쳐 제대로 동작하지 않을 수 있다.
    • sudoers 파일은 위에서부터 아래로 읽기 때문에, 특정 사용자나 그룹에 대한 권한을 마지막에 추가하여 sudo의 동작을 명확하게 지정하는 것이 중요하다.
    # User privilege specification
    root    ALL=(ALL:ALL) ALL
    %admin ALL=(ALL) ALL
    %sudo   ALL=(ALL:ALL) ALL
    
    # Allow members of group sudo to execute any command
    @includedir /etc/sudoers.d
    
    ubuntu  ALL=(ALL) NOPASSWD:ALL  # 마지막에 추가

결론

  • sudoers 파일에서 NOPASSWD 설정은 맨 마지막에 추가해야 비밀번호 요청 없이 sudo 명령어를 정상적으로 실행할 수 있다.
  • 이를 통해 GitHub Actions에서 비밀번호를 요구하지 않고 sudo 명령어를 실행할 수 있게 됐다.
  • sudoers 파일은 매우 민감하므로, 항상 순서를 신경 쓰며 편집해야 하며, sudo visudo 명령어로 직접 편집해야 오류를 방지할 수 있다.

👥 팀 강점

🧑‍💻 개발 일지

📌 ALL

📌 FE

📌 BE

💥 트러블 슈팅

📌 FE

📌 BE

🤔 고민

📚 학습 정리

📌 김광현

📌 백지연

📌 전희선

📌 한승헌

🤝 회의록

🗒️ 데일리 스크럼

💬 팀 회고


👨‍👩‍👧‍👦 소개

🌱 문화

🔨 기술 스택

⚙️ 서비스 아키텍쳐

🚧 CI/CD

🌊 Flow

💭 6주를 보내면서

Clone this wiki locally