sudo 명령을 실행하는 데 시간이 오래 걸리는 이유는 무엇입니까?


83

지난 몇 개월 동안 Linux (Fedora 10, 11)를 집어 들었습니다 (그리고 컴퓨터를 다시 발견하는 것과 마찬가지로 많은 것을 배울 것입니다).

아래와 같이 / etc / sudoers 파일의 마지막 줄에 사용자를 추가하여 sudo 명령을 실행할 때 비밀번호를 묻지 않습니다.

MyUserName ALL = (ALL) NOPASSWD : ALL

이제 sudo를 사용하여 명령을 실행할 때마다 실제로 작업을 수행하기 전에 눈에 띄는 시간이 일시 중지됩니다 (~ 10 초). 왜 이것이 될 수 있으며 어떻게 해결할 수 있습니까? Fedora 11 x86 64에서 Sudo 버전 1.7.1을 실행하고 있습니다.


기술적으로 이것은 스크립트를 편집하는 것으로 간주됩니다. 스크립트는 프로그램이 아닌가?

6
NOPASSWD : 보안 위험으로 간주되며 우선 sudo를 사용해야한다는 목적을 상실합니다.

나는 그것을 구입할 수 있지만, 왜 그렇게 오래 걸리는지는 여전히 문제입니다.

2
이 기계는 사용자와 인증을 어디서 얻습니까? 아마도 Kerberos를 사용하는 LDAP?
wzzrd

답변:


123

나는 SO에 대해이 질문을했고 여기로 옮겨졌습니다. 그것은 더 이상 질문을 소유 한 것처럼 편집하거나 정답을 받아 들일 수있는 능력이 없다고 말했지만, 이것이 왜 그리고 어떻게 해결해야하는 진정한 이유 인 것으로 밝혀졌습니다.

여기에 사용자 "rohandhruva"가 있습니다. 정답입니다.

설치 과정에서 호스트 이름을 변경하면 이런 일이 발생합니다.

문제를 해결하려면 / etc / hosts 파일을 편집하십시오.

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 <ADD_YOURS_HERE> 
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 <ADD_YOURS_HERE>

3
맞습니다. Fedora와 같은 배포판이 설치시 호스트 이름을 변경하면 / etc / hosts를 편집하지 않지만 어떤 것이라도 놀랍다는 것은 놀라운 일입니다. 그것은 당신을위한 오픈 소스입니다!
dimo414

이것은 느린 sudo 사용법을 고쳤습니다. 감사합니다! / etc / hostname을 편집했으며 / etc / hosts 파일을 편집하는 것을 잊었습니다.
Joe

2
호스트 이름을 127.0.0.1 또는 :: 1 행에 추가하면 특정 서버 관련 소프트웨어가 올바른 호스트 이름 / IP / 인터페이스에 바인딩 될 수 있습니다. 그러한 예 중 하나는 Cloudera Manager이며, hadoop 서비스는 잘못된 호스트 이름을 가져오고 CM을 혼동합니다. 모두 CM이 localhost로 해석되기 때문입니다. 가능한 해결책은 아래의 다른 답변을 읽는 것이 좋습니다. 다른 컴퓨터가 연결되어 있지 않은 독립형 워크 스테이션에 문제가 발생하거나 발생하지 않을 수 있습니다.
ddcruver

1
/etc/nsswitch.conf 일 수도 있습니다 (유사한 이유로). 내 "hosts : dns files"로 설정되어 시간이 오래 걸리는 DNS 서버에서 내 호스트 이름을 찾고있었습니다. "hosts : files dns"로 변경 했으므로 이제 / etc / hosts를 먼저 살펴 보겠습니다. 이 답변에 감사드립니다. 이로 인해 nsswitch.conf를 볼 수있었습니다!
Alan Porter

1
이것이 해결책이라는 것은 우스운 일입니다. 왜 세상에서 sudo명령이 작동하기 위해 호스트 이름을 봐야합니까? 내 호스트 이름은 무엇과 관련이 sudo echo hello있습니까? 어쨌든, 답변 주셔서 감사합니다
smac89

24

syslog 데몬이 올바르게 작동하는지 확인하십시오. 이로 인해 문제가 발생했습니다.

다음 명령을 실행하십시오

logger 'Hello world'
  1. 적절한 시간 내에 명령이 반환됩니까?

  2. 'Hello world'가에 표시 /var/log/syslog됩니까?

그렇지 않은 경우 syslog 디먼이 충돌 한 것입니다. 다시 시작하면 문제가 해결됩니다.


9
놀랍게도 그것은 저에게 문제였습니다. 누가 생각했을까요? 나를위한 해결책은 syslog를 다시 시작하는 것이 었습니다. service rsyslog restart
MikeKulls

