sudo
나는 두 가지를 원합니다. 1) 캐시된 자격 증명을 입력할 때마다 업데이트하여 정기적으로 계속 사용하는 경우 비밀번호를 묻지 않기를 원합니다 sudo
. 2) (누군가) 별칭을 사용할 때 sudo를 사용할 수 있습니다.
자격 증명을 업데이트하려면 이 작업을 실행해야 합니다 sudo -v
(명령이 필요하지 않음).
예를 들어, 나는 /usr/bin/vi
하나 /usr/bin/nvim
의 별칭을 가지고 있습니다.
alias vi='/usr/bin/nvim'
따라서 루트가 아닌 사용자로 입력하면 다음과 같습니다.
sudo vi /etc/fstab
그런 다음 다음을 실행하고 싶습니다.
sudo -v
sudo /usr/bin/nvim /etc/fstab
나는 bash 함수를 생성하여 이를 달성하려고 했습니다.
function sudo()
{
command sudo -v
command sudo "$@"
}
그러나 이로 인해 오류가 발생합니다.
sudo: vi: command not found
즉, 별칭은 vi
함수 내에서 "$@"
확장 되지 않습니다 sudo
.
이 문제를 어떻게 해결할 수 있나요?
답변1
아마도
function sudo()
{
command sudo -v
if [[ $(type -t "$1") == "alias" ]]; then
set -- bash -ic "$(alias "$1"); $(printf "%q " "$@")"
fi
# what am I about to execute
printf "%q " sudo "$@"; echo
# and do it
command sudo "$@"
}
답변2
Camille의 alias sudo='sudo -v; sudo '
답변은 sudo가 별칭인 경우 sudo 다음의 첫 번째 단어를 확장하는 Glenn의 답변과 동일하게 유효하지만 별칭을 "맹목적으로" 확장하는 것은 보안 문제로 간주될 수 있습니다.
주어진 visudo
가능한 구성
/etc/sudoers:
Defaults editor=/usr/bin/nvim, !env_editor
EDITOR
환경 변수(역시 보안 위험)를 무시 하고 항상 켜져 /etc/sudoers
있거나 다음 bash 기능을 사용할 수 있습니다( 편집기로 입력하는 /usr/bin/nvim
데 익숙하다고 가정 ).vi
~/.bashrc:
sudo ()
{
command sudo -nv 2> /dev/null;
COMMAND="$1";
shift;
[ "$COMMAND" = "vi" ] && COMMAND="/usr/bin/nvim";
command sudo "$COMMAND" "$@"
}
이것은 또한 허용합니다
sudo vi /etc/fstab
하지만 항상 /usr/bin/nvim
별칭을 확장하지 않고 사용하세요.
또한 sudo -nv
vs. sudo -v
이는 실제 명령에 암호가 필요하지 않은 경우 후자에서 암호를 요구하지 않도록 하기 위한 것입니다.