최근에 sudo
인증 캐싱 기능을 비활성화 하여 매번 비밀번호를 묻는 메시지를 표시합니다.
그리고 이것은 보안에 좋지만 솔루션을 알아낼 수 없었던 약간의 문제가 발생했지만 다음과 같은 명령을 실행할 수 없습니다.
sudo <command> &
과거에는 그 sudo
전에 명령 을 실행했을 때 암호를 캐시하고 sudo
몇 분 동안 프롬프트없이 명령 을 실행할 수 있었으므로 명령을 실행할 수있었습니다.
그러나 미리 캐싱이없고 즉시 새 스레드를 시작 sudo
하고 암호를 묻는 메시지를 표시하지 않으므로 지금 실행하면이 방법으로 실행할 수 없습니다.
따라서 내가 sudo -i
전에 실행하지 않으면 다소 성가신이 형식으로 명령을 실행할 수 없습니다.
그래서이 문제를 해결하고 여전히 이런 식으로 프로그램과 명령을 실행할 수있는 방법이 있는지 궁금합니다.
나는 그놈 3.18과 함께 우분투 그놈 15.10을 실행하고 있으며, 특히이 방식으로 실행하려는 프로그램은 etherape
차이 가 있다면 모든 프로그램과 명령에서 작동하는 솔루션을 정말로 원합니다.
답변
sudo
백그라운드에서 실행하는 대신 백그라운드 sudo
에서 명령을 실행하도록 지시하십시오. 보낸 사람 man sudo
:
-b, --background
Run the given command in the background. Note that it is not
possible to use shell job control to manipulate background
processes started by sudo. Most interactive commands will
fail to work properly in background mode.
예를 들면 다음과 같습니다.
sudo -b sleep 10
다른 방법은 쉘을 사용하여 명령을 실행하는 것입니다.
sudo sh -c 'sleep 10 &'
다른 옵션은 암호를 얻기 위해 그래픽 프로그램을 지정하고 sudo
어쨌든 백그라운드로 보내는 것입니다.
-A, --askpass
Normally, if sudo requires a password, it will read it from
the user's terminal. If the -A (askpass) option is
specified, a (possibly graphical) helper program is executed
to read the user's password and output the password to the
standard output. If the SUDO_ASKPASS environment variable is
set, it specifies the path to the helper program. Otherwise,
if sudo.conf(5) contains a line specifying the askpass
program, that value will be used. For example:
# Path to askpass helper program
Path askpass /usr/X11R6/bin/ssh-askpass
If no askpass program is available, sudo will exit with an
error.
Askpass 프로그램은 일반적으로 SSH에 사용됩니다. ssh-askpass-gnome
패키지 중 하나가 제공되며 적어도 우분투 15.10에 기본적으로 설치됩니다.
SUDO_ASKPASS=/usr/bin/ssh-askpass sudo -A sleep 10 &
답변
설정 방법입니다 기꺼이 당신이 경우 timestamp_timeout
같은 적어도 뭔가에 0.02
(1.2 초, 난 그냥 안전한으로 말하고 싶지만 0
에서) /etc/sudoers
(단, 기본 설정으로 또는 함께, 귀하의 경우 필요 timestamp_timeout
아무것도으로 설정하지만, 0
하나는 다음을 수행 할 수 있습니다) 에서 이와 같은 별칭을 설정할 수 ~/.bashrc
있습니다. 명령을 실행하기 전에 무언가를 수행 할 필요가 없으며 프로세스 제어를 유지할 수 있습니다. :
alias sudo='sudo -v; [ $? ] && sudo'
여기서의 트릭은 세미콜론으로, Bash를 sudo -v
먼저 및 별도로 구문 분석 하여 사용자를 인증하고 잠재적 백그라운드 배경을 [ $? ] && sudo
명령으로 제한합니다.이 명령 sudo -v
은 성공 했는지 여부를 확인하고 필요한 경우 sudo
다시 실행 합니다 (잠재적으로 백그라운드로).
$ alias sudo='sudo -v; [ $? ] && sudo'
$ sudo -H gedit &
[sudo] password for user:
[1] 19966
$ jobs
[1]+ Running [ $? ] && sudo -H gedit &
답변
당신은 할 수 없습니다. 이 &
명령을 백그라운드로 즉시 보냅니다. 즉, 백그라운드에서 서브 쉘이 작성되고 명령이 실행됩니다. 의 경우와 같이 해당 명령이 프롬프트를 발행 sudo
하면 프롬프트가 백그라운드에 표시되고 표시되지 않습니다.
이를 해결할 수있는 유일한 방법은 명령을 다시 포 그라운드로 가져오고 암호를 제공 한 후 백그라운드로 다시 보내는 것입니다. 예를 들면 다음과 같습니다.
$ sudo command &
$ fg
sudo command
[sudo] password for terdon:
지금, 당신의 비밀번호, 타격을 입력 Enter한 후 히트 CtrlZ다시 배경을 전송하고 bg
계속 실행하도록 지시 할 수 있습니다.
더 간단한 방법은 사용하지 않을하는 것입니다 &
수동 배경에, 대신, 전송 작업을하고 CtrlZ하고 bg
이를 실행 한 후.
마지막으로 sudo의 비밀번호 시간 제한을 1 초 또는 2 초로 설정하는 것이 좋습니다. 그래도 플래시를 보호하려고하지 않는 한 충분한 보안을 유지하고 예상대로 명령을 실행할 수 있습니다.