답변:
오래된 스레드, 그러나 어떨까요?
echo 'foobar ALL=(ALL:ALL) ALL' | sudo EDITOR='tee -a' visudo
echo "$CONFIGLINE" | (EDITOR="tee -a" visudo)
-a
플래그 EDITOR="tee"
: 첫 번째 줄을 덮어 쓸뿐만 아니라 파일에 줄을 추가합니다. 처음에는 다른 점을 파악하지 못했고 추가하는 방법을 알 수 없었습니다. 내가 지정하여 어떤 사람들에게 약간의 시간을 찾을 수 있기를 바랍니다 직접 ;-) 그
이를 위해 사용자 정의 편집기로 visudo를 사용하십시오. 이것은 Brian의 솔루션으로 모든 경쟁 조건과 "해킹"문제를 해결합니다.
#!/bin/sh
if [ -z "$1" ]; then
echo "Starting up visudo with this script as first parameter"
export EDITOR=$0 && sudo -E visudo
else
echo "Changing sudoers"
echo "# Dummy change to sudoers" >> $1
fi
이 스크립트는 sudoers 끝에 "# Dummy change to sudoers"줄을 추가합니다. 해킹이나 경쟁 조건이 없습니다.
이것이 실제로 어떻게 작동하는지 설명하는 주석이 달린 버전 :
if [ -z "$1" ]; then
# When you run the script, you will run this block since $1 is empty.
echo "Starting up visudo with this script as first parameter"
# We first set this script as the EDITOR and then starts visudo.
# Visudo will now start and use THIS SCRIPT as its editor
export EDITOR=$0 && sudo -E visudo
else
# When visudo starts this script, it will provide the name of the sudoers
# file as the first parameter and $1 will be non-empty. Because of that,
# visudo will run this block.
echo "Changing sudoers"
# We change the sudoers file and then exit
echo "# Dummy change to sudoers" >> $1
fi
--enable-env-editor
. 그렇지 않으면 알려진 값의 작은 집합 중 하나 인 경우에만 편집기 변수 존중을 사용합니다.
sudo -E
첫 번째 명령에서 제거했지만 이것은 나를 위해 훌륭하게 작동했습니다 .
임시 파일을 편집 한 다음 visudo -c -f sudoers.temp를 사용하여 변경 사항이 유효한지 확인한 다음 / etc / sudoers 위에 복사해야합니다.
#!/bin/sh
if [ -f "/etc/sudoers.tmp" ]; then
exit 1
fi
touch /etc/sudoers.tmp
edit_sudoers /tmp/sudoers.new
visudo -c -f /tmp/sudoers.new
if [ "$?" -eq "0" ]; then
cp /tmp/sudoers.new /etc/sudoers
fi
rm /etc/sudoers.tmp
Debian 및 파생물에서는 /etc/sudoers.d/
권한이있는 사용자 지정 스크립트를 디렉터리에 삽입 할 수 있습니다 . 0440
자세한 내용은 /etc/sudoers.d/README를 참조하십시오 .
도움이 될 수 있습니다.
에 sudo
항목을 추가 /etc/sudoers.d
할 수있는 경우 @ dragon788의 답변을 사용할 수 있습니다.
https://superuser.com/a/1027257/26022
기본적으로 visudo
파일을으로 복사하기 전에 파일을 확인하는 데 사용 /etc/sudoers.d
하므로 sudo
누구에게도 깨지지 않도록 할 수 있습니다 .
visudo -c -q -f filename
이를 확인하고 유효한 경우 성공 (0)을 반환하므로 if
, &&
및 기타 스크립트 부울 연산과 함께 사용할 수 있습니다 . 유효성을 검사 한 후에 복사하면 /etc/sudoers.d
작동합니다. 루트가 소유하고 다른 사람이 쓸 수 없는지 확인하십시오.
사용자 정의 편집기를 설정하십시오. 기본적으로 파일 이름 (이 경우 /etc/sudoers.tmp)을 받아들이고 수정하고 제자리에 저장하는 스크립트입니다. 그래서 당신은 그 파일에 쓸 수 있습니다. 완료되면 스크립트를 종료하면 visudo가 실제 sudoers 파일을 수정합니다.
sudo EDITOR=/path/to/my_dummy_editor.sh visudo
#!/bin/sh; echo "# my changes to sudoers" >> $1; exit 0
그것은 나를 위해 일하는 것 같습니다.
많은 답변, yonks를 위해 sudo로 작업했지만 지금까지 설정 구성을 자동화 할 필요가 없었습니다. 위의 답변 중 일부를 혼합하여 /etc/sudoers.d 포함 위치에 구성 줄을 작성하여 기본 sudoers 파일을 수정할 필요가 없도록 한 다음 해당 파일에서 구문을 확인했습니다. 아래의 간단한 예제 :
sudoers include 파일에 라인을 작성하십시오.
sudo bash -c 'echo "your_user ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/99_sudo_include_file'
sudoers에 visudo 구문 검사를 통과 한 파일이 포함되어 있는지 확인하십시오.
sudo visudo -cf /etc/sudoers.d/99_sudo_include_file
가장 직접적인 해결책은 다음과 같습니다.
addudoers.sh 스크립트 만들기
#!/bin/sh
while [ -n "$1" ]; do
echo "$1 ALL=(ALL:ALL) ALL" >> /etc/sudoers;
shift # shift all parameters
done
추가하려는 사용자와 함께 호출하십시오.
root prompt> ./addsudoers.sh user1 user2
자세한 설명은 다음 답변을 참조하십시오 : 쉘 스크립트를 통해 sudoers에 사용자 추가
문안 인사!
이것은 다른 사람들이 여기에 게시 한 내용을 기반으로 저에게 효과적이었습니다. 다른 사람들의 스크립트를 사용하면 visudo가 열리지 만 편집하지는 않습니다. 이것은 표준 사용자를 포함한 모든 사용자가 safari / firefox 용 Java 7u17을 설치하도록 허용하는 데 필요한 수정을했습니다.
#!/usr/bin/env bash
rm /etc/sudoers.new
cp /etc/sudoers /etc/sudoers.new
echo "%everyone ALL = NOPASSWD: /usr/sbin/installer -pkg /Volumes/Java 7 Update 17/Java 7 Update 17.pkg -target /" >> /etc/sudoers.new
cp /etc/sudoers.new /etc/sudoers
이것은 sudoers 파일의 하단에 % everyone blah blah blah를 추가했습니다. 이렇게 스크립트를 실행해야했습니다.
sudo sh sudoersedit.sh
행운을 빕니다 : D
echo "$USER ALL=NOPASSWD:/usr/bin/rsync" | (sudo su -c 'EDITOR="tee" visudo -f /etc/sudoers.d/rsync')
.