/tmp/
나는 자신을 다운로드하고 그 결과를 디렉터리 내 새로 생성된 디렉터리 에 저장하려고 시도하는 취약점의 기본 사항을 다루고 싶습니다 .
보안상의 이유로 그 안에 폴더가 생성되지 않기를 바랍니다 /tmp/
. 또는 이것이 가능하지 않은 경우 특정 디렉터리에 폴더가 생성되지 않도록 하고 싶습니다 /tmp
.
답변1
을 사용하면 ls -l -d /tmp/
권한이 로 설정되어 있음을 알 수 있습니다 . drwxrwxrwt
즉 d
, 디렉토리, rwx
: 소유자, 그룹 및 기타(순서대로)에 대한 읽기, 쓰기 및 실행 권한 허용, t
고정 비트, 즉 소유자만 허용합니다. 파일을 삭제합니다(권한은 있지만 그룹은 아님). 지금은 끈적끈적한 부분은 제쳐두고 액세스 가능하려면 디렉토리가 실행 가능해야 한다는 점을 언급하겠습니다.
이제 다른 사람(소유자와 그룹은 루트임)의 쓰기 권한을 제한하려면 chmod o-w /tmp/
루트로 사용하십시오(즉, use sudo
).
하지만: /tmp/
임시 데이터가 필요할 수 있는 프로세스에 매우 중요하므로 이 폴더에 대한 권한을 전혀 제한하지 않는 것이 좋습니다!
특정 폴더로 이동하려고 하므로 가장 쉬운 방법은 폴더를 수동으로(루트로) 만든 다음 해당 권한을 제한하는 것입니다.
sudo mkdir /tmp/badfolder
sudo chmod -R o-w /tmp/badfolder/
chmod에 대한 참고 사항: -R
u, g, o: user, group, other, +-를 재귀적으로 실행하여 r, w, x 읽기, 쓰기, 실행 권한을 추가/제거합니다. 즉, 그룹 구성원이 파일에 쓸 수 있도록 허용하려면 chmod g+w file
.
고쳐 쓰다:
프로세스가 루트로 실행 중인 경우 "i" 속성도 설정해야 합니다. ~에서man chattr
"i" 속성이 있는 파일은 수정할 수 없습니다. 삭제하거나 이름을 바꿀 수 없으며 파일에 대한 링크를 만들 수 없으며 파일에 데이터를 쓸 수 없습니다. 수퍼유저 또는 CAP_LINUX_IMMUTABLE 기능이 있는 프로세스만 이 속성을 설정하거나 지울 수 있습니다.
폴더가 루트에 속하지 않은 경우에도 작동합니다. 그냥 사용
chattr +i /tmp/badfolder
chattr -i /tmp/badfolder
이를 삭제하고 -R
재귀적으로 작업을 수행하는 데 사용됩니다 .
답변2
Fixman의 아이디어 외에도 자체 심볼릭 링크를 만들 수도 있습니다.
sudo ln -s foo /tmp
$ touch /tmp/foo/bar
touch: cannot touch ‘/tmp/foo/bar’: Too many levels of symbolic links
#Or
sudo mkdir -m 000 /tmp/foo # create with mode 000, no permissions at all.
루트로 생성하면 루트가 아닌 악성 코드가 해당 파일을 삭제하거나 이름을 바꾸는 것을 방지할 수 있습니다.
모드 444(읽기는 하지만 쓰거나 실행하지는 않음)는 소프트웨어가 디렉토리를 나열할 수 없다고 불평하는 것을 방지합니다(귀하 ls -R /tmp
또는 동등한 사람이 그렇게 하는 경우).
그러나 chattr
루트킷 시도는 디렉터리가 생성되기 전보다 훨씬 적습니다.rm -rf /tmp/foo