open("/dev/kmem,O_RDWR)의 권한 문제
글쓴이: golbbang2 / 작성시간: 목, 2005/04/14 - 11:04오후
엠베디드 리눅스를 사용하여 개발도중 문제에 봉착하여
이렇게 메일 올립니다. 다른 게시판의 글을 읽어봤는데
관련된 글이 없더라고요.
open함수를 사용하여 memory를 초기화하는데요
open("/dev/kmem", O_RDWR);
root로 로그인 한 상태에서는 아무 문제 없이 실행되는데
다른 계정으로 들어가 실행하면
"operation not permitted" 에러가 발생합니다.
chmod 4777 /dev
chmod 4777 /dev/kmem
으로 권한을 바꿔주어도 똑같이 에러가 발생합니다.
혹 엠베디드 리눅스만의 문제인가 싶어 데스크탑 리눅스에서
간단하게 테스트 프로그램을 만들어 해봤는데 결과는 같았습니다.
root 계정이 아니면 open함수를 사용할 수 없는 건가요...
간단하게 데스크탑에서 테스트 했던 소스 올려봅니다.
gcc로 컴파일 하셔서 사용하시면 됩니다.
File attachments:
첨부 | 파일 크기 |
---|---|
test.c | 374바이트 |
Forums:
그건 그 장치 파일을 사용하기 위해서는 file permission 뿐만
그건 그 장치 파일을 사용하기 위해서는 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.
답변 감사드립니다.
빠른 답변에 놀랐습니다. 감사합니다.
워낙 제가 우매한지라 님의 답변 중에 모르는 부분이 있습니다.
혹시 capability를 수정하려면 kernel이 어느 부분을
봐야하는지.... 도움부탁드립니다.
커널은 2.4.4를 쓰고있습니다.
Re: 답변 감사드립니다.
답변이 아니라 죄송합니다만,
임베디드 기기 개발하신다면서
그런 일을 root 가 아닌 일반 user 가 해야하는 경우가 있나요?
그냥 궁금해서 여쭈어봅니다.
개념없는 초딩들은 좋은 말로 할때 DC나 웃대가서 놀아라. 응?
현재 개발중인 넘은FTTP에서 사용하는 인터넷 엑세스 장비를
현재 개발중인 넘은
FTTP에서 사용하는 인터넷 엑세스 장비를
감시하는 MCU를 개발하고 있습니다. 그런데 고객측에서
계정추가 기능을 요구하여 수정중인데 새로운 계정으로
로긴해서 application을 실행할때 오류가 발생했습니다.
drivers/char/mem.c : open_port() 이 함
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.
답변 감사합니다.include/linux/sched.h : cap
답변 감사합니다.
include/linux/sched.h : capable()
이 함수를 수정하여 해결 되었습니다.
다시 한번 감사드립니다.
댓글 달기