CentOS 7의 사용자 권한 문제: "권한이 거부되었습니다"

CentOS 7의 사용자 권한 문제: "권한이 거부되었습니다"

나는 Linux에서 권한을 설정하는 방법을 알고 있다고 생각했습니다. 나는 분명히 그렇게 생각하지 않습니다.

"web3"이라는 사용자가 있습니다. 이 사용자는 CPannel과 같은 서버 관리 애플리케이션인 ISPConfig에 의해 자동으로 생성됩니다.

서버에 "Drush"라는 애플리케이션도 설치했습니다. 루트로 로그인한 상태에서 "Drush"를 설치했습니다. 신청서는 다음 위치에 있습니다.

/root/.composer/vendor/drush/drush/drush

파일 및 해당 포함 폴더에는 다음과 같은 권한이 있습니다.

-rwxr-xr-x 1 root root
drwxr-xr-x 9 root root

이 파일은 모든 사람에게 읽기 및 실행 권한을 허용하므로 "web3" 사용자로 로그인하고 위 응용 프로그램을 실행하려고 할 때마다 다음 오류 메시지가 나타나는 이유는 무엇입니까?

/root/.composer/vendor/drush/drush/drush: Permission denied

이전에도 이 문제가 있었지만 문제가 있는 사용자에게 sudo 전체 루트 권한을 부여했습니다. 로컬 개발 환경에서는 이는 큰 문제가 되지 않습니다. 저는 지금 제 전용 서버를 관리하고 있는데 이 큰 망치 솔루션이 작동하지 않습니다.

내가 뭘 잘못했나요?

도움을 주시면 감사하겠습니다!

답변1

/root/루트의 홈 디렉토리입니다. 권한은 /root/루트를 제외한 누구도 그 아래의 전체 디렉터리 트리를 탐색하는 것을 방지하기 위해 700이 바람직합니다.

디렉토리 트리의 상위 수준에 있는 권한은 루트가 아닌 사용자로 바이너리를 실행하는 것을 방지합니다.

무엇이든 설치하는 /root/것은 일반적이지 않습니다 . 일반적으로 여러 사용자가 사용하는 실행 코드를 /opt/다른 디렉터리에 설치합니다.

이것이 두 가지 주요 "실수"입니다. 코드를 설치할 더 나은 위치를 찾고 코드를 사용하려는 사용자가 전체 경로에 액세스할 수 있는지 확인해야 합니다.

마지막으로, 다른 사람들이 지적했듯이 설치를 완료하려면 일반적으로 루트가 필요하지만 결과 파일은 꼭 필요한 경우에만 루트가 소유해야 합니다. 대부분의 경우 특정 사용자(예: www-data 사용자 또는 oracle 사용자)가 생성되어 코드가 손상될 경우 노출이 제한됩니다. 귀하의 응용 프로그램에 대해서는 모르지만 web3 사용자로 설치하거나 루트로 설치한 후 나중에 이 작업을 위해 특별히 생성된 권한 없는 사용자로 권한을 변경하는 것이 좋습니다.

임시방편으로 /root/문제를 해결하기 위해 권한을 열려고 하는 충동을 억제해야 합니다 . sudo문제는 실행 가능한 코드를 루트의 홈 디렉터리에 설치하면 안 된다는 것입니다.

답변2

포함된 폴더의 권한을 확인하는 것만으로는 충분하지 않습니다. 루트까지 모든 상위 수준 폴더의 권한을 확인해야 합니다. 예를 들어 다음과 같습니다.

# ls -ld /root/.composer/vendor/drush/drush/drush \
  /root/.composer/vendor/drush/drush \
  /root/.composer/vendor/drush \
  /root/.composer/vendor \
  /root/.composer \
  /root \
  /

/root디렉토리에 700(또는 drwx------)의 권한이 있어 사용자가 해당 경로에서 진행하는 것을 방지할 수 있습니다 web3. 다른 사용자에게 해당 사용자의 홈 디렉토리에 대한 액세스 권한을 부여하는 것은 좋은 생각이 아니지만, 기술적으로 root꼭 필요하다고 생각되면 권한 711()을 부여할 수 있습니다.drwx--x--x

하지만 그것도 도움이 되지 않을 수도 있습니다...

SELinux가 기본적으로 활성화되어 있는 CentOS 7을 사용하고 있습니다.

RHEL/CentOS에는 일반적으로 일반 사용자 계정에 미치는 영향이 미미한 기본 SELinux 구성이 있지만 시스템 서비스(예: 웹 서버)에는 몇 가지 심각한 제한이 적용될 수 있습니다.

SELinux에서는 전통적인 Unix 스타일 사용자/그룹/권한 시스템과 관계없이 프로세스의 특정 작업과 모든 하위 항목을 제한할 수 있습니다. 특정 바이너리가 실행될 때, 특정 시스템 사용자에 대해, 그리고 기타 다양한 조건에서 자동으로 "잠금"되도록 이러한 제한을 구성할 수 있습니다.

웹 서버에 대한 기본 SELinux 제한 사항 중 하나는 /var/www특별히 활성화된 디렉터리를 사용하지 않는 한 특별히 활성화된 디렉터리 외부에 대한 액세스를 차단하는 것입니다.SELinux 부울, SELinux 규칙 세트의 전환 가능한 옵션입니다. 나는 이것이 web3 사용자가 Drush 앱에 액세스하는 것을 방해하는 또 다른 문제일 수 있다고 생각합니다.

웹 서버(또는 PHP 인터프리터와 같은 하위 항목)가 /var/www다른 사용자에게 속하지 않고 다른 사용자가 만든 항목에 액세스할 수 있도록 하려면 다음 명령을 실행해야 합니다.

# setsebool -P httpd_read_user_content 1

<service name>_selinuxRHEL/CentOS에서 각 시스템 서비스에는 해당 특정 서비스에 대한 SELinux 제한 사항 및 부울 값에 대한 정보가 포함 된 추가 매뉴얼 페이지가 있습니다 . 이러한 매뉴얼 페이지는 다음과 같은 RPM 패키지에 있습니다 selinux-policy-doc.패키지에 대한 자세한 내용은 다음과 같습니다.SELinux가 활성화된 시스템을 사용하고 있다면 실행하려는 모든 서비스의 매뉴얼 페이지를 읽어야 합니다. 이를 통해 SELinux를 간단하게 다룰 수 있습니다.그래서훨씬 쉽게.

물론 인터넷에서 SELinux를 비활성화하는 방법에 대한 많은 조언을 찾을 수 있지만 보안 서버를 실행할 계획이라면 이것이 최선의 선택이 아닐 수도 있습니다.

관련 정보