Наскільки універсальним є судо?


26

Я писав кілька інструкцій щодо того, як щось встановити (пов’язаний з TeX - якщо ви не запитаєте, я не зіпсую ваш день, надавши більше деталей) і використовую sudoдля встановлення на всій системі. Хтось прокоментував, що не вважає, що sudoце доступно для всіх дистрибутивів Linux (або Unix).

Чи існують роздачі Unix, яких немає sudo, і якщо так, то які вони? Чи є команда загальновизнаною «Отримати мені привілейований» , що є на всі системи?

Відповіді:


34

sudo не можна вважати універсальним:

  • Red Hat Enterprise Linux : sudoвстановлюється за замовчуванням на Red Hat Enterprise Linux та його похідних, 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)...рядок.

  • Debian : На Debian 9 мінімальна установка включає sudo.

    У Debian 7 та 8 вам довелося вибрати пакет " Стандартні утиліти системи " під час встановлення, щоб отримати sudo. Якщо ви встановите sudoтаким чином, інсталятор ОС автоматично додасть не адміністративного користувача, який ви створили раніше в процесі встановлення, до sudoгрупи, яка має дозвіл на запуск усіх команд.

    У Debian 6 та новіших версіях вам довелося встановити sudoчерез apt-getпісля установки та налаштувати його вручну, щоб надати користувачам, які не користуються коренем, можливість використовувати його.

  • FreeBSD : sudoне встановлено за замовчуванням у FreeBSD. Ви повинні побудувати його з Портів.

  • NetBSD : Те саме, що FreeBSD.

  • OpenBSD : sudoвикористовується для установки за замовчуванням в OpenBSD, але вони перейшли до doasстану на 5.8, випущений в жовтні 2015 року . doasкораблі вимкнено за замовчуванням.

    Щоб потрапити sudoв поточні версії, потрібно встановити його з сховища пакетів. sudoПакет OpenBSD налаштований так само, як і в RHEL 3 по 6, так що лише rootчерез нього можна запускати команди, що швидше перемагає мету sudo. Якщо ви додали rootкористувача, який не є користувачем під час встановлення, він був доданий до wheelгрупи, тому найпростіший спосіб зробити sudoкорисним у системі OpenBSD - це відміняти %wheel ALL=(ALL)...рядок через visudo.

  • Solaris : sudoвстановлено за замовчуванням у Solaris 11, але Solaris 10 та старіші використовують аналогічне, але не дуже-те саме pfexec.

    Ви можете отримати sudoдля старих систем, але значення за замовчуванням мають значення. Solaris 10 і старші будуть з нами роками, тож якщо у вас є Solaris у вашому оточенні, і ви особисто не контролюєте ці системи, і тому можете гарантувати, що вони sudoє, ви не можете на це розраховувати.

Чим старша система, тим більше шансів у неї немає sudo. Хоча sudoвін дуже старий , він не став популярним до середини 2000-х. Системи, старші за це, навряд чи матимуть sudo. Ящики Unix, як правило, живуть довго, тому немислимо, що ви все-таки попадаєтеся на таку систему сьогодні.

Я розраховую лише sudoна системи, якими я особисто керую, або такі, як Ubuntu, macOS або openSuSE, де це єдиний спосіб отримати привілеї root, за замовчуванням.

suближче до універсальної команди "отримати мене привілеїв суперпользователя", ніж sudoтоді, але тоді у вас є такі системи, як Ubuntu та macOS, де кореневий рахунок за замовчуванням заблокований спеціально, щоб змусити вас використовувати sudoзамість цього su. Отже, не можна назвати і suуніверсальний.


Виноски :

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

  2. Так, навіть у мінімальних встановленнях.


9

sudoце утиліта, яка доступна практично на всіх Linux-системах.
Однак він не використовується за замовчуванням у всіх дистрибутивах. Усі основні дистрибутивні програми містять його за замовчуванням.

Дистрибутиви Linux, такі як Arch Linux, Gentoo, LFS тощо, що дозволяють користувачеві повну настроюваність, за умовчанням не мають sudo.