여기도 마찬가지입니다. service rsyslog restart느린 sudo 명령을 수정했습니다.
Pedro Cordeiro

놀랍게도 그것은 저에게 문제였습니다. 그 전에는 서버에 대한 전체 요청이 너무 느립니다. 왜 그런지 알고 싶어?
michael wang

10

네트워크 마운트에서 읽을 파일 / 디렉토리 중 하나입니까 아니면 느린 USB 장치에서 읽기를 트리거합니까? strace를 시도하고 느린 곳을보십시오. 너무 빨리지나 가면

sudo strace -r -o trace.log sudo echo hi

각 라인은 이전 syscall을 시작한 후 걸린 시간으로 시작합니다.

(초기 sudo가 필요한 것 같습니다. 결과가 얼마나 혼란 스러울 지 모르겠습니다.)


고마워. 이것은 HDD에 있으며 USB 또는 네트워크 드라이브가 없습니다.

@ Cuga : strace에서 무엇을 배웠습니까?

@ oligofren : 당신은 sudo strace를 수행해야합니다
ysth

8

나는 최근에 같은 문제가 있음을 발견했다. sudo 지연이 없었고 갑자기 10-20 초 정도 지연되었습니다. 다음을 사용하여 특정 문제를 확인했습니다.

 1. chmod u+s /usr/sbin/strace  (as the root user)

자신으로서 :

 1. sudo -K
 2. strace sudo /bin/tcsh

그런 다음 시스템 호출이 걸려있는 위치를 찾으십시오.

내 경우에는 DNS 번역에 걸려있는 것으로 나타났습니다. 내 목록에있는 DNSen 중 하나 /etc/resolv.conf가 매우 흐릿하거나 잘못되었습니다. 그래서 나는 결의 순서를 바꾸었고 똥 일이 다시 빨리 일했습니다.


최고의 답변입니다. DBus Broker가 네트워크 연결 끊김에서 충돌하고 sudo / KDE가 연결 시간을 초과한다는 것을 알았습니다. 감사!
PSSGCSim

고마워, 이것은 나를 도왔다. 또한 hosts/etc/nsswitch.conf에서 이전 줄 변경을 취소해야했습니다 . "resolve dns"를 hosts값 의 접두사로 추가했습니다 . 이 접두사를 제거하면 sudo가 다시 빠릅니다.
mnieber

5

Fedora는 확실하지 않지만 sudo가 로그인 한 위치를 확인하는 다른 시스템을 사용했습니다. DNS가 제대로 설정되지 않으면 시간이 오래 걸릴 수 있습니다. 이것은 시스템에 SSH를 연결할 때도 볼 수 있습니다. 프롬프트가 표시 되려면 시간이 걸립니다.


5

나는 같은 문제를 겪었고 /var/log/auth.log와 syslog에 오류가 있는지 확인했다. 내 LDAP 서버에 연결할 수 없어 모든 것이 느려졌습니다.

더 이상 LDAP 기반 인증을 사용하지 않았으므로 /etc/nsswitch.conf에서 "ldap"참조를 모두 제거했습니다.

그 이후로 모든 것이 다시 매력처럼 작동합니다.


다섯 살짜리 질문에 왜 관련이없는 답변 (OP가 LDAP을 사용하지 않았다)을 게시합니까?
스벤

7
누구에게나 도움이 될 수 있기 때문입니다. 나는 여기에 언급 된 모든 것을 점검했지만 아무것도 도움이되지 못했습니다. 다른 사람은 느리고 응답하지 않는 sudo 명령의 근본 원인으로 LDAP 연결 문제가 있는지 확인하여 내 대답으로 올바른 방향을 찾는 데 집중할 수 있습니다. 표지 뒤의 무언가에 결함이있어 사용자가 직접 볼 수 없다는 점에서 DNS 관련 답변과 관련이 있습니다. 이 사이트는 단일 질문 / 응답 유형의 웹 사이트가 아니라 일반적인 지식의 원천으로 간주됩니다. 관련 지식을 수집하는 것입니다.
Sakuraba

6
또한 당신은 내 지옥에서 누가 내 도움을 믿지 않습니까? 이 사이트는 사람들이 공감하지 않기 때문에 지식 공유가 장려되기 때문에 작동합니다. 마음에 들지 않으면 무시해도됩니다.
Sakuraba

5

경우에 따라 /etc/sysconfig/ network 에 구성된 호스트 이름 이 /etc/hosts파일에 존재하지 않는 것을 발견했습니다 . 따라서 위에서 언급 한 파일을 추가하면 파일이 즉시 열립니다.


3

