>시스템 튜토리얼 >리눅스 >초보자가 Linux 시스템 호출을 배우기 위한 팁

초보자가 Linux 시스템 호출을 배우기 위한 팁

王林
王林앞으로
2024-01-18 10:12:05583검색

Linux 系统调用的初学技巧

지난 몇 년간 컨테이너 관련 작업을 많이 해왔습니다. 이전에 Go 몇 줄로 컨테이너 프레임워크를 작성한 Julien Friedman의 훌륭한 강연을 본 적이 있습니다. 컨테이너는 제한된 Linux 프로세스 내의 시스템일 뿐이라는 사실이 갑자기 나에게 떠올랐습니다.

이 제한된 뷰를 구축하려면 Golang 시스템 호출 패키지의 많은 호출이 필요합니다. 처음에는 피상적인 것만 사용했지만 잠시 후 양파의 다음 층을 벗겨내고 이러한 시스템 호출이 무엇인지, 어떻게 작동하는지 확인하고 싶었습니다. OSCON 강연에서 배운 내용을 공유하겠습니다.

이름에서 알 수 있듯이 syscall은 사용자 공간에서 Linux 커널에 대한 진입을 요청하는 시스템 호출입니다. 커널은 프로세스 생성과 같은 일부 작업을 수행한 다음 사용자 공간으로 돌아갑니다.

모든 시스템 호출을 커널로 전환하는 공통 메커니즘이 있으며, 이는 libc 라이브러리에서 처리됩니다. 사용자 공간 코드는 원하는 시스템 호출의 ID와 시스템 호출에 전달해야 하는 인수를 포함하여 일부 레지스터를 설정합니다. 제어권을 커널로 전송하기 위해 "트랩"을 트리거합니다.

이것이 사용자 공간 코드가 커널에 요청하는 방식이며, Linux에도 의사 파일 시스템이 있어 커널이 정보를 사용자 공간에 전달할 수 있으며 그 내용은 일반 디렉터리 및 파일과 같습니다.

/proc 디렉토리가 좋은 예입니다. 내부를 살펴보면 머신에서 실행되는 프로세스에 대한 모든 종류의 흥미로운 정보를 찾을 수 있습니다. cgroup(제어 그룹)과 같은 일부 경우에는 사용자 공간에서 이러한 의사 파일 시스템 아래의 파일에 기록하여 매개변수를 구성할 수 있습니다.

컨테이너로 작업할 때 특히 흥미로운 점은 호스트의 /proc에 컨테이너화된 프로세스에 대한 모든 정보가 포함되어 있다는 것입니다. 여기에는 /proc 의사 파일 시스템에도 저장되는 환경 변수가 포함됩니다. 이는 호스트가 실행 중인 모든 컨테이너의 환경에 액세스할 수 있음을 의미합니다. 환경 변수를 통해 자격 증명이나 데이터베이스 비밀번호와 같은 비밀을 컨테이너에 전달하면 보안 문제가 발생할 수 있습니다.

일반 프로그램을 작성하는 많은 프로그래머는 시스템 호출을 자주 사용한다고 느끼지 않을 수 있습니다. 그러나 실제로는 파일 만들기나 디렉터리 변경과 같은 일상적인 활동에 Linux 시스템 호출이 포함되기 때문에 자주 호출됩니다.

시스템 호출을 즐기기 위해 시스템 프로그래머가 될 필요는 없습니다!


작가 소개:

Liz Rice - Liz Rice는 Aqua Security의 기술 전도사이자 컨테이너 보안 전문가입니다. 이전에 그녀는 Microscaling Systems를 공동 창립하고 실시간 스케일링 엔진과 인기 이미지 메타데이터 웹사이트인 MicroBadger.com을 개발했습니다. 그녀는 네트워크 프로토콜 및 분산 시스템뿐만 아니라 VOD, 음악, VoIP와 같은 디지털 기술 영역에 이르는 소프트웨어의 개발, 팀 및 제품 관리에 대한 광범위한 경험을 보유하고 있습니다.


위 내용은 초보자가 Linux 시스템 호출을 배우기 위한 팁의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 linuxprobe.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제