잘못된 '/ 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. 일반적으로 실행하는 비 그래픽 명령 sudo은 pkexec대신 실행할 수 있습니다 .

(시스템 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수정 된 버퍼를 저장하라는 메시지가 표시됩니다. 보도 Y및Enter
  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.