2011-02-12 3 views
2

나는 파일과 디렉토리 목록을 얻기 위해 RESTful 웹 서비스를 호출하는 jsTree를 가지고있다. 이 호출을하는 사용자의 POSIX 권한을 기반으로이 웹 서비스가 할 수있는 것을 제한하고 싶습니다.특정 POSIX 권한으로 실행하도록 Ajax 호출을 제한하는 방법은 무엇입니까?

즉,이 특정 웹 서비스는 사용자가 액세스 할 수있는 POSIX 권한이있는 파일과 디렉토리 만 나열해야합니다.

현재 웹 서비스는 쿠키에서 암호화 된 데이터를 찾아 웹 사이트에 로그인 한 사용자를 확인합니다. 사용자가 인증되면 웹 서비스는 jsTree가 지정한 폴더 (예 : /home/userA의 모든 파일 및 디렉토리)에 대한 응답을 내 보냅니다. 웹 서비스는 하위 디렉토리에서 다시 한 번 호출되며 하위 서브 디렉토리에서 다시 호출됩니다.

그러나 웹 서비스는 root 수준의 권한으로 실행되므로 다른 사용자 이름이 어떻게 든 userA으로 지정되면 /home/userB을 보려면 userA에 볼 수있는 권한이 부여되지 않은 파일 및 디렉토리 목록을 볼 수 있습니다.

특정 사용자의 권한으로 웹 서비스를 실행할 수있는 suExec에 해당하는 항목이 있습니까?

이 경우 도움이되는 특정 서비스는 Perl 스크립트이며 File::Find::Rule을 사용하여 지정된 경로의 내용을 한 단계 상세하게 나열합니다.

편집

모두는 SSL로 암호화 된 연결을 통해 전송됩니다.

+0

흠. 어쩌면 모든 행동을 별도의 스크립트에 넣고 쿠키의 암호화 된 사용자 이름에 기반하여'sudo'를 할 수 있습니까? 당신이 루트로 실행 중일 때, 실제 사용자로 sudo하는 것은 문제가되지 않습니다. –

+0

쿠키로 사용자를 암호화 했습니까? 그리고 http를 통해 데이터를 보냅니 까? 이는 매우 나쁜 생각입니다. http://codebutler.com/firesheep에서 누군가가 커피 숍에서 Wi-Fi를 통해 내 사이트를 사용하면 어떻게 될지 간단하게 보여줍니다. – btilly

답변

1

우선 중요한 보안 오류가 많이 있습니다. 가능한 한 높은 권한이 아닌 낮은 권한으로 웹 서비스를 실행해야합니다. 그렇게하면 누군가가 웹 서비스를 손상 시키면 상자를 손상시키지 않으면 안됩니다.

두 번째로 사용자 이름을 쿠키로 암호화하고 http를 통해 데이터를 전송하면 사용자가 세션 도용에 빠질 수 있습니다. 실제 사용자 계정에 대한 액세스 권한이 있다고 생각하면 문제가됩니다. 특히 얼마나 많은 사람들이 무선을 사용하고 얼마나 많은 어린이들이 firesheep과 같은 세션 하이재킹 도구를 가리키고 클릭 할 수 있는지 알려줍니다.

이러한 점을 이해하면 취할 수있는 몇 가지 접근 방법이 있습니다. prefork 웹 서버 (멀티 스레드가 아닌)를 사용한다고 가정하면 POSIX :: setuid를 사용하여 일시적으로 원하는 사용자로 변경 한 다음 다시 사용하여 정상적인 ID로 되돌릴 수 있습니다.

다른 쉬운 방법은 목록을 수행 할 때 웹 서버가 실행되는 모든 사용자가 액세스 할 수있는 스크립트를 만드는 것입니다. sudoers를 사용하면 암호없이 웹 서버에서 액세스 할 수 있습니다. 웹 서버를 루트 권한으로 실행하지 않아도되기 때문에이 방법을 선호합니다.

+0

모든 것이 https를 초과합니다. –

관련 문제