
리눅스를 매일 사용하신다면조만간 그 명령어를 접하게 될 겁니다. sudo사용자 계정으로 로그인하지 않고도 관리자 작업을 수행할 수 있도록 해주는 키입니다. root 항상 켜져 있다는 것은 불편할 뿐만 아니라 상당히 위험하기도 합니다. 시스템을 실수로 망가뜨리거나 보안 취약점을 인지하지 못한 채 방치하지 않으려면 작동 방식, 옵션, 설정 방법을 이해하는 것이 매우 중요합니다.
이 글에서는 자세히 살펴보겠습니다. 정확히 무엇에 관한 내용인가요? sudo사용자와의 관계는 무엇인가요? root 그리고 파일과 함께 /etc/sudoers사용하는 것과 사용하지 않는 것의 차이점은 무엇인가요? su y sudo그리고 특정 사용자나 그룹에게 (암호 없이도) 매우 구체적인 권한을 부여하도록 설정을 세밀하게 조정하는 방법을 설명합니다. 이 글을 다 읽고 나면 언제 이 기능을 사용해야 하는지 명확하게 이해하게 될 것입니다. sudo그것의 내부 작동 방식과 두려움 없이 제어하는 방법.
sudo란 무엇이며 리눅스에서 왜 그렇게 중요한가요?
명령 sudo 이것은 핵심적인 부분 중 하나입니다. 대부분의 최신 리눅스 시스템에서 사용할 수 있는 명령어입니다. 일반적으로 "슈퍼유저 권한으로 실행" 또는 "사용자 권한으로 실행"이라고 설명하며, 기능은 간단하지만 강력합니다. 권한이 있는 사용자가 시스템의 다른 사용자처럼 명령어를 실행할 수 있도록 해줍니다. root기간 한정으로.
실제로 이는 다음을 의미합니다. 일반 사용자가 패키지 설치, 시스템 설정 수정, 서비스 관리, 중요 파일 권한 변경 등과 같은 관리자 작업을 수행할 수 있습니다. 바로 로그인하세요 root일반 사용자와 관리자 간의 이러한 분리는 리눅스 보안의 핵심 요소 중 하나입니다.
현재 배포판 대부분 (데비안, 우분투, 다양한 파생 배포판, SLE 유형 시스템 등) sudo 이 프로그램은 사전 설치되어 있으므로 함부로 제거하거나 수정하지 않는 것이 좋습니다. 또한, 많은 시스템에서 설치 중에 생성된 사용자는 해당 프로그램을 사용할 수 있는 관리자 그룹에 자동으로 추가됩니다. sudo그렇게 되면 기본 권한 사용자가 됩니다.
꼭 명심해야 할 매우 중요한 사항 그거야? sudo 사용자를 '변환'하는 것은 아닙니다. root 이 기능은 시스템에 대한 완전한 접근 권한을 부여하는 것이 아니라, 사용자가 설정에 정의된 규칙에 따라 다른 사용자처럼 특정 명령을 실행할 수 있도록 허용하는 것입니다. 따라서 시스템에 대한 완전한 접근 권한을 주지 않고도 매우 구체적인 권한을 부여할 수 있습니다.
sudo의 내부 작동 방식
의 기본 작동 sudo 사용자 입장에서 보면 아주 간단합니다. 단어를 입력하기만 하면 됩니다. sudo 실행하려는 명령 앞에 권한을 지정해야 합니다. 예를 들어 패키지 목록을 업데이트하려면 다음과 같이 합니다. apt-get 데비안이나 우분투에서 일반 사용자는 다음과 같은 작업을 수행해야 합니다.
sudo apt-get update
sudo 없이 관리자 권한으로 명령어를 실행하려고 하면 오류가 발생합니다.가장 흔하게는 "권한 거부됨"과 같은 오류 메시지나 특정 잠긴 파일을 열 수 없다는 메시지가 표시됩니다. /var/lib 또는 다른 시스템 디렉터리에서. 동일한 명령을 반복해서 추가하면 즉시 실행됩니다. sudo 다음으로 시스템에서 비밀번호를 요청하고, 모든 설정이 올바르게 되어 있으면 관리자 권한으로 명령이 실행됩니다.
명령어를 실행할 때 sudo이 프로그램은 먼저 구성 파일을 참조하여 사용자가 프로그램을 사용할 권한이 있는지, 그리고 어떤 특정 명령에 대해 권한이 있는지 확인합니다. /etc/sudoers 그리고 많은 시스템에서 디렉터리에 추가 파일이 있습니다. /etc/sudoers.d/규칙이 허용한다면, sudo 비밀번호를 입력하라고 합니다(보통은 상대방의 비밀번호가 아니라 당신의 비밀번호입니다). root) 그리고 일시적으로 사용자의 권한을 대상 사용자로 높여 해당 명령을 실행할 수 있도록 합니다.
처음에는 종종 당신을 당황하게 만드는 흥미로운 디테일 터미널에서 비밀번호를 입력하라는 메시지가 나타날 때, 입력하는 동안에는 별표를 포함한 어떤 문자도 표시되지 않습니다. 이는 지극히 정상적인 현상입니다. 비밀번호 입력은 "블라인드 입력" 방식으로 이루어지며, 비밀번호의 길이를 노출하지 않도록 하는 보안 조치의 일부입니다.
또한 Sudo는 일종의 "신뢰 세션"을 유지합니다.암호를 성공적으로 입력하면 해당 터미널에서 일정 시간 동안(대부분의 배포판에서 기본적으로 약 15분) 관리자 권한이 유지됩니다. 이 시간 동안에는 더 많은 명령을 실행할 수 있습니다. sudo 비밀번호를 계속해서 입력하라고 요구하지 않습니다.
sudo의 기본 구문 및 가장 유용한 옵션
일반적인 구문 sudo 매우 간단합니다.
sudo 명령어
가장 일반적인 사용 방법은 간단합니다. 으로 sudo comando하지만 흥미로운 옵션이 꽤 많습니다. 가장 많이 사용되는 (그리고 많은 공식 가이드에서 강조되는) 옵션은 다음과 같습니다.
- -h프로그램의 구문과 사용 가능한 모든 옵션을 포함하는 도움말 메시지를 표시합니다.
sudo. - -V: 현재 버전을 표시합니다
sudo그리고 몇 가지 컴파일 관련 세부 정보입니다. - -v인증 "유예 시간"을 갱신합니다. 즉, 카운터를 새로 고쳐 권한이 만료되지 않고 곧바로 비밀번호를 다시 입력할 필요가 없도록 합니다.
- -k저장된 자격 증명을 즉시 무효화합니다. 마치 다음과 같이 말하는 것과 같습니다.
sudo이미 인증했다는 사실을 "잊어버리는" 기능 때문에 다음에 다시 로그인할 때 비밀번호를 다시 입력해야 합니다. - -l: 사용자가 실행할 수 있는 명령어를 보여줍니다.
sudo현재 구성에 따르면sudoers.
다른 사용자처럼 명령어를 실행할 수 있는 매우 유용한 옵션도 있습니다. ~와 구별되는 root. 예를 들어 -u 특정 명령에 대한 대상 사용자를 지정할 수 있습니다.
> sudo -u pedro whoami
이 경우, 세션이 다른 사용자의 것이더라도 마찬가지입니다., 명령 whoami 해당 명령은 사용자가 페드로인 것처럼 실행되었기 때문에 "페드로"를 반환합니다. 이는 세션을 수동으로 전환하지 않고도 권한을 테스트하거나 서비스 계정과 관련된 작업을 수행하는 데 매우 편리합니다.
sudo와 su의 차이점 및 루트 사용자
리눅스에서는 여러 메커니즘이 공존합니다. 관리자 권한을 얻으려면 직접 등록하세요. root명령어를 사용하세요 su 사용 sudo각각 장단점이 있으며, 이를 이해하면 많은 문제를 예방할 수 있습니다.
루트 계정으로 바로 로그인하세요 (예를 들어, ssh root@servidor이렇게 하면 처음부터 시스템에 대한 모든 권한을 갖게 됩니다. 매우 편리하지만, 동시에 극도로 위험하기도 합니다. 명령어를 잘못 입력하면 시스템의 절반이 삭제되거나, 중요한 권한이 변경되거나, 컴퓨터를 사용할 수 없게 될 수도 있습니다. 따라서 대부분의 경우 로그인 세션을 이용한 작업은 권장되지 않습니다. root 상시 영업합니다.
명령 su (대체 사용자) 이 기능을 사용하면 동일한 터미널 내에서 다른 사용자로 전환할 수 있습니다. 원래 세션은 백그라운드에서 유지되며 새 세션을 "캡슐화"합니다. 만약 실행한다면... su pedro비밀번호를 입력하라는 메시지가 나타납니다. pedro 그리고 안으로 들어가면, 만약 당신이 입력한다면 exit 사용자 이름을 지정하지 않으면 이전 사용자 계정으로 되돌아갑니다. su 기본적으로 다음으로 전환하려고 시도합니다. root.
여기에는 중요한 뉘앙스가 있습니다. su로그인 옵션을 통과하지 않으면 (su -, su -l o su --login이 명령은 사용자만 변경하고 환경 변수는 변경하지 않습니다. 즉, 이전 사용자의 작업 디렉터리와 변수가 그대로 유지되므로 권한 오류가 발생할 수 있습니다(예: 디렉터리 목록을 조회하려고 할 때). 집 (기존 사용자의 계정으로 새 사용자의 계정 정보를 사용하는 경우).
대신, sudo 이는 보다 안전하고 통제 가능한 접근 방식을 제공합니다.비밀번호를 알 필요가 없습니다. root하지만 비밀번호는 본인이 설정하며, 시스템이 결정합니다. /etc/sudoers어떤 사용자가 어떤 명령을 실행할 수 있는지, 즉 어떤 사용자가 어떤 컴퓨터에서 실행할 수 있는지 등을 규정합니다. 또한, 각 사용 사례에 대한 내용도 포함됩니다. sudo 해당 내용은 로그에 기록되므로 관리자 권한으로 수행된 작업을 쉽게 감사할 수 있습니다.
sudo 권한을 사용하여 "다른 사용자로" 대화형 세션을 진행하려면실용적인 몇 가지 변형이 있습니다.
- sudo -s대상 사용자로 셸을 열고 현재 사용자의 환경을 상속합니다.
- sudo -i대상 사용자의 환경과 디렉터리가 깨끗한 상태로 완전한 로그인 셸을 시작합니다.
$HOME파일 로딩과 같은.profileo.bash_profile.
두 옵션 모두 일회성 작업에 유용합니다. 다른 사용자로서 (일반적으로) root (또는 모든 서비스 계정) 비밀번호를 기억하고 사용할 필요 없이, 수행한 작업에 대한 제어권과 기록을 유지하면서 계정에 접근할 수 있습니다.
/etc/sudoers 파일과 /etc/sudoers.d 디렉터리
sudo 설정의 핵심 그것은 아카이브에 있습니다 /etc/sudoers누가 사용할 수 있는지는 거기서 정의됩니다. sudo어떤 사용자와 어떤 특정 명령을 실행할 수 있는지와 같은 정보도 포함됩니다. 또한 많은 배포판에는 에 있는 모든 추가 구성 파일을 자동으로 로드하는 지시문이 포함되어 있습니다. /etc/sudoers.d/.
그것을 이해하는 것이 중요합니다. /etc/sudoers "적절한 편집 없이" 편집해서는 안 됩니다. 어떤 텍스트 편집기를 사용하든 상관없이, 항상 명령어를 사용하여 수정해야 합니다. visudo(기본적으로) 편집기로 파일을 엽니다. vi o nano(설정에 따라 다르지만) 보안을 강화하는 기능입니다. 저장하기 전에 구문을 검사하고 두 사람이 동시에 편집하는 것을 방지합니다.
sudoers를 편집하는 일반적인 용도 입니다 :
> sudo visudo -f /etc/sudoers
특정 파일을 생성할 수도 있습니다. /etc/sudoers.d/ 사용자 그룹, 서비스 등으로 구성을 분리할 수 있습니다. 예를 들어, 다음과 같은 파일을 사용할 수 있습니다. /etc/sudoers.d/networking 일반적인 설정과 섞이지 않도록 네트워크 관리에 대한 구체적인 규칙을 적용합니다.
일반적인 시스템에서 /etc/sudoers 파일을 열면(댓글을 제외하면) 다음과 같은 줄들을 보게 될 것입니다.
- 루트 ALL=(ALL:ALL) ALL: 사용자
root어떤 사용자든, 어떤 그룹이든, 어떤 호스트에서든 어떤 명령이든 실행할 수 있습니다. - %admin ALL=(ALL) ALL: 그룹 내의 누구든지
admin모든 사용 권한을 가지고 있습니다.sudo. - %sudo ALL=(ALL:ALL) ALL그룹에도 동일하게 적용됩니다.
sudo이는 우분투 및 파생 배포판에서 일반적으로 핵심 그룹입니다. - #include /etc/sudoers.d: 해당 디렉터리의 파일도 읽어야 함을 나타냅니다(비록 a가 포함되어 있더라도).
#(이것은 이 특정 맥락에서의 의견이 아닙니다.)
사용자 및 그룹 규칙 외에도, sudoers 이를 통해 복잡한 구성을 단순화하기 위해 별칭을 정의할 수 있습니다: 사용자 별칭(User_Alias), 명령의 (Cmnd_Alias실행 그룹의 ),Runas_Alias) 또는 호스트의 (Host_Alias).
sudoers를 사용하여 사용자 및 그룹을 관리하세요.
서버에서 흔히 사용되는 방식 접근을 제어하고 있습니다 sudo 그룹을 통해서 가능합니다. 예를 들어, 많은 시스템에서 사용자를 그룹에 추가하는 것만으로 충분합니다. sudo o wheel 그렇게 하면 모든 행정 허가를 받을 수 있습니다.
어떤 사용자가 그룹에 속해 있는지 확인하려면 결정됨 (예를 들어, sudo), 다음과 같이 사용할 수 있습니다:
> grep 'sudo' /etc/group
사용자에게 sudo 권한을 부여하려면일반적으로는 해당 그룹에 추가하는 것이 관례입니다. 예를 들어, 통합하려면 bill 그룹에 sudo:
> sudo adduser bill sudo
해당 권한을 취소해야 할 때그룹에서 해당 항목을 제거하기만 하면 됩니다.
> sudo deluser bill sudo
또 다른, 훨씬 더 나은 가능성 이는 무제한적인 권한을 부여하지 않고 특정 명령에 대해서만 권한을 부여하는 것을 의미합니다. 이를 위해 일반적으로 특정 파일을 생성합니다. /etc/sudoers.d/예를 들어 파일을 정의할 수 있습니다. /etc/sudoers.d/networking 다음과 같은 것으로:
Cmnd_Alias CAPTURE = /usr/sbin/tcpdump
Cmnd_Alias SERVERS = /usr/sbin/apache2ctl, /usr/bin/htpasswd
Cmnd_Alias NETALL = 캡처, 서버
%netadmin ALL = NETALL
이 설정에서는 그룹의 모든 사용자가 netadmin 해당 별칭으로 정의된 명령을 실행할 수 있습니다. NETALL (별칭들을 그룹화하는 기능) CAPTURE y SERVERS모든 것에 대한 완전한 접근 권한 없이 sudo필요한 것은 추가하는 것뿐입니다. bill 그룹에 netadmin 사용할 수 있도록 tcpdump 그리고 정의된 서버 도구들.
sudo 권한이 필요한 일반적인 명령어
시스템의 일상적인 관리에서거의 항상 함께 수행되는 몇 가지 유형의 작업이 있습니다. sudo시스템을 수정하거나 기밀 정보에 접근하는 것과 관련이 있기 때문입니다.
패키지 관리: 다음을 기반으로 한 분포 zypper, apt 또는 다른 패키지 관리자를 사용하든, 소프트웨어를 설치, 제거 또는 업데이트하는 모든 작업에는 권한이 필요합니다. 예를 들면 다음과 같습니다.
> sudo zypper install 패키지
sudo apt-get install docker-ce
하지만 정보만 읽는 쿼리저장소 목록 표시와 같은 작업은 일반적으로 명령 없이 실행할 수 있습니다. sudo시스템 자체에서 권한 오류가 발생하는 시점을 테스트하고 확인하는 문제입니다.
systemd를 이용한 서비스 관리 보통 다음과 같은 방식으로 이루어집니다. systemctl서비스 시작, 중지 또는 재시작과 같은 작업에는 일반적으로 다음이 필요합니다. sudo:
> sudo systemctl restart apache2
반면, 서비스 상태 확인과 같은 비교적 무해한 명령은 이들은 많은 시스템에서 권한 없이도 작동할 수 있습니다.
> systemctl status NetworkManager
사용자 계정 관리에도 세심한 주의가 필요합니다.. 다음과 같은 명령 usermod, useradd o deluser 그들은 거의 항상 다음과 같이 해야 합니다. sudo시스템의 사용자 데이터베이스를 수정하기 때문입니다.
> sudo usermod -L -f 30 tux
마지막으로 파일 권한 및 소유권 관리입니다. 와 chown 일반적으로 회사는 시스템 경로 또는 다른 사용자에게 영향을 미치는 작업을 수행할 때 권한이 필요합니다. 예를 들어, 모든 파일과 하위 디렉터리를 특정 권한으로 만들려면 권한이 필요합니다. /home/test/tux-files 사용자의 소유물이 됩니다 tux 다음과 같은 방법을 사용할 수 있습니다.
> sudo chown -R tux:tux /home/test/tux-files
sudo 사용의 실제 예시
실제 사례 몇 가지를 살펴보겠습니다. donde sudo 이는 권한 오류와 올바른 관리자 작업 간의 차이를 만듭니다.
데비안/우분투에서 패키지 인덱스 업데이트 권한이 없으면 파일을 조작할 수 없으므로 오류가 발생합니다. /var/lib/apt/lists명령어:
apt-get 업데이트
결국 "권한이 거부되었습니다"라는 메시지가 표시될 것입니다.그렇게 반복하는 순간 상황이 바뀝니다.
sudo apt-get update
시스템에서 비밀번호를 입력하라고 요청할 것입니다.그리고 사용자가 권한을 부여받은 경우 sudoers업데이트는 문제없이 실행될 것입니다. 이는 반복되는 패턴입니다: 권한 오류 없이 sudo정확한 실행 sudo.
또 다른 매우 흔한 예는 파일을 시스템 경로에 복사하는 것입니다.으로 /usr/local/bin만약 간단한 방법으로 거기에 스크립트를 복사하려고 한다면:
> cp script.sh /usr/local/bin/
단말기가 경고 메시지를 표시하는 것은 정상입니다. 해당 디렉토리에 쓰기 권한이 없다는 의미입니다. 만약 파일을 추가하여 작업을 반복한다면 문제가 해결될 것입니다. sudo:
> sudo cp script.sh /usr/local/bin/
비밀번호를 입력하라는 메시지가 표시되며, 인증에 성공하면 계정이 활성화됩니다.해당 사본은 상위 권한으로 작성된 것으로 기록될 것입니다.
sudo를 옵션과 함께 사용할 수도 있습니다. -u 세션을 변경하거나 다른 방법을 사용하지 않고 다른 사용자로 특정 명령을 실행하려면 su. 예 :
> 후아미
> sudo -u pedro whoami
첫 주문 시에는 실제 사용자 이름이 표시됩니다.첫 번째 명령은 "pedro"를 반환하여 대상 사용자로 실행이 수행되었음을 보여줍니다.
암호 없이 권한 부여 및 기타 고급 옵션
땀이 주는 가장 강력한 효과 중 하나는 이 기능을 사용하면 암호를 요청하는 빈도와 특정 명령에 대한 암호 요청 여부를 조정할 수 있습니다. 예를 들어 자동화 스크립트나 데스크톱 환경의 종료 버튼과 같이 특정 사용자가 암호를 매번 입력하지 않고도 특정 명령을 실행할 수 있도록 하고 싶을 때가 있습니다.
이는 라벨을 통해 달성됩니다. NOPASSWD 규칙에서 sudoers예를 들어, 만약 당신이 원한다면 miusuario 실행할 수 있습니다 /bin/cat 와 sudo 비밀번호를 요구하지 않고 다음과 같은 줄을 추가할 수 있습니다.
myuser ALL = NOPASSWD: /bin/cat
마찬가지로 장비 종료 관리도 해당 시스템에 맡길 수 있습니다. 반복적인 인증 없이 다음과 같은 내용을 추가합니다.
myuser ALL = NOPASSWD: /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
더욱 깔끔하고 확장 가능한 구성을 위해별칭을 사용하는 것이 좋습니다. 일반적인 예로는 사용자 그룹, 명령 그룹, 그리고 필요한 경우 실행 사용자 별칭을 정의하는 것이 있습니다.
User_Alias GROUP = 페페, 페리코, 안드레
Cmnd_Alias POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
Runas_Alias WEB = www-data, apache
이러한 정의를 사용하면 다음과 같이 쓸 수 있습니다. 다음과 같이 훨씬 읽기 쉬운 규칙들이 있습니다.
모든 그룹 = 힘
따라서 별칭에 포함된 모든 사용자 GRUPO 다음 명령어를 사용하면 컴퓨터를 끄거나 다시 시작할 수 있습니다. sudo비밀번호를 요구할지 여부는 다음 설정을 통해 조정할 수 있습니다. NOPASSWD o PASSWD또한 특정 호스트로 사용을 제한할 수도 있습니다. Host_Alias 특정 네트워크에서만 유효하도록 설정되어 있습니다.
너머 NOPASSWD다른 라벨들도 있습니다 으로 NOEXEC (명령어가 관리자 권한으로 다른 프로그램을 실행하는 것을 방지하기 위해) 또는 추가하는 것과 같은 소소한 호기심 insults 선으로 Defaults, 그래서 sudo 당신이 비밀번호를 입력하지 못할 때마다 영어로 농담을 하나 할게요.
이 모든 것은 sudoers가 단순한 "루트 권한 전환" 이상의 기능을 한다는 것을 보여줍니다.제대로 설정하면 사용자의 필요에 맞춘 매우 세분화된 권한 모델을 설계할 수 있으며, 일반적인 "루트 권한으로 접속하여 원하는 작업을 모두 수행"하는 방식보다 훨씬 뛰어난 보안 수준을 제공합니다.
다음과 같은 도구를 갖는 것 sudo제대로 이해하고 제대로 구성하기여러 사용자가 작업하거나, 혼자 사용하더라도 위험을 최소화하려는 모든 최신 Linux 시스템에서는 거의 필수적입니다. 이러한 조합을 활용하면 여러 이점을 누릴 수 있습니다. sudo, /etc/sudoers, 그룹과 같은 sudo o wheel 그리고 다음과 같은 고급 태그 NOPASSWD세션에 계속 집중하지 않아도 편안함, 정밀한 제어, 안전성 사이에서 매우 적절한 균형을 이룰 수 있습니다. root 단순히 운에만 의존해서는 안 됩니다.
