반응형

OS: Raspbian Jessie

Kernel version: 4.1.7-v7+

Device: Raspberry Pi 2 Model B



라즈베리 파이에서 리눅스 커널 헤더를 apt-get 으로 설치하면, 현재 OS가 실행 중인 것보다 낮은 버전이 설치된다. 실제 사용중인 버전의 커널 헤더를 설치하려면, 홈페이지에 가서 직접 다운로드받아서 설치해야 한다. (이전 포스팅의 1.2 Raspbian용 linux headers 다운로드/설치 항목 참조)


제는 이렇게 sudo dpkg -i로 헤더를 설치하면, 루트 권한으로 설치되면서 소스코드 파일의 퍼미션이 모두 루트만 읽고 쓸 수 있게 되어서 (아마도 600, -rw-------) 일반 유저 프로세스에서 접근할 수 없게 되는 것이다. 


이로 인해 아래와 같은 작업이 모두 루트 권한 없이는 불가능해진다:

  • 커널 모듈을 비롯해서 리눅스 헤더를 참조해서 빌드하는 경우 (make를 sudo make로 해야 되는 상황... 따라서 생성되는 파일이 모두 owner가 root가 되어버린다)
  • ctags 같은 vim 플러그인에서 리눅스 헤더 소스에 접근하지 못하게 됨 (permission denied 처리되면서 소스코드를 로딩하지 못함.)


일단 설치 자체가 루트 권한 없이 불가능하므로, 설치를 다 하고 나서 수동으로 퍼미션을 조정하기로 했다. 일단 리눅스 헤더 최상위 디렉토리 위치에서, 하위 디렉토리에 있는 모든 소스 파일에 644 퍼미션을 줘서 root가 아니어도 read-only 접근이 되도록 했다.


$ cd /usr/src/linux-headers-$(uname -r)

$ sudo chmod -R 644 ./*



이렇게 했더니 하위 디렉토리에 접근 자체가 안된다. 

생각해 보니 디렉토리는 755 퍼미션(drwxr-xr-x)을 줘야 한다. ㅡㅡ;

다행히, 현재 위치에서 하위에 있는 모든 디렉토리의 퍼미션을 755로 변경하는 방법도 있다. [1]


$ cd /usr/src/linux-headers-$(uname -r)

$ sudo chmod 755 $(sudo find ./ -type d)



<추가사항>

여기까지 하면 ctag 같은 작업에는 문제가 없지만, make는 여전히 안될 때가 있다.

가끔 make가 scripts 디렉토리에 있는 실행 파일을 써야 할 때가 있어서 그렇다.

scripts 디렉토리에 있는 실행 파일들도 디렉토리와 마찬가지로 755 퍼미션을 걸어 줘야 한다.

$ cd /usr/src/linux-headers-$(uname -r)/scripts

$ sudo chmod -R 755 ./*

$ sudo chmod -R 644 ./*.[ch]


scripts 디렉토리 안에 실행파일이 아닌 소스 파일들도 있어서 소스 파일은 그냥 실행 옵션을 뺐다.


이제 sudo 없이 make도 잘 되고, ctags도 잘 작동한다. ^^




<참고자료>

[1] "How to chmod all directories except files (recursively)?", http://superuser.com/questions/91935/how-to-chmod-all-directories-except-files-recursively/91966




반응형
블로그 이미지

Bryan_

,