저는 리눅스의 ㄹ 자도 모르는 입장인데, 회사에서 서버관리를 하려면 리눅스를 알아야 하기 때문에 요즘 조금씩 공부하고 있습니다. 그런데 체계적으로 공부하기 보다는 알고싶은거 그때그때 찾아보면서 익히고 있는데요

이 글은 제 블로그에서의 리눅스 첫 글이자 여러분께 질문드리는 글이기도 합니다. 제목과 같이 root 계정이 아닌 일반 계정에서 http 데몬을 실행시키는 방법인데, 제가 찾은 방법 외에 다른 방법이 더 있는지, 그리고 이 방법에 어떠한 문제점들이 있는지 아낌없는 조언 부탁드립니다.


1. setuid

첫번째 방법은 setuid를 활용하는 것인데요, 보안상 별로 좋지 못한 방법 같습니다.

예제) chmod u+s /usr/sbin/httpd


제가 대충 이해하기로는 저렇게 하면 /usr/sbin/httpd 파일을 실행하면 누구나 이 파일의 소유자인 root 계정의 권한으로 실행을 할 수 있게 된다는 것입니다. 따라서 아무나 http 데몬을 실행하거나 중지시킬 수 있기 때문에 보안상 별로 좋지 못한 방법이 되겠습니다.

되돌리려면 u-s 하시면 되겠죠.

예제) chmod u-s /usr/sbin/httpd


2. sudoers

두번째 방법은 sudoers 파일을 수정하는 것인데요, 사용법이 이게 맞는지는 모르겠으나 제 생각대로 해보니 일단은 잘 되기 때문에 이 방법을 올려봅니다.

일단 root 계정에서 /etc/sudoers 파일을 수정합니다. 주석을 보니까

user MACHINE=COMMANDS

라인이 있더라구요. 그래서 이렇게 한줄 추가해봤습니다.

예제) snoopy ALL=/usr/sbin/httpd


이렇게 파일을 수정한 다음 snoopy 계정에서 sudo로 httpd를 실행시키니 잘 되더군요.


이 방법은 http 데몬을 구동할 수 있는 권한을 root 이 외에 snoopy 계정에만 부여하는 것이니 첫번째 방법보다 보안상 훨씬 더 안전한 방법으로 보입니다.



