비밀번호없이 sudo를 사용하여 애플리케이션을 실행하는 방법은 무엇입니까?


40

...하지만 관리자 권한이 필요한 응용 프로그램에 여전히 필요합니까?

다음을 허용하려면 :

$ apache2ctl restart
httpd not running, trying to start
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs

$ sudo !!
sudo apache2ctl restart             #no password asked
$                                   #works!

참고로 아마존의 e3 인스턴스 에서이 설정을 보았습니다.

어떤 생각?


이 포럼에서는 자주 사용하는 프로그램을 지정하기위한 별도의 파일 작성에 대해 자세히 설명하는 포럼에 대한 유용한 자습서 입니다. 보안상의 이유로 좋은 생각입니다.
Todd Partridge 'Gen2ly'5

답변:


51

sudoers 파일을 편집해야합니다. 성공하면 시스템의 보안 수준이 떨어지고 실패하면 sudo가 손상 될 수 있습니다. sudo visudovisudo가 오류를 검사하고 발견 된 경우 파일을 저장하지 않으므로 항상 sudoers 파일을로 편집하십시오 .

암호없이 루트로 실행할 수있는 모든 권한을 부여하는 것은 좋지 않습니다. 따라서 필요한 하나의 실행 파일 (apache2ctl) 만 통과 시키십시오. 파일 맨 아래에 다음을 추가하십시오.

YOURNAME ALL = NOPASSWD: /usr/bin/apache2ctl

원하는 경우 실행 파일 경로를 "ALL"로 바꾸면 완전한 암호없는 sudo를 얻을 수 있습니다.

YOURNAME을 사용자 이름으로 바꾸고 Ctrl+ X를 눌러 저장하고 종료하십시오. 오류가 발생하면 되돌 리거나 편집하거나 저장할 수 있습니다.

확인 : 당신은 실행 파일의 전체 경로를 사용하는 것이
즉. /usr/bin/apache2ctl그냥 대신 apache2ctl. 경로를 명시 적으로 지정하지 않으면 sudo는 사용자의 현재 경로에서 apachectl이라는 프로그램을 루트로 실행할 수 있기 때문에 중요합니다.


3
참고 %YOURNAME받는 권한 줄 것 그룹 모든 일반 사용자가 우분투 시스템에서 같은 이름의 그룹을 가지고 있기 때문에 일반적으로 문제가되지 않습니다 사용자, 같은 이름을. 사용자에게 권한을 부여하려면 YOURNAME%없이 지정 하십시오.
Daniel Werner

더 구조적인 방법이 있습니까? (실행 가능한 일부 기능 만 해당)
3pic

1
이전 게시물이지만 sudoers의 항목을 특정 호스트 이름 (가능한 경우)으로 제한하고 인수 o를 인수가없는 (다음에 오는 apache2ctl) 인수로 제한하여 분명히 대답 할 것 YOURNAME YOUR-HOSTNAME = NOPASSWD: /usr/bin/apache2ctl <specific arg | "">입니다. --- 모든 경우 man 5 sudoers에 참조가 있습니다.
Cbhihe

25

sudo는 매우 강력하고 멋진 작업을 수행하도록 구성 할 수 있기 때문에이 질문에 대한 실제 답변은 복잡 할 수 있습니다. 이에 대해서는 설명서에 자세히 설명되어 있습니다 .

짧은 답변은 sudo visudo터미널에서 실행 됩니다. 처음으로 visudo를 실행 한 경우 원하는 편집기를 묻습니다. nano 는 일반적으로 사용하기 가장 쉬운 것으로 생각되지만 가장 편하고 익숙한 편집기를 선택하십시오. 액세스 권한을 부여 할 사람을 결정해야합니다. 그것은 ALL모든 사람 ( 매우 나쁜 생각) , 사용자 또는 시스템 그룹 일 수 있습니다. 그룹은 앞에 % 부호가 붙습니다. 예를 들어, steroid_users모든 명령에 비밀번호없이 그룹의 모든 사용자에게 루트 권한을 부여하려면 다음을 추가하십시오.

%steroid_users ALL=(ALL) NOPASSWD: ALL

파일의 끝까지 파일을 종료하고 저장하십시오. 모든 것이 잘되고 steroid_users 그룹의 구성원이라면 sudo *some-command*암호를 입력하지 않아도 문제를 해결할 수 있습니다.

유념가 로그인하는 동안 터미널에 액세스 할 수있는 사람 - 또는 당신이 키 기반 인증 또는 SSH를 설치있는 경우 (더 나쁜) 당신을 완전하고 자유롭게 접근 - 설정 한 비밀번호를 무료 세션 로그인 전체를 체계. 시스템에 여러 명의 사용자가 있거나 이것이 파일 서버 인 경우 루트가 무엇이든 할 수 있으므로 모든 사용자 파일이 위험에 노출 될 수 있습니다 !

또한 실수를하면 visudo가 출력하고 오류 메시지를 표시하며 파일 변경 사항을 저장하지 않습니다. 이렇게하면 sudo가 완전히 깨지는 것을 방지 할 수 있습니다. 당신은 정말로 문서를 읽어야합니다 . Sudo는 전체 시스템을 노출하지 않고도 사용자가 작업을 수행 할 수있는 충분한 액세스 권한을 제공하도록 설계되었습니다. 특정 명령에 대해서만 암호를 사용하지 않고 액세스하는 것이 유리할 수 있습니다.

이게 도움이 되길 바란다.


그것은 효과 가 있었고 나는 이것을 가지고 askubuntu.com/questions/192050/ 에서 "sudo service sudo restart"를 사용 했다. 그리고 나는이 모든 것을 나의 활동적인 Ubuntu 세션에서 사용할 수 있었다. 대박!
Patrick

