[질문] 사용자 계정에 root 권한을 부여하기

안녕하세요. 네트워크 프로그래밍 입문자입니다.
Oracle VM VirtualBox를 이용하여, 윈도우7 beta내에서 Ubuntu 10.04 를 돌리고 있습니다.

그런데, 처음 Ubuntu 설치시 생성한 사용자 계정으로는 여러모로 제약이 많더라고요.
간단한 예로, pcap 라이브러리를 이용하여 아래와 같은 함수코드를 사용하였습니다.
dev = pcap_lookupdev()

이것은, 설치된 네트워크 장치중 가장 첫번째 것의 장치명을 반환하는 함수인데요.
네트워크 장치를 찾을 수 없거나, 장치에 접근할 수 없으면 NULL을 반환합니다.

그런데 사용자 계정에서 그냥 ./filename 이라고 치면 NULL이 반환되고,
꼭 sudo ./filename 으로 해야만 eth0 을 반환하더라고요.

그밖에도 매번 sudo를 입력해주거나, 터미널 접속후 sudo su 등의 명령어를 입력해줘야 하는
번거로움에, 사용자 계정에 root 권한을 부여하는 방법을 찾고 있습니다.

네이버나 구글도 뒤져봤으나, /etc/passwd 라든가 sudoers 등의 파일을 수정하는 방법은
수정후 uid 및 권한 변경 등으로 인해 부팅에러가 발생해 버리더군요…

무슨 좋은 방법 없을까요? 조언을 부탁드립니다.

※ 학습용으로 사용중인 개인사용자이기에, 보안상 취약해 진다는 등의 문제는 개의치 않습니다.

/etc/passwd

파일을 열고 자신의 사용자 계정명을 찾으신 다음에

ex)
yemharc:x:1000:1000:yemharc…

라고 되어 있는 부분의 숫자를 모두 0으로 바꿔주세요

yemharc:x:0:0:yemharc…

같은 형태가 되면 됩니다.

P.S.
그러고 보니 아래쪽에 root계정 설정연동(?) 물어보셨었군요.
…왜 이 생각을 못했을까요 (…)

답변 감사드려요.

그런데 위 방법을 수행하니 sudo를 사용하지 않아도 되는 반면,
다음과 같은 현상이 발생하였습니다.
(사용자 계정명은 임의로 clowk 라고 합니다)

◆ 부팅시 기존에는 [clowk] [기타] 두가지 선택지가 존재했었으나,
이것이 모두 사라지고 [로그인] 버튼 하나만 남아있습니다.
(로그인 버튼을 누르고 clowk을 입력하면 로그인 됩니다)

◆ 터미널 등에서 다음와 같이 표기됩니다

  • 기존 : clowk@clowk-desktop $
  • 적용후 : root@clowk-desktop #
    다시 말해, 루트 계정으로 로그인 한 상태와 같이 출력됩니다.

◆ 위 현상을 뒷받침하듯이, root 계정으로 로그인했을때 발생하는 문제점들이 생겼습니다.

  • 부팅하면 항상 기본 소리크기가 0 으로 잡혀있습니다.
  • 장치 작동은 되는 반면에, 장치가 잡히지는 않습니다.
    (예를 들어, 소리는 나오는데 [시스템] - [기본 설정] - [사운드]로 가면
    "사운드 시스템이 응답하기를 기다립니다" 메시지만 계속 출력됩니다)

여러 가지 바뀐 점들이 있는데, 종합해서 말씀드리자면
[color=#FF4000:1ld418ru]기존 계정 clowk에 root 권한을 부여한 효과가 아니라
로그인 때 입력하는 계정명만 clowk일 뿐, root로 로그인 한 것과 동일한 상태가 되버립니다.[/color:1ld418ru]
(clowk에서 지정한 사용자 환경설정, OS 옵션설정 등이 날아가버리고, root 설정이 되버립니다)

… 다른 해결책은 없을까요? ㅠ

[quote="yemharc":1ld418ru]/etc/passwd

파일을 열고 자신의 사용자 계정명을 찾으신 다음에

ex)
yemharc:x:1000:1000:yemharc…

