sudo는 얼마나 다재다능합니까?

sudo는 얼마나 다재다능합니까?

나는 무언가를 설치하는 방법(TeX 관련 - 묻지 않아도 자세한 내용을 제공하여 하루를 망치지 않을 것입니다)과 sudo시스템 전체 설치에 대한 몇 가지 지침을 작성하고 있습니다. 어떤 사람은 이것이 sudo모든 Linux(또는 Unix) 배포판에서 작동하지 않는다고 말했습니다 .

이러한 기능이 없는 Unix 배포판이 있습니까 sudo? 그렇다면 무엇입니까? 보편적으로 인식되는 "수퍼유저 권한 얻기" 명령이 있습니까?모든 시스템에서?

답변1

sudo보편적인 것으로 간주될 수 없음:

  • 레드햇 엔터프라이즈 리눅스: sudoRed Hat Enterprise Linux 및 그 파생 제품에는 기본적으로 설치되지만 RHEL 7 이상에서만 기본적으로 설치됩니다.

    Red Hat Enterprise Linux 7에는 새로운 옵션이 추가되었습니다.루트가 아닌 첫 번째 사용자를 생성하는 설치 화면, '이 사용자를 관리자로 지정'이라는 확인란을 선택합니다. 그 목적은 설치 안내서의 이 페이지에 문서화되어 있지 않지만 그 기능 중 하나는 이 사용자가 스톡 패키지 구성에서 모든 명령을 실행할 수 있는 sudo그룹에 추가하여 이를 수행합니다 .wheelsudo

    Red Hat Enterprise Linux 3~6도 sudo기본적으로 설치 됩니다 (2).root 그러나 RHEL 7 이전에는 명령을 통해서만 실행할 수 있도록 기본적으로 구성되었습니다 . 이 문제를 해결하는 가장 쉬운 방법은 wheel그룹 에 한 명 이상의 사용자를 추가한 다음 visudo루트로 실행하고 해당 %wheel ALL=(ALL)...줄의 주석 처리를 제거하는 것입니다.

  • 더반: Debian 9부터 최소 설치에는 sudo.

    데비안 7과 8에서는 "를 선택해야 합니다.표준 시스템 유틸리티" 설치 중에 가져올 패키지를 설정합니다 sudo. sudo이 방법으로 설치하면 운영 체제 설치 프로그램은 이전에 설치 중에 생성한 비관리 사용자를 이 sudo그룹에 자동으로 추가합니다. 이 사용자는 모든 명령을 실행할 수 있는 권한을 갖습니다.

    Debian 6 이하에서는 루트가 아닌 사용자에게 사용할 수 있는 권한을 부여하려면 설치 후 수동 sudo으로 설치하고 구성해야 했습니다.apt-get

  • FreeBSD: sudoFreeBSD에는 기본적으로 설치되어 있지 않습니다. 포트에서 빌드해야 합니다.

  • 네트워크BSD: FreeBSD와 동일합니다.

  • 오픈BSD: sudoOpenBSD에서는 기본적으로 설치되었지만스위치도착하다doas~처럼5.8, 2015년 10월 출시. doas기본적으로 비활성화되어 있습니다.

    최신 버전을 얻으려면 sudo패키지 저장소에서 설치해야 합니다. OpenBSD의 sudo패키지는 RHEL 3~6의 패키지와 매우 유사하게 구성되어 있으므로 root명령은 이를 통해서만 실행할 수 있습니다 sudo. 이는 설치 중에 비사용자를 추가하면 root그룹에 추가되므로 가장 쉽습니다. OpenBSD 시스템에서 이 작업을 수행하는 방법은 wheel이 줄의 주석 처리를 제거하는 것입니다.sudo%wheel ALL=(ALL)...visudo

  • 솔라리스: sudoSolaris 11에서는 기본적으로 설치되지만 Solaris 10 및 이전 버전에서는 유사하지만 동일하지는 않습니다.pfexec.

    이전 시스템을 사용할 수 있지만 sudo기본값이 중요합니다. Solaris 10 및 이전 버전은 수년 동안 함께할 것이므로 귀하의 환경에 Solaris가 있고 해당 시스템의 존재를 보장하기 위해 해당 시스템을 개인적으로 제어할 수 없다면 sudo이를 믿을 수 없습니다.

시스템이 오래될수록 시스템이 없을 가능성이 커집니다 sudo. 하지만sudo아주 오래된2000년대 중반까지 인기가 없었습니다. 이보다 오래된 시스템은 사용할 수 없습니다 sudo. Unix 시스템은 수명이 긴 경향이 있으므로 오늘날에도 이와 같은 시스템을 접한다는 것은 놀라운 일이 아닙니다.

