
몇 가지 제한 사항이 있는 가짜 사용자(SSH에서 로그온할 수 있지만 시스템에 존재하지 않는 사용자)를 만들려고 합니다(예를 들어 하나의 명령만 사용할 수 있고 수행할 때 다른 명령도 실행됨). . 이것을 달성하는 방법이 있습니까? 제한 부분은 물론 openssh-server에서 가짜 사용자를 만드는 방법을 찾을 수 없습니다.
답변1
Linux의 SSH 서버가 시스템과 통합되고 다른 사용자 계층을 도입하지 않는 것이 일반적입니다. Samba 특정 또는 FTP 특정 사용자 계층이 존재하는 Samba나 FTP와는 다릅니다. sshd
OpenSSH에서 독립적인 사용자 집합을 정의 하는 것은 쉽지 않은 작업인 것 같습니다 (하지만 또 다른 대답이 나를 놀라게 할 수도 있습니다).
가짜 사용자를 만들려는 의도는 SSH 서버의 루트가 아니며 그곳에서 실제 사용자를 생성할 수 없다는 사실에서 비롯되었을 수 있습니다. 그렇다면 어쨌든 할 수 있는 일은 다음과 같습니다 . 1 :
man 5 authorized_keys
형식을 설명하는 위치를 확인하세요 . 내 데비안 매뉴얼에는 다음과 같이 나와 있습니다.
AuthorizedKeysFile
공개 키 인증을 위한 공개 키가 포함된 파일을 지정합니다. 이 옵션을 지정하지 않으면 기본값은~/.ssh/authorized_keys
및 입니다~/.ssh/authorized_keys2
. 파일의 각 줄에는 하나의 키가 포함됩니다(빈 줄과 '#'으로 시작하는 줄은 주석으로 무시됩니다). 공개 키는 공백으로 구분된 옵션, 키 유형, base64 인코딩 키, 주석 필드로 구성됩니다. 옵션 필드는 선택사항입니다. […]옵션(있는 경우)은 쉼표로 구분된 옵션 사양으로 구성됩니다. 큰따옴표 안을 제외하고 공백은 허용되지 않습니다. 다음 옵션 사양이 지원됩니다(옵션 키워드는 대소문자를 구분하지 않음).
[…]
command="command"
이 키가 인증에 사용될 때마다 명령이 실행되도록 지정합니다. 사용자가 제공한 명령(있는 경우)은 무시됩니다.클라이언트가 pty를 요청하면 명령은 pty에서 실행됩니다. 그렇지 않으면 tty 없이 실행됩니다. 8비트 클린 채널이 필요한 경우 pty를 요청하지 않거나no-pty
. 백슬래시를 사용하여 명령에 따옴표를 포함할 수 있습니다.이 옵션은 특정 공개 키가 특정 작업만 수행하도록 제한하는 데 유용할 수 있습니다. 원격 백업만 허용하고 다른 것은 허용하지 않는 키를 예로 들 수 있습니다.예를 들어 key 옵션을 사용하여 명시적으로 금지되지 않는 한 클라이언트는 TCP 및/또는 X11 전달을 지정할 수 있습니다
restrict
.[…]
이렇게 하면 일반 사용자로서 다른 사람(지금부터 게스트)이 로그인하도록 허용할 수 있습니다.너처럼하나의 특정 명령을 실행하려면너처럼자동으로. 옵션 ~/.ssh/authorized_keys
을 사용하여 서버 에 공개 키를 등록하기만 하면 됩니다 command="command"
.
명령은 게스트가 목록에서 작업을 선택하거나 키워드를 입력하여 작업을 선택할 수 있도록 하는 사용자 정의 프로그램 또는 스크립트일 수 있습니다. 또는 검증되어 허용되거나 허용되지 않는 "내부" 명령을 입력합니다. 그러면 프로그램은 그에 따라 무언가를 실행합니다. 명령/프로그램/스크립트가 무엇인지는 귀하에게 달려 있습니다.
SSH 서버와 해당 관리자의 관점에서 게스트를 참고하세요.~이다너. 명령을 실행하는 것은 귀하의 계정이며 귀하의 사용자 정의 프로그램이나 스크립트가 게스트가 임의의 명령을 어떻게든(예를 들어 어떻게든 먼저 쉘을 생성하여) 실행할 수 있도록 허용한다면 이는 마치너명령을 실행하십시오.
또한 명령은 비대화형 셸에서 실행된다는 점을 기억하세요. 이는 chsh
구성이 포함된 쉘( 로 선택한 쉘)이 됩니다 . 쉘은 일부 파일을 제공할 수 있습니다(참조Bash의 동작 방식) 게스트가 연결할 때 소스가 안전한지 확인하세요.
매뉴얼에는 "사용자가 제공한 명령(있는 경우)은 무시됩니다"라고 명시되어 있습니다. 그럼에도 불구하고 내 테스트에서 강제 실행 파일은 해당 환경에서 가져올 수 있었으며 변수 이름은 SSH_ORIGINAL_COMMAND
. 이는 게스트가 를 호출할 때 일부 정보(예: 옵션)를 직접 전달하도록 허용할 수 있음을 의미합니다 ssh
. 서버 측에서는 프로그램이 변수에서 이를 검색합니다. 쉘 코드에서eval
변수 가 아니야그리고$SSH_ORIGINAL_COMMAND
따옴표 없이 사용하지 마세요, 안전을 확인하거나 먼저 소독하지 않는 한.
~/.ssh/authorized_keys
특정 키의 소유자가 다음과 같은 출력을 볼 수 있도록 하는 예제 줄은 다음과 같습니다 df -h
.
command="df -h",no-pty ssh-rsa AAA…(public key here)…
(에 대한 설명은 no-pty
을 참조 man 5 authorized_keys
하십시오. 유용할 수 있는 다른 옵션이 있습니다.) 이제 이 특정 키를 사용하여 (로그인을 사용하여) 서버에 연결하는 사람은 누구나 의 출력을 보고 df -h
연결이 끊어지게 됩니다.
1 아마. SSH 서버는 다양한 것을 거부하도록 구성될 수 있습니다.
답변2
SSH 허니팟 배포를 살펴볼 수도 있습니다. 기본적으로 취약해 보이지만 실제로는 아무 것도 액세스할 수 없는 더미 서버입니다. 모든 것이 기록되며 명령에 대한 액세스를 제한할 수 있습니다.
설정은 어렵지 않으며 배포 방법에 대한 지침은 온라인에 많이 있습니다. 하지만 여기에 대한 답변이 조금 길 수도 있습니다!
편집하다 :수퍼유저는 추천을 위한 공간은 아니지만 온라인에서 많은 튜토리얼을 제공하는 곳으로 잘 사용되는 것 같습니다.https://github.com/cowrie/cowrie 읽어보기에서:
에뮬레이트된 셸로 실행하도록 선택합니다(기본값):
- 파일을 추가/제거할 수 있는 가짜 파일 시스템입니다. Debian 5.0 설치와 유사한 완전한 가짜 파일 시스템이 포함되어 있습니다.
- 공격자가 /etc/passwd와 같은 파일을 캐싱할 수 있도록 가짜 파일 콘텐츠를 추가할 가능성이 있습니다. 최소한의 파일 내용만 포함됩니다.
- Cowrie는 나중에 검사하기 위해 wget/curl로 다운로드했거나 SFTP 및 scp로 업로드한 파일을 저장합니다.