나는 파일/디렉터리 권한에 대한 정보를 검색해 왔으며 동일한 기본 원칙을 계속 찾고 있습니다. 소유자, 그룹 및 기타 사용자에게 부여되는 권한을 결정하는 근거를 어디에서도 찾을 수 없습니다. 정확히 누가/무엇이 이 범주에 속합니까? 그들 중 누구에게도 특정 권한을 부여하거나 부여하지 않는 것은 어떤 의미를 갖습니까? 내 관심사는 보안을 손상시키지 않고 모든 것이 제대로 작동하는지 확인하는 것입니다.
예를 들어, 저는 공유 호스팅(Linux)에서 작은 웹사이트를 개발 중이고 개발/유지 관리에 참여하는 유일한 사람입니다. 시청자는 아무것도 다운로드할 수 없지만 회원은 picmonkey.com API(move_uploaded_file을 사용하여 수행된 PHP 스크립트)를 통해 이미지를 업로드할 수 있습니다. 사이트의 파일은 모두 .php, .css, .js, .html, .jpg 및 .gif입니다(글꼴과 관련된 .eot, .svg, .ttf 및 .woff 파일도 있음). 이러한 디렉터리와 파일은 사이트의 사용자 이름을 소유자로, "inetuser"를 그룹으로 갖습니다.
내 마음 속에 떠오르는 몇 가지 질문은 다음과 같습니다.
- WS_FTP를 사용하여 로그인하면 내가 소유자입니까?
- 웹 브라우저는 "기타"입니까?
- PHP 스크립트 자체가 이러한 범주 중 하나에 속합니까?
이러한 상황에서는 각 파일/디렉토리에 어떤 권한이 필요합니까?- .php 파일을 읽는 것과 실행하는 것 사이에 차이가 있나요?
"inetuser"가 누구인지 모르기 때문에 그룹에 권한을 부여하지 않는 것이 맞습니까? 그렇지 않은 경우(예:
사이트의 사용자 이름이 그룹에도 사용되며 내 개발 사이트와 다른 호스트에 있음 )
어떻게 해야 합니까?
누구든지 나에게 통찰력을 줄 수 있고, 이와 같은 질문에 답할 수 있는 추천 기사나 책을 제공할 수 있다면 매우 감사하겠습니다.
답변1
권한의 개념을 이해하는 것 같지만 사용자/그룹/기타 및 다양한 상황에서 이것이 의미하는 바에 따라 어려움을 겪고 있다고 생각합니다.
간단히,
- ㅏ사용자개인 POSIX 계정입니다.
- ㅏ그룹여러 POSIX 계정을 논리적으로 그룹화한 것입니다.
디스크의 파일에는 두 명의 소유자가 있습니다. 소유자 user
대 group
소유자.특정 파일에 대해 other
이 작업을 수행하는 사용자 계정이 있습니까?아니요성냥user
...도 아니다응 회원 group
.즉, other
사용자 소유자가 아닌 모든 사용자그리고그룹 소유자의 구성원이 아닙니다.
또한, 각프로세스특정 사용자 ID(또는 UID)로 실행되며 하나 이상의 그룹 ID(GID)의 구성원입니다. 각 프로세스를 실행하는 사용자를 보려면 이 명령 ps -ef
(Linux 및 Solaris, OS X 또는 *BSD)을 사용하십시오. ps -ej
apache와 ws_ftp도 사용자에 의해 실행되는 것을 볼 수 있습니다.
프로세스가 디스크의 파일에 액세스하려고 하면 다음과 같은 일이 발생합니다.
UID
프로세스user
소유자가 파일 소유자와 일치하면 권한user
이 적용됩니다.- 그렇지 않고
GID
프로세스 중 하나 라도group
파일 소유자와 일치 하면group
권한이 적용됩니다. - 그렇지 않으면
other
권한이 적용됩니다.
귀하의 질문에 구체적으로 답변하려면 다음을 수행하십시오.
WS_FTP를 사용하여 로그인하면 내가 소유자입니까?
기술적으로는 그렇습니다. 항상 소유자가 있기 때문입니다. 그러나 이는 귀하의 정의에 따라 다릅니다."나".
당신이 시작하는 경우진짜시스템의 POSIX 사용자인 경우 생성/액세스하는 파일은 로그인한 사용자와 동일합니다. 익명으로 로그인하면 생성/액세스하는 파일은 다음 UID를 가진 파일이 됩니다.FTP 프로토콜. 이는 ftp
또는 가 될 수 있습니다 nobody
.
웹 브라우저는 "기타"입니까?
웹 브라우저는 서버에서 실행되지 않기 때문에 아무것도 아닙니다. 하지만 브라우저가 웹 페이지에 액세스합니다.섬기는 사람. 웹 서버는 특정 사용자(WS_FTP와 마찬가지로)로 실행됩니다. 사용자는 아마도 www-data
, apache
또는 입니다 nobody
.
PHP 스크립트 자체가 이러한 범주 중 하나에 속합니까?
PHP 스크립트는 웹 서버의 스크립트 엔진 모듈에 의해 실행됩니다. 웹 서버를 실행하는 동일한 사용자로 실행됩니다.
.php 파일을 읽는 것과 실행하는 것 사이에 차이가 있나요?
예. 읽기는 사용자가 파일의 내용을 읽을 수 있음을 의미합니다. 실행이란 콘텐츠가 완전한 프로세스로 실행될 수 있음을 의미합니다.
PHP 스크립트는 웹 서버의 스크립팅 엔진 내에서 실행되기 때문에(즉, 서버의 메모리 공간 및 실행 스레드의 일부임) 실행 가능하게 만들 필요가 없습니다.
"inetuser"가 누구인지 모르기 때문에 그룹에 권한을 부여하지 않는 것이 맞습니까? 그렇지 않은 경우(예: 사이트의 사용자 이름이 그룹에도 사용되며 내 개발 사이트와 다른 호스트에 있음) 어떻게 해야 합니까?
inetuser
귀하와 마찬가지로 시스템의 사용자 계정입니다. 아니면 그룹일 수도 있습니다. 이 글을 읽고 나면 스스로 이 질문에 답할 수 있기를 바랍니다.
이러한 상황에서는 각 파일/디렉토리에 어떤 권한이 필요합니까?
일반적으로 말해서, 데이터 파일이 다음과 같기를 원합니다.소유하다실제 인간(예: 귀하)이 사용하는 사용자 계정입니다. 즉, 네트워크콘텐츠속해서는 안 된다아파치 사용자.
- 사용자 권한은 거의 항상 데이터 파일의 경우 rw-이고 디렉터리 및 프로그램의 경우 rwx여야 합니다.
- 그룹 권한은 일반적으로 데이터 파일의 경우 r--, 디렉터리 및 프로그램의 경우 rx여야 합니다. 그룹 구성원이 이러한 파일에 쓸 수 있도록 하려면 rw- 및 rwx여야 합니다.
- 다른 권한은 거의 항상 데이터 파일의 경우 r--이고 디렉터리 및 프로그램의 경우 rx입니다.또는- - 네가 원한다면부정적인모든 입구와 출구.
답변2
좋습니다. 먼저 파일 권한에 대한 기본 사항을 살펴본 다음 구체적인 사례를 살펴보겠습니다.
권한
기초적인문서권한은 다음과 같습니다:
- 아르 자형ead - 파일의 내용을 읽는 기능을 제공합니다.
- 승rite - 이 파일에 쓸 수 있는 기능을 제공합니다.
- 이자형엑스ecute - 파일이나 스크립트를 실행하는 기능을 제공합니다.
의 경우목차이름은 동일하지만 의미는 약간 다릅니다.
- 아르 자형- 디렉터리에 있는 파일 이름을 읽는 기능을 제공하지만 그 이상은 아닙니다.
- 승- 디렉터리에 파일을 생성하거나 기존 파일에 쓰는 기능.
- 엑스- 디렉터리에 있는 특정 파일의 내용을 읽을 수 있지만 그 안에 있는 파일을 나열할 수는 없습니다(이렇게 하려면 읽기 권한이 필요합니다). 또한 이 디렉터리로 변경(cd)할 수도 있습니다.
사용자, 그룹 및 기타
모든 파일과 디렉토리에는 소유자 및 그룹 속성이 있습니다. ls -l
명령을 호출하거나 FTP 클라이언트와 같은 소프트웨어의 표시등을 보면 이를 확인할 수 있습니다 . 예를 살펴보겠습니다:
-rwxr-xr-- 1 jdoe zeppelins 0 08-29 21:50 example_file
example_file
2008년 29월 21일 21시 50분에 생성되었으며 길이가 0바이트인 파일이 있습니다 . 소유자는 명명된 사용자 username
이고 그룹에 속합니다 zeppelins
.
이제 파일 권한을 살펴보겠습니다 -rwxr-xr--
.
- 첫 번째 문자는 파일 형식을 나타냅니다. 단일 대시는
-
해당 파일이 링크나 디렉터리가 아닌 일반 파일임을 의미합니다. - 다음 세 쌍은
rwx
사용자 jdoe가 파일을 읽고, 쓰고, 실행할 수 있음을 나타냅니다. - 다음과 같은
r-x
수단전원그룹 구성원은zeppelins
파일을 읽고 실행할 수 있지만 수정할 수는 없습니다. - 마지막으로, 그룹에
r--
속하지도, 속하지도 않은 사용자는 파일을 읽을 수만 있다는 뜻입니다.jdoe
zeppelins
이제 귀하의 사건으로 돌아가십시오.
WS_FTP를 통해 로그인하면 로그인 시 제공한 사용자 이름을 사용하여 사용자로 식별됩니다. 귀하는 일부 파일의 소유자가 될 수 있지만 반드시 그럴 필요는 없습니다(다른 소유자가 할당된 파일이 있을 수 있음).
웹 브라우저는 이러한 파일에 액세스할 수 없습니다. 네트워크를 통해 액세스됩니다.섬기는 사람, 파일을 읽고 해당 내용을 브라우저에 제공합니다. 웹 서버는 유사하거나 유사한 이름으로 실행될 수 있지만
apache
httpd
호스팅을 사용하는 것처럼 자신을 식별할 수도 있습니다inetuser
. 그렇지 않은 경우 파일에 액세스합니다.다른사용자.PHP 스크립트는 다음과 같아야 합니다.읽을 수 있는그리고쓰기 가능수정한 사람(주로 소유자일 가능성이 높음)읽을 수 있는하지만쓰기 가능웹 서버를 통해.
에서 편집한 간단한 PHP 스크립트의 경우
jdoe
웹 서버가webserver
해당 이름으로 실행되고 있다고 가정하면 적절한 권한은 입니다-rwxr-----
. 어떤 경우에는 다른 사용자가 읽어야 할 수도 있습니다. 이 경우에는-rwxr--r--
더 적절할 수 있습니다.PHP 파일의 경우 읽기 권한이면 충분합니다.
가장 좋은 방법은 빠른 테스트를 수행하는 것입니다. 특정 파일에 대한 그룹의 모든 권한을 제거하고 해당 파일에 계속 액세스할 수 있는지 확인하십시오. 이것은
inetuser
웹 서버의 별칭이므로 파일에 해당 그룹에 대한 읽기 권한이 있어야 합니다.파일을 업로드하려면 읽기 또는 실행 권한은 없지만 쓰기 권한은 있는 별도의 디렉터리를 만들어야 합니다.
답변3
Linux의 권한은 Windows에서와 같이 사용되는 소프트웨어에 따라 작동하지 않습니다(서비스는 특정 권한을 사용하여 자동으로 설치됩니다). Linux에서는 파일/디렉토리를 읽거나 실행하려는 프로그램이 특정 사용자로 실행되는데, 이는 공유 환경에서는 다를 수 있습니다.
스크립트와 관련하여 웹 서버를 실행 중인 사용자는 실행 권한이 있어야 합니다. 그렇지 않으면 최종 사용자가 스크립트를 볼 수는 있지만 실행할 수는 없습니다.
일부 웹 서버는 사용자 www-data로 실행되지만 이는 공유 환경이므로 상황이 다를 수 있으므로 공급자에게 문의하여 확인해야 합니다.
실행 중인 http 서버를 알고 있고 셸 액세스 권한이 있는 경우 다음을 실행할 수 있습니다.
ps -ef | grep <server>
첫 번째 열에는 서버가 실행 중인 사용자가 표시되어야 하며, 이는 아마도 로그인한 사용자와 동일할 것입니다.
공유 서버에는 동시에 실행 중인 서버가 두 개 이상 있을 수 있으므로 어느 서버가 자신의 것인지 알아내야 한다는 점을 명심하세요.
사용하는 FTP 클라이언트는 권한에 영향을 미치지 않으며 로그인하는 사용자에 따라 다르지만 로그인 사용자 이름과 다를 수 있습니다.
이 경우 웹 브라우저는 개체가 아니고 웹 서버만 개체이며 앞서 언급한 것처럼 자체 사용자로 실행됩니다.
경험상 사이트의 공개 영역에서는 사용자, 그룹 및 기타 사용자에게 스크립트와 디렉터리에 대한 실행 권한을 부여하고 다른 파일에 대한 읽기 권한을 부여합니다.
웹 서버가 디렉터리에 새 파일을 생성하도록 허용해야 하는 경우 해당 디렉터리는 서버를 실행하는 사용자가 소유하거나 모든 디렉터리 고정 비트(t)에 대한 쓰기 액세스 권한을 가지고 있어야 합니다.