Дозволити складну команду sudo на Debian Linux


13

Мені потрібно дозволити певну команду на вікні Debian Linux для одного користувача. Я спробував це у /etc/sudoersфайлі:

# User privilege specification
zabbix  ALL=NOPASSWD: /usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}'

Це не працює, як очікувалося. Якщо я запускаю команду як користувач zabbix з sudo, вона запитує пароль (хоча я вказав NOPASSWDваріант).

Однак це працює:

# User privilege specification
zabbix  ALL=NOPASSWD: /usr/bin/apt-get

Але є недоліком того, що всі підкоманди apt-getдозволені. Чи є спосіб, як я можу це виправити, щоб дозволити лише певну команду?

Відповіді:


10

Я не згоден з проляганням. Хоча це буде працювати, Вам не потрібно awkзапускати як root. Мені це би не було комфортно, тому що ти можеш awkякимось чином напасти . Зрештою, це повноцінний перекладач мови програмування.

Коли хтось працює sudo /usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}', вони фактично запущені, sudo /usr/bin/apt-get --print-uris -qq -y upgradeа потім переходять до системи / переадресації як користувач, що телефонує.

Спробуйте це: zabbix ALL=NOPASSWD: /usr/bin/apt-get --print-uris -qq -y upgrade

До речі, немає нічого поганого в тому, щоб помістити це в сценарій, як це робиться Lain, і ви все ще могли це зробити. Я просто уникав би запускати awk як root.


1
Ви правильні, але якщо сценарій небезпечний, то неважливо, що в ньому є, його можна перезаписати, і світ - ваша устриця. Якщо скрипт захищений, то те, що в ньому, теж захищено.
користувач9517

25

Ви, мабуть, збиваєтесь із того, як перенаправлення взаємодіє із судо. Перенаправлення виконується у виклику користувача, який не є привілейованим користувачем. Вам, мабуть, буде простіше, якщо ви загорнете команду в сценарій, а потім дозволите користувачеві zabbix запускати цей сценарій, наприклад

#!/bin/bash
/usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}'

набір sudoers як

zabbix  ALL=NOPASSWD: /path/to/script

Тепер весь сценарій буде виконуватись як привілейований користувач, а не лише конкретна команда apt-get. Хоча переконайтеся, що користувач zabbix не може записати сценарій.


1
Можливо, хтось може мене виправити, якщо судо вже піклується про це (я, мабуть, пригадую, що проблеми із змінними env не передаються), але я б запропонував зробити awk та wc свої повні шляхи як загальну найкращу практику для сценаріїв, щоб користувач міг 'не експортуйте PATH = ~ user / bin: $ PATH та дотримуйтесь будь-яких команд, що хочете, у сценарії під назвою awk (або wc) у ~ user / bin
Foon

@Foon: Я думаю, ви плутаєте Судо з кроном.
користувач9517

1
Не плутаючи це, але superuser.com/questions/232231/… вказує на те, що судо перешкоджає маніпуляції з PATH (а за замовчуванням LD_LIBARRAY_PATH)
Foon

Я робив щось подібне, тільки я попросив викликати сценарій і зробив його доступним для запису тільки під рут. Перевірте, чи працює він для користувача з дозволами 711, тоді вони навіть не бачать, що він робить, щоб спробувати його обійти.
Кріс К
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.