이것은 램프 스택 보안에 대한 정식 질문입니다
LAMP 서버 보안을위한 절대적인 지침은 무엇입니까?
이것은 램프 스택 보안에 대한 정식 질문입니다
LAMP 서버 보안을위한 절대적인 지침은 무엇입니까?
답변:
David의 대답은 서버 강화의 일반적인 원칙에 대한 좋은 기준입니다. 다윗이 지적했듯이 이것은 큰 질문입니다. 사용하는 특정 기술은 환경 및 서버 사용 방법에 따라 크게 달라질 수 있습니다. 경고 : 테스트 환경에서 빌드하고 올바르게 수행하려면 많은 작업이 필요할 수 있습니다. 프로덕션 환경과 비즈니스 프로세스에 통합하기위한 많은 작업이 뒤 따릅니다.
그러나 먼저 가장 직접적으로 관련이있는 강화 정책이 조직에 있는지 확인하십시오. 그렇지 않은 경우, 귀하의 역할에 따라이를 구축하기에 좋은시기입니다. 또한 각 구성 요소를 상향식에서 별도로 처리하는 것이 좋습니다.
L
당신을 도울 수있는 좋은 안내서가 많이 있습니다. 이 목록은 배포판에 따라 도움이되거나 도움이되지 않을 수 있습니다.
A
Apache는 보안을 유지하는 것이 재미있을 수 있습니다. Apache 또는 PHP보다 OS를 강화하고 사용성을 유지하는 것이 더 쉽다는 것을 알았습니다.
M
P
이것은 보안 프로그래밍 실습에 대한 전체 아이디어로, 그 자체의 전체 학문입니다. SANS와 OWASP는이 주제에 관한 우스운 양의 정보를 가지고 있으므로 여기서 복제하지는 않겠습니다. 런타임 구성에 중점을두고 개발자가 나머지 부분에 대해 걱정하도록하겠습니다. 때때로 LAMP에서 'P'는 Perl을 가리 키지 만 보통 PHP를 말합니다. 나는 후자를 가정하고 있습니다.
솔직히이 주제에 관한 몇 권의 책에 합당한 질문을했습니다. 그러나 잘 작동하는 일반적인 기본 지침이 있습니다.
시작하는 데 도움이되기를 바랍니다.
여기에 내가 좋아하는 점검표가 있습니다.
David가 제안한 것에 덧붙여, 모듈 식 설치 일수록 한 작업을 위해 특별히 생성 된 특정 사용자 / 그룹에 대한 액세스를 제한하고 범위를 제한할수록 LAMP 스택이 더 안전 해집니다. 예를 들어 Apache 사용자가있는 것입니다. 중요한 시스템 파일 / 폴더에 액세스 할 수있는 그룹이 아닌 권한이 설정된 Apache 파일 / 폴더의 경우 서비스 할 웹 사이트와 관련된 MySql 테이블에 액세스 할 수있는 사용자 및 해당 테이블 만. 또한 PHP 호출에서 최소한의 액세스 권한을 제공하도록 액세스를 제한 할 수 있습니다. 또한 PHP 파일을 통해 사용 / 노출 된 MySQL 사용자 이름이 다른 사용자에 사용 된 것과 동일한 사용자 이름 또는 비밀번호가 아닌지 확인하십시오.
의미 : 아파치 사용자 또는 MySql 사용자가 손상된 경우 아파치가 액세스 할 수있는 폴더 범위 (아파치 사용자의 경우)와 테이블 외부에 피해를 줄 수 없습니다 ( s) / 데이터베이스 (MySQL 데이터베이스 사용자의 경우).
예를 들어, MySQL 사용자가 손상을 입었다면 데이터베이스에 액세스하여 MySQL에서 모든 데이터베이스를 삭제하고 모든 데이터를 망칠 수 없었습니다. 어떤 상황에서는 격리 된 데이터베이스의 테이블을 삭제하거나 일부 테이블에 정보를 삽입 할 수 있습니다. 따라서 절대적으로 필요한 경우에만 테이블 액세스 권한을 부여하고 필요한 권한 만 부여하는 것이 중요합니다 ... 테이블 삭제 권한이나 업데이트 권한이 없어도 해당 사용자에게 부여하지 마십시오.
또한 어떤 이유로 든 관리 계정 사용자 이름과 비밀번호가 MySQL에 대해 발견 된 경우, 시스템의 사용자 이름과 다른 사용자 이름을 사용하는 경우 데이터베이스를 손상시키기 전에 먼저 시스템 보안을 해제해야합니다. 아파치 사용자와 파일에 대한 액세스도 마찬가지입니다.
시간 예! 아이디어를 단순화하는 시스템 예제를 제공 할 것입니다.
시스템에 사용자가 있다고 가정하십시오 (루트는 umod -l 또는 passwd -l 등을 통해 보안을 위해 비활성화되어야 함) : john, barney, terence 및 lisa.
bigbird라는 이름으로 MySQL에서 사용자를 만들 수 있습니다 (해시 된 암호를 사용해야합니다). Bigbird에는 선택 권한과 업데이트 권한 만 있지만 삭제하거나 만들 수 없으며 확실하지 않습니다 . 또한 MySQL 데이터베이스에서 작업하기 위해 이름이 garfield 인 다른 관리 MySQL 사용자를 작성하고 루트 사용자를 MySQL 데이터베이스에서 삭제하여 사용자가이를 이해할 수 없게합니다. 가필드가 부여되었습니다 . MySQL 전체에 대한 권한 (효과적으로 루트의 이름을 바꿉니다).
이제 아파치 그룹 또는 사용자를 생성하고이를 apweb2라고합니다. Appweb2는 다른 그룹의 구성원이 아니며 아파치의 모든 파일 / 폴더는 / home / apweb2 /에 저장됩니다. 각 가상 호스트에는 자체 하위 폴더가 있으며 이러한 각 호스트에는 해당 하위 폴더로 설정된 문서 루트가 있습니다. 실수로 나머지 시스템에 대한 액세스를 제공하지 않기 위해 심볼릭 링크가 비활성화됩니다.
또한 ssh 액세스를 특정 사용자 (또는 특정 그룹, ssh 그룹에 넣고 ssh를 사용할 수있는 유일한 항목)로 제한 할 수 있습니다.
또한 sudo 권한을 가진 사용자를 선택하여 더 제한 할 수 있습니다. 추가로 취할 수있는 또 다른 단계는 ssh 사용자가 sudo를 수행 할 수 없도록하는 것입니다. ssh를 사용할 수없는 sudo를 사용할 수있는 특수 사용자를 작성할 수 있으므로 ssh에 로그인하면 다른 사용자로 로그인해야합니다. sudo에 액세스하십시오.
따라서 각 세그먼트를 모듈화하여 하나의 세그먼트가 손상되면 전체 스택이 손상되지 않으며 처음부터 다시 시작하지 않고 1 개의 문제를 해결할 수 있습니다.
SANS.org에서이 문서가 도움이된다는 것을 알았습니다. http://www.sans.org/score/checklists/linuxchecklist.pdf