sudo는 얼마나 보편적입니까?


26

나는 무언가를 설치하는 방법 (TeX 관련-묻지 않으면 더 자세한 정보를 제공하여 하루를 망치지 않을 것)에 대한 지침을 작성하고 sudo시스템 전체에 설치 하는 데 사용 되었습니다. 누군가 sudo가 모든 Linux (또는 Unix) 배포판에서 사용할 수 있다고 생각하지 않았다고 언급했습니다 .

없는 유닉스 배포판이 sudo있습니까? 그렇다면 그렇다면 무엇입니까? 보편적으로 인정 "나를 권한을 수퍼 유저 오기"명령 거기에 있다 모든 시스템은?

답변:


34

sudo 보편적으로 간주 될 수 없습니다 :

  • Red Hat Enterprise Linux는 : sudo레드햇 엔터프라이즈 리눅스 및 그 유도체에 기본적으로 설치되어 1 있지만 그것은 단지 RHEL 7 및 최신에서 즉시 사용 가능한 설치합니다.

    Red Hat Enterprise Linux 7 은 설치 화면에 루트가 아닌 첫 번째 사용자를 만드는 새로운 옵션 인 "이 사용자 관리자로 만들기"확인란을 추가했습니다. 그 목적은 설치 안내서의 해당 페이지에 문서화되어 있지 않지만 그 효과 중 하나는 해당 사용자가를 통해 명령을 실행할 수 있도록하는 것 sudo입니다. 해당 사용자를 wheel그룹 에 추가 하면 스톡 sudo패키지 구성 에서 모든 명령을 실행할 수 있습니다.

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

  • 데비안 : 데비안 9부터는 최소한의 설치 만 포함됩니다 sudo.

    데비안 7과 8에서는 설치하는 동안 " 표준 시스템 유틸리티 "패키지 세트를 선택해야했습니다 sudo. sudo이 방법으로 설치 하면 OS 설치 프로그램이 설치 프로세스에서 이전에 작성한 비 관리 사용자를 sudo그룹에 자동으로 추가하여 모든 명령을 실행할 권한이 있습니다.

    데비안 6 및 그 이전 버전에서는 설치 후 sudovia를 통해 apt-get설치하고 루트가 아닌 사용자에게 사용 권한을 부여하도록 직접 구성해야했습니다.

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

  • NetBSD : FreeBSD와 동일합니다.

  • OpenBSD : sudoOpenBSD에서 기본적으로 설치되었지만 2015 년 10 월에 릴리스 된 5.8전환 되었습니다 . 배송은 기본적으로 비활성화되어 있습니다.doasdoas

    얻으려면 sudo최신 버전에서는 패키지 저장소에서 설치해야합니다. OpenBSD의 sudo패키지는 RHEL 3에서 6과 같이 구성되어 있으므로이를 통해서만 root명령을 실행할 수 있으므로 의 목적을 상실합니다 sudo. root설치 중에 비 사용자 를 추가 한 경우 wheel그룹 에 추가 되었으므로 sudoOpenBSD 시스템 에서 가장 유용한 방법 은을 %wheel ALL=(ALL)...통해 행의 주석을 해제하는 것 visudo입니다.

  • Solaris : sudoSolaris 11에 기본적으로 설치되지만 Solaris 10 및 이전 버전은 비슷하지만 유사하지 않습니다 pfexec.

    sudo구형 시스템을 사용할 수 있지만 기본값은 중요합니다. 솔라리스 10 및 그 이전 버전은 수년간 우리와 함께하게 될 것입니다. 따라서 환경에 솔라리스가 있고 그 시스템을 개인적으로 통제 sudo할 수 없기 때문에 믿을 수 없습니다.

시스템이 오래 될수록 가질 가능성이 더 큽니다 sudo. sudo아주 오래 되었지만 2000 년대 중반까지 인기를 얻지 못했습니다. 그보다 오래된 시스템은 가질 가능성이 매우 낮습니다 sudo. 유닉스 박스는 오래 사는 경향이 있기 때문에 오늘날에도 그러한 시스템을 계속 사용할 수는 없습니다.

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

su은보다 일반적인 "슈퍼 유저 권한 얻기"명령에 더 가깝지만 sudo우분투 및 macOS와 같은 시스템을 사용하면 루트 계정이 기본적으로 잠기므로 sudo대신 대신 사용할 수 있습니다 su. 따라서 su보편적 이라고 부를 수도 없습니다 .


각주 :

  1. CentOS, Oracle Linux, Scientific Linux ...

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


9

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

아치 리눅스, 젠투, LFS 등과 같은 리눅스 배포판은 사용자가 완전한 커스터마이제이션을 할 수 있도록 기본적으로 sudo를 가지고 있지 않습니다.

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

