Linux 보안에 관해 몇 가지 질문이 있습니다.
프로세스를 루트로 실행하는 것은 큰 실수입니다(루트가 너무 많은 권한을 갖고 있고 프로그램이 시스템에서 너무 많은 권한을 얻음). 나는 항상 사용자로 프로세스를 실행합니다. (저는 특수 파일에 액세스하고 실행할 수 있도록 ,를 사용합니다.
chmod
)chown
프로세스/데몬/프로그램을 루트로 실행하는 것보다 이것이 더 낫습니까?then을 사용하여 프로세스를 시작 하면
sudo su
프로세스를 사용자로 실행하는 보안과 동일합니까? 아니면 루트로 프로세스를 실행하는 것과 동일합니까?- 소프트웨어를 루트로 설치해야 합니까? 아니면 일반 사용자로서?
- 구성 파일을 편집하는 것은 어떻습니까?
sudo su
권한이 없는 일반 사용자 계정을 사용하여 루트로 편집해야 합니까, 아니면 이전처럼 편집해야 합니까 ?
답변1
일반적인 아이디어는 프로세스가 작업을 수행하는 데 필요한 최소한의 권한을 요청하고 갖는 것입니다. 이에 대한 예로는 포트 80(루트가 필요할 수 있음)에 바인딩한 다음 권한이 없는 시스템 사용자로 변경하는 웹 서버가 포함됩니다.
"루트가 있어야 함" 대신 "루트가 필요할 수 있음"을 발견했을 수도 있습니다. 전통적으로 1024 미만의 포트에 바인딩한 후 변경하려면 루트로 프로세스를 시작해야 했습니다. 이제 올바르게 설정했다면 이 작업을 수행할 필요가 없습니다. CAP_NET_BIND_SERVICE를 사용하면 루트가 아닌 1024 미만의 포트에 바인딩할 수 있습니다.
이는 "적은 비용으로 더 많은 작업 수행"의 또 다른 반복입니다. 필요한 것은 바인딩 포트 측면뿐인데 루트로 실행하고 모든 액세스 권한을 제공받는 이유는 무엇입니까? 함수는 이러한 세분성을 제공합니다.
루트 또는 다른 사용자로 데몬을 시작하는 것과 루트로 sudo를 시작하는 것 사이의 차이는 작으며 일반적으로 동일한 결과를 생성합니다.
편집, 관리 작업 등의 경우 대부분의 사람들은 "표준" 사용자가 되는 것을 선호하며 이러한 작업을 완료하기 위해 sudo를 사용합니다. 루트로 로그인할 수 없으면 잠재적으로 안전하지 않은 문이 닫힙니다.
소프트웨어는 일반적으로 루트로 설치됩니다. 왜? 웹 서버가 바이너리나 구성 파일을 수정할 수 있다면(아파치가 왜 공용 액세스 디렉토리가 /etc여야 하는지 생각합니다) 그것은 나쁜 생각이기 때문입니다.
답변2
이는 단순한 예/아니오 질문이 아니며 "어떤 경우에는", "자주" 등과 같은 답변이 있어야 합니다.
그럼에도 불구하고 나는 어쨌든 예/아니오로 대답하려고 노력할 것입니다. 또한 일반 데스크톱이나 소규모 홈 서버가 있다고 가정합니다. 그것은 멋진 것이 아닙니다.
이를 통해 다음 네 가지 질문에 대한 답변을 얻을 수 있습니다.
- 개발자가 의도한 대로 사용하세요. 권한과 소유자/그룹을 조작하기 시작하면 문제가 발생할 수 있습니다.
- 사용 시 변경되는 사항과 변경되지 않는 사항에는 몇 가지 문제가 있습니다
sudo su
.sudo -i
대체를 사용하십시오 (또는sudo -u someuser -i
루트가 아닌 다른 사람이 되고 싶은 경우).sudo -i
루트로 로그인하는 것과 같습니다. 사용자와 관련된 거의 모든 것이 "잊혀졌습니다" -
- 패키지에서 설치하는 경우: 루트를 사용하십시오.
- 소스에서 컴파일한 경우: 일반 사용자를 사용하고
make install
루트로만 실행합니다(마지막 단계). (또는 이 모든 작업을 수행하지 마십시오. 이 단계는 파일을 보다 "정상적인" 위치에 재할당하기 위한 것이지만 보안이 더 중요하다고 판단되면 건너뛸 수 있습니다(이것은 편집증적입니다))
- 파일이 속한 사용자를 사용합니다. 이는 일반적으로 homedir의 모든 항목에 루트를 사용
/etc
하고 homedir의 모든 항목에 사용자를 사용하는 것으로 요약됩니다 .