라고 되어 있는 부분의 숫자를 모두 0으로 바꿔주세요

yemharc:x:0:0:yemharc…

같은 형태가 되면 됩니다.

P.S.
그러고 보니 아래쪽에 root계정 설정연동(?) 물어보셨었군요.
…왜 이 생각을 못했을까요 (…)[/quote:1ld418ru]

흠… 간단하게 말해서 앞/뒤의 숫자는 각각

UID와 GID를 가리키는 숫자입니다.
약간의 꼼수로 앞의 숫자는 자신의 숫자를 그대로 사용하고 뒤쪽의 숫자만 0으로 바꿔서

UID는 일반 유저이지만 Group은 root로 바꿔서 사용하는 방법이 있습니다.
리눅스의 퍼미션 구조가

user / group / other
rwx / rwx / rwx

인 것을 이용하는거죠.
다만 이렇게 하면 완벽한 root권한은 얻지 못하고, 경우에 따라서는 여전히 sudo 명령이 필요해집니다.

(보통의 경우 퍼미션 세팅은 755… 그러니까 그룹에 속한 유저부터는 읽기/실행만 가능한 세팅이 대부분입니다)

ps
만약 이 방법을 적용하신다면

yemharc:x:1000:1000:yemharc…
------------------->
yemharc:x:1000:0:yemharc…

이같이 바꿔주시면 됩니다.

음… 이렇게 하니, 제가 하는 프로그래밍 작업에서는 거의 대부분이 sudo 가 필요하네요 ;;

예전에 한번 bash 였나 sh 였나하는 파일을 열어 간단한 문구를 한두줄 추가해준 것 만으로
root 권한이 얻어졌던 것 같은데… 혹시 그 방법에 대해서 아시는 바 없으신지요? ㅇ_ㅇ;

[quote="yemharc":rzcu6z80]흠… 간단하게 말해서 앞/뒤의 숫자는 각각

UID와 GID를 가리키는 숫자입니다.
약간의 꼼수로 앞의 숫자는 자신의 숫자를 그대로 사용하고 뒤쪽의 숫자만 0으로 바꿔서

UID는 일반 유저이지만 Group은 root로 바꿔서 사용하는 방법이 있습니다.
리눅스의 퍼미션 구조가

user / group / other
rwx / rwx / rwx

인 것을 이용하는거죠.
다만 이렇게 하면 완벽한 root권한은 얻지 못하고, 경우에 따라서는 여전히 sudo 명령이 필요해집니다.

(보통의 경우 퍼미션 세팅은 755… 그러니까 그룹에 속한 유저부터는 읽기/실행만 가능한 세팅이 대부분입니다)

ps
만약 이 방법을 적용하신다면

yemharc:x:1000:1000:yemharc…
------------------->
yemharc:x:1000:0:yemharc…

이같이 바꿔주시면 됩니다.[/quote:rzcu6z80]

일단 제가 쓰는 방법이 정확한 건지는 잘 모르겠습니다.(전 컴퓨터 관련 일을 하지 않으므로 권한문제도 잘 모릅니다.)

하지만 셋유아이디, 셋지아이디란 방법 (아마 유저권한세팅이나 그룹권한 세팅 같습니다.)을 써서 현재 사용하고 있습니다.

mpd 를 시동하거나 설정 변경할 때 루트권한이 필요한데 이게 귀찮아서 찾아본 방법이고 현재 아무 문제없이 쓰고 있습니다.

즉, chmod 755 라고 하면 -rwxr-xr-x 란 권한이 생기고, chmod +w 라고 하면 쓰기권한이 생기는 것처럼…

마찬가지로 chmod +s 라고 하면 소유자나 그룹이 루트권한인 것처럼 실행됩니다.
chmod 4xxx 형식 (= chmod u+s) 이 유저에게 권한을 주는 것이고, chmod 2xxx 꼴(= chmod g+s )이 그룹에 권한을 주는 것입니다.

이외에도 chmod 10xxx 꼴로 스틱키비트를 설정하고 공유폴더로 사용한다는데 이건 정확히 무슨 뜻인지를 몰라서 해 본 적이 없습니다.

아무튼 결론은

