как завершить процесс, который запускается с помощью sudo?Ctrl + C сделать это, но не убить - PullRequest
8 голосов
/ 01 сентября 2011

В моей компании разрешено запускать некоторые команды с помощью sudo, например tcpdump. Другие нет.

Я ожидаю некоторое время запустить tcpdump и затем остановить его. Когда я запускаю tcpdump, я могу прервать его с помощью Ctrl + C

Я написал такой скрипт:

#!/bin/sh
sudo tcpdump -ieth1 -w ~/dump.bin
sleep 5
kill -2 $!

это на самом деле не работает. Процесс tcpdump запускается от имени пользователя root, а текущий пользователь является обычной учетной записью.

Мой вопрос: есть ли способ сделать эквивалент ctrl c в скрипте bash?.

EDIT:

ps: как политика безопасности моей компании, я не могу запустить kill от имени root.

Ответы [ 6 ]

8 голосов
/ 02 сентября 2011

Попробуйте -Z вариант tcpdump.Он указывает tcpdump отбросить привилегии root и запускаться от имени пользователя, указанного в аргументе.

sudo tcpdump -Z $USER -ieth1 -w ~/dump.bin

Теперь попробуйте убить этот процесс.

5 голосов
/ 01 сентября 2011

Просто введите kill через sudo:

sudo kill -2 $!

Таким образом, процесс kill будет иметь право посылать сигналы процессу, работающему от имени пользователя root.

1 голос
/ 02 сентября 2011

Команда timeout также завершает программу после столь длительного времени.sudo timeout 5 tcpdump -ieth1 -w ~/dump.bin должен выполнить то же самое, что и скрипт.

0 голосов
/ 11 октября 2018

Для программ, которые не имеют специальных переключателей, таких как -Z, и если вы можете изменить файл sudoers, это решение:

sudo myprogram &
sleep 5
sudo pkill myprogram

Все, что мне нужно сделать, это разрешить запуск pkill myprogram без пароля, используя visudo и добавив следующую строку:

myuser ALL=(ALL) NOPASSWD:/bin/pkill myprogram

Это менее опасно, чем позволить sudo убить любую программу.

0 голосов
/ 04 марта 2015
sudo tcpdump -Z root -w ~/dump.bin -n -i eth0 -G 300 -W 1

G - время ожидания (по истечении времени ожидания командир автоматически убивается) Z - сбросить корень и запустить как привилегию пользователя. W - количество файлов, которые нужно сохранить (как разделенный файл)

0 голосов
/ 01 сентября 2011
sudo tcpdump -ieth1 -w ~/dump.bin 

заблокирует ваш скрипт, вам нужно поместить его в фон:

sudo tcpdump -ieth1 -w ~/dump.bin &

.

Это и ответ от Благовеста должны сделатьэто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...