5

사용자 또는 그룹에 허용되는 명령 목록보다 먼저 NOPASSWD를 추가하려면 '/ etc / sudoers'파일을 편집해야합니다 ( 'visudo'명령이 있습니다.). 사용자가 'admin'그룹에있는 경우 다음이 필요합니다.

%admin ALL=(ALL) NOPASSWD: ALL

https://help.ubuntu.com/community/Sudoers , btw를 확인 하십시오 .


3

nopasswd 플래그를 사용자 목록에 추가해야하지만 모든 암호 요청 질문이 제거되는 것은 아닙니다. 첫 번째 것만 묻습니다.

  1. sudoers 편집 : sudo visudo(sudo를 사용해야합니다. 이것은 관리자 파일입니다.)
  2. Admin Line 다음에 nopasswd 플래그를 사용하여 사용자를 추가하십시오 (종료). 예를 들어 :
    cyrex ALL = NOPASSWD: ALL또는cyrex ALL = (ALL) NOPASSWD: ALL

2
sudo visudo
%<GROUP> ALL = NOPASSWD: apache2ctl

또는

sudo visudo
%<GROUP> ALL = NOPASSWD: /etc/init.d/apache2

나는 이것이 할 것이라고 생각한다.

그러나 sudo의 비밀번호를 제거 할 때는주의하십시오.


2
보안상의 이유로 첫 번째 예에서 절대 경로를 지정해야합니다. 파렴치한 사용자는 $ PATH를 변경하고 규정되지 않은 명령 이름으로 루트 액세스를 훔칠 수 있습니다.
bgvaughan

0

이제 간단한 답변입니다! 아무것도 엉망으로 만들거나 설치를 퍼지하는 방법이 없습니다.

비밀번호를 몇 번 입력하면 다시 입력 할 필요가 없습니다! 이렇게하면 "root"그룹에 로컬 관리자 계정을 추가 한 다음 전체 그룹 "root"수퍼 유저 권한을 허용하는 템플릿에서 주석을 해제 할 수 있습니다. 이 게시물의 뒷부분에서이 절차에 대한 보안 문제 / 해결책을 읽을 수 있습니다.

% username &는 사용자 이름의 전역 변수입니다 (원하는 사용자 이름으로 바꾸십시오).

1 단계 : 터미널 창을 연 다음 " sudo usermod -a -G root %username%" 를 입력하십시오 .

2 단계 : 복사 / 붙여 넣기 ...

sudo sed -i 's/# auth       sufficient pam_wheel.so trust/auth       sufficient pam_wheel.so trust/g' /etc/pam.d/su`

2 단계 OR 유형

sudo nano /etc/pam.d/su`

19 행으로 이동하여 "#"을 제거하십시오 # auth sufficient pam_wheel.so trust(일부 경우 다른 행 번호 일 수 있음)

* 첫 번째 명령은 % username %을 "root"그룹에 추가합니다

두 번째 / 세 번째 명령을 사용하면 "root"그룹의 모든 구성원이 암호없이 수퍼 유저가 될 수 있으며 인증에 대한 "root"su 권한 만 허용됩니다.


미주 :

엉망으로하지 마십시오 /etc/sudoers... 'su'인증을 수행 해야하는 많은 확인 / 균형이 있습니다. 수퍼 유저 인증은 다른 모든 로그인 인증과 동일한 pam.d 절차를 사용합니다. "/etc/security/access.conf"에는 tcp / ip (192.168.0.1) 통신 및 텔넷 서비스 (tty1 & tty2 & tty3 ... etc)를 통한 액세스 제어 레이아웃이 있습니다. 이는 전송 프로토콜을 통해 애플리케이션별로보다 정밀한 필터링을 허용합니다. 안전이 우려되는 경우, 방을 나갈 때 실제로 컴퓨터를 만지는 사람과 비교하여 원격 / 코드 위협에 대해주의를 기울여야합니다 !!!

편집증을위한 음식 (검토에 이것을 입력하지 마십시오) :

sudo sed -i 's/#-:ALL EXCEPT (wheel) shutdown sync:LOCAL/-:ALL EXCEPT (wheel) shutdown sync:LOCAL/g' /etc/security/access.conf

^ 이것은 시스템 또는 루트의 구성원이 아닌 사람의 콘솔 액세스를 차단합니다. 때때로 프로그램은 악용되는 사용자 이름 / 그룹을 설치합니다!


2
보안 전문가는 아니지만 직관적으로 들릴 수 있습니다. 특정 응용 프로그램에 대해 sudo를 정제하는 "복잡성"을 피하기 위해 단일 사용자 가 암호없이 특정 응용 프로그램 을 실행할 수 있도록 전체 그룹 에 대한 암호를 비활성화 하고 있습니까? 그리고이 모든 것을 공용 서버에서? 스크립트가 기본 생존 본능을 비활성화 했습니까? 보안은 DEPLEX BY DESIGN입니다. 양파 같아요. 그것은 층을 가지고 울고 있습니다 ... 손상된 서버의 데이터 손실은 방정식의 일부일뿐입니다. 시스템으로부터의 해커 스프링 보드 공격도 마찬가지로 심각하지만 간과됩니다
hmayag

2
직관적이고 반대되는 상식입니다. 쿠키가 하나만 필요한 사용자를 위해 전체 쿠키 병을 여는 것은 무책임합니다. sudoers 목록에 사용자를 추가하고 sudoers 파일 / 파일을 편집하지 않고 비밀번호를 입력 할 필요가 없습니다. "어린이에게 권총이 안전하지 않다면 캐논을주지 마십시오." –me
John
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.