리눅스에서 c코드 백그라운드 실행하기 되나요?

ykw1101의 이미지

안녕하세요.. 리눅스 파일 열고 닫기, nano편집 기능만 조금 쓸 줄 아는 초보입니다. c도 배열, 포인터 부분에서 힘들어 공부를 해나가고 있습니다. 학교 과제연구로 제가 아는 것에서 더 공부해 활용할 수 있는 것을 생각해보았습니다.그래서 잡은 목표가,
리눅스에서 특정 파일에 접근할 때, 키보드로 특정 패턴을 입력해야 그것이 실행될 수 있게하는 프로그램을 만들고 싶습니다. 특정파일 위치를 코드에 넣어놓으면, 그 위치 접근 시에 코드가 작동되도록 하는 것입니다. 그리고 특정 키 패턴은 상단은 a, 하단은 c 이런식으로 문자로 대입을 시키고 텍스트 파일로 저장을 시키고 암호화를 시킨 후, 키 패턴을 입력한 후 복호화 하여 대조해서 맞으면 실행을 시키는 프로그램을 구상 중입니다. 그런데 저와 함께하는 친구도 아직 지식이 얕아 이것이 실현 가능할지 모르겠습니다. 그래서 전문가 분들의 조언을 구하고 싶습니다.

원래는 목표가 윈도우였지만, 리눅스에서는 특정 프로그램과 코드를 백그라운드로 실행하는 것이 더 쉽다고 하여 변경한 것입니다. 제가 저 프로그램을 너무 간단하게 생각하는 것 같기도 하여, 아직 본격적으로 시작하기 전에 조언을 듣고 과연 저것이 어느정도 공부를 해야 가능할지, 어떤 것을 공부해야할지 알고싶습니다. 혹시 보완을 해주실 수 있다면 해주시면 너무나 감사할 것 같습니다. 부디 좋은 답변 부탁드립니다.

anony999의 이미지

아무나 특정 프로그램을 실행하지 못하도록 보호하겠다는 것은..
간단히 생각해 볼 수 있는 괜찮은 아이디어 같지만..
막상 만들어 놔도 실제로는 그다지 유용한 프로그램이 될 것 같지는 않네요.
실제로 이용되는 구체적인 상황을 고려해 보면, 생각해 봐야 할 점도 많구요.

우선적으로 *nix 프로그램은 전통적으로 permission 와 ownership 에 의해 보호됩니다.
여기에 SELinux 라던가, SecureOS 와 같은 추가 모듈을 통해 좀 더 다양하게 제어할 수도 있죠.
로그인 된 사용자의 credential 을 가지고 다양한 방법으로 접근 제어를 하고 있다는 의미입니다.

패턴을 입력해야 하는 상황이라면..
추가적으로 사람에 대한 확인이 한 번 더 이루어진다는 것 외에는 특별한 장점을 기대하기 어려울 것 같고..
패턴 파일에 대한 보호(삭제, 변조)와 실행파일의 복사 또는 link 를 이용한 접근..
super user (root) 권한을 이용한 접근 등..
다양한 상황에 대해서도 많은 고민이 필요할 것으로 보입니다.
쉽게 우회해서 무력화 시킬 수 있는 보안 프로그램이라면 있을 필요가 없죠.

게다가 누구로부터 무엇을 지킬 것인지에 대한 내용도 불명확 합니다.
사용 대상이 일반 사용자인지, root 도 포함되는지, 패턴을 사용자 별로 임의로 변경할 수 있는지..
아니면 빌드할 때 fix 시킬 것인지.. 등등..
목적과 스펙, 시나리오를 꼼꼼히 정리하지 않으면 만들다가 공중에 붕 뜨게 될겁니다.

이게 다 정리 된 후에야, 어떻게 만들 것인지 그 방법을 고민해 봐야 하는 거죠.

라이브러리로 만들어서 각자 알아서 쓰도록 배포할 수도 있고, 아예 shell 을 수정해서 배포할 수도 있고..
kernel 에서 system call 을 hooking 하거나, inotify 를 이용해 볼 수도 있을 테구요..
스펙에 따라 다양한 방법을 찾아 낼 수 있을 겁니다.

백그라운드로 실행한다는게, 데몬 프로세스를 의미하는 건지..
아니면 뭔가 다른 이상한 과정을 떠올리고 그걸 백그라운드로 실행한다고 표현하신건지 잘 모르겠지만..
어쨋뜬 그 내용들이 다 정리되야, 그 방법이 맞는지 아닌지 생각해 볼 수 있을 것 같네요.

ykw1101의 이미지

*제가 적어놓은 백그라운드 프로그램이라는 것은 백신의 실시간 탐지기능 처럼 작업 표시줄에 직접 드러나거나 실행창이 뜨지는 않지만, 계속 작업을 수행하는 프로그램을 생각하고 적은 것입니다.