이 글은 여기까지구요, 위 방법보다 더 좋은 방법이 있다면 조언 부탁드립니다. 그리고 리눅스 먼저 공부하신 선배로서 저같은 초보자에게 조언해주실 말씀 있다면 대 환영입니다. ^^
신고

  1. 이전 댓글 더보기
  2. BlogIcon Windows 8 Aero
    2011.05.07 11:41 신고

    음... 티스토리 사용자는 여기를 누르시면 로그인 됩니다 라고 쓰여있는데 답변하고 싶네요. 이렇게→전 이미 티스토리 사용자이니 로그인 안해도 됩니다라고요... ㅎㅎ

    • BlogIcon snpbox
      2011.05.07 13:10 신고
      수정 및 삭제

      티스토리 사용자가 로그인 상태에서 snpbox.tistory.com으로 접속하면 문제가 없습니다만 snoopybox.co.kr로 접속하면 로그인 상태가 유지되지 않기 때문에 만들어둔 것입니다.

  3. 고딩인데 대딩됨
    2011.05.07 18:56 신고

    형 항상 노력하는모습 보기좋네요
    저도 리눅스의 리자도 모르다가 대학교가서 동아리활동으로 리눅스동아리에 들게되고
    형처럼 쟁쟁한 동아리 선배님들보니까 학업의 길에 몰두하게 되더라구요.
    그래봐야 지방대 선배들이라 제일크게 성공해봐야 KISA더라구요
    뭐 이방면에 학벌이 크게 작용하는게 아니지만(은는훼이크)
    형보면 정말 공부열심히 해야겠다는 생각을가지고
    맨날 포맷하고 새로운마음으로 컴퓨터를합니다.

    포맷하면 기분이 새로워지는데 왜맨날 gall.dci 이런거 주소창에쓰고있지 젠장...
    형화이팅! 아잉폰으로 pro RSS해서 형글뜨면 맨날읽음 ㅎㅎ

    예전처럼 하드웨어 나오자마자 질러서 우리들 궁금증 해결해주진 않지만
    이런것도 유익하네요

    차기 포스트는 프로그램좀 소개해주세요!

  4. 망설이는 중
    2011.05.07 21:34 신고

    안녕하세요 스누피님,
    글 내용과는 다른걸 어쭤보고 되어 죄송스럽게 생각합니다.

    cpu 가격이 저렴한 것 같아서 한번 바꿔보고 싶은데요

    cpu 인텔 펜티엄 듀얼코어 E6700 (울프데일) 3.2GHz L2캐쉬=2M 시스템버스=1066Hz(10,5000원 775소켓 )
    (시스템버스=800Hz --> 8,8000원 LGA775소켓)

    이것하고

    ASROCK Wolfdale 1333-d667 메인보드와 호환이 어느정도 좋은지요.

    그리고 현재 쓰고 있는 CPU인 Intel(R) Pentium(R) Dual cpu 울프데일(듀얼코어) E2180 2.0GHz과 비교해서
    성능차이는 어느 정도 일까요?
    - 게임은 할줄 모릅니다. C:D등의 드라이브간의 대용량파일이동, 포토샵, 동영상인코딩정도 합니다

    그리고 위 제일 상단의 cpu모델의 스펙을 보면
    시스템버스가 어떤곳에선 1066Hz로 되어 있고,

    또 다른곳에서 보면 800Hz 이라고 되어 있는 곳도 있던데
    시스템버스가 어느것이 맞는것인가요?
    여러 곳을 봐도 버스가 2가지 입니다

    그리고 소켓이 그리고 소켓이 775소켓과 LGA775소켓이 다른 것인가요

    직장생활 하시느라 힘드신데,답해 주시기 힘드시면 굳이 안하셔도 이해할 수 있습니다.
    글 쓰시느라 수고 하셨습니다

    • BlogIcon snpbox
      2011.05.07 21:41 신고
      수정 및 삭제

      1. 애즈락 홈페이지 가보면 지원하는 리스트에 없네요.
      http://www.asrock.com/mb/cpu.asp?Model=Wolfdale1333-D667

      2. 클럭 차이만큼 60% 나겠죠. 다른건 모르겠고 동영상 인코딩에선 체감할 수 있을 겁니다.

      3. E6000 시리즈는 1066이 맞습니다. E5000 시리즈가 800이구요.

      4. LGA775를 줄여서 775라 말하는거죠.

  5. BlogIcon dummy
    2011.05.08 00:22 신고

    단순히 사용자계정으로 로그인해서 관리자 명령을 사용하고 싶은거라면
    우분투사용자분들은 sudo를 이용해서 root명령을 핸들링하고
    레드햇계열에선 su를 이용해서 관리자 계정으로 이동해서 하고자 하는 명령을 실행하곤 합니다.

    http://devtainer.blogspot.com/2011/03/sudo-in-centos_16.html

    이 링크를 보시면 아시겠지만.
    찾아내신 두번째 방법에 대한 설명입니다.

  6. 망설이는 중
    2011.05.08 02:58 신고

    역시 스누피님은 킹왕짱 선생님,
    일짝출근 늦게 퇴근, 직장에서도 연구하시느라 피곤하고 힘드실텐데 답글 해 주셔서 매우 감사드립니다.

  7. 이런
    2011.05.08 11:50 신고

    이런 스누피님 천재 되시겠네
    큰일났다

  8. BlogIcon hongyang
    2011.05.08 14:02 신고

    단순히 커널에서 root 계정으로 이동하려면
    sudo -s 명령 후 지금 로그인 된 계정의 비밀번호를 입력하고 httpd 실행하면 됩니다.

    아니면 chown을 써보세요.
    만약 단순히 chmod를 써서 httpd를 실행해도 된다면 이 방법이 될 것입니다.
    chown은 파일(폴더)의 소유그룹이나 소유자를 변경하는 것이므로 snoopy로 소유자를 변경하면 위 설정들 없이도 잘 될겁니다.(sudo를 쓰지 않아도)

    명령어는 root로 로그인(sudo -s 또는 sudo -i 나 su)한 후 커널에
    chown snoopy 123 /usr/sbin/httpd
    하면 sudo를 쓰지 않아도 잘 될 것 입니다.

    • BlogIcon hongyang
      2011.05.08 14:07 신고
      수정 및 삭제

      참고로 chmod는 심볼릭(u+s와 같은 문자)와 숫자를 쓸 수 있습니다.
      숫자를 쓰는 게 훨씬 쉬운데요.
      숫자를 쓰려면 chmod u+s를 chmod 1이라고 명령하면 됩니다.

    • BlogIcon snpbox
      2011.05.08 14:37 신고
      수정 및 삭제

      홍양님 리눅스 공부하시나보네요.

      1. 리눅스에서 1 ~ 1024 포트는 오로지 root 계정만 열 수 있습니다. 일반 계정은 80포트를 열지 못하기 때문에 이 방법을 소개해드린 것입니다.

      2. 이 방법을 소개한 이유는 일반 계정을 가진 사람에게 root 계정을 주지 않기 위해서입니다. root 계정을 알고 있는 사람에게는 이 방법이 무의미하죠. 그냥 root로 로그인해서 아파치를 구동하면 되니까요. 일반 계정을 가진 사람에게 root 계정은 주지 않되, 아파치 80포트를 구동할 수 있는 최소한의 root 권한만 주는 것이 이 글의 목적입니다.

      3. 소유자를 snoopy로 바꾼다고 해서 달라질 것은 없습니다. 그 이유는 1번에서 설명드렸습니다.

      4. sudoers 파일을 수정해야 sudo가 의미있습니다. (우분투는 예외로 sudoers 파일이 수정되어 나오는 듯)

      5. setuid는 4000을 씁니다. setgid는 2000이고 sticky bit는 1000이죠. chmod 숫자를 쓰려면 chmod 4755 같은 형식을 써야 합니다.

  9. BlogIcon hongyang
    2011.05.08 17:05 신고

    감히 스누피님의 댓글을 받다니...
    감사합니다.

    질문이 있는데 httpd 80포트 실행한다는 게 무엇인가요?
    저는 단순히 apache2 를 start해서 제가 운영하는 80포트를 여는데요.

  10. BlogIcon 진모씨
    2011.05.09 16:16 신고

    sudo su가 낫지않을까요

  11. won
    2011.05.09 23:38 신고

    apache는 일반적으로 권한 없는 계정으로 실행됩니다. nobody, daemon, apache 등등..
    위에 설명하신 것처럼 보안상의 이유입니다.
    즉, setuid나 sudoer를 사용할 필요가 없습니다.
    apache 설정파일에 httpd.conf에 보면 사용자와 그룹을 지정할 수 있는 옵션이 있습니다.
    위에서도 캡춰한 걸 보면 프로세스의 계정이 다른 계정으로 보이네요..
    (setuid나 sudoer는 다른 계정의 권한을 얻기 위해 사용해야 한다고 해야 하나요..
    암튼 보통은 일반계정이 root 권한을 얻기 위해 사용합니다.)
    ^^

    • BlogIcon hongyang
      2011.05.11 00:16 신고
      수정 및 삭제

      저는 service apache2 restart나 /etc/init.d/apache2 restart를 그냥 하지 않고 sudo를 붙여서 사용하는데요. 만약 sudo를 쓰지 않으면 에러가 뜹니다. 이 뜻은 apache도 관리자 권한으로 실행해야 한다는 뜻이 되지 않을까요?

    • BlogIcon KurenoCat
      2011.05.14 21:42 신고
      수정 및 삭제

      서비스 제어에 SuperUser 권한이 필요한 것일 뿐입니다.

  12. 아랑전설
    2011.05.10 17:28 신고

    저는 이런방법을 쓰고자 합니다

    root 슈퍼유저는 apache 운영시 80 포트를 사용하고 일반유저는 8080포트 사용한다는 식으로 구분을 둔다

    서버 시작시 httpd -f /conf/user.conf 옵션을 사용 다중으로 데몬을 띠우면 되지 않을까 합니다

    root 권한을 이용할 필요는 없다고 봅나다

    아니면 root 가 서버 설정시 별도의 사용자 홈 폴더와 도메인 지정해 줄수도 있습니다
    사용자는 자신의 도메인 주소로만 접속하면 되지요

  13. spectator
    2011.05.12 00:02 신고

    스누피님 말대로 root 계정을 임의로 사용할 수 있거나 80포트외에 1024보다 큰 포트로 서비스를 해도 상관없다면 이 글은 의미가 없겠죠.
    "apachectl start"도, hongyang님이 말씀하신 "service apache2 start" 도 httpd 데몬을 띄우기 위한 명령일 뿐이구요. 실제적으로 프로세스상에 올라가는 건 httpd란 프로세스가 데몬으로 동작합니다.
    80포트를 사용하는 가장 큰 이유는 http 프로토콜의 기본 포트가 80이기 때문에 도메인 뒤에 http://www.xxx.com:80/ 처럼 넣지 않아도 http://www.xxx.com/ 으로 사용할 수 있다는 것이겠죠. 그러나 80포트 이외에는 http://www.xxx.com:8080/ 이런 식으로 포트를 반드시 명시해줘야만 사이트가 연결이 됩니다.
    그렇기 때문에 호스팅을 이용하거나 해서 root권한을 가질 수 없거나, 보안상 문제로 root 이외의 계정으로 웹서비스를 구동할 때는 위 본문내용처럼 일반계정에서 80포트로 서비스하기 위한 작업이 필요한 것이죠.
    저는 보통 전자의 sticky bit를 주로 사용합니다. 전자의 방법을 사용하더라도 owner와 group bit를 제한하면 타 사용자가 기동하는 건 막을 수 있습니다.

  14. BlogIcon adidas is all in
    2011.05.12 01:20 신고

    리눅스는 보기만해도 참....^^;;


  15. 2011.05.12 08:19

    비밀댓글입니다

  16. BlogIcon 푸욱
    2011.05.13 17:12 신고

    안녕하세요. 스누피님의 블로그를 자주 방분하는 사람입니다. 제가 윈도우7 얼티밋 64비트를 사용하고 있습니다. 제가 라이브러리에서 비디오(폴더)를 실수로 삭제해 버렸어요 ㅠ 비디오폴더를 다시 완벽하게 옛날처럼 만들수는 없나요? 휴지통은 비워둔 상태인데...

  17. klein
    2011.05.14 17:00 신고

    몇달동안 일이 생겨서 컴을 못하다가 며칠전부터 다시 노닥거리게 되었습니다 ㅋ

    너무 뒤늦은 인사지만, 좋은 직장을 얻게 되신 것 진심으로 축하드립니다!!! 포스팅내용을 봐도 맡은 일에 충실하시고 꾸준히 발전하고 계신듯하여 보기 좋습니다. 맡으신 업무에서 최고의 실력자가 되시길 바라며, 응원하는 마음으로 가끔 들르겠습니다 ^^

  18. BlogIcon 깊은산
    2011.05.14 20:48 신고

    더 게을러지고 싶어서 질문 하나 드립니다. 스누피님..
    VHD 자주 바꿔 다시 설치하게 되는데요.

    PE로 부팅메뉴 잡혀있고.. 윈7 설치용 파일[WIM파일 등등]은 F:\ 에 있고.. C:\ 는 150GB의 빈공간일 때...
    PE로 부팅하여.. 바로 20GB VHD 생성하고 그 생성된 VHD에 WIN7 설치 하게끔 자동으로 구성하는 방법이 있을까요?

    자주는 아닌데...
    VHD에 WIN7 설치할 때 마다 프롬프트에 명령어 치는게 귀찮네요 ^^

    간략하게 말씀 드리면...
    PE 부팅하면 자동으로 VHD 생성 - WIN7 설치를 손도 안대고 알아서 하는 방법을 스누피님은 아실듯해서 질문 해봅니다. ^^

  19. BlogIcon KurenoCat
    2011.05.14 22:24 신고

    말씀하신 두번째 방법이 거의 정석입니다.
    일반 사용자에게 제한적인 sudo 조차 허용하고 싶지 않으시면 crontab ( ≒ 작업 스케줄러 ) 같은 녀석으로 특정 위치에 특정 파일이 있나 없나 검사해서 데몬을 중지하거나 시작하는 방식으로도 할 수 있겠군요.

    #!/bin/bash
    if [ -e /home/someuser/_httpd_stop ]
    then
    if ! [ -e /root/status/_httpd_stopped ]
    then
    service httpd stop
    touch /root/status/_httpd_stopped
    fi
    else
    if [ -e /root/status/_httpd_stopped ]
    then
    service httpd start
    rm /root/status/_httpd_stopped
    fi
    fi

    이런식으로 스크립트를 짜서 root 의 crontab 에 약 30초 간격으로 등록해준다면

    someuser 가 httpd 를 종료하고 싶은 경우
    touch ~/_httpd_stop
    해주면 종료되고,
    rm ~/_httpd_stop
    해주면 다시 실행되겠지요.

  20. 유닉스는요?
    2011.12.23 10:31 신고

    안녕하세요. 게시글 보고 질문드려요.
    혹시 유닉스 시스템에서는 방법이 있나요? 포트 포워딩 방식 검색글이 나오긴 하던데,
    그건 아파치위에 톰켓을 올리고 할때 방법인거 같더라구요, 근데 요즘은 톰켓만도 올리지 않나요?;;
    유닉스에 설치되있는 아파치를 올리고 톰켓을 하고 포워딩방법을 써야하는건가요?

  21. BlogIcon 디지문
    2012.04.01 00:10 신고

    /usr/sbin/httpd의 소유권이 roor.root 로 되어 있고 퍼미션이 644인 경우를 예로 설멍하셨는데 아래와 같이 하시면 안전하겠습니다.

    1) /usr/sbin/httpd의 other owner 실행 퍼미션 제거하고 setuid 설정
    # chmod o-x /usr/sbin/httpd
    # chmod u+s /usr/sbin/httpd

    2) /usr/sbin/httpd의 group owner를 특정 group에 소속시킴, 특정 group owner는 wheel로 함
    # chown .wheel /usr/sbin/httpd

    3) /usr/sbin/httpd 실행 권한을 주고 싶은 계정(예로 snoopy)의 group owner를 wheel로 설정
    # usermod -g wheel snoopy

    이러면 httpd 바이너리와 같은 group owner를 갖는 snoopy 계정만 setuid로 실행이 가능해지므로 안전합니다.