사용자를 위한 다양한 수준의 비밀번호 보안을 설계하는 방법

사용자를 위한 다양한 수준의 비밀번호 보안을 설계하는 방법

PAM다중 레벨 비밀번호를 사용하여 로그인을 구현하기 위한 향상된 버전이 가능한지 궁금합니다 .

예를 들어, 저는 단지 1개의 비밀번호 대신 3개의 서로 다른 비밀번호를 연속으로 입력해야 하는 작업을 실행하고 싶습니다 sudo.

[user@hostname][/home]# sudo echo ok
[sudo] password 1 for user:
[sudo] password 2 for user:
[sudo] password 3 for user:
ok

답변1

ssh해결 방법으로 사용하는 것이 좋습니다 .

기본 아이디어

sudouser사용자 (명령 실행이 허용됨 sudo)와 중간 사용자를 생성한다고 가정합니다 middleman. 원래 사용자( john)도 명령을 middelman실행할 수 없습니다 sudo.

이제 by에 대한 모든 호출을 초기 명령을 실행하는 sudovia to의 john2단계 액세스로 대체합니다. ssh이 체인에 배치하는 중개자의 수에 따라 암호화 단계 수가 정의됩니다. 내 예에서는 다음 중 하나를 사용하겠습니다.johnmiddlemansudousersudo

누구 든지 해당 계정에 직접 su액세스하면 해당 계정의 비밀번호가 잠깁니다 . 비밀번호 없는 권한은 비밀번호 장벽을 추가하는 목적으로만 부여되고 존재합니다.sudousermiddlemansudousersudomiddleman

john비밀번호 없이 접근이 가능 하도록 설정한 뒤 , 비밀번호 RSA 키를 이용해 접근하도록 하겠습니다. 즉, 비밀번호는 RSA 키의 비밀번호가 됩니다. (그러므로 참고하세요: 각 중개자에게는 암호화 RSA 키가 필요합니다)sshmiddlemanmiddlemansudouser


1.sudoers sudouser파일에 추가

나는 당신이 이것을 알고 있다고 가정합니다. 그러나 완전성을 이유로 추가했습니다. /etc/sudoers다음 줄을 추가하여 비밀번호 없는 sudo 명령을 부여 합니다 visudo.

 sudouser ALL=(ALL) NOPASSWD: ALL

이제 이 사용자는 매우 위험한 사용자이므로 비밀번호(예 root: )를 비활성화해 보겠습니다.

 passwd -l sudouser

su암호화 단계를 건너뛰고 마지막 중개자를 직접 억제하기 위해 모든 중개자에 대해 동일한 작업을 수행합니다 .


2. SSH 키 쌍 생성

다시 정상작동합니다. 두 가지 모두 john에 대해 - 비밀번호 인증을 구현하려면 RSA 키에 대한 비밀번호가 있어야 합니다. 이는 필수는 아니지만 수행할 수 있습니다(아마도 이 목적으로 사용되는 특정 RSA 키에서만 다른 암호화 단계를 추가할 뿐입니다).middlemanssk-keygenmiddlemanjohn


ssh3. force 명령을 사용하여 -access를 설정합니다.

이제 재미있는 부분은 다음과 같습니다. force 명령을 사용하여 's john에 추가합니다 middleman. 즉, from 을 통해 액세스하면 this 및 this 명령만 실행됩니다.~/.ssh/authorized_keysmiddlemansshjohn

cat /home/middleman/.ssh/authorized_keys
command="ssh -t sudouser@localhost $SSH_ORIGINAL_COMMAND" <john's public key> john@localhost

따라서 첫 번째 단계(pass ) sudouser에서 지정한 명령을 전달하기 위해 SSH 세션을 직접 시작합니다.$SSH_ORIGINAL_COMMAND

john이것만 허용되며 localhost보안상의 이유로 다른 모든 액세스는 거부됩니다. command"...",no-port-forwarding,no-x11-forwarding,no-agent-forwarding보안 강화를 위해 -를 통해 전달 제한을 다시 추가할 수 있습니다 .