У Arch Linux базова система не має sudoвстановленого. Користувач повинен вручну завантажити sudoта відредагувати файл sudoers.
Дітто для Gentoo та LFS. Я не знаю жодного іншого великого дистрибутива без судо.

І ні, я не думаю, що існує щось більш універсальне, ніж sudoу наданні привілеїв суперкористувача. Тобто, окрім фактичного входу в систему як root.


1
sudoможе бути в комплекті з більшістю дистрибутивів, але не всі вони налаштовують кожного користувача як здатного запустити його.
jsbillings

Ще один хороший момент. Залежить від того, що пише файл судорів.
darnir

7

Найпоширеніший дистрибутив, Ubuntu, використовує sudoяк рекомендований метод для кореневого використання (при використанні командного рядка - користувачі, які дотримуються графічного інтерфейсу, отримують підказку пароля, не розуміючи і не піклуючись про те, що відбувається під капотом). Інші дистрибутиви можуть або не можуть заохочувати створення судо, а також можуть навіть не відправляти його. З іншого боку, suвін доступний скрізь і є корисним для більшості систем, за винятком тих, де sudoдоступний лише тому, що користувач не матиме кореневого пароля.

Між suі sudo, ви охопите майже всіх своїх користувачів. Екзотичний мало хто потребує califeабо opабо pfexecзнати , що робити вже. Навіть якщо їх немає, система, яка не використовує suні sudo, імовірно, не має файлів у незнайомих місцях і достатньо речей, про які ви не думали, що ваші інструкції, ймовірно, не працюватимуть.


6

Щоб відповісти на ваше запитання, найточніше, жодне sudoне вважається універсальним. Правда, все поняття «універсальне» часто є червоною оселедець. Особливо це стосується сумісності крос-дистрибутива. Після того, як ви кинетеся до безлічі різних версій програмного забезпечення, універсальність стає напівреальною. Сценарій за своєю природою є прагматичним, якби це було педантично, писати портативні сценарії було б практично неможливо.

Зазвичай я вимірюю призначене для виконання середовище, напівсучасний дистрибутив Linux, я очікую оболонку POSIX із загальними утилітами GNU. Для сценаріїв, які можуть працювати за межами Linux, я очікую лише повного стандарту POSIX. Очевидно, що багато скриптів є специфічними для Linux або специфічними для distro, так що часто звужує область переносимості.

Щоб вирішити конкретний сценарій,

#!/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недоступний, сценарій повинен запускатися як користувач root, або він буде die.
Дж. М. Бекер

@darnir: Крім того, насправді нічого не називають "простого сценарію". Практично все, крім вбудованих оболонок, робиться за допомогою звичайних бінарних файлів. У цьому вся суть оболонки, щоб викликати інші команди, будь то інтерактивні чи автоматизовані. Саме ця визначальна характеристика відокремлює оболонку від мов програмування загального призначення. Отже, незалежно від того, як ви придбаєте суперпользователь, ви робите це за допомогою зовнішніх команд ..., припускаючи, що ви не кодуєте необроблені інтерфейси ядра.
Дж. М. Бекер

1
@varesa: Цікаво, що Ubuntu є точно протилежною конфігураціям sudo / su за замовчуванням. Ви можете перевірити, які права доступу sudo є у користувача, виконавши його sudo -l. На жаль, він непридатний у цій ситуації, оскільки може знадобитися введення пароля. Думаючи про це більш ретельно, я фактично думаю, що цілу концепцію можна досягти найкраще за допомогою тесту per distro. Використання, su -cякщо не працює suдистрофічний дистрибутив за замовчуванням, у цьому випадку використовується sudo su -c. Як вже згадували інші, найкраще залишити висоту надвисокого користувачеві, я б вважав будь-яку зручність навколо зручності.
Дж. М. Бекер

1
@varesa: Я оновив вставлений сценарій, щоб зменшити шанс використання неконфігурованого sudo. Це повинно виконуватися належним чином в більшості дистрибутива, припускаючи , що по замовчуванням su/ sudoконфігурації. Я знаю, що попередньо Ubuntu, попередньо lsb_release, потрібно було б вирішити ... Але це справді лише приклад, і його, очевидно, можна продовжити.
Дж. М. Бекер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.