2013-09-03 5 views
0

수퍼 유저가 770 액세스 권한으로 만든 파일 superuser.cpp이 있습니다. 이제 수퍼 유저는 open("superuser.cpp", O_RDONLY).을 사용하여 superuser.cpp가 열리는 파일 setuidDemonstration.cpp을 만듭니다. .cpp와 setuidDemonstration.cpp의 객체 파일은 권한이 rwxrwxr-x입니다. 이제 내 질문이 있습니다 : - 나는 열려 superuser.cpp 수 없었다 모두 일반 및 수퍼 유저 모드에서 프로그램 setuidDemonstration을 실행 setuid 비트가 켜져 있지만 프로그램에서 수퍼 유저 파일을 열 수 없습니다.

  1. . 왜? 최소한 수퍼 유저 모드가 열려 있어야합니다.

  2. 지금은 sudo chmod 4775 setuidDemonstration입니다. 이렇게하면 sudo chmod 4775 setuidDemonstration이 실행되었을 때 setuid 비트가 설정되어 실행 중 수퍼 유저의 권한을 얻게되므로 정상 모드에서도 superuser.cpp를 열 수 있습니다. 하지만 그렇게 할 수는 없습니다. 또한 정상 모드에서 실행하면서 euid를 인쇄하면 1000이 인쇄되고 0은 인쇄되지 않습니다. 왜?

업데이트 : 실수를 지적 해 주셔서 감사합니다. 파일 경로에서 '/'를 제거 했으므로 이제는 수퍼 유저 용으로 작동합니다. 하지만 지금은 sudo는 chmod 4775 이후 setuidDemonstration, 정상 모드는 파일을 여는 falis 프로그램을 실행합니다. Pls가 설명합니다.

+0

'superuser.cpp'파일이 실제로'/'에 직접 있습니까? – cnicutar

+0

@cnicutar ... 그렇습니다. setuidDemonstration.cpp와 같은 디렉토리에 있습니다. – avinash

+0

'/'은 무엇이고 현재 디렉토리와 어떻게 다른지 완전히 이해하고 있습니까? – cnicutar

답변

0

/superuser.cpp은 현재 작업 디렉토리가 아닌 파일 시스템 루트에있는 파일의 이름이기 때문에. 프로그램을 실행할 때 파일이 같은 경로에 있으면 superuser.cpp 또는 ./superuser.cpp을 사용하십시오.