sudouser파일 의 경우 다음에서만 액세스가 authorized_keys허용됩니다 .middlemanlocalhost

cat /home/middleman/.ssh/authorized_keys
ssh-rsa <middleman's public key> middleman@localhost

이제 /etc/ssh/sshd_config액세스를 약간 잠그겠습니다.

Match User middleman,sudouser
    PasswordAuthentication no
    AuthenticationMethods publickey

따라서 RAS 공개 키와 파일에 지정된 필수 명령을 통해서만 접근 할 수 middleman있습니다 . 이전에 사용자 비밀번호를 잠갔기 때문에 설정이 중복될 수 있습니다.sudousersshauthorized_keysPasswordAuthentication no


4. 별칭sudo

이제 sudo명령을 다음으로 바꿔야 합니다.

ssh -t middleman@localhost "sudo <command>"

이를 위해 간단한 쉘 스크립트와 별칭을 사용하면 됩니다.

#sudo_alias_script.sh
#!/bin/bash
ssh -t middleman@localhost "sudo $@"

그리고 alias sudo='/home/john/.bin/sudo_alias_script.sh'


나는 두 개의 중개자를 통해 이것을 성공적으로 시도했습니다. 부피가 크지만 필요한 기능을 수행합니다. 일부 텍스트 출력을 원하는 경우 force 명령을 echo텍스트 스크립트로 바꾸고 다음 단계로 진행할 수 있습니다 ssh. 모든 것이 실제로 보안을 향상시키는지는 알 수 없습니다.

답변2

이것은 귀하의 질문에 대한 답변은 아니지만 보안을 강화하려면 로그인 및 sudo에 2단계 인증을 사용할 수 있습니다. 자세한 내용을 보려면 다음 웹사이트를 방문하세요.

https://www.linux.com/learn/how-set-2-factor-authentication-login-and-sudo

답변3

이는 보안을 강화하지 않습니다. 바라보다https://security.stackexchange.com/questions/89533/would-requiring-multiple-passwords-enhance-security그리고이중 암호화를 사용하면 무차별 대입 크래킹에 비해 비밀번호가 더 안전해 집니까?. 간단히 말해서, 같은 일을 더 많이 한다고 해서 안전이 향상되지는 않습니다. 이전에 했던 일이 좋았고 더 많은 일을 하는 것은 중복되거나, 이전에 한 일이 나빴고 두 번 해도 안전하지 않습니다. 더욱이 복잡성은 구현 오류의 위험을 증가시키고 사용자가 예상대로 행동할 가능성을 감소시키기 때문에 항상 보안의 적입니다. 따라서 보안이 향상되지 않는 경우 이를 수행하는 데 드는 비용은 안전에 해로울 수 있습니다. .

두 개의 비밀번호를 요구하는 것은 하나를 요구하는 것과 동일하지만 전반부를 먼저 입력하고 후반부를 입력합니다. 비밀번호를 분할하면 두 부분이 독립적으로 해독될 수 있으므로 더 쉽게 해독할 수 있습니다. 따라서 보안이 저하됩니다.

즉, 귀하가 요청한 작업이 완료될 수 있습니다.반복합니다. 이것은 나쁜 생각입니다. 그러나 발에 총을 쏘고 싶다면 다음 단계를 따르십시오. 기억하세요. 그렇다고 해서 더 빨리 달릴 수는 없습니다.

대부분의 Unix 변형에서는 인증이 다음을 통해 구성됩니다.폴리아크릴아미드. 비밀번호 인증을 처리하는 PAM 모듈은 다음과 같습니다.pam_unix. 다른 비밀번호 확인 모듈에 하나 이상의 호출을 추가할 수 있습니다.pam_pwdfile다른 비밀번호 데이터베이스를 쿼리합니다(참조:Linux에서 비밀번호 데이터베이스 파일(/etc/passwd)을 변경할 수 있습니까?).

하지만 다시 한 번 말씀드리지만 이렇게 하지 마세요.보안을 이해하지 못한다면 보안을 악화시키는 대신 시스템의 기본 설정을 사용하십시오.

관련 정보