bash 스크립트에서 일련의 명령을 실행하기 위해 sudo를 재사용하는 방법

bash 스크립트에서 일련의 명령을 실행하기 위해 sudo를 재사용하는 방법

다양한 포트 활동을 관찰하기 위해 실행 중인 여러 터미널 창을 여는 스크립트가 있습니다 iftop.

열려 있는 모든 터미널에는 sudo 비밀번호를 입력해야 합니다. 총 5개의 터미널이 있다는 점을 고려하면 약간 고통스럽습니다.

그래서 내 질문은 sudo 비밀번호를 한 번 입력하고 모든 창에 비밀번호를 입력하는 대신 해당 권한으로 모든 창을 실행하려면 어떻게 해야 합니까?

#!/bin/bash

TITLE="${USER}@${HOSTNAME}"' iftop (h=help, L=lin/log scales, t=line display mode, T=line totals, p=port display)'
gnome-terminal --title "$TITLE" -e 'sh -c "sudo iftop -P -f \"port 22\""' --hide-menubar --zoom=0.85

TITLE="${USER}@${HOSTNAME}"' iftop (h=help, L=lin/log scales, t=line display mode, T=line totals, p=port display)'
gnome-terminal --title "$TITLE" -e 'sh -c "sudo iftop -P -f \"port 33 or port 44\""' --hide-menubar --zoom=0.85

TITLE="${USER}@${HOSTNAME}"' iftop (h=help, L=lin/log scales, t=line display mode, T=line totals, p=port display)'
gnome-terminal --title "$TITLE" -e 'sh -c "sudo iftop -P -f \"(port 55) or (port 66)\""' --hide-menubar --zoom=0.85 

전체 스크립트를 실행해 보았 sudo더니 열려 있는 모든 터미널도 sudo 터미널이 되었습니다. 나에게 필요한 것은 일반 터미널을 실행하는 것입니다 sudo iftop.

답변1

위치 또는 설정은 또는 timestamp_type? 매뉴얼 페이지에 따르면 기본값은 다음과 같습니다./etc/sudoers/etc/sudoers.d/*ttyppidttysudo

타임스탬프 유형- sudoers자격 증명 캐싱을 위해 사용자별 타임스탬프 파일을 사용합니다. 이 timestamp_type옵션을 사용하여 사용되는 타임스탬프 레코드 유형을 지정할 수 있습니다. 가능한 값은 다음과 같습니다.

global터미널 또는 상위 프로세스 ID에 관계없이 사용자의 모든 로그인 세션에 단일 타임스탬프 레코드가 사용됩니다. 추가 레코드는 파이프라인에서 여러 번 사용될 때 비밀번호 프롬프트를 직렬화하는 데 사용되지만 sudo이는 인증에 영향을 미치지 않습니다.

ppid단일 타임스탬프 레코드는 동일한 상위 프로세스 ID(일반적으로 셸)를 가진 모든 프로세스에 사용됩니다. 동일한 셸(또는 다른 공통 상위 프로세스)에서 실행되는 명령에는 몇 분 동안 비밀번호가 필요하지 않습니다 timestamp_timeout(기본값은 15분). 다른 상위 프로세스 ID(예: 쉘 스크립트)를 사용하여 sudo를 통해 실행되는 명령은 별도로 인증됩니다.

tty각 엔드포인트는 타임스탬프 레코드를 사용합니다. 이는 사용자의 로그인 세션이 독립적으로 인증된다는 의미입니다. 터미널이 없으면 동작은 ppid와 동일합니다. 동일한 터미널에서 실행되는 명령에는 몇 분 동안 비밀번호가 필요하지 않습니다 timestamp_timeout(기본값은 15분).

기본값은 입니다 tty.

이 설정은 버전 1.8.21 이상에서만 지원됩니다.

그 경우tty또는 로 설정하면 ppid매번 비밀번호를 묻는 이유를 설명합니다. 실행 중인 각 명령은 별도의 tty sudo로 실행됩니다 .gnome-terminal그리고상위 PID가 다릅니다.

global원하는 것을 수행하는 유일한 설정처럼 보입니다 .


이것이 도움이 되지 않는다면, 귀하의 timestamp_timeout설정은 무엇입니까? 로 설정되어 있나요 0? 기본값은 15분이어야 합니다.

다른 timestamp*설정( timestampdir, timestampowner)도 확인하세요. 만약 timestampdir(내 데비안 sid 시스템의 기본값은/실행/sudo/ts)이 존재하지 않거나 rwX가 아닙니다 timestampowner(기본값)뿌리).

sudo설명적인 오류 메시지는 syslog를 통해 기록됩니다.그리고이러한 설정으로 인해 오류가 발생할 경우 관리자(root)에게 이메일을 보내주세요.


/etc/sudoers또 다른 옵션은 사용자가 iftop비밀번호를 입력하지 않고도 실행할 수 있도록 편집하는 것입니다 . 예를 들어

yourusernamehere ALL= NOPASSWD: /usr/sbin/iftop

바라보다비밀번호를 묻지 않고 루트로 특정 프로그램을 어떻게 실행할 수 있나요?이에 대한 자세한 내용은 다음과 같습니다.

관련 정보