비슷한 문제가 있었고 호스트 이름 (예 : mybox)과 호스트 이름 명령 (mybox.mydomain.com)의 전체 출력을 모두 배치하여 문제를 해결했습니다. 이것은 바로 그것을 정리했다. 2 분 후에 / etc / hosts를 열어 즉시 액세스 할 수 있습니다.


3

SELinux 사례

동일한 sudo 명령이 디먼에서만 느리고 명령 행에서 빠르면 SELinux 에 의한 것입니다. (SELinux = NSA Security-Enhanced Linux 커널 모듈. Fedora에서 기본적으로 활성화되어 있습니다.)

일반적인 경우는 http 서버와 서버 관리를위한 특수 스크립트입니다 sudoers.

apache ALL=(root_or_user) NOPASSWD: /full/path/the_safe_command

이 경우 감사 로그에 SELinux에 대한 정보가보고되지 않는 것이 일반적 ausearch -m avc -ts today이지만으로 강제 실행을 일시적으로 비활성화하면 스크립트가 빠르게 진행됩니다 setenforce 0. (그리고 다시 활성화 setenforce 1)

시스템 로그 (journalcrl)의 유일한 관련 메시지는 25 초 후에 발생한 것입니다.

... sudo [...] pam_systemd (sudo : session) : 세션 생성 실패 : 응답을받지 못했습니다. 가능한 원인은 다음과 같습니다. 원격 애플리케이션이 응답을 보내지 않았거나, 메시지 버스 보안 정책이 응답을 차단했거나, 응답 시간이 만료되었거나, 네트워크 연결이 끊어졌습니다.
... sudo [...] : pam_unix (sudo : session) : (uid = 0)에 의해 사용자 루트 용으로 열린 세션

모든 자동 "dont-audit"SElinux 메시지 로깅은에 의해 활성화 semodule -DB및 비활성화 될 수 있습니다 semodule -B.
(이 경우 곧 SELinux 정책 모듈을 작성 하거나이 답변 의 방법을 사용할 수 있기를 바랍니다.)


이 정보에 감사드립니다. 여기에있는 정보에서 필자는 범인 의 가능성 (지문 인증) 을 기록한 관련 기사 를 찾을 수있었습니다 fprintd. 나를 위해 문제를 제거 fprintd하고 fprintd-pam해결했습니다.
KevinO

@KevinO 솔루션을 찾는 데 도움을 주셔서 감사합니다. 그러나 나는 내 문제가 매우 구체적이며 질문에 대한 나의 기여는 SELinux에 대한 의심을 진단하거나 배제하는 방법 일뿐이라는 것을 알고있었습니다.
hynekcer 2013 년

나는 절대적으로 +1을 주었다! 솔루션으로 이끈 것은 메시지 버스였습니다. 나는 sudo를 천천히 두 번 보았지만 당신의 것이 내가 필요한 단서였습니다.
KevinO

1

sudoers내가 가지고 있는 샘플 파일을 보면 NOPASSWD:비트 뒤에 공백이 있어야한다고 생각합니다 .


공간을 추가했지만 여전히 지연이 있습니다. 제안을위한 Thx.


1

호스트 문제를 해결 한 후 nscd와 같은 DNS 캐싱 응용 프로그램을 실행중인 경우 잘못된 DNS 캐시를 지우십시오.

/etc/init.d/nscd force-reload

1

나를 위해 krb5-user / config / locales가 설치되었습니다. 나는 /var/log/auth.log를 조사함으로써 이것을 알아 차렸다. apt-get remove를 사용하여 해당 패키지를 제거하면 문제가 해결되었습니다. kerberos (pam_krb5)가 필요한 컴퓨터에있는 경우 해당 패키지를 제거하지 마십시오.


0

인증에 LDAP를 사용하고 있습니까?

그렇다면 바인드 정책 소프트를 사용하고 싶을 것입니다. /etc/ldap/ldap.conf (또는 /etc/ldap.conf)에서 :

bind_policy soft

0

인증 체인에 시간 초과가있는 것 같습니다. sudo가 인증을 시도하고 병목 현상을 감시하는 방법을 확인하십시오.


0

시스템 케이스

저에게는 시스템에 메모리가 부족하여 많은 프로세스가 중단되었습니다. 내 시스템은 systemd 기반이며 그 안에 무언가가 충돌했습니다. 내가 한 모든 일을 기억하기는 어렵지만

  • systemctl status <any.service> 타임 아웃
  • 나는 sudo reboot(시스템 기반) 할 수 없었다

해결책

다시 시작하면 문제가 해결되었지만 나를 위해 일어났다. 여전히 메모리 / 충돌이없는 이유를 찾아야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.