sudo
권한이 있는 사용자로서 로그인할 때 사용하는 다른 비밀번호로 비밀번호를 설정해 보았습니다 .
몇 가지 조사를 해보았으나 답을 찾지 못했습니다. sudo
이러한 구성이 지원됩니까?
비밀번호를 잊어버리면 모든 것을 잃게 됩니다. 누군가가 root
동일한 비밀번호로 로그인하여 자신을 홍보할 수 있습니다.
sudo
root
발신자의 비밀번호( ) 대신 비밀번호를 물어보는 옵션이 있지만 rootpw
, root
비밀번호를 공유하는 것은 절대 옵션이 아니기 때문에 설정해 놓았습니다 sudo
.
과거에 해본 적이 config 2FA
있어서 잘 작동했지만 자동화라는 목표를 달성하지 못했습니다. 예를 들어 스크립트를 사용하여 12개의 서버에서 권한 있는 명령을 실행하려는 경우 expect
add를 사용하면 2FA
이를 수행할 수 없습니다.
sudo
내가 찾은 가장 가까운 해결책은 SSH 개인 키만 허용하고 (로그인) 비밀번호와 다른 키로 비밀번호를 설정하는 것입니다. 그래도 긴급상황에 해당 키가 없으면 컴퓨터로 로그인을 할 수 없기 때문에 별로 편하지는 않습니다.
답변1
사용자 비밀번호 대신 루트 비밀번호를 묻는 메시지를 표시하려면 에 몇 가지 옵션을 입력하면 됩니다 /etc/sudoers
. rootpw
특히 루트 비밀번호를 입력하라는 메시지가 표시됩니다. 예 runaspw
, targetpw
그렇습니다. 자세한 내용은 sudoers(5) 맨페이지를 참조하세요.
그렇지 않으면 sudo는 다른 모든 것과 마찬가지로 PAM을 통해 인증합니다. PAM은 애플리케이션별 구성을 지원합니다. Sudo의 구성은 (적어도 내 Debian 시스템에서는) /etc/pam.d/sudo
다음과 같습니다.
$ cat sudo
#%PAM-1.0
@include common-auth
@include common-account
@include common-session-noninteractive
즉, 기본적으로 시스템의 다른 모든 것과 마찬가지로 인증됩니다. 해당 행을 변경 @include common-auth
하고 PAM(및 sudo)이 대체 비밀번호 소스를 사용하도록 할 수 있습니다. common-auth에서 주석 처리되지 않은 줄은 다음과 같습니다(기본적으로 LDAP 등을 사용하는 경우에는 달라집니다).
auth [success=1 default=ignore] pam_unix.so nullok_secure
auth requisite pam_deny.so
auth required pam_permit.so
pam_userdb.so
대신 예를 사용하여 pam_unix.so
Berkeley DB 데이터베이스에 대체 비밀번호를 저장할 수 있습니다 .
예
나는 디렉토리 /var/local/sudopass
, 소유자/그룹 root:shadow
, 스키마를 만들었습니다 2750
. 그 안에 비밀번호 데이터베이스 파일을 만들었습니다 db5.1_load
(Debian Wheezy에서 사용되는 Berkeley DB 버전입니다).
#마스크 0027 # db5.1_load -h /var/local/sudopass -t hash -T passwd.db 안소니 WMaEFvCFEFplI ^D
해시는 mkpasswd -m des
비밀번호 "password"를 사용하여 생성됩니다. 매우 안전! (불행히도 pam_userdb는 crypt(3)
고대 해시보다 더 나은 것을 지원하지 않는 것 같습니다).
이제 /etc/pam.d/sudo
해당 @include common-auth
줄을 편집하고 삭제한 후 제자리에 넣으세요.
auth [success=1 default=ignore] pam_userdb.so crypt=crypt db=/var/local/sudopass/passwd
auth requisite pam_deny.so
auth required pam_permit.so
pam_userdb는 .db
전달된 데이터베이스에 확장 기능을 추가하므로 이를 꺼야 합니다 .db
.
~에 따르면데니사우어존재하다코멘트/etc/pam.d/sudo-i
, 동일한 수정 작업을 수행해야 할 수도 있습니다.
password
이제 sudo의 경우 실제 로그인 비밀번호 대신 다음을 사용해야 합니다 .
앤서니 @sudotest:~$ sudo -K anthony@sudotest:~$ sudo echo -e '\nit 작업' [sudo] Anthony의 비밀번호:passwordRETURN 효율적인
답변2
Redhat/Centos의 경우 이 요구 사항은 다음 단계를 통해 달성할 수 있습니다.
맞춤 사용자를 생성하고 다음을 전달합니다.
# db_load -t hash -T /usr/local/etc/passwd.db
user
pass
^d
sudo pam.d 파일을 다음과 같이 편집합니다.
$ cat /etc/pam.d/sudo
auth required pam_userdb.so db=/usr/local/etc/passwd
account required pam_userdb.so db=/usr/local/etc/passwd
password include system-auth
session optional pam_keyinit.so revoke
session required pam_limits.so
특정 사용자/그룹만 이 사용자 지정 방법을 통해 인증해야 하고 다른 사용자/그룹은 여전히 일반 시스템 인증 방법을 통해 인증할 수 있도록 구성하는 방법을 찾고 있습니다. 누구든지 나에게 조언을 해줄 수 있습니까?
답변3
나는 sudo가 그러한 설정을 지원하지 않는다고 생각합니다. sudo 비밀번호 프롬프트의 목적은 sudo 명령을 실행하는 사람이 로그인한 사람과 동일한지 확인하는 것이며, 가장 간단한 방법은 현재 로그인한 사용자에게 재인증을 요구하는 것입니다.
즉, sudo 비밀번호 프롬프트의 목적은 다음과 같습니다.아니요설립하다권한즉, 확립하다신원. 설정된 ID와 sudo 구성을 기반으로 해당 사용자에게 필요한 권한이나 액세스 권한이 있는지 여부를 판단할 수 있습니다.
답변4
이를 테스트하고 세부 사항을 해결할 수 있는 시스템에 즉시 액세스할 수는 없지만 다음과 같은 아이디어가 있습니다.
- (일반 로그인 계정은 이라고 가정합니다
shau
.) - 두 번째 계정 만들기:
shau2
. (당신이 와 동일한 UID를 갖기를 원하는지는 잘 모르겠습니다shau
.) shau2
sudo 권한을 가지려면 NOPASSWD로 구성하세요 .- 작업을 수행하려면 별칭이나 쉘 스크립트를 설정하십시오
su shau2 -c sudo "$@"
.shau2
비밀번호를 요청해야 합니다 . 올바르게 입력하면 실행됩니다sudo
(shau2
비밀번호 필요 없음). - sudo 권한을 제거했습니다
shau
.
안타깝게도 sudo 권한이 있는 각 사용자에 대해 이 작업을 반복해야 합니다.