open("/dev/kmem,O_RDWR)의 권한 문제

golbbang2의 이미지

엠베디드 리눅스를 사용하여 개발도중 문제에 봉착하여
이렇게 메일 올립니다. 다른 게시판의 글을 읽어봤는데
관련된 글이 없더라고요.

open함수를 사용하여 memory를 초기화하는데요

open("/dev/kmem", O_RDWR);

root로 로그인 한 상태에서는 아무 문제 없이 실행되는데
다른 계정으로 들어가 실행하면
"operation not permitted" 에러가 발생합니다.

chmod 4777 /dev
chmod 4777 /dev/kmem

으로 권한을 바꿔주어도 똑같이 에러가 발생합니다.
혹 엠베디드 리눅스만의 문제인가 싶어 데스크탑 리눅스에서
간단하게 테스트 프로그램을 만들어 해봤는데 결과는 같았습니다.

root 계정이 아니면 open함수를 사용할 수 없는 건가요...

간단하게 데스크탑에서 테스트 했던 소스 올려봅니다.
gcc로 컴파일 하셔서 사용하시면 됩니다.

File attachments: 
첨부파일 크기
파일 test.c374바이트
flyduck의 이미지

그건 그 장치 파일을 사용하기 위해서는 file permission 뿐만 아니라 capability라는 것이 필요하기 때문입니다. /dev/kmem 파일은 CAP_SYS_RAWIO capability를 필요로 합니다. 일반적인 설정에서는 root만 해당합니다. capability를 부여할려면 setpcaps 프로그램을 사용할 수 있습니다. capability 관련된 프로그램은 libcap package에 들어있습니다.

embedded system이라면 kernel 코드를 바꿀 수 있으니 kernel이 capability를 검사하지 않게 만들어 버리는 것도 정석은 아니지만 간단한 방법이겠습니다.

Freedom is another word for nothing left to lose,
Nothing doesn't mean nothing if it ain't free.

golbbang2의 이미지

빠른 답변에 놀랐습니다. 감사합니다.

워낙 제가 우매한지라 님의 답변 중에 모르는 부분이 있습니다.

혹시 capability를 수정하려면 kernel이 어느 부분을

봐야하는지.... 도움부탁드립니다.

커널은 2.4.4를 쓰고있습니다.

girneter의 이미지

답변이 아니라 죄송합니다만,
임베디드 기기 개발하신다면서

그런 일을 root 가 아닌 일반 user 가 해야하는 경우가 있나요?
그냥 궁금해서 여쭈어봅니다.

개념없는 초딩들은 좋은 말로 할때 DC나 웃대가서 놀아라. 응?

golbbang2의 이미지

현재 개발중인 넘은

FTTP에서 사용하는 인터넷 엑세스 장비를

감시하는 MCU를 개발하고 있습니다. 그런데 고객측에서

계정추가 기능을 요구하여 수정중인데 새로운 계정으로

로긴해서 application을 실행할때 오류가 발생했습니다.

flyduck의 이미지

drivers/char/mem.c : open_port()

이 함수에서 그냥 return 0을 하도록 하게 하면 될 것입니다.

Freedom is another word for nothing left to lose,
Nothing doesn't mean nothing if it ain't free.

golbbang2의 이미지

답변 감사합니다.

include/linux/sched.h : capable()

이 함수를 수정하여 해결 되었습니다.

다시 한번 감사드립니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.