sudo개인적으로 관리하는 시스템이나 Ubuntu, macOS, openSuSE 같은 시스템 에만 의존합니다.오직기본적으로 루트 권한을 얻는 방법입니다.

su이는 범용 "수퍼유저 권한 얻기" 명령에 더 가깝지만 sudo루트 계정이 기본적으로 잠겨 있어 sudo대신 이를 사용해야 하는 Ubuntu 및 macOS와 같은 시스템이 있으므로 범용 su이라고 부를 수도 없습니다 su.


각주:

  1. CentOS, 오라클 리눅스, 사이언티픽 리눅스...

  2. 예, 최소한의 설치라도 가능합니다.

답변2

sudo거의 모든 Linux 시스템에서 사용할 수 있는 유틸리티입니다.
그러나 모든 배포판이 기본적으로 번들로 제공되는 것은 아닙니다. 모든 주요 배포판은 기본적으로 이를 번들로 제공합니다.

사용자가 완전한 사용자 정의를 허용하는 Arch Linux, Gentoo, LFS 등과 같은 Linux 배포판에는 기본적으로 sudo가 없습니다.

Arch Linux에서는 기본 시스템이 sudo설치되지 않습니다. 사용자는 sudosudoers 파일을 수동으로 다운로드하고 편집해야 합니다 .
젠투와 LFS도 마찬가지입니다. 나는 sudo가 없는 주요 배포판을 모릅니다.

아니요, 슈퍼유저 권한을 부여하는 것보다 더 일반적인 것은 없다고 생각합니다 sudo. 즉, 실제로 루트로 로그인하는 것과는 별개입니다.

답변3

가장 널리 사용되는 배포판인 Ubuntu는 sudo루트가 되기 위한 권장 방법으로 사용됩니다(명령줄을 사용할 때 GUI 사용을 고집하는 사용자는 뒤에서 무슨 일이 일어나고 있는지 모르거나 신경 쓰지 않고 비밀번호를 입력하라는 메시지가 표시됩니다). 다른 배포판에서는 sudo 설정을 권장하거나 권장하지 않을 수 있으며, 이를 제공할 수도 있고 제공하지 않을 수도 있습니다. 반면에, su이는 어디에서나 사용할 수 있으며 sudo사용자에게 루트 비밀번호가 없기 때문에 사용할 수 있는 시스템을 제외하고 대부분의 시스템에서 작동합니다.

su과 사이에는 sudo거의 모든 사용자에게 도달합니다. 무엇을 해야할지 필요 calife하거나 op이미 알고 있는 소수의 pfexec외국인 . 그렇지 않더라도 익숙하지 않은 장소에 파일을 사용하지도 su않고 sudo보유할 가능성도 없고 지침에 대해 생각하지 못한 충분한 내용이 있는 시스템은 아마도 작동하지 않을 것입니다.

답변4

귀하의 질문에 가장 정확하게 대답하자면, "아니오" sudo는 보편적인 것으로 간주되지 않습니다. 사실, "보편성"이라는 전체 개념은 종종 붉은 청어입니다. 이는 배포판 간 호환성과 관련하여 특히 그렇습니다. 여러 가지 다른 소프트웨어 버전을 사용하면 보편성은 반쯤 비현실적이 됩니다. 스크립팅은 본질적으로 실용적이며 현학적인 경우 이식 가능한 스크립트를 작성하는 것은 사실상 불가능합니다.

일반적으로 나는 내가 원하는 실행 환경, 즉 준현대식 Linux 배포판을 측정하고 일반 GNU Utils가 포함된 POSIX 셸을 기대합니다. Linux 외부에서 실행될 수 있는 스크립트의 경우 전체 POSIX 표준만 기대합니다. 분명히 많은 스크립트가 Linux 특정 또는 배포판 특정이므로 이식성이 떨어지는 경우가 많습니다.

특정 스크립팅 사례를 해결하려면

#!/bin/sh


## Exit Point
die() {
    [ -n "$2" ] && echo "$2"
    exit $1
}


## Require SuperUser Execution, Otherwise Re-Execute
[ `id -u` -ne 0 ] && {

    command -v lsb_release > /dev/null && {
        DISTRO="`lsb_release -is`"
        [ "$DISTRO" = "Ubuntu" ] && SUPERUSER='sudo'
    }
    SUPERUSER="${SUPERUSER:-su}"

    case "$SUPERUSER" in
        su)
            su -c "$0"
            ;;
        sudo)
            sudo "$0"
            ;;
    esac
}

## Require SuperUser Execution
[ `id -u` -ne 0 ] && die 78




echo 'Script Executed by UID'
id -u




## Clean Up
die 0

붙여넣은 스크립트는 POSIX 셸에 추가된 것이며 저는 항상 Dash 호환 스크립트를 작성합니다.

관련 정보