답변:
일반적으로이 작업은 다른 사람이 나열한 이유로 잘못된 보안 관행입니다. 그러나 과제의 핵심은 다양한 기준에 따라 조건부 구성 섹션을 가질 수 있다는 것을 가르치는 것입니다.
이를 수행하는 방법은 Match
조건부 블록 *을 사용하는 것 입니다.
Match User bob
Subsystem sftp /bin/false
자세한 내용 및 일치하는 섹션 sshd_config(5)
아래를 참조하십시오 .Match
Group
* 여러 가지 방법이 있습니다.
이것은 말이되지 않습니다. 쓸모없는 모호함을 통한 보안입니다. SSH를 사용할 수있는 모든 사용자는 SSH 세션을 통해 읽을 수있는 모든 파일을 전송할 수 있습니다. 권한이 있으면 쓸 수도 있습니다.
예를 들어, 다음 방법을 사용하여 ssh를 통해 / etc / passwd를 다운로드 할 수 있습니다 (scp / sftp 세션 필요 없음). ssh foo@bar.com "cat / etc / passwd"> passwdcopy
SSH를 통해 화면에서 볼 수 있으면 파일로 쉽게 복사 할 수 있습니다.
이것이 의미가있는 유일한 방법은 보안 정책을 시행하는 사용자 정의 제한 쉘이있는 경우입니다.
그러나 ssh 셸을 통해 수행 할 수있는 sftp / scp를 통해 임의의 명령을 실행할 수 없기 때문에 이것의 역은 의미가 있습니다 (ssh 쉘은 비활성화하지만 scp / sftp는 활성화 됨).
추신 : 귀하가 부여하는 SSH 쉘이 임의의 실행을 허용하는 표준 쉘이라고 가정합니다. 그렇지 않은 경우 다음을 참조하십시오. 특정 사용자 또는 그룹에 대해 sftp 하위 시스템을 비활성화하는 방법은 무엇입니까? sshd_config의 서브 시스템 구성 옵션을 살펴보십시오.
Match Group nosft
Subsystem sftp /bin/false
나는 이것을 위해 그룹을 사용하는 것을 선호합니다.
쉘을 제한 한 사용자와 함께 사용하면 유용합니다. 때로는 ssh가 클라이언트에 액세스하여 쉘을 데이터를 덤프하는 스크립트로 설정하여 데이터베이스의 sql 덤프에 액세스 할 수 있도록합니다. scp에서 잘라내는 것도 현명한 아이디어 인 것 같습니다. 그들은 cat
ssh를 통해 파일을 전송 하기 위해 실행 에 액세스 할 수 없습니다 .
Directive 'Subsystem' is not allowed within a Match block
SFTP를 전체적으로 활성화하고 일부 사용자에 대해서만 SFTP를 비활성화 할 수 있습니다.
사용자에게 일반 쉘 프롬프트를 표시하려는 경우에는 작동하지 않습니다. 쉘 액세스 권한이 있으면 대부분의 항목을 우회 할 수 있으므로 의미가 없습니다. 특정 프로그램에 대한 액세스 권한 만 부여하려는 경우에만 작동합니다.
SSH를 통해 일부 자식 리포지토리에 액세스하고 싶기 때문에 개인적으로 필요하며 필요하지 않은 시스템을 비활성화하고 싶습니다. 이 경우 SFTP가 필요하지 않습니다.
사용자 세트와 일치시키기 위해 Match
키워드를 사용하여 SSH를 구성 할 수 있습니다 . 로부터 sshd_config(5)
수동 :
Match
...
The arguments to Match are one or more criteria-pattern pairs or the
single token All which matches all criteria. The available criteria
are User, Group, Host, LocalAddress, LocalPort, and Address. The
match patterns may consist of single entries or comma-separated
lists and may use the wildcard and negation operators described in
the PATTERNS section of ssh_config(5).
...
몇 가지 예 :
Match User eva
"eva"사용자와 일치Match User stephen,maria
"stephen"및 "maria"사용자와 일치Match Group wheel,adams,simpsons
"바퀴", "아담", "심슨"그룹과 일치자세한 정보가 필요하면 sshd_config(5)
매뉴얼에 로드가 있습니다.
일반적으로 SSH를 통해 연결할 때 사용자의 로그인 쉘이 표시되지만 특정 명령을 강제 실행하도록 SSH를 구성 할 수 있습니다. SFTP를 포함한 모든 SSH 연결에 대해 명령이 강제 실행되므로 원하는 명령을 강제 실행하는 옵션이있을 수 있습니다.
ForceCommand
키워드 로 강제 명령을 구성 할 수 있습니다 . 로부터
sshd_config(5)
수동 :
ForceCommand
Forces the execution of the command specified by ForceCommand,
ignoring any command supplied by the client and ~/.ssh/rc if
present. The command is invoked by using the user's login shell
with the -c option. This applies to shell, command, or subsystem
execution. It is most useful inside a Match block. The command
originally supplied by the client is available in the
SSH_ORIGINAL_COMMAND environment variable. Specifying a command of
“internal-sftp” will force the use of an in-process sftp server that
requires no support files when used with ChrootDirectory. The
default is “none”.
따라서 원하는 제한 명령을 사용할 수 ForceCommand <your command>
있습니다. 예를 들면 다음과 같습니다.
Match User kim
ForceCommand echo 'successful login man, congrats'
git 액세스 권한을 부여하려는 경우 사용자에게만 액세스 권한이 필요합니다 git-shell
. 다음은 일부 보안 옵션과 함께 내 git 사용자에 대해 SFTP를 비활성화하는 섹션입니다.
Match Group git
# have to do this instead of setting the login shell to `git-shell`,
# to disable SFTP
ForceCommand /usr/bin/git-shell -c "$SSH_ORIGINAL_COMMAND"
# disable stuff we don't need
AllowAgentForwarding no
AllowTcpForwarding no
AllowStreamLocalForwarding no
PermitOpen none
PermitTunnel no
PermitTTY no
X11Forwarding no
owner
아웃 바운드 액세스를위한 모듈 . 이것은 당신이 빨간 팀에 의해 펜 테스트 될 것이라고 가정합니다. 시스템에 액세스하는 모든 사람이 항상 규칙을 준수하고 악의적 의도가 없다면, 나의 접근 방식은 무겁고 지나치게 복잡 할 것입니다.