당황스런 문제점입니다. 도움좀 부탁드립니다.

a123456의 이미지

안녕하세요 리눅스 왕초보 ㅡ.ㅡ;; 입니다.
리눅스 서버 계정의 비밀번호를 웹으로 관리하도록 test라는 쉘을 하나 만들었습니다.

환경: fedora core3
=======================================
쉘스크립트 제작내용

#!/bin/bash

uid=$1
pass=$2

echo $pass | /usr/bin/passwd --stdin $uid
=======================================

#ls -l test 의 내용

-rwsrwsrwx nobody nobody 어쩌구~

<서버에서 직접 실행해 보았습니다.>

서버에 터미널 이용 직접 접속해서 실행을 해보면 root계정으로는 명령어가 실행이 되어 변경이 됩니다.
#/usr/bin/test test 1234
Changing password for user test
passwd : all authentication tokens updated successfully.

그러나 기타 일반 계정으로는 변경 안됩니다.
test ~]$/usr/bin/test test 1234
Only root can do that.
욜케 됩니다.

그리고, 웹에서는 어떻게 해도 안됩니다.
그래서 주변에 다른분께 여쭤보니 그분이 제대로 아는지는 모르겠으나 본인이 아는 바로는 리눅스 7.2버젼이상부터는 root외엔 쉘을 사용못하게 한다는..;; 그런답변을 들었습니다. 그래서 혹시 쉘만 안되는 건가 싶어서 c로도 만들었습니다.

=======================================
test.c 내용
#include<stdio.h>
#include<stdlib.h>

int main(int argc,char* argv[])
{
if(argc<3) //check argument
{
printf("insert argument please\n");
return 0;
}
char a[50];
sprintf(a,"echo %s | /usr/bin/passwd --stdin %s",argv[2],argv[1]);
int result=system(a); //execute command
printf("%d",result); //10진수로 결과값 보내줌
}

=======================================
물론 퍼미션 아까 쉘과 같이 모든것을 다 줬습니다.

웹에서 id:test pw:1234로 변경테스트
(test라는 계정의 비밀번호를 1234로 바꿔보겠습니다.)

결과값을 찍어보았습니다.

=======================================
php에서 실행함수
--------------inc.test.php ----------------------------------------

$pwfile=/etc/passwd문서

function test($pwfile, $id, $pass)
{
if(!$pwfile) $pwfile = "/etc/passwd";

// passwd 파일을 읽어온다
if( file_exists($pwfile) ) $array = file($pwfile);
else
{
$res = "passwd 파일의 경로가 잘못됨";
return $res;
}

for($i=0; $i<count($array); $i++)
{
$pos = strpos($array[$i], ":");
$pwid[] = substr($array[$i], 0, $pos);
}

//시스템에 등록된 아이디
if(in_array($id, $pwid))
{
$cmd = "/usr/sbin/test $id $pass";(=>요부분 $cmd = "/usr/sbin/test"." '".$id."' '".$pass;요렇게도 해보고 아이디/비번 작은땀표로 묵어두 봣씁니다.)
$res=system($cmd);
//$res=exec($cmd);
//print_r($res);
//exit;
return $res;
}
// 등록되지 않은 아이디
else
{
$res = "시스템 계정확인 실패 : 시스템에 등록되지 않은 사용자임";
return $res;
}
}

=======================================
-----------------------result.php----------------------------------

/* system 비밀번호 변경 */
include_once "inc.test.php";

$pwfile = "/etc/passwd";
$id = test
$pass = test

$testres = test($pwfile,$id,$pass);
print_r($testres); exit;

=======================================
testres에

65024 라는 결과값이 찍힙니다. 이게 실행됫다는 얘긴지 안됫다는 얘긴지도 모르겠습니다.

위험하니 쓰지마라~~ 머 이런 답변 하지 말아주십시요..
위험한줄 알면서도 꼭 해야하는 이유가 있어서 하는 거거등여..;;

참고로 test.c에 문구를 하나 넣어서 찍어봣습니다. 찍힙니다.
그러므로 그 실행문을 수행하긴 한다는 얘깁니다. 그러나 실제로 비밀번호가 바뀌지는 않습니다.

※ 어느부분이 틀린것인지..;; 왜 웹에서 실행하거나 일반사용자가 실행하면 실행이 안되는지..;; 원인이나 어떻게해야 될찌 아시는분
도움좀 부탁드립니다.

익명 사용자의 이미지

웹이나 일반사용자가 실행하기 위해서는 setuid 를 줘야 합니다.
퍼미션을 4777 로 한번 해보세요.

a123456의 이미지

setUID 당연히 4777줫찌용...
쉘에 퍼미션주기 제가 실행한 순서는 이렇습니다.
chown nobody:nobody test
chmod 4777 test
chmod +s test
여기까지 줫습니다...

익명 사용자의 이미지

...

어떤 서적에서는 test 라는 이름의 파일은 가급적 피하라고 하더군요^^;;

익명 사용자의 이미지

s9704075 wrote:
setUID 당연히 4777줫찌용...
쉘에 퍼미션주기 제가 실행한 순서는 이렇습니다.
chown nobody:nobody test
chmod 4777 test
chmod +s test
여기까지 줫습니다...

아마도 권한 문제일 듯 싶네요..

test의 권한을 nobody:nobody대신 root:nobody로 바꿔보세요.

chown root:nobody test

다즐링의 이미지

sudo 를 사용해서 하십시오.

다만 웹기반이라는 경우에 소스를 읽어서 실행해버리는 경우는 취약하므로 주의바랍니다.

------------------------------------------------------------------------------------------------
Life is in 다즐링

댓글 달기

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