Виконуйте псевдонім з sudo під час запуску сеансу


1

Я створив наступний псевдонім і помістив його в моє ~/.zshrc:

alias kiosk-proxy="echo \"rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080\" | sudo pfctl -ef -"

Це в основному правило pf, яке перенаправляє весь вхідний трафік з порту призначення 80 на 127.0.0.1:8080 (але це не важливо, це просто дає вам певний контекст)

В даний час, я повинен вручну запустити це на кожному запуску сесії, я хотів би його автоматизувати.

Було б досить просто, якби це не було потрібно sudo прав, я б просто поклав kiosk-proxy у моєму ~ / .bash_profile, я думаю.

Але, оскільки він потребує sudo, він попросить пароль, і я сумніваюся, що він підкаже його. Отже ... Як я можу виконати цей псевдонім з правами sudo без запиту пароля? Крім того, він повинен знати, що існує такий псевдонім ~/.zshrc, які ще не завантажені. Що ще гірше, я можу перемістити псевдонім в інший файл.


1
Кілька речей .... Ви хочете, щоб це було тільки для оболонки для певного користувача або ви бажаєте, щоб це було для всього комп'ютера? Ви використовуєте zsh або bash? Ви згадуєте обидва. Чому б ви не хотіли виконати цю команду як a сценарій ?
Allan

Я в основному покладаюся на Zsh, але вважаю, що мені доведеться використовувати bash_profile, оскільки це профіль профілю за замовчуванням. Мені не дуже цікаво, якщо він призначений для одного або всіх користувачів, на цьому комп'ютері є лише один користувач. Я також міг би виконати його як сценарій, але це просто псевдонім. Тому я використовував його як приклад.
Vadorequest

1
Ви хочете, щоб це запускалося лише під час входу в систему або під час запуску комп'ютера? У моєму вікні ввімкнено користувач root, тому я не знаю, як виглядає Mac без цього ... але користувач root має власні стартапітеми і не потребує дозволів для запуску речі, тому теоретично це має працювати для вас? G & gt;
MrBungleBear

1
bash_profile не читається zsh - так дотримуйтеся того чи іншого
Mark

Добре знати, я, хоча bash завжди був виконаний, маючи zsh як термінал за замовчуванням я зрозумів, я міг би мати псевдоніми в будь-якому .bashrc або. Думав, що він ідентичний для профілю.
Vadorequest

Відповіді:


1

Увімкнення pf (з правилом rdr) з командою / псевдонімом або сценарієм оболонки у вашому профілі bash / zsh, як у вашому питанні, не є ні загальною, ні гарною практикою. Це можливо, хоча:

Щоб вимкнути запит пароля, змініть файл sudoers:

Відкрийте термінал і введіть sudo visudo , щоб змінити файл / etc / sudoers .

Змінити частину:

## User privilege specification
##
root ALL=(ALL) ALL
%admin  ALL=(ALL) ALL

до

## User privilege specification
##
root ALL=(ALL) ALL
%admin  ALL=(ALL) ALL
your_username ALL=(ALL) NOPASSWD: /sbin/pfctl

і зберегти файл.

Якщо ви не знаєте vi : після введення sudo visudo потрібно змінити на режим вставки шляхом удару i . Введіть додаткову лінію, як зазначено вище. Покидати режим вставки попадання вихід . Потім введіть : w q і Enter ключ для запису зміненого файлу на диск і виходу vi.

bash:

Вхід kiosk-proxy більше не потрібно вводити пароль. Потім можна просто додати kiosk-proxy як окремий рядок у bash_profile (після alias kiosk-proxy ... рядок)

Після виходу з оболонки pf не буде вимкнено, а передане правило все ще перенаправляється! Щоб вимкнути pf і правило rdr під час виходу з оболонки (bash), створіть файл з touch ~/.bash_logout і зміст sudo pfctl -d.

zsh:

Те ж саме працює з ~ / .zprofile, що містить:

alias kiosk-proxy="echo \"rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080\" | sudo pfctl -ef -"

kiosk-proxy

і ~ / .zlogout містять

sudo pfctl -d

Більше рекомендований спосіб це просто додати правило rdr в pf.conf і включити pf під час завантаження.

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