먼저 답변 정말 감사드립니다! 아직 지식이 모자라 말씀해주신 것을 모두 이해를 하진 못하지만, 제가 단순하게 생각한 것 뿐만아니라 고려해야할 점이 정말 많고 이 점들을 고려해야 유용한 프로그램인지 판단하고 제작을 해나갈 수 있다고 하신 것으로 이해했습니다.
SElinux, hooking 등의 용어는 아직 지식이 모자란 관계로 이 부분은 더 알아보면서 차차 이해를 해나가겠습니다. 참고로 말씀드리면 저는 아직 고등학생이고, 더군다나 수험생이라 많은 시간을 쏟기 힘들고 어쩔 수 없이 말해주신 것을 모두 고려해서 제작하기가 힘듭니다;;
이런 환경 상 급하게 짠 것이라 유용성 등도 제대로 생각을 하지 못하였구요, 가장 하고 싶고, 할 수 있을 것 같다고 생각된 것을 목표로 잡고 간단하게만 '구상'해본 것이므로 당연히 미숙하리라 생각됩니다. 제 질문의 요지는 '과연 저것이 가능한가요? 가능하다면 어떤 과정을 밟아야 할까요' 라는 것이었습니다.
그리고 답변이 정말 많은 도움이 되었다고 생각합니다. 더 유용성 있는 프로그램과, 추가적으로 고려할 것들의 방향을 잡아주셨다고 생각합니다. 혹시 실례가 되지 않는다면 따로 연락을 해서 저희가 고려해야할 것들을 구체적으로 로드맵?을 잡아주실 수 있나요? 학교에 컴퓨터 관련으로 깊게 아시는 분이 안계셔서 쌩으로 둘이서 하다보니 방향을 잡기 조차 벅찹니다... ㅠㅠ 되신다면 답글 바라겠습니다.

anony999의 이미지

일반적인 프로그램과 달리 보안 기능을 수행하는 프로그램들은 대개 완벽을 요구합니다.
기능상에 헛점이 발견되거나 오동작 하게 되는 순간..
보호하려는 대상은 물론 관련된 시스템/자원에도 나쁜 영향을 끼치기 때문입니다.

게임이나 일반적인 유틸리티 성 프로그램 들은 개취에 따라 호불호가 갈리긴 해도..
누군가는 쓰는 사람이 있기 마련이지만.. 신뢰성을 잃어버린 보안 프로그램은 아무도 쓰지 않습니다.
아무도 쓰지 않는 프로그램을 만드는 것은 그냥 나 키보드 연습 좀 했다는 것 외에는 별 의미가 없죠.

그냥 프로그래밍 연습 삼아 해보는 거라면야.. 뭔들 상관 없겠지만..
보안 솔루션 전문가를 목표로 하신다면 적어도..
그런 기준에 어느 정도 부합하는 결과물을 낼 수 있도록 해야 하지 않겠습니까?

현재 어느 정도 수준에 계신지는 잘 모르겠지만..
아직 고등학생이시라면 우선은 프로그래밍과 OS 공부를 좀 더 하시는게 어떨까 싶네요.
논리학 입문, linux 입문, C 문법, 자료 구조, 알고리즘, 시스템 프로그래밍, 네트워크 프로그래밍 정도 해서..
가능한 한 얇고 빠르게 읽을 수 있는 책 하나씩 사서 모두 읽고..
대표적인 linux 명령을 몇 개 골라서 직접 구현해 보는 걸로 시작하면 괜찮을 것 같은데 말이죠..

그게 좀 되면.. 이제 기존에 나와 있는 다양한 툴들을 하나씩 찾아서 분석해 보면서 공부하면 되겠네요.
http://sectools.org/

'고등학교 때 이러이러한 보안 프로그램을 개발해 본 사람' 이라는 타이틀 하나가 필요한게 아니라면..
여유 있을 때 차근 차근 기초를 다져 두는게 오히려 빨리 가는 길이라 생각합니다.

끝으로, 다들 자기 먹고 사는 것도 벅찬 이 험난한 시절에..
앞으로 어찌 될지도 모르는 다른 사람을 위해 시간을 쪼개어 줄 사람이 과연 있을까 궁금하네요.
어중간한 사람 하나 보다는 KLDP 나 stackoverflow 를 선생 삼으시는게 나을 것 같습니다.

아.. 그리고 가능하냐는 질문에 대한 답이 빠진 것 같은데..
프로그램의 스펙이 명확하지 않기 때문에 뭐라 말하기는 어렵지만..
시스템의 특성과 한계를 초월하는 이상한 프로그램이 아닌 한..
대부분의 프로그램들은 그냥 그렇게 동작하도록 만들면 됩니다. -.-
문제가 생기면 타협을 해서 기능을 변경하거나, 제약 사항을 두면 되는거구요.
뭐를 만들어야 할 지 모르는게 문제지, 그게 되냐 안되냐는 부차적인 것입니다.

