잘못된 '/ etc / sudoers'파일을 수정하는 방법은 무엇입니까?


238

잘못된 sudoers 파일을 어떻게 편집합니까? 아래 오류가 발생하여 다시 수정하여 수정할 수 없습니다.

다음과 같은 일이 발생합니다.

$ sudo visudo
>>> /etc/sudoers: syntax error near line 28 <<<
sudo: parse error in /etc/sudoers near line 28
sudo: no valid sudoers sources found, quitting

2
이 페이지를 고려한 좋은 질문은 그 오류를 만듭니다 help.ubuntu.com/community/RootSudoTimeout

답변:


361

현대 우분투 시스템 (및 다른 많은 GNU / Linux 배포판)에서 손상된 sudoers파일을 수정하는 것은 실제로 매우 쉽고 재부팅, 라이브 CD를 사용하거나 머신에 물리적으로 액세스 할 필요가 없습니다.

SSH를 통해이를 수행하려면 머신에 로그인하고 명령을 실행하십시오 pkexec visudo. 머신에 물리적으로 액세스 할 수있는 경우 SSH가 필요하지 않습니다. 터미널 창을 열고 해당 pkexec명령 을 실행하십시오.

당신이 (또는 다른 사용자)를 가정하는 것은으로 프로그램을 실행할 권한이 rootPolicyKit에, 당신은 당신의 암호를 입력 한 다음 그것을 실행 visudo으로 root, 당신이 당신의 문제를 해결할 수 있습니다 /etc/sudoers.

구성 파일 중 하나를 편집해야하는 경우 /etc/sudoers.d(이 상황에서는 드물지만 가능)를 사용하십시오 .pkexec visudo -f /etc/sudoers.d/filename

문제를 해결하기 위해 루트로 추가 시스템 관리 명령을 수행해야하는 관련 상황이있는 경우 (이 상황에서는 드물지만 다른 경우에서는 일반적 임)를 사용하여 대화식 루트 쉘을 시작할 수 있습니다 pkexec bash. 일반적으로 실행하는 비 그래픽 명령 sudopkexec대신 실행할 수 있습니다 .

(시스템 root에 PolicyKit과 같이 프로그램을 실행할 권한이있는 사용자 계정이 두 개 이상인 경우 해당 작업에 대해 암호를 요청하기 전에 사용할 계정을 선택하라는 메시지가 표시됩니다.)


그래도 작동하지 않는 경우 (예 : PolicyKit를 통해 루트로 프로그램을 실행할 권한이있는 사용자가없는 경우) Ubuntu 라이브 CD (Ubuntu를 설치하는 데 사용한 CD 등)에서 부팅하고 파일 시스템을 마운트하십시오. 설치된 시스템. sudo parted -l파티션을보기 위해 실행하여이 작업을 수행 할 수 있습니다. 아마도 하나의 ext4 파티션이있을 수 있으며 이것이 루트 파일 시스템입니다.

설치된 Ubuntu 시스템의 루트 파일 시스템이 / dev / sda1에 있다고 가정하십시오. 그런 다음로 마운트 할 수 있습니다 sudo mount /dev/sda1 /mnt. 그런 다음로 설치된 시스템의 sudoers 파일을 편집 할 수 있습니다 sudo nano -w /mnt/etc/sudoers. 또는 더 나은 방법으로

sudo visudo -f /mnt/etc/sudoers

(잘못된 구문으로 sudoers 파일을 저장하지 못하게합니다).


7
pkexec / usr / sbin / visudo는 debian 7
marinara에서

10
이런 젠장! 많은 감사합니다! 베이컨을 구했습니다. 정규 텍스트 편집기 (DON-T__D-O__T-HAT !!!)를 사용하여 etc / sudoers.d / 디렉토리에 제안 된 파일을 추가했습니다. 문제를 일으키는 파일을 포함하여 상승 된 권한을 수행 할 수있는 모든 기능이 손실되었습니다. 파일 편집에 도움이되었습니다. 이상하게도, 나는 먼저 / etc / sudoers를 편집해야했고, 다른 파일에서 오류를 찾아서 열어 주었다. / etc / sudoers 파일 'inlcudedir /etc/sudoers.d'의 지시어도 WEIRDER로 주석 처리되었으며 여전히 포함되어 있습니다.
Dennis