[code:1nrja25l] sudo chmod +s /path/filename.bin [/code:1nrja25l]
처럼 해 보시라는 겁니다. 이렇게 파일에 권한변경을 한 이후에 그 파일을 유저가 실행시키면 바로 동작합니다.
사용자 유저가 abcd 라면 filename.bin 을 실행할 동안은 abcd 가 root 처럼 동작하며 실행시 암호도 물어보지 않을 겁니다. 제 경험상 그렇더군요.

ls -l /path/filename.bin 처럼 확인해 보면 파일 권한이 -rwsr-s-r-x 처럼 x 자리에 s가 대신한 걸 확인할 수 있습니다.

chmod를 이용한 방법은 이미 사용해 보았지만,
원체 명령어가 아니라 장치 접근 권한(?) 쪽이 문제가 있는터라 별다른 효력을 보이지 못하였습니다.

파일 실행이나 명령어 수행 자체는 아무런 문제가 없는데,
프로그램 내의 함수가 특정 장치(인터페이스)에 접근할 때,

개인사용자인지 root인지에 따라 접근 권한이 다르기 때문에 결과값이 다르게 나오거든요…

위에서 들은 예처럼, eth0를 반환하는 함수가 있다면
sudo ./filename으로 할 경우 정상적으로 eth0을 반환하지만
단순히 ./filename 만을 해준다면, NULL을 반환하거나, eth0가 아닌 다른 장치(순차접근 함수라서)를 반환합니다.

약간 편법이지만 bash 였나 sh 였나를 수정해서 간단히 root 권한을 따내는 방법이 있었던 걸로 기억하는데
영 기억이 안나네요 ㅠ_ㅠ 검색해도 못찾겠고… 누구 아시는분 안계시는지요…

[quote="pamisu1":33fxyv82]일단 제가 쓰는 방법이 정확한 건지는 잘 모르겠습니다.(전 컴퓨터 관련 일을 하지 않으므로 권한문제도 잘 모릅니다.)

하지만 셋유아이디, 셋지아이디란 방법 (아마 유저권한세팅이나 그룹권한 세팅 같습니다.)을 써서 현재 사용하고 있습니다.

mpd 를 시동하거나 설정 변경할 때 루트권한이 필요한데 이게 귀찮아서 찾아본 방법이고 현재 아무 문제없이 쓰고 있습니다.

즉, chmod 755 라고 하면 -rwxr-xr-x 란 권한이 생기고, chmod +w 라고 하면 쓰기권한이 생기는 것처럼…

마찬가지로 chmod +s 라고 하면 소유자나 그룹이 루트권한인 것처럼 실행됩니다.
chmod 4xxx 형식 (= chmod u+s) 이 유저에게 권한을 주는 것이고, chmod 2xxx 꼴(= chmod g+s )이 그룹에 권한을 주는 것입니다.

이외에도 chmod 10xxx 꼴로 스틱키비트를 설정하고 공유폴더로 사용한다는데 이건 정확히 무슨 뜻인지를 몰라서 해 본 적이 없습니다.

아무튼 결론은

[code:33fxyv82] sudo chmod +s /path/filename.bin [/code:33fxyv82]
처럼 해 보시라는 겁니다. 이렇게 파일에 권한변경을 한 이후에 그 파일을 유저가 실행시키면 바로 동작합니다.
사용자 유저가 abcd 라면 filename.bin 을 실행할 동안은 abcd 가 root 처럼 동작하며 실행시 암호도 물어보지 않을 겁니다. 제 경험상 그렇더군요.

ls -l /path/filename.bin 처럼 확인해 보면 파일 권한이 -rwsr-s-r-x 처럼 x 자리에 s가 대신한 걸 확인할 수 있습니다.[/quote:33fxyv82]

흠… 이것도 일종의 꼼수입니다만, 어차피 개인 공부용으로 사용하시고 보안관련도 신경쓸 필요 없다고 하시니…

/etc/passwd 파일을 이렇게 수정해주세요.

root:x:0:0:root:/root:/bin/bash -> root:x:0:0:root [b:38aqh0jx]yemharc:/home/yemharc[/b:38aqh0jx]:/bin/bash
yemharc:x:1000:10000:yemharc -> yemharc:x:0:0:yemharc