위의 모든 내용에도 불구하고, 다 필요없고 나는 당장 이 프로그램을 만들어 봐야겠다 싶으시면..
사용자 관점에서 매뉴얼 처럼 이 프로그램의 구성 요소와 사용법을 정리해 보세요.
패턴은 언제 누가 등록하고, 패턴 초기화는 어떻게 하며, 대상 프로그램은 어떻게 선정/등록 하고..
패턴은 어디에 어떻게 저장되어 있고.. 패턴이 틀렸을 때에는 어떤 결과가 나오고.. 등등
그러면.. 아마도 누군가가.. 이 프로그램은 이런식으로 구현하면 되겠군요.. 하고 답을 달지도 모릅니다.

참고로, 이런식으로 정리하는 것은 나중에 기능 명세를 적을 때 도움이 됩니다.
http://elky.tistory.com/598

ykw1101의 이미지

열심히 공부하여 구체적인 목표를 짜고 이뤄나갈 수 있도록 하겠습니다. 자세한 답변 감사드립니다.

pynoos의 이미지

백신의 실시간 탐지기능은 과거엔 dazuko 모듈을 썼었는데, 요새는 어떻게 하는지 모르겠군요.

 의 이미지

리눅스가 윈도우즈보다 백그라운드(?) 동작 프로그램을 만들기 쉽다?

OS별로 미묘한 차이가 있기는 합니다만 대체로 큰 문제는 아닙니다. 특히 귀하께서 구현하고자 하는 기능에 비하면요.

지난 스레드(https://kldp.org/node/159154)에서 말씀하시기로는 보호 대상 프로그램을 직접 수정하지는 않는다고 하셨는데, 사실 그렇게 하는 게 비록 배경지식(실행 파일 구조 등)이 좀 필요하기는 하지만 더 간단히 생각해낼 수 있는 솔루션이거든요.

그렇게 하지 않고 원하는 기능을 구현하려면, 예컨대 컴퓨터 백신의 "실시간 감시" 비슷한 기능을 구현해야 합니다. 대체로 이런 구현은 매우 OS 의존적인 지식과 테크닉을 필요로 합니다.

하지만 일단 그런 건 나중 문제입니다. 구현보다는 정책을 먼저 구체화시키는 게 우선일 것 같은데요.

https://en.wikipedia.org/wiki/Security_policy

아주 러프하게 말하면, "보안"이란 내가 원하지 않는 일이 일어나지 않게 막는 것이라고 할 수 있지요. 귀하께서 "일어나길 원하지 않는 일"은 무엇인가요?

지금까지의 말씀으로 파악하기로는 "인증되지 않은 사용자가 특정 프로그램을 사용하는 일"을 막고자 하는 것으로 보이는데...

(1) "인증되지 않은 사용자"의 범위는 어디까지인가요? 같은 사용자 계정을 쓰는 다른 사람? 다른 사용자 계정을 쓰는 사람? 루트 유저? 제3자?
(2) "특정 프로그램"의 범위는요? 지정된 경로에 있는 프로그램만? 아니면 (어디에 위치하든) 지정된 프로그램 그 자체? 예컨대 어떤 방법으로든 지정된 프로그램이 다른 곳으로 이동되거나 복사된다면 그것도 같이 보호하나요?

등등. 어떤 정책을 선택하는지에 따라 귀하께서 해결해야 할 문제의 난이도가 천차만별로 달라집니다. 현실적으로 거의 구현이 불가능한 수준일 수도 있고, 기존의 메커니즘(파일 시스템 기반 소유/퍼미션) 으로도 충분할 수 있지요.

ykw1101의 이미지

A1. '인증되지 않은 사용자'는 패턴을 설정한 사람을 제외한 모든 사용자 혹은 침입자 입니다. 해킹을 당해도 중요한 파일이나 프로그램을 실행하지 못하게 하고 싶습니다. 물론 그러려면 저희가 만든 프로그램에 대한 보안이 필수적이라고 생각합니다. 그것을 구현할 수 있을지 모르겠지만.. 일단은 코드로 프로그램을 구현하는 것이 목표입니다.
A2. 저희가 바라는 것은 지정된 프로그램 혹은 파일 그 자체입니다. 만약 복사된 것도 보호를 하게 구현할 수 있다면 정말 좋을 것이라고 생각합니다만, 우선은 지정된 프로그램 자체를 보호하는 것을 목표로 하지만, 이것이 힘들다면 좀 더 쉬운 방법을 찾을 것 같습니다.

답변 감사드립니다. 어쨌든 결국, 제가 어느정도로 목표를 잡고 세부적인 것을 고려하냐에 따라 달렸다는 것이군요. 일단은 정말 기본적인 구현이 1차적 목표이기 때문에 c언어와 리눅스를 우선적으로 공부하고 구현이라도 해봐야겠습니다. 정말 이 커뮤니티에서 한낱 고딩이 많이 배우네요... 이런 프로젝트를 진행해본 적이 없다보니 목표를 잡고 그것을 구체화시키는 것 조차 제대로 할 생각을 안했습니다. 어떤 것을 고려해야 할지도 몰랐었고 그저 해보자 라고 생각하며 안일하게 행동한 것 같습니다. 열심히 공부해 결과물을 최대한 내보도록 노력하겠습니다. 감사합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.