4
@Dennis 다소 혼란스럽게도 파일의 #include지시문은 sudoers특별히 취급됩니다. 이 #경우 행은 나머지 행을 주석으로 해석하지 않습니다. 으로 man sudoers말한다 : "파운드 기호 ( '#')를 ... 그것은 #include 지시문 또는하지 않는 일부 경우를 제외하고 (코멘트를 표시하는 데 사용됩니다"참조 visudo를 : #includedir sudoers.d (에서 보관 lzone.de/ 블로그 ).
엘리야 케이건

5
내 사용자가 sudoer이지만이 오류가 발생했습니다. 다른 사용자로 명령을 실행하는 동안
SuB

2
Ubuntu 16.04 pkexec visudo에서 올바른 비밀번호를 허용하지 않는 비밀번호를 요청합니다. "AUTHENTICATION FAILED"오류가 발생합니다.
Juha Untinen

54

항상 visudosudoers 파일을 편집 하는 데 사용 하십시오. 직접 편집하지 마십시오. 유효성을 검사하지 않으면 디스크에 저장하지 못하게됩니다.


17
가늠자는 20/20입니다
code_monk

4
재난을 예방하지는 않습니다. 자신을 유효하게 거부하기에 충분히 쉽습니다.
Joshua

스크 릿이 visudo를 사용할 수 있습니까? 그렇다면 어떻게?
Lukas

visudo가 설치되어 있지 않습니다. 그래서 pkexec vim을했습니다. 그런 다음 사용자 목록을 표시하고 비밀번호를 묻습니다. 암호를 입력하면 "다른 사용자로 명령을 실행하는 동안 오류가 발생했습니다 : 권한이 없습니다"라는 오류가 발생합니다. 도와주세요
Shyamkkhadka

24

입력 :

pkexec visudo

그런 다음 마지막 줄을 변경하십시오.

#includedir /etc/sudoers

에:

#includedir /etc/sudoers.d

문제를 해결해야합니다.


2
Leading #from 을 제거 #includedir하면 구문 오류가 발생하며, #적어도 Ubuntu 12.10에서 지시문의 일부입니다.
SAFX

1
그것은 단지 많은 두통을 구했습니다. 고마워 :)
Addo Solutions

1
visudo가 설치되어 있지 않습니다. 그래서 pkexec vim을했습니다. 그런 다음 사용자 목록을 표시하고 비밀번호를 묻습니다. 암호를 입력하면 "다른 사용자로 명령을 실행하는 동안 오류가 발생했습니다 : 권한이 없습니다"라는 오류가 발생합니다. 도와주세요
Shyamkkhadka

11

나와 같은 다른 사람이 pkexec를 설치 하지 않았 거나 vi, visudo, nano 또는 sudoers 파일을 변경하기 위해 vi, visudo, nano 또는 기타 편집기를 실행할 수없는 경우이 프로세스로 확신 할 수 있습니다.

  • 재부팅
  • 부팅 중에 Shift 키를 누르고 있으면 복구 모드 옵션을 사용할 수 있습니다 (입력)
  • 명령 줄을 루트로 입력하십시오 (grub 메뉴의 두 번째 마지막 옵션)
  • rw 용 부트 장치를 다시 마운트하고 사용자에게 exec 권한을 적용하고 파일을 편집하십시오.

    mount -n -o remount,rw /
    chmod u+x /etc/sudoers
    nano /etc/sudoers
    

그 실수를 고치고 행복해 :)


