웹사이트 검색

우분투에서 sudo를 이해하기 위한 초보자 가이드


이 페이지에서

  1. sudo란 무엇입니까?
  2. 모든 사용자가 sudo를 사용할 수 있습니까?\n
  3. sudo 세션이란 무엇입니까?
  4. sudo 암호\n
  5. 몇 가지 중요한 sudo 명령줄 옵션\n
    1. -k 옵션
    2. -s 옵션
    3. -i 옵션

    Linux 명령줄에서 작업하는 동안 권한 거부 오류가 발생한 적이 있습니까? 루트 권한이 필요한 작업을 수행하려고 시도했을 가능성이 있습니다. 예를 들어 다음 스크린샷은 바이너리 파일을 시스템 디렉토리 중 하나로 복사하려고 할 때 발생하는 오류를 보여줍니다.

    그래서 이 문제에 대한 해결책은 무엇입니까? 간단합니다. sudo 명령을 사용하세요.

    명령을 실행 중인 사용자에게 로그인 암호를 묻는 메시지가 표시됩니다. 올바른 암호를 입력하면 작업이 성공적으로 수행됩니다.

    sudo는 의심할 여지 없이 Linux의 명령줄에서 작업하는 모든 사람이 반드시 알아야 하는 명령이지만, 이 명령을 보다 책임감 있고 효과적으로 사용하기 위해 알아야 할 몇 가지 다른 관련 세부 정보가 있습니다. 이것이 바로 이 기사에서 잘 논의되고 있는 내용입니다.

    But before we move ahead, it's worth mentioning that all the commands and instructions mentioned in this article have been tested on Ubuntu with the Bash shell.

    스도가 무엇인가요?

    대부분의 사용자가 이미 알고 있는 sudo 명령은 상승된 권한(일반적으로 루트 권한)으로 명령을 실행하는 데 사용됩니다. 이에 대한 예는 위의 소개 섹션에서 이미 논의했습니다. 그러나 원하는 경우 sudo를 사용하여 루트가 아닌 다른 사용자로 명령을 실행할 수 있습니다.

    이는 도구가 제공하는 -u 명령줄 옵션을 통해 이루어집니다. 예를 들어, 아래에 표시된 예에서 나(himanshu)는 다른 사용자(howtoforge) 홈 디렉토리에서 파일 이름을 바꾸려고 시도했지만 권한 거부 오류가 발생했습니다. 그런 다음 sudo -u howtoforge를 사용하여 동일한 mv 명령을 시도했는데 명령이 성공했습니다.

    모든 사용자가 sudo를 사용할 수 있습니까?

    아니요. 사용자가 sudo를 사용할 수 있으려면 해당 사용자에 해당하는 항목이 /etc/sudoers 파일에 있어야 합니다. Ubuntus 웹 사이트에서 가져온 다음 단락은 더 명확하게 설명해야 합니다.

    The /etc/sudoers file controls who can run what commands as what users on what machines and can also control special things such as whether you need a password for particular commands. The file is composed of aliases (basically variables) and user specifications (which control who can run what).

    Ubuntu를 사용하는 경우 사용자가 sudo 명령을 실행할 수 있는지 쉽게 확인할 수 있습니다. 해당 사용자 계정 유형을 관리자로 만들기만 하면 됩니다. 이것은 시스템 설정... -> 사용자 계정으로 이동하여 수행할 수 있습니다.

    창 잠금 해제:

    그런 다음 계정 유형을 변경하려는 사용자를 선택한 다음 유형을 관리자로 변경합니다.

    그러나 Ubuntu를 사용하지 않거나 배포판에서 이 기능을 제공하지 않는 경우 /etc/sudoers 파일을 수동으로 편집하여 변경할 수 있습니다. 해당 파일에 다음 행을 추가해야 합니다.

    [user]    ALL=(ALL:ALL) ALL

    말할 필요도 없이 [user]는 sudo 권한을 부여하는 계정의 사용자 이름으로 대체해야 합니다. 여기서 언급할 가치가 있는 중요한 사항은 공식적으로 제안된 이 파일 편집 방법이 visudo 명령을 사용한다는 것입니다. 다음 명령을 실행하기만 하면 됩니다.

    sudo visudo

    정확히 그 이유를 알려드리기 위해 visudo 매뉴얼에서 발췌한 내용이 있습니다.

    visudo edits the sudoers file in a safe fashion. visudo locks the sudoers file against multiple simultaneous edits, provides basic sanity checks, and checks for parse errors. If the sudoers file is currently being edited you will receive a message to try again later.

    visudo에 대한 자세한 내용은 여기를 참조하십시오.

    sudo 세션이란 무엇입니까?

    sudo 명령어를 자주 사용하는 경우 비밀번호를 한 번 성공적으로 입력한 후 비밀번호를 입력하지 않고 여러 sudo 명령어를 실행할 수 있음을 확인했을 것입니다. 그러나 언젠가는 sudo 명령이 다시 암호를 묻습니다.

    이 동작은 실행하는 sudo 기반 명령의 수와 관련이 없으며 대신 시간에 따라 달라집니다. 예, 기본적으로 sudo는 사용자가 비밀번호를 한 번 입력한 후 15분 동안 비밀번호를 묻지 않습니다. 이 15분을 게시하면 암호를 다시 묻는 메시지가 나타납니다.

    그러나 원하는 경우 이 동작을 변경할 수 있습니다. 이를 위해 다음 명령을 사용하여 /etc/sudoers 파일을 엽니다.

    sudo visudo

    그런 다음 다음 줄로 이동합니다.

    Defaults env_reset

    줄 끝에 다음 변수(아래에서 굵게 강조 표시됨)를 추가합니다.

    Defaults env_reset,timestamp_timeout=[new-value]

    [new-value] 필드는 sudo 세션을 지속하려는 시간(분)으로 대체해야 합니다. 예를 들어 값 40을 사용했습니다.

    sudo 명령을 사용할 때마다 암호를 묻는 메시지를 표시하려면 이 변수에 값 0을 할당할 수 있습니다. 그리고 sudo 세션이 시간 초과되지 않도록 하려면 -1 값을 할당할 수 있습니다.

    timestamp_timeout 값을 -1로 사용하는 것은 권장하지 않습니다.

    sudo 암호

    sudo가 암호를 묻는 메시지를 표시하고 암호를 입력하기 시작할 때마다 아무 것도 표시되지 않습니다. 일반적으로 별표도 표시되지 않습니다. 일반적으로 큰 문제는 아니지만 일부 사용자는 어떤 이유로든 별표를 표시하기를 원할 수 있습니다.

    좋은 점은 그것이 가능하고 매우 쉽다는 것입니다. /etc/sudoers 파일에서 다음 행을 변경하기만 하면 됩니다.

    Defaults        env_reset

    에게

    Defaults        env_reset,pwfeedback

    그리고 파일을 저장합니다.

    이제 sudo 암호를 입력할 때마다 별표가 나타납니다.

    몇 가지 중요한 sudo 명령줄 옵션

    -u 명령줄 옵션(이 자습서의 시작 부분에서 이미 논의함) 외에도 언급할 가치가 있는 몇 가지 중요한 sudo 명령줄 옵션이 있습니다. 이 섹션에서는 그 중 일부에 대해 설명합니다.

    -k 옵션

    암호를 입력한 후 방금 sudo로 구동되는 명령을 실행한 경우를 생각해 보십시오. 이제 이미 알고 있듯이 sudo 세션은 기본적으로 15분 동안 활성 상태로 유지됩니다. 이 세션 동안 누군가에게 터미널에 대한 액세스 권한을 부여해야 하지만 그들이 sudo를 사용하는 것을 원하지 않는다고 가정해 보십시오. 당신은 무엇을 할 것인가?

    고맙게도 사용자가 sudo 권한을 취소할 수 있는 명령줄 옵션 -k가 있습니다. 이 옵션에 대한 sudo 매뉴얼 페이지의 내용은 다음과 같습니다.

    -k, --reset-timestamp

    When used without a command, invalidates the user's cached credentials. In other words, the next time sudo is run a password will be required. This option does not require a password and was added to allow a user to revoke sudo permissions from a .logout file.

    When used in conjunction with a command or an option that may require a password, this option will cause sudo to ignore the user's cached credentials. As a result, sudo will prompt for a password (if one is required by the security policy) and will not update the user's cached credentials.

    -s 옵션

    작업에서 루트 권한이 필요한 버킷 로드 명령을 실행해야 하고 때때로 sudo 암호를 입력하고 싶지 않은 경우가 있을 수 있습니다. 또한 /etc/sudoers 파일을 변경하여 sudo 세션 시간 초과 제한을 조정하고 싶지 않습니다.

    이 경우 sudo 명령의 -s 명령줄 옵션을 사용할 수 있습니다. sudo 매뉴얼 페이지에서 설명하는 방법은 다음과 같습니다.

    -s, --shell

    Run the shell specified by the SHELL environment variable if it is set or the shell specified by the invoking user's password database entry. If a command is specified, it is passed to the shell for execution via the shell's -c option. If no command is specified, an interactive shell is executed.

    따라서 기본적으로 이 명령줄 옵션은 다음과 같습니다.

    • 새 셸을 시작합니다. 어떤 셸인지는 SHELL 환경 변수가 참조됩니다. $SHELL이 비어 있는 경우 /etc/passwd 파일에 정의된 셸이 선택됩니다.
    • -s 옵션과 함께 명령 이름도 전달하는 경우(예: sudo -s whoami) 실행되는 실제 명령은 sudo /bin/bash입니다. -c whoami.
    • 다른 명령을 실행하려고 시도하지 않는 경우(즉, sudo -s를 실행하려는 경우) 루트 권한이 있는 대화형 셸을 얻게 됩니다.\n

    여기서 명심할 가치가 있는 것은 -s 명령줄 옵션이 루트 권한이 있는 셸을 제공하지만 루트 환경을 얻지 못한다는 것입니다. 즉, 예를 들어 sudo -s가 실행되는 새 셸에서 whoami 명령을 실행하면 여전히 루트가 아닌 사용자 이름이 반환됩니다.

    -i 옵션

    -i 옵션은 방금 논의한 -s 옵션과 유사합니다. 그러나 몇 가지 차이점이 있습니다. 주요 차이점 중 하나는 -i가 루트 환경도 제공한다는 것입니다. 즉, (사용자) .bashrc가 무시됩니다. 루트로 명시적으로 로그인하지 않고 루트가 되는 것과 같습니다. 또한 루트 사용자 암호도 입력할 필요가 없습니다.

    중요: 사용자를 전환할 수 있는 su 명령이 있다는 점에 유의하십시오(기본적으로 루트가 될 수 있음). 이 명령어를 사용하려면 루트 비밀번호를 입력해야 합니다. 이를 방지하기 위해 sudo(sudo su)로 실행할 수도 있습니다. 이 경우 로그인 암호를 입력하기만 하면 됩니다. 그러나 su와 sudo su에는 몇 가지 근본적인 차이점이 있습니다. 이를 이해하고 sudo -i와 비교하는 방법에 대해 자세히 알아보려면 여기를 참조하세요.

    결론

    지금쯤이면 적어도 sudo의 기본 아이디어와 기본 동작을 조정하는 방법을 이해하셨기를 바랍니다. 여기에서 설명한 /etc/sudoers 조정을 시도하고 포럼 토론(마지막 단락에 링크됨)을 통해 sudo 명령에 대한 더 많은 통찰력을 얻으십시오.