альтернативи незахищеному судо?


-1

Як захистити своє довкілля від удалення половини судо?

Здається, я можу захистити змінні, але функції, на які змінні (наприклад, підказка, наприклад) покладаються, не визначені.

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

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

Також на установках, де очищено env IS, змінні типу "TERM" зберігаються, але не "DISPLAY". Чи не GUI трохи частіше, ніж TTY? Можливо, гірше те, що sudo заохочує використання функції "auth-time-only" pam_env. У документації pam_env рекомендується використовувати лише під час першого авторизації в системі, оскільки якщо користувач надходить з віддаленої системи, це єдиний час, коли пам’ять може отримати доступ, коли користувач увійшов у систему, і встановив такі речі, як REMOTEHOST і ДИСПЛЕЙ. Якщо судо витирає шлях входу та повідомляє дистрибутиву використовувати pam_env, це все, окрім гарантії, що вихідний хост і дисплей користувача будуть очищені. Окрім оскарження походження користувача, він також вбиває будь-який сеанс віддаленого входу.

Зважаючи на те, що багато систем не дозволяють входити безпосередньо в систему через віддалений сеанс, але вимагають, щоб ви увійшли через свого користувача, а потім sudo to root, це, мабуть, буде чітким способом анулювати цю модель безпеки.

Чи є ще одна версія судо, яка не така небезпечна?

Оновлення

Для підказки: 1) Я не хочу викликати функції, що базуються на диску, кожен раз, коли я підказую (як це робить ваш колір перемикання). Також вимога: коли я перелічую свої глобальні зміни, АБО коли я відшукую, я не хочу, щоб коди перемикачів кольорів відображалися в сирому вигляді та змінювали кольори там, де це не бажано.

Крім того, я не хотів робити це щодо мого конкретного налаштування, оскільки він працює протягом РОКІВ у декількох unix і Windows, тільки для того, щоб потребувати "виправлення" тепер, коли sudo не може копіювати моє середовище цілісністю.

Що стосується налаштування кольорів, це відносно тривіально. Використовуйте "читати" і читайте в кодах з tput у vars, так що перелічені або в сліді, коди знаходяться в нерозширеному баш-введенні. Приклад:

read _CRST <<<"$(tput sgr0)"   #Reset
read _CRed <<<"$(tput setaf 1)"  #Red
read _CBLD <<<"$(tput bold)"   #Bold

стає: _CBLD = $ '\ E [1m' _CRST = $ '\ E [0; 10m' _CRed = $ '\ E [31m'

Примітка: мої вимоги були розроблені та вдосконалені протягом декількох років, це не є стимулом створення моменту.

Але для підказки, це спосіб складніший - пам’ятайте, що немає хоста для місцевого хоста, але також хочете його у заголовку вікна.

Все, окрім "spwd", є тут: # build a prompt ########### # # специфічний для xterm & linux консолі compat emulations read _CRST <<< "$ (tput sgr0)" #Reset read _CRed < << "$ (tput setaf 1)" #Red read _CBLD <<< "$ (tput bold)" #Bold оголосити _prompt_open = "" _prompt_close = "" _prompt = ">" оголосити _disp_port = $ {DISPLAY / [^: ] *: /} printf -v qUSER "% q" $ USER набір -x qUSER

[[ $UID -eq 0 ]] && { 
    _prompt_open="$_CBLD$_CRed"
    _prompt="#"
    _prompt_close="$_CRST"
}
PS1='\['"$_prompt_open"'\]$(spwd "$PWD" )'"$_prompt"'\['"$_prompt_close"'\] ';

if [[ -n ${REMOTEHOST:-""} ]]; then
    function titlebar { \
        printf "\033]1;${qUSER}@${HOSTNAME}:%q\007" "$(spwd "$PWD")" ;\
    }
    export -f titlebar

    PS1='\[$(titlebar)'"$_prompt_open"'\]${HOSTNAME}:$(spwd "$PWD")'"$_prompt"'\['"$_prompt_close"'\] '
fi

FWIW, PS4 отримує таке:

PS4='>>${BASH_SOURCE:+${BASH_SOURCE[0]/$HOME/~}}#${LINENO}> '

Зауважте, що функція spwd не вказана вище, - це в окремому файлі, який створюється лише при ініціалізації нового середовища.

Але ця функція, і це дані: if [[! $ {qUSER: - ""}]]; тоді printf -v qUSER "% q" $ USER експорт qUSER fi export _home_prefix = $ {HOME% / *} /

Наступна ідея функцій вийшла з suse, але була повністю перероблена.

Повернути короткий шлях, коли відображений шлях займає> 50% ширини екрана:

alias int=declare\ -i _e=echo _pf=printf exp=export ret=return 
exp __dpf__='local -a PF=(
                "/$1/$2/$3/../\${$[$#-1]}/\${$#}" 
                "/$1/$2/../\${$[$#-1]}/\${$#}"
                "/$1/../\${$[$#-1]}/\${$#}"
                "/$1/../\${$#}"
                ".../\${$#}"
                "..." )'
function spwd () {  \
  (($#)) || { _e "spwd called with null arg"; return 1; }; \
  int w=COLUMNS/2                         ;\
  ( _pf -v _p "%s" "$1" ; export IFS=/    ;\
    set $_p; shift; unset IFS             ;\
    t="${_p#$_home_prefix}"               ;\
    int tl=${#t}                          ;\
    if (($#<=6 && tl<w));then ((tl<=2)) && \
      { _e -En "${_p}";return 0; }        ;\
    else                                   \
      eval "$__dpf__"                     ;\
      int i pfl=${#PF[*]}                 ;\
      for ((i=0; i<pfl; ++i)); do eval     \
        "_pf -v _pa %s \"${PF[i]}\""      ;\
        _p="$(eval "_pf %s \"$_pa\"")"    ;\
        ((${#_p}<w)) && break;  done      ;\
    fi                                    ;\
    _e -En "${_p#$_home_prefix}" )    
}

typeset -xrf spwd

Інформація про значення чи функції лише для читання:

Якщо ви спробуєте відновити змінні чи функції лише для читання, ви отримаєте помилку. Оскільки змінні все ще читаються лише ... sudo може знищити лише половину середовища, лише тоді, коли функції лише для читання можуть бути безпечно прочитані. У всіх інших випадках їх повторне читання спричинить за собою декілька помилок під час виконання (не вдається перевизначити var або функцію лише для читання).

Мої підпрограми повинні були якось знати, що половина значень лише для читання в пам'яті (тих, які виглядають як функції) були видалені і лише їх читати. Я не впевнений, як би я кодував у хаках тестування на перезаписані парами чи функціями, доступними лише для читання, - і не повинен.

Щодо зміни моїх функцій:

1) Постійний користувач не мав би доступу до sudo в першу чергу. 2) Оскільки я системний адміністратор, ці функції для мене ... якщо я зламаю власну систему, "C'est la vie".

re: PAM: Так, sudo використовує pam як більшість конфігурацій дистрибутива.

Все, що я хочу, - це судо робити те, що говорить: і не торкатися свого оточення, коли я говорю це не робити. Це не має можливості для такого, тому я запитав про більш безпечну заміну. Програми, які "допомагають" користувачеві, відбираючи його вибір конфігурації, не є хорошими програмами безпеки, оскільки вони не дотримуються політики безпеки місцевого сайту, а замість цього переосмислюють його, бо думають, що вони краще знають. Я ще не бачив, щоб така програма була правильною.

Сподіваємось, це відповідає на ваші запитання про те, чому я запитую, як подолати цю проблему і чому вона є проблемою, хоча це, безумовно, значно виходить за рамки задавання питання, яке хтось уже відзначив, навіть будучи запитаним ... (як я смію! ) ...


Коли я прошу попередньо встановити середовище, це не так. Це знищує функції, що входять до середовища. Це не відповідає його конфігураційному файлу. Через це, коли запит надруковано, він вимикається і шукає файли, які можна запустити, як тільки ви надішлете корінь --- тому, що всі середовища-функції видалені.
Астара

Відповіді:


1

Ви також надіслали це до списку розсилки sudo, чи не так?

Змінні середовища

Ну, в sudoers ви можете налаштувати, які змінні середовища він повинен зберігати. Зробіть цикл за замовчуванням env_reset та env_keep. Вони також можуть бути встановлені для кожного користувача або групи. Просто додайте REMOTEHOST та DISPLAY та ей, престо.

Підкажіть

Чому ви використовуєте функції у своєму запиті?

++ Схоже, ви хочете, щоб ваше підказка виглядала приблизно так:

PS1='${REMOTEHOST}${REMOTEHOST+->}\u@\h:\w\$ '

Це, звичайно, не перемикання кольорів. Для цього:

PS1='\[$(tput bold)$(tput setaf 1)${REMOTEHOST}${REMOTEHOST+->}\u@\h:\w\$$(tput sgr0) \]'

Функції джерела

І чому ви не перезавантажите файл, що містить ці функції?

++ Ви говорите, що це робите, але ви використовуєте прапори для оптимізації функцій та запобігання їх перечитанню. Якщо ви залишите оптимізацію, чи працює вона?

Функції читання лише

І wrt root, чому ви зберігаєте функції в середовищі, яке може змінити користувач? Як root, вам потрібно чітко визначене середовище, створене без будь-якого впливу з боку користувача, що переходить на root.

++ Постійний користувач завжди може скинути все в оболонці. По суті, ви не можете розраховувати на функції, щоб вони залишилися однаковими. Тож вам доведеться кожного разу їх шукати з надійного місця.

ПАМ

І sudo не використовує pam_env () у своєму джерелі. Це викликається, однак, через стек PAM. Отже, чи можете ви надати посилання, що підтримує вашу претензію?

++ Так, sudo може використовувати PAM, якщо так налаштовано.

З повагою, Едгар.


Чому ви не використовуєте функції у своєму запиті? Як відобразити хост, з якого ви ввійшли в систему, у запиті на назву вікна, відповідний шлях - обрізаний, якщо занадто довгий, залежно від розміру екрана, змінюється на використання "#" замість ">" і з'являється в червоному? Хороша безпека - це усвідомлення свого оточення стільки ж, скільки і бездумних правил.
Астара

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

Що стосується посилання, що підтримує претензію на судо за допомогою пам - вам потрібно читати журнал змін .... трохи частіше: rpmfind.net/linux/RPM/opensuse/12.2/x86_64/… .... * Ср травня 16 2012 vcizek@suse.com - оновлення до 1.8.5. Деякі зміни: * / etc / Environment більше не читається безпосередньо в системах Linux, коли використовується PAM. Тепер Sudo об'єднує середовище PAM в середовище користувача, яке зазвичай встановлюється модулем pam_env. .... це було змінено понад 2 роки тому ...
Астара

Чому я можу зберігати функції лише для читання в моєму середовищі, встановлені сценаріями входу в систему? І як вони змінюються? Як ви змінюєте сценарії лише для читання .... і я користувач переходить на root. Не якийсь випадковий джоу ... Я хочу, щоб це було безшовно, коли мені це потрібно. Мені це не потрібно, щоб обнулити частини мого оточення або скинути дисплей (як мінімум, з 12.2, принаймні) ... Хоча я це виправив на своїй машині - багато інших скаржилися і на нову поведінку
Астара

Re: "+ Постійний користувач завжди може скинути все в оболонці. Окрім того, ви не можете розраховувати на те, щоб функції залишалися однаковими. Тому вам доведеться щоразу надсилати їх з надійного місця." Ви можете використовувати той же аргумент, щоб застосувати будь-які / всі змінні середовища ... Тобто якщо те, що я роблю, є незахищеним, то sudo є незахищеним, навіть не маючи можливості не скидати середовище. Але справа в тому, що це не так, якщо політика безпеки диктує, що sudo використовуватимуть лише довірені користувачі - у цьому випадку функції однаково захищені. Ви не можете сперечатися один без іншого.
Астара
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.