@ eliah-kagan이 제안한 pkexec 솔루션이 더 쉬운 것처럼 보이지만 이것은 보편적입니다. 내 컴퓨터에는 pkexec가 설치되어 있지 않은 것으로 나타 났으며 sudo apt-get install pkexec가 어떻게 든 작동하지 않아 설치할 수 없었습니다.
running.t

또한이 접근법 내에서 visudo대신 사용 합니다 nano /etc/sudoers.
pa4080

7

sudoers파일 을 엉망으로 만들려면 다음을 수행해야합니다.

  • 복구 모드로 재부팅 (부팅 중에 이스케이프, grub 화면에서 복구 모드 옵션 선택)
  • '네트워킹 사용'옵션을 선택하십시오 (파일 시스템이 읽기 전용으로 마운트되지 않으면 알고 계십시오).
  • '루트 쉘로 드롭'옵션 선택
  • 실행 visudo하고 파일을 수정하십시오.
  • 일반 그럽 옵션으로 재부팅

출처 : -http : //mario.net.au/content/recover-etcsudoers-ubuntu-1204


안녕하세요, 기존 시스템의 파일 인 iptables를 제거합니까?
Shyamkkhadka

6

잘못된 것은 없습니다. #include sudoer.d 제거 #include sudoer.d는 아무런 차이가 없습니다.

그러나 구문 오류가 없는지 확인하십시오. 나는 같은 문제가 있었지만 수정하는 데 몇 시간을 소비했으며 구문 오류라는 것을 알았습니다. 설명서를 참조하여 올바르게 작성하십시오.

예를 들어 사용자 이름이 다음과 같다고 가정하십시오.

 dolly ALL = (ALL) ALL NO PASSWD: ALL

올바른 구문은

dolly ALL = (ALL) ALL //give permission to everything, not good

또는

dolly ALL=(ALL) NOPASSWD:/usr/bin/thurderbird //good, give specific permission

도움이 되었기를 바랍니다


구문 오류가 없는지 확인하는 것보다 나은 방법은 visudo이러한 파일을 편집 할 때 항상 사용 하는 것입니다. 이렇게하면 파일을 수정하기 전에 구문 오류가 없는지 확인할 수 있습니다. visudo는 단지 편집을위한 것이 아니라 /etc/sudoers파일을 만들고 편집 할 것입니다 /etc/sudoers.d. 또한 원하는 텍스트 편집기에서 작동합니다. 자세한 내용 은 맨 페이지 를 참조하십시오.
Eliah Kagan

특정 권한을 부여하는 경우 thunderbird, 루트로 실행 하면 충분히 복잡한 앱 ( 루트로 실행해서는 안됨 포함)이 사용자에게 전체 시스템 액세스 권한을 효과적으로 부여 하기 때문에 매우 간단한 명령 / 앱에만 유용 합니다. 겉으로는 단순한 기능조차도 완전한 루트 액세스를 가능하게합니다. 예를 들어, 임의의 위치에 파일을 루트로 저장할 수있는 프로그램을 실행할 수있는 사용자는 전체 루트 액세스 권한을 얻을 수 있습니다 (자체를 설치할 수 /etc/sudoers있거나 구문 제한으로 인해 자체적으로 설치할 수 있음 /etc/crontab).
Eliah Kagan

3

복구 모드를 실행하고 이것을 입력하십시오

