저는 시스템 관리자가 아니며 다소 안전한 웹 서버(LAMP 기반)를 만들려고 합니다.운영체제 7).
초기 CentOS 7 Droplet 설정에 대한 몇 가지 튜토리얼을 읽었으며 모든 것이 잘 작동했습니다.
그러나 내가 읽은 기사에서 읽은 기본 개념 중 일부를 이해하는 데 어려움을 겪고 있으며 부작용에 대해 확신할 수 없기 때문에 좀 더 자격을 갖춘 사람의 의견이 필요합니다.
귀하의 의견에 진심으로 감사드립니다.
상상하다:
Digital Ocean에서 cloud-init(userdata)를 사용하여 새 Droplet을 생성하고 구성하고 있습니다. 내가 이해한 바에 따르면 cloud-init는 system/root로 실행되고 다음 설정, 특히 루트의 ssh_config를 생성합니다.
- 해당 사용자의 SSH 키(ssh-authorized-keys)를 기반으로 새 사용자를 생성합니다(이 경우 관리자라고 부릅니다).
- Wheel 그룹에 사용자를 추가하고 sudo를 설정합니다: ['ALL=(ALL) NOPASSWD:ALL']
- /etc/ssh/sshd_config에서 루트 로그인을 비활성화합니다.
- 사용자가 /etc/ssh/sshd_config에서 관리하도록 허용
- /etc/ssh/sshd_config에서 PasswordAuthentication no 설정
- /etc/ssh/sshd_config에서 PubkeyAuthentication yes 및 RSAAuthentication yes를 설정하십시오.
- 방화벽 구성 및 기타 작업 수행
질문:
관리자 권한으로 SSH를 통해 내 Droplet에 연결한 후 관련 sshd_config가 비어 있습니다. Droplet을 생성하고 cloudconfig를 실행할 때 cloud-init가 system/root로 실행되고 있기 때문인 것 같습니다.
1.1 루트 사용자에 대한 Droplet을 생성할 때와 동일한 설정을 여기서 설정해야 합니까? 1.2 그렇다면 여러 ssh_config 파일의 요점은 무엇입니까?
cloud-init 로그 파일을 보면 루트에 대해 공개/개인 RSS 키 쌍이 생성된 것을 볼 수 있습니다.
루트 사용자에게 초기 SSH 키를 제공하지 않기로 결정했기 때문에 관련 비밀번호가 나에게 메일로 전송되었습니다(단지 테스트 목적으로).
그러나 새로 생성된 사용자 admin에서 /를 실행하면 다음이ls -a
표시됩니다.etc/ssh
. moduli sshd_config ssh_host_dsa_key.pub ssh_host_ecdsa_key.pub ssh_host_rsa_key.pub .. ssh_config ssh_host_dsa_key ssh_host_ecdsa_key ssh_host_rsa_key
예를 들어 루트 사용자용으로 생성된 동일한 SSH 키가 포함된 ssh_host_rsa_key를 살펴보세요.
2.1새로 생성된 admin(root 대신)이라는 사용자가 ssh 폴더에서 root와 동일한 키를 갖는 이유는 무엇입니까?
2.2내가 그를 그룹 휠에 추가하고 sudo:['ALL=(ALL)NOPASSWD:ALL']을 추가했기 때문입니까? 추천되나요?
2.3다른 사용자 계정이 손상될 수 있고 해커를 매우 운 좋은 사람으로 만드는 데 필요한 모든 키가 있는 경우 ssh를 통한 원격 로그인에서 루트를 비활성화하는 이유는 무엇입니까? 단지 사용자의 이름을 추측하기 어렵게 만드는 것이 목적입니까?
일부 작업에는 여전히 sudo/root 권한이 필요하다는 것을 알고 있습니다. 관리자로 로그인하면 su root를 사용하여 루트로 변경할 수 있습니다.
3.1/etc/ssh/sshd_config(ssh에만 해당)에서 루트 로그인을 비활성화했지만 동일한 권한을 가진 새 사용자(관리자)를 생성하고 루트로 쉽게 전환할 수 있을 때 무엇을 할 수 있는지 자문했습니다. 이 비밀번호가 더 나은가요? 아니면 추가 보안 수준을 추가하는 이중 인증과 같은 것이 있습니까?
3.2.반면에 관리자 계정 제어권을 성공적으로 획득한 해커가 루트의 SSH 키(위의 이전 항목 참조)를 쉽게 읽고 보안 수준을 우회할 수 있다면 이것이 어떻게 더 나아질 수 있는지 모르겠습니다.
요약하자면, 읽고 있는 내용이 정말 마음에 들지만, 파일 시스템을 볼 때, 특히 cloud-init를 사용하여 생성한 사용자 SSH 폴더에서 루트 SSH 키(개인 및 공용)를 찾은 후 조금 걱정됩니다. 뭔가 오해를 하고 있는 것에 대해.
그런데: 이것은 내 cloud-init 스크립트입니다.
#cloud-config
# log all cloud-init process output (info & errors) to a logfile
output: {all: ">> /var/log/cloud-init-output.log"}
# final_message written to log when cloud-init processes are finished
final_message: "System boot (via cloud-init) is COMPLETE, after $UPTIME seconds. Finished at $TIMESTAMP"
package_upgrade: true
users:
- name: admin
groups: wheel
sudo: ['ALL=(ALL) NOPASSWD:ALL']
shell: /bin/bash
ssh-authorized-keys:
- ssh-dss AAAABBBBBCCCCDDDD...
runcmd:
- sed -i -e 's/#Protocol 2/Protocol 2/g' /etc/ssh/sshd_config
- sed -i -e 's/#LoginGraceTime 2m/LoginGraceTime 2m/g' /etc/ssh/sshd_config
- sed -i -e 's/#PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config
- sed -i -e 's/PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config
- sed -i -e 's/#RSAAuthentication yes/RSAAuthentication yes/g' /etc/ssh/sshd_config
- sed -i -e 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/g' /etc/ssh/sshd_config
- sed -i -e '$aAllowUsers admin' /etc/ssh/sshd_config
- service sshd restart
#firewall
- systemctl start firewalld
- firewall-cmd --permanent --add-service=ssh
- firewall-cmd --reload
- systemctl enable firewalld
답변1
대부분의 질문에 대한 답변은 아니지만 댓글이 너무 깁니다.
별도의 사용자("admin"이든 다른 사용자이든)를 갖는 이유는 정확하게 그림에 또 다른 인증/권한 부여 계층을 추가하기 위한 것입니다(키/비밀번호를 사용하여 사용자로 로그인한 다음 다른 비밀번호를 입력하여 루트가 됨). ). 사용자가 루트와 동일한 UID를 갖고 있지 않으면 "일반" 사용자보다 더 높은 권한을 가질 수 있지만 루트와 동일한 권한을 갖지 않습니다.
또한 다른 사용자가 동일한 계정에 액세스할 수 있습니다. 하나의 계정은 다른 키로 인증될 수 있습니다. 이렇게 하면 여러 사용자(및 여러 컴퓨터)가 있을 때 작업이 더 쉬워집니다. 다른 사용자를 방해하지 않고 특정 사용자의 권한을 취소하는 것은 파일에서 항목을 삭제하기만 하면 됩니다
AuthorizedKeys
(보통 ~/.ssh/authorized_keys `. (분명히 동일함) 직접 루트 액세스에 적용되지만 추가 인증/권한 부여 수준은 없습니다).공격자가 키를 사용할 수 있는 경우: 키의 공개 부분만 서버에 저장되어야 합니다. 인증 단계에서 클라이언트는 자신의 개인 키를 사용하지만 이를 서버 어디에도 두지 않습니다. 따라서 서버에서 루트 액세스 권한을 얻은 사람은 일반 사용자로 원격으로 로그인할 수 있는 능력을 얻지 못합니다(해당 컴퓨터에 개인 키를 보관하지 않음).
다른 사항에 대해서는 일반적으로 다음과 같이 진행됩니다.
Q:"귀하의 시스템에 대한 루트 액세스 권한을 얻은 사람을 무엇이라고 부르나요?"
ㅏ:"알겠습니다."명령줄 앞에 "sudo"를 붙여서 모든 사용자가 루트 권한으로 모든 명령을 실행할 수 있도록 허용하는 것이 옳습니다
sudo
. 어떤 사람들은 이것이 좋은 생각이라고 생각하지만, 보안 관점에서 보면 이는 가장 어리석은 일 중 하나입니다. 모든 사람을 시스템 관리자로 만듭니다. 유일한 장점은 사람들이 실수로rm -Rf /
높은 권한(예:root
직접 로그인)으로 실행할 수 없다는 것입니다. 그러나 근육 기억이 시작되면서 사람들은sudo
그것을 어디에서나 사용하기 시작했고 남은 유일한 장점은 명령을 기록하는 능력뿐이었습니다. 아시다시피 이는 보조 계정의 목적에도 어긋납니다.간단히 말해서:
ALL=(ALL) NOPASSWD:ALL
TM은 나쁜 생각이에요, 서버에서는 두 배로 늘어났습니다. 제발 이러지 마세요.그것을 지나고 나면 갑자기 1부)가 훨씬 더 이해되기 시작합니다.
답변2
CentOS 7 보안 강화방금 게시한 문서가 도움이 될 수 있습니다. 이 문서는 OpenSCAP을 기반으로 합니다.