이렇게 하면

  1. root계정으로 직접 로그인하는 상태가 된다.
  2. 홈 폴더 자체를 바꿔버려서 모든 프로그램이 해당 폴더에서 설정을 읽어들인다.

한마디로 속임수 같은 방법입니다만, 현재로선 이게 제일 간단한 방법인거 같군요.

p.s.
리눅스의 수퍼유저의 권한은 막강합니다. 그리고 리눅스는 특성상 [사용중인 파일도 삭제가 가능]합니다.
sudo명령어와 패스워드 입력이 귀찮은 것은 사실입니다만, 이것은 다르게 생각하면 최후의 안전장치같은 녀석입니다.
정말 개인적인, 손상되서 날아가도 아무 상관이 없는 경우라면 모르겠지만 그 외의 경우에는 절대 이런 방법을 권장하지 않습니다.
하다못해 개인적으로 사용하는 데스크탑 시스템이라도 말이지요.

크흡…ㅠ 처음 알려주셨던 방법과 효과가 같게 나오네요;;
10.04 버전에서 어딘가 덮어쓰기가 안되든지 뭔지 제한이 걸려있나 봅니다…

별 수 없이 말씀하신 대로 sudo나 sudo su 등을 사용하고 있습니다 ㅠ_ㅠ 불편…
나중에 프로그래밍 능력이 좀 향상되면 sh 건드려서 root 따는 것 좀 알아봐야겠네요 에휴…

[quote="yemharc":234gg0cj]흠… 이것도 일종의 꼼수입니다만, 어차피 개인 공부용으로 사용하시고 보안관련도 신경쓸 필요 없다고 하시니…

/etc/passwd 파일을 이렇게 수정해주세요.

root:x:0:0:root:/root:/bin/bash -> root:x:0:0:root [b:234gg0cj]yemharc:/home/yemharc[/b:234gg0cj]:/bin/bash
yemharc:x:1000:10000:yemharc -> yemharc:x:0:0:yemharc

이렇게 하면

  1. root계정으로 직접 로그인하는 상태가 된다.
  2. 홈 폴더 자체를 바꿔버려서 모든 프로그램이 해당 폴더에서 설정을 읽어들인다.

한마디로 속임수 같은 방법입니다만, 현재로선 이게 제일 간단한 방법인거 같군요.

p.s.
리눅스의 수퍼유저의 권한은 막강합니다. 그리고 리눅스는 특성상 [사용중인 파일도 삭제가 가능]합니다.
sudo명령어와 패스워드 입력이 귀찮은 것은 사실입니다만, 이것은 다르게 생각하면 최후의 안전장치같은 녀석입니다.
정말 개인적인, 손상되서 날아가도 아무 상관이 없는 경우라면 모르겠지만 그 외의 경우에는 절대 이런 방법을 권장하지 않습니다.
하다못해 개인적으로 사용하는 데스크탑 시스템이라도 말이지요.[/quote:234gg0cj]

[quote="ClowK":2c9kcjr2]음… 이렇게 하니, 제가 하는 프로그래밍 작업에서는 거의 대부분이 sudo 가 필요하네요 ;;

예전에 한번 bash 였나 sh 였나하는 파일을 열어 간단한 문구를 한두줄 추가해준 것 만으로
root 권한이 얻어졌던 것 같은데… 혹시 그 방법에 대해서 아시는 바 없으신지요? ㅇ_ㅇ;
[/quote:2c9kcjr2]

sudo를 이용하시기를 권장드립니다.

다만, sudo 패스워드 입력이 귀찮으시면 /etc/sudoer 설정 파일에

[code:2c9kcjr2]
사용자ID ALL=(ALL) NOPASSWD: ALL
[/code:2c9kcjr2]

형태로 패스워드 없이 동작하게 설정하셔도 됩니다. (다만, 이러면 보안따윈 필요없는 거죠…)

p.s: 근데 사실 root 권한이 필요한 작업 위주의 개발을 할 경우에는 그냥 root 유저로 개발하곤 합니다. (막장… ㅋㅋ)