Предотвратить сценарий от sudoing

Это выглядит выполнимым - вы просто должны как бы сдвигать-включать-выключать:

echo can ccccc ccccccccclayii sed clay ignore \
     every cclayii thing but the matching word\
     - cclayiicclayii |
sed     -e'y/ /\n/' \
-eh     -e's/\(cclayii\)\1*/ & /g;x;s// /g;s/^/ /' \
-ex     -e's//./;s/\([^ ]* *\)\{2\}/\1 /g;s/^/ /'  \
        -e'y/clayk/kieio/;G;t$' -e:$  \
        -e'/^ \n /{s///;y/ \n/\n /;}' \
-et     -e's/^ *\([^ ]*\) \(.* \n [^ ]*\) /\2\1/;t$'

can ccccc ccccccckkieiii sed clay ignore every kkieiii thing but the matching word - kkieiiikkieiii

... это нелегко, однако.


Как и в большинстве сложных задач, это намного проще, если использовать два seds:

echo can ccccc ccccccccclayii sed clay ignore \
     every cclayii thing but the matching word\
     - cclayiicclayii |
sed -e's/\(cclayii\)\1*/\n&\n /g;G;s/^/ /'|
sed -e'/^ /!y/clayk/kieio/;/./{H;d;}' \
    -e'x;s/\n \{0,1\}//g'

can ccccc ccccccckkieiii sed clay ignore every kkieiii thing but the matching word - kkieiiikkieiii
0
20.03.2019, 14:59
3 ответа

Он не может запрашивать пароль, если он не связан с терминалом:

setsid brew < /dev/null &> /dev/null

Или, если вы хотите захватить его вывод:

setsid brew < /dev/null |& cat

То есть, предположим, у вас есть setsid, который, видимо, может быть недоступен в MacOS . Если вы хотите это, но у вас его нет, есть доступные реализации .

Если у вас нет sedsid, но естьat:

[ -e ~/brew_$$.log ] && rm ~/brew_$$.log
at now << eof
brew > ~/brew_$$.lo_ 2>& 1 || true
mv ~/brew_$$.lo_ ~/brew_$$.log
eof
while ! [ -e ~/brew_$$.log ]; do sleep 1; done
cat ~/brew_$$.log && rm ~/brew_$$.log

запустит brewтеперь -отключится от терминала, перехватит вывод и скопирует его в поток вывода скрипта.

0
28.01.2020, 04:19
  1. Выйдите из /etc/sudoers. Это сделает все попытки sudo неудачными.

    Вам может понадобиться закомментировать эту строку:

    %sudo   ALL=(ALL:ALL) ALL
    

    Убедитесь, что у вас есть альтернативный способ получения root-доступа (, например.пароль root ), чтобы вы могли отменить это.

  2. Измените эту строку в/etc/sudoers:

    Defaults        env_reset
    

    в

    Defaults        env_reset,timestamp_timeout=-1
    

    Благодаря этому sudo никогда не запрашивает пароль.(Источник.)

  3. Все неудачные попытки sudo регистрируются в /var/log/auth.log. Запустите utilityи найдите такую ​​строку вauth.log:

    Jul  4 12:23:07 host sudo: test_perm : user NOT in sudoers ; TTY=pts/1 ; PWD=/home/nick ; USER=root ; COMMAND=/bin/echo
    

    (Это может быть зарегистрировано где-то еще в macOS; Я не уверен.)

0
28.01.2020, 04:19

В Linux вы можете отключить действие бита setuid для процесса и всех других процессов, запускаемых из него, включив флаг no_new_privs(см.prctl(2)). В сценариях оболочки это можно сделать с помощью утилиты setprivиз пакета util-linux:

.
$ setpriv --no-new-privs sudo -v
sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges?

Таким образом, изменение вашего скрипта для запуска setpriv --no-new-privs utilityвместо utilityдолжно работать, если вы можете жить с шумным сообщением об ошибке выше.

(К сожалению, вы упоминаете brew, и это, вероятно, не работает на macOS… но, возможно, это все же помогает кому-то еще.)

1
28.01.2020, 04:19

Теги

Похожие вопросы