4.3. 파일 기술자

프로그램은 일련의 "오픈 파일 기술자" 즉 미리 열려 있는 파일을 넘겨받는다. setuid/setgid 프로그램은 사용자가 어떤 파일을 오픈할 것인지 및 무엇에 오픈할 것인지 (허가 한계내에서) 를 선택할 수 있다는 사실을 처리해야 한다. setuid/setgid 프로그램은 새로운 파일을 열때 늘 고정된 파일 기술자 id 로 열릴 것이라고 가정하지 않아야 한다. 또한 표준 입력 (stdin), 표준 출력 (stdout) 과 표준 에러 (stderr) 이 터미널을 참조하는지 또는 동등하게 열려 있는지 가정하지 않아야 한다.

이에 대한 논리적 근거는 쉽다; 공격자가 프로그램 시작전에 파일 기술자를 열거나 닫을 수 있기 때문에 예기치 않은 상황을 생성할 수 있다는 것이다. 공격자가 표준 출력을 닫는 다면 프로그램이 다음 파일을 열 때 이 파일이 표준 출력인 것처럼 열려질 것이며 곧 모든 표준 출력을 그 파일로 보낼 것이다. 어떤 C 라이브러리는 stdin, stdout 와 stderr 이 (/dev/null 에) 이미 열려져 있지 않다면 이들을 자동적으로 열 것이다. 물론 모든 유닉스 계열 시스템에 동일하게 적용되지는 않는다.