리눅스 capabilities로 root 권한 쪼개기 — setcap, capsh, ambient 집합
80번 포트를 열어야 한다는 이유 하나로 데몬 전체를 root로 띄우거나, 바이너리에 setuid root를 붙이는 경우가 흔하다. 문제는 그 순간 프로세스가 얻는 것이 "포트 바인딩 권한"이 아니라 커널이 정의한 41개 권한…
80번 포트를 열어야 한다는 이유 하나로 데몬 전체를 root로 띄우거나, 바이너리에 setuid root를 붙이는 경우가 흔하다. 문제는 그 순간 프로세스가 얻는 것이 "포트 바인딩 권한"이 아니라 커널이 정의한 41개 권한…
컨테이너가 "격리"된다고 할 때 그 격리를 실제로 만드는 건 커널의 네임스페이스다. 도커나 podman 없이도 unshare 명령 하나로 같은 격리를 만들 수 있고, 그렇게 해보면 컨테이너 런타임이 무엇을 조립하고 있는지가 훨씬…
리누스 토발즈가 8월 16일(현지 시간) 커널 7.2를 릴리스한 직후 7.3 머지 윈도우가 열렸습니다. 첫 rc는 8월 30일경, 최종 릴리스는 10월 말로 예상됩니다. 올해 LTS가 7.3이 될지 7.4가 될지도 이 사이클…
USB 디스크를 두 개 꽂으면 /dev/sdb와 /dev/sdc가 부팅마다 뒤바뀐다. 특정 시리얼 장치에만 권한을 열어주고 싶은데 chmod는 재부팅하면 원래대로 돌아간다. 둘 다 udev 규칙으로 푸는 문제다. udev는 커널이 올린 uevent를 받아…
슬랩 캐시가 메모리를 얼마나 쓰는지 확인할 때 보통 /proc/slabinfo를 먼저 연다. 하지만 slabinfo에는 캐시별 오브젝트 수와 슬랩 수만 있어서, 이 캐시가 다른 캐시와 병합된 것인지, 슬랩 한 장이 몇 페이지인지,…
앞선 두 글에서 GCC/Clang 빌드와 KCFI 빌드의 슬랩(slab) 사용량을 비교할 때 쓴 테스트 커널은 모듈을 하나도 올리지 않은 상태였다. LTO(Link Time Optimization)도 같은 방식으로 재면 부팅 직후 슬랩은 Clang 빌드와…
KCFI(CONFIG_CFI_CLANG)는 간접 호출마다 함수 타입 해시를 대조해 제어 흐름 하이재킹을 막는 Clang 전용 보호 기능이다. 함수마다 타입 ID가 붙고 호출 지점마다 검사 코드가 들어가니 커널이 커지는 것은 분명한데, 그러면 런타임…
이번 주 LWN.net 위클리 에디션 주요 내용이다. Debian이 LLM 사용 정책을 두고 8개 선택지를 놓고 투표에 들어갔고, 커널 7.2가 릴리스되면서 역대 두 번째로 많은 커밋과 사상 최다 신규 기여자 기록이…
커널을 Clang으로 빌드하면 GCC 빌드와 메모리 사용량이 달라질까. 컴파일러가 바뀌면 인라이닝과 코드 생성이 달라지니 커널이 잡는 슬랩(slab) 메모리도 따라 달라질 것 같지만, 실제로 재보면 어느 쪽이 얼마나 다른지 숫자로 답한…
슬랩 캐시가 계속 커질 때 /proc/slabinfo는 어느 캐시에 오브젝트가 몇 개 있는지만 알려주고, 그 오브젝트를 누가 할당했는지는 알려주지 않는다. SLUB에는 오브젝트마다 마지막 할당·해제 호출 스택을 기록하는 기능이 있어서 이 질문에…