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에 대한 모든 호출을 초기 명령을 실행하는 sudo
via to의 john
2단계 액세스로 대체합니다. ssh
이 체인에 배치하는 중개자의 수에 따라 암호화 단계 수가 정의됩니다. 내 예에서는 다음 중 하나를 사용하겠습니다.john
middleman
sudouser
sudo
누구 든지 해당 계정에 직접 su
액세스하면 해당 계정의 비밀번호가 잠깁니다 . 비밀번호 없는 권한은 비밀번호 장벽을 추가하는 목적으로만 부여되고 존재합니다.sudouser
middleman
sudouser
sudo
middleman
john
비밀번호 없이 접근이 가능 하도록 설정한 뒤 , 비밀번호 RSA 키를 이용해 접근하도록 하겠습니다. 즉, 비밀번호는 RSA 키의 비밀번호가 됩니다. (그러므로 참고하세요: 각 중개자에게는 암호화 RSA 키가 필요합니다)ssh
middleman
middleman
sudouser
1.sudoers sudouser
파일에 추가
나는 당신이 이것을 알고 있다고 가정합니다. 그러나 완전성을 이유로 추가했습니다. /etc/sudoers
다음 줄을 추가하여 비밀번호 없는 sudo 명령을 부여 합니다 visudo
.
sudouser ALL=(ALL) NOPASSWD: ALL
이제 이 사용자는 매우 위험한 사용자이므로 비밀번호(예 root
: )를 비활성화해 보겠습니다.
passwd -l sudouser
su
암호화 단계를 건너뛰고 마지막 중개자를 직접 억제하기 위해 모든 중개자에 대해 동일한 작업을 수행합니다 .
2. SSH 키 쌍 생성
다시 정상작동합니다. 두 가지 모두 john
에 대해 - 비밀번호 인증을 구현하려면 RSA 키에 대한 비밀번호가 있어야 합니다. 이는 필수는 아니지만 수행할 수 있습니다(아마도 이 목적으로 사용되는 특정 RSA 키에서만 다른 암호화 단계를 추가할 뿐입니다).middleman
ssk-keygen
middleman
john
ssh
3. force 명령을 사용하여 -access를 설정합니다.
이제 재미있는 부분은 다음과 같습니다. force 명령을 사용하여 's john
에 추가합니다 middleman
. 즉, from 을 통해 액세스하면 this 및 this 명령만 실행됩니다.~/.ssh/authorized_keys
middleman
ssh
john
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
허용됩니다 .middleman
localhost
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
있습니다 . 이전에 사용자 비밀번호를 잠갔기 때문에 설정이 중복될 수 있습니다.sudouser
ssh
authorized_keys
PasswordAuthentication 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)을 변경할 수 있습니까?).
하지만 다시 한 번 말씀드리지만 이렇게 하지 마세요.보안을 이해하지 못한다면 보안을 악화시키는 대신 시스템의 기본 설정을 사용하십시오.