시스템 프로그래밍 6

커널 모듈(Kernel Module)

임베디드 시스템 위에서 작업을 하다보면 경량화 된 리눅스 이미지 위에서 작업을 해야 할 일이 있다. 그러다 보면 Ubutu 나 Debian 같은 Linux 시스템 위에서는 잘 돌아가던 프로그램이 경량화 된 리눅스 위에서는 안돌아가는 경우를 마주할 수 있다. 이런 경우 대부분의 원인은 커널의 모듈이 빠져서 그런데 이런 경우 커널 모듈(Kernel Module)을 추가해주거나 커널 설정(Kernel Config) 를 수정해서 다시 커널을 빌드해줌으로써 문제를 해결할 수 있다. 그렇다면 과연 커널 모듈이란 무엇일까?  커널 모듈은 커널의 기능을 구성하는 코드 조각으로 일반적으로 .ko (Kernel Object) 파일 형태로 저장되며, 필요에 따라 동적으로 로드되고 관리되고 필요한 모듈만 따로 구성함에 따라 ..

dmesg vs journalctl

시스템을 디버깅 하다보면 로그를 봐야할 일이 많이 있다. 파이썬이나 C 에서 띄워주는 컴파일/런타임 에러 말고.. 시스템에서 부팅 또는 커널레벨에서의 로그를 봐야 하는 경우가 왕왕 있다. 이 경우 많이 쓰는 두 명령어가 바로 'dmesg' 와 'journalctl' 이다.  그런데 궁금한 점은 이 두 로그를 보는 명령어는 어떤 차이일까? 그리고 어떤 경우에 어떤걸 사용해야 할까? 이번 기회에 한번 정리해보았다. dmesg란?dmesg는 "diagnostic message"의 약자로, 리눅스 커널에서 발생하는 진단 메시지를 확인할 수 있는 명령어다. 주로 커널에서 하드웨어, 장치 드라이버, 그리고 시스템 부팅 과정에서 발생한 이벤트를 확인하는 데 사용된다. - 로그의 위치: /var/log/dmesg해당 ..

SELinux: 리눅스 보안 툴 2

SELinux 보안 컨텍스트 관리작업을 할 때 안드로이드를 부팅할때마다 `setenforce 0` 를 켜줘야 화면이 부팅되는 이슈가 있었다. 처음에는 기계적으로 명령어를 쳤지만 곧 이게 SELinux 라는 놈의 모드를 변경하는 명령어라는 것을 알았다. SELinux 는 리눅스의 보안툴인데 AppArmor 를 정리한 김에 SELinux 도 한번 정리해보기로 했다. SELinux란?리눅스 시스템에서 강력한 보안 정책을 구현하기 위해 설계된 프레임워크이다. SELinux 를 이해하기 위해서는 MAC(Mandatory Access Control) 이라는 개념을 이해해야한다.  MAC(Mandatory Access Control)이란? 리눅스에서는 기본적으로 user 와 group 을 기반으로 파일시스템 등의 자..

AppArmor, 리눅스 보안 툴

업무를 하던 중 system daemon 이 특정 directory 에 접근하지 못해서 이를 해결하느라 애를 먹었다. 알고 보니 AppArmor 라는 보안 기능이 system daemon 의 파일 접근 권한을 막고 있었다.. 그래서 이번 기회에 AppArmor 에 대해 한번 정리해보았다. AppArmor 의 핵심은 각 process 가 허용된 자원 (파일 시스템, 네트워크 등)에만 접근하게 허용해주는 것이다. system daemon 같은 경우는 root 권한을 갖고 돌기 때문에 악용된다면 보안적으로 심각한 문제를 초래할 수 있기에 이런 보안적인 장치가 꼭 필요하다! 예를 들어, Apache2와 같은 웹 서버는 일반적으로 다음 경로에만 접근하도록 설정할 수 있다./etc/apache2: 설정 파일 경로/..

GStreamer 란?

회사에서 GStreamer 로 작업을 해야할 일이 생겼다. 단순히 시스템에서 Video 를 띄우는 작업이었는데 GStreamer 라는 툴을 이용해서 진행했다. 단순하게 비디오를 띄우는 작업이라면 `xdg-open` 을 쓰면 되지 않아? 라고 생각했으나 우리의 use-case 는 단순히 비디오를 띄우는 것 뿐 아니라 비디오를 원하는 화면 사이즈에 맞게 조정해서 띄우거나 필요에 따라 재생 동작을 제어하는 등 등 섬세한 컨트롤이 필요했다. 그래서 일반적인 미디어 플레이어를 쓰기 보다 조금 더 섬세한 컨트롤을 할 수 있는 기능이 필요했고 그걸 도와주는 툴이 바로 GStreamer 였다. GStreamer 란? GStreamer는 멀티미디어 애플리케이션을 개발하기 위한 오픈소스 프레임워크다. 주로 C 언어로 작성..

왜 자꾸 sudo apt update 를 쳐줘야 할까?

Ubuntu와 같은 Debian 계열의 Linux를 사용하다 보면 "sudo apt install", "sudo apt update" 같은 명령어를 자주 보게 된다. 특히 "sudo apt update"는 굉장히 자주 등장하는데, 이 명령어가 정확히 무슨 일을 하는지, 왜 이렇게 자주 쳐야 하는지 궁금해하는 사람들이 많다. 이 글에서는 apt 라는 도구의 역할과 그 속에서 "sudo apt update"와 "sudo apt upgrade"가 어떤 역할을 하는지 알아본다. apt install 이 하는 일 예를 들어 vim이라는 소프트웨어를 설치하고 싶으면 다음 명령어를 쳐주면 된다. sudo apt install vim  이 명령어를 실행하면 APT는 저장소(repository) 라고 불리는 패키지 서버..