chown -R root : 루트 /etc/sudoers.d
chmod u = rwx, g = rx, o = rx /etc/sudoers.d/
chmod u = r, g = r, o = /etc/sudoers.d/*

그룹과 사용자 루트 만이 읽기 권한을 가져야합니다


3

+ ( 1에서 6까지) 를 사용하여 tty콘솔에서 루트로 로그인 하고 실행할 수도 있습니다.CtrlFnFnvisudo


2

grub에서도 부트 항목을 편집 할 수 있습니다.

PC를 재부팅하고 grub이 표시 될 때까지 기다리십시오. 그런 다음 "Ubuntu"항목에서 "e"를 눌러 편집하십시오.

"linux ="또는 "kernel ="이있는 행을 찾아 해당 행의 끝에 "단일"을 추가하십시오.

그런 다음 F10을 눌러이 임시 수정 된 부팅 항목을 부팅하십시오. 루트 권한이있는 쉘 (GUI 제외)을 제공하고 s.th로 sudoers 파일을 편집 할 수 있습니다. nano / etc / sudoers와 같이 이전 상태로 돌아갑니다.

그런 다음 재부팅하고 완료하십시오.


2
pkexec visudo

그런 다음 실수를 되 돌리십시오


1
pkexec를 사용할 필요가 없습니다
Braiam

@Braiam visudo은 루트로 실행해야합니다. 경우 sudo작동하지 않는, pkexec때로는 않습니다. 이것은 내 이전 답변으로 덮여 있지만 ... 정답 visudo은 자체적으로 (루트로 실행되지 않을 때) 작동하지 않으며 권장 사항이 다른 답변과 상당히 겹치는 경우에도 정확하고 간단한 답변에 가치가있을 수 있습니다. 물론, 복구 모드로 들어가면 루트 셸이며 다음 과 같은 명령에는 필요 하지 sudo않습니다 . 어쩌면 그것은 당신이 의미하는 것입니다 ...visudopkexec
Eliah Kagan

0

VirtualBox에서 실행되는 Ubuntu 16.04 (차이를 만들 수는 없음)에서 위의 방법이 작동하지 않습니다 (파일 끝의 잘못된 행). 일한 것은 :

  1. VirtualBox를 다시 시작하십시오.
  2. 콘솔에서 사용자 이름과 비밀번호를 요구할 때까지 정상적으로 부팅하십시오.
  3. 사용자 이름으로 정상적으로 로그인
  4. 그런 다음 콘솔에 들어가면 (상자가 GUI로 부팅되지 않는 경우) 명령 su -을 내린 후 자신의 사용자 이름 암호를 지정하십시오.
  5. 지금에 끝나야 root@ubuntu-xenial:~#(가) 경우, 프롬프트 /etc/sudoers너무 깨지거나 비어 있습니다. 이 경우 어떤 일이 발생할지 잘 모르겠습니다.
  6. 그런 다음 간단히 visudo파일을 실행 하고 수정할 수 있습니다.
  7. 그런 다음 Ctrl + X수정 된 버퍼를 저장하라는 메시지가 표시됩니다. 보도 YEnter
  8. 상자를 다시 시작하면 지금 작동합니다.

경우 당신이 /etc/sudoers비어 있거나 뭔가가, 그리고 당신이 그것을 편집 할 수 있습니다, 여기에 광산의 내용이다 :

Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

root ALL=(ALL:ALL) ALL

%admin ALL=(ALL) ALL

%sudo ALL=(ALL:ALL) ALL

4 단계는 의미가 없으며 루트 암호가 일반 사용자와 동일한 경우에만 작동합니다.
alfred

로컬 VM에서 매우 일반적입니다.
Juha Untinen

0

모범 사례 : 백업 터미널 창에서 실행하십시오 sudo su. 다른 termianl에서 visudo 또는 sudo vim / etc / sudoers를 실행하십시오. 문제가 발생하면 터미널 1로 돌아가서 파일을 수정하십시오. 하나의 터미널에서 sudo su이전 visudo에 실행하지 않는 이유는 무엇입니까? 이것도 잘 작동하지만, 알기 전에 터미널을 닫을 위험이 높습니다.


-1

더 간단한 해결책이 있습니다. 재부팅, 복구 모드 또는 pkgexec( pkgexec작동하지 않았으며 사용해야하는 이유 또는 방법을 모른 채)하지 않고 간단하게 수행하십시오.

su root # switch to root user, without using sudo (which is broken at this point)
your_favorite_editor /etc/sudoers # e.g. nano

그런 다음 구문 오류를 수정하십시오!


공감 비란 무엇입니까? 나를 위해 완벽하게 일했습니다.
rien333
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.