그리고 아니요, sudo슈퍼 유저 권한을 부여하는 것보다 더 보편적 인 것이 존재하지 않습니다 . 즉, 실제로 루트로 로그인하는 것과는 별개입니다.


1
sudo대부분의 배포판에 번들로 제공 될 수 있지만 모든 배포판을 실행할 수있는 것으로 모든 사용자를 구성하는 것은 아닙니다.
jsbillings

또 다른 좋은 점입니다. sudoers 파일의 내용에 따라 다릅니다.
darnir

7

가장 널리 사용되는 배포판 인 Ubuntu는 sudo루트가되기 위해 권장되는 방법으로 사용합니다 (명령 줄을 사용하는 경우 GUI를 고수하는 사용자는 후드에서 발생하는 상황을 이해하거나 신경 쓰지 않고 암호 프롬프트를받습니다). 다른 배포판은 sudo 설정을 장려하거나 장려하지 않을 수 있으며 심지어 배송하지 않을 수도 있습니다. 반면에, su모든 곳에서 사용할 sudo수 있으며 사용자가 루트 암호를 가지고 있지 않기 때문에 사용 가능한 시스템을 제외한 대부분의 시스템에서 사용할 수 있습니다.

su와 사이에 sudo거의 모든 사용자를 포함합니다. 필요로하는 이국적인 몇 calife이나 op또는 pfexec이미 무엇을 알고있다. 그렇지 않은 경우에도 사용하지 않는 시스템 은 익숙하지 않은 장소에 파일을 가지고 있지 su않을 sudo가능성이 높으며 사용자의 지시 사항이 어쨌든 작동하지 않을 것이라고 생각하지 않은 충분한 항목이 있습니다.


6

귀하의 질문에 가장 정확하게 대답하는 것은 sudo보편적 인 것으로 간주되지 않습니다. 진실로 '유니버설'의 전체 개념은 종종 붉은 청어입니다. 이것은 크로스 디스트로 호환성과 관련하여 특히 그렇습니다. 수많은 다른 소프트웨어 버전을 사용하게되면 보편성은 반 비현실적이됩니다. 본질적으로 스크립팅은 실용적입니다. 만약 그것이 pedantic이라면, 휴대용 스크립트를 작성하는 것은 실질적으로 불가능합니다.

일반적으로 나는 의도 한 실행 환경, 반 현대 리눅스 배포판을 측정하고 일반적인 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와 호환됩니다.


그러나 스크립트가 sudo를 설치하도록 요구하지 않습니까? sudo를 사용하지 않고 수퍼 유저 액세스를 얻을 수있는 방법이 있습니까? 일반 스크립팅을 통해?
darnir

@darnir : 아니요, 붙여 넣은 스크립트 sudo를 설치할 필요가 없습니다 . 수퍼 유저 실행이 필요하며 sudo가능한 경우 사용할 수 있습니다. sudo사용할 수없는 경우 스크립트를 루트 사용자로 실행해야합니다 die. 그렇지 않으면 .
JM Becker

@darnir : 또한 "평문 스크립팅"이라는 것은 없습니다. 쉘 내장을 제외한 거의 모든 것은 일반 바이너리를 통해 수행됩니다. 그것은 대화식이든 자동화이든 다른 명령을 호출하는 쉘의 요점입니다. 쉘을 범용 프로그래밍 언어와 구분하는 것은 바로이 정의 특성입니다. 따라서 원시 커널 인터페이스로 코딩하지 않는다고 가정하고 수퍼 유저를 얻는 방법에 관계없이 외부 명령을 통해 수행합니다.
JM Becker

1
@varesa : 흥미롭게도 우분투는 sudo / su 기본 설정과 정반대입니다. 를 실행하여 사용자가 사용할 수있는 sudo 권한을 확인할 수 있습니다 sudo -l. 불행히도 암호 입력이 필요할 수 있으므로이 상황에서는 사용할 수 없습니다. 이것에 대해 더 신중하게 생각하면 실제로 전체 개념이 배포 당 테스트를 통해 가장 잘 달성 될 수 있다고 생각합니다. 사용하여 su -c실행하지 않는 한 su기본적으로 비활성화 배포판,이 경우 사용을 sudo su -c. 다른 사람들이 언급했듯이 수퍼 유저 권한을 사용자에게 두는 것이 가장 좋습니다.
JM Becker

1
@ varesa : 구성되지 않은을 사용할 가능성을 줄이기 위해 붙여 넣은 스크립트를 업데이트했습니다 sudo. 기본 su/ sudo구성을 가정하면 대부분의 배포판에서 제대로 실행됩니다 . 나는 구식 우분투 pre lsb_release가 해결 될 필요 가 있다는 것을 알고 있다. 그러나 이것은 실제로 단지 예일 뿐이며 분명히 확장 될 수있다.
JM Becker
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.