파일 이름에 허용되는 문자를 어떻게 제한할 수 있나요?

파일 이름에 허용되는 문자를 어떻게 제한할 수 있나요?

후속 조치Unix/Linux/POSIX 파일 이름 수정: 제어 문자(예: 개행 문자), 선행 대시 및 기타 문제*, 방법이 있나요?금지하다일반적인 Linux 커널/파일 시스템에서 문제가 있는 이름을 가진 파일을 생성하시겠습니까? 이는 낮은 수준에서 적용되어야 하므로 루트 액세스를 통한 구성 변경 외에는 어떠한 수정도 이러한 파일 이름을 생성할 수 없습니다. 예를 들어 파일 시스템 드라이버에 제어 문자, 개행 및 기타 문자(예: 이름 시작 부분의 하이픈) 없이 유효한 UTF-8 시퀀스만 허용하도록 지시하는 마운트 옵션이 이상적입니다.

사용 사례는 주로 보안 강화이지만 끔찍한 해킹을 하지 않고도 코드에서 파일 이름을 처리할 수 있는 것입니다(자세한 내용은 위의 기사 참조).

*: 지금까지 답변과 의견에서 제기된 대부분의 사항이 이 문서에서 해결되었습니다. 게시하기 전에 확인하시기 바랍니다.

답변1

파일 이름을 제한하는 모듈에 대한 제안이 하나 이상 있습니다. 이는 "Fiking Unix/Linux/POSIX Filenames"의 저자인 David A. Wheeler가 개발한 Linux 보안 모듈(LSM)입니다.

이에 대한 LWN 기사는 다음과 같습니다. Safename: "위험한" 파일 이름을 제한합니다.. 기사에 패치가 포함된 이메일 링크가 있습니다. 이것은 2016년 5월의 일이고 아직 직접 시도해 본 적이 없습니다. 견인력이 있는지 또는 최신 커널에 이식 가능한지 여부는 알 수 없습니다. 그러나 실제 코드에서는 제안이 이루어졌습니다.

답변2

일반적인 Linux 커널/파일 시스템에서 문제가 있는 이름을 가진 파일 생성을 비활성화하는 방법이 있습니까?

바로 여기에.

fanotify사용자 영역 프로그램이 감시하려는 디렉터리 트리에서 파일 작업을 가로채도록 할 수 있습니다 . 이는 금지된 파일 이름을 사용하는 것과 같은 작업을 수행하는 데 사용할 수 있습니다.

커널 ebpf 프로브를 사용하면 추가 컨텍스트 전환 오버헤드를 추론하지 않고(그리고 파일 시스템을 구현하거나 커널 모듈을 추가하지 않고도) 동일한 작업을 수행할 수 있습니다. 그러나 나는 그것을 시도한 적이 없습니다.

기사 작성자는 다른 사람(특히 운영 체제 및 유틸리티 작성자)이 공유하지 않는 문제가 있는 파일 이름에 대해 구체적인 견해를 갖고 있을 수 있으므로 귀하가 원하는 작업을 정확하게 수행할 수 있는 기성 도구는 없다고 생각합니다. 원하는 것을 요구하지만 몇 줄의 코드만으로 쉽게 코딩할 수 있습니다.

관련 정보