Press "Enter" to skip to content

[태그:] 스크립트

php 프로그램에서 콘솔로 출력되는 데이터를 파일로 기록하기

php 프로그램을 하면 echo, print, print_r 등 콘솔로 출력을 하는 경우가 많다.

배치로 돌릴 경우에는 날라가 버리는데 cron등에 아래와 같이 등록하면 로그로 남길 수가 있다.

그것도 날짜별로.

주의할점은 실행할 스크립트가 있는 디렉토리 아래에 txt라는 서브디렉토리가 있어야 한다.

cd /script/directory
# 오늘날짜
today=$(date "+%Y%m%d")
# 로그파일명 저장. 상대경로로 했는데... 안되면 절대경로로 바꿔주세요
logfile=./txt/${today}gen.log
# 스크립트 실행
sudo sh -c "php my_script.php" >> ${logfile}
# 날짜 로그파일 넣는 다른 방법
sudo php script_name.php >> ./txt/$(date +\%Y\%m\%d)_log.txt &

[호스팅 구축] 파일에서 데이터 읽어서 계정 생성하기 스크립트

쉘스크립트이용한 수백명의 사용자 단한번에 끝내기!

출처 : http://community.365managed.com/?document_srl=794

[전 한학교의 고등학생인데 학생들의 계정발급을 위해 (약 300명정도) 이 스크립트를 구성했습니다. 300명 다추가하려니 손이 근질거려서요-_-]

학교나, 관공서, 군대(?) 등에서 번호나, 일정한 패턴을 가진 아이디로 유저를 생성할때 그 작업을 일일히 하자면 아주 따분하고 시간이 많이 걸리게 된다.
그러나,  간단한 쉘 스크립트를 이용해서, 수천명의 사람도 단 한번에 끝낼수있다. (컴퓨터의 성능에따라 다르나, 셀러론 300의 서버에서도 200명의 사용자는 약 5초정도에 끝났다)

1. 스크립트의 구성

스크립트는 3부분으로 나누어진다(필자가만든것이 복잡할수도있다.)

– txtmaker : 유저를 일괄생성하는 프로그램이 참조하는 txt 파일을 생성한다.
– deltxt : 중복을 방지하기위해 이전에 생성된 txt 파일을 삭제한다.
– autoadduser : txtmaker 만든 userinfo.txt 파일을 참조하여, 유저를 일괄 생성하고 비밀번호를 아이디와 같게한다.

보안상문제는 상당하게 있을수있다. 일단 이러한 정보를 아는사람이면, 운영자가 유저를 생성했을때 이미 비밀번호를 알수있기때문에 그때 위험할 가능성이있다.
이러한 가능성을 배제하는 독특한 아이디어는 떠오르지 않는다-_-;
(사람들을 믿을뿐이죠^^;) 혹시 좋은 아이디어라도?

2. 스크립트의 소스

# 주의 : 이 예제는 저희 고등학고 의 이니셜을 딴 sdhs에 학번을 결합시켜 sdhs[학번] 과 같은꼴의 아이디를 생성하는 프로그램입니다.
sdhs 대신에 어떤것이든 수정이 가능하니, 소스를 잘 보시고 상황에맞게 고쳐쓰시기바랍니다.^^

– txtmaker 의 소스

#!/bin/bash
echo " 지금부터 $1 사용자부터 $2 사용자까지의 텍스트 파일을 생성합니
다."
echo " 형식 : [0000:0000] "
limit=$2
for ((a=$1; a<=limit ; a++))
do
echo sdhs$a:sdhs$a >> userinfo.txt
done
echo " $1 부터 $2 까지 생성을 완료하였습니다 "

매우 난잡한 소스다-_-;; $1 과 $2 가 의미하는것은 쉘에서 다음과같이 입력이 가능하다

#shell> txtmaker 1 9999

이렇게 하게되면 $1 은 1이되고 9999는 $2 가 되는것이다. 고로 1부터 9999번까지의 파일을 생성하라는 말이된다.
txtmaker 가 있는 디렉토리에 userinfo.txt 파일이 위치하게되고 다른프로그램이 이를 참조하여 유저를 일괄생성한다.

– userinfo.txt 의 내용

sdhs1:sdhs1
sdhs2:sdhs2
sdhs3:sdhs3
sdhs4:sdhs4
sdhs5:sdhs5
아이디:비밀번호

아이디:비밀번호의 꼴입니다. 즉 아이디와 비밀번호가 같게 되는것이죠.
모든사용자의 비밀번호를 똑같게하려면, 저 소스에서 비밀번호에 해당하는 부분을 바꿔주시면되겠죠?

– deltxt 의 소스

#!/bin/bash
rm -f userinfo.txt
echo "삭제완료"

단지 userinfo.txt 파일을 삭제하고, 삭제완료라는 메시지를 출력하는 프로
그램입니다.

– autoadduser 의 소스

#!/bin/bash
for i in `awk -F : '{print $1}' userinfo.txt`
do
echo "$i 사용자의 계정생성작업 시작"
useradd -m -k /webhosting/skel -s /bin/bash -d /home/students/$i -g 
webhost $i

##########################################################################################
# /webhosting/skel 대신에 홈디렉토리에 채워질 내용을 담은 디렉토리를 지
정해주세요. 스켈레톤디렉토리
# /bin/bash 대신에 /bin/false 를 하시면 텔넷접속을 막습니다. 그러나 
ftp 데몬에서 쉘이없는 사용자도
# 로그인이 가능하게 해줘야겠죠?
# -d 옵션다음에는 홈디렉토리를 정해줍니다.
# -g 옵션다음에는 기본그룹을 지정해주지요
##########################################################################################
echo "$i 사용자의 홈디렉토리, 쉘, 그룹설정완료"
echo "$i 사용자의 홈디렉토리 권한을 701 로 설정합니다.."
chmod 701 /home/students/$i
echo "$i 사용자의 홈디렉토리 권한이 701 로 설정되었습니다.."
echo "$i 사용자의 public_html 권한을 705 로 설정합니다"
chmod 705 /home/students/$i/public_html
echo "$i 사용자의 모든 설정을 완료 하였습니다."

done

echo "지금부터 모든 사용자의 패쓰워드를 일괄적으로 바꿉니다"
chpasswd < userinfo.txt
echo "모든사용자의 비밀번호가 일괄적으로 바뀌었습니다"
echo "모든사용자의 계정세팅이 끝났습니다"
echo "이전에 생성된 userinfo.txt 파일을 삭제합니다"
./deltxt

쭈욱 따라가보시면 굉장히 쉬운 소스입니다. 마지막에는 deltxt 프로그램을 
실행시켜서, 유저파일을 삭제하게되죠.
중간 중간에 디렉토리의 권한을 www 서비스에 맞게 바꿔즈는 소스가 있습니
다.(나름대로 변형이 가능하죠)

3. 맺음

저 3개 의 간단한 스크립트로, 학교,관공서 군대 또는 실습중인 학원 등에
서 재빨리 계정을 생성할수있습니다.
그리고 skel 의 내용안에는 public_html 이 위치해야겠죠? 그리고 ftp 서비
스도 가동하셔야겠구요.
저의 skel 디렉토리에는 다음과 같은 파일이 존재합니다.

drwxr-xr-x 3 root root 4096 May 9 16:22 .
drwxr-xr-x 13 root root 4096 May 9 16:31 ..
-rw-r--r-- 1 root root 24 May 2 15:57 .bash_logout
-rw-r--r-- 1 root root 233 May 2 16:00 .bash_profile
-rw-r--r-- 1 root root 125 May 2 15:58 .bashrc
drwxr-xr-x 2 root root 4096 May 3 13:39 public_html

.bashrc 나 .bash_profile 같은 파일이없으면 사용자가 비밀번호를 변경하
려 로그인했을때 약간 낯선 쉘을
맞이하게되니까, 넣어주시는게 좋습니다^^
public_html 은 apache 에서 정해준 디렉토리에 따라 수정이 가능하죠.
public_html 안에는 index.html 을 기본으로 넣어줘서 계정 생성이 제대로 
됐나 확인할수있게합니다.
저의 index.html 의 내용은 이렇습니다..

[root@dopesoul public_html]# cat index.html
<html>
<title>Welcome to Dopesoul web server</title>
<body>
<h1>환영합니다!</h1>
<br><br>
당신은 정상적인 방법에의해 계정을 취득하셨습니다.<br>
서버이용에관한 자세한 문의는 관리자에게 해주십시요.<br>
당신은 ftp 서버에 접속하거나, 나모웹에디터, 드림위버와같은 WYSIWYG 툴을
이용<br>
하여, 본 서버에 홈페이지를 등록할수있습니다.<br>
<br><br>
- Root 드림 -<br>
<br>
관리자 E-mail : byulkorea@empal.com<br>
</body>
</html>
[root@dopesoul public_html]#

이로써 -_- 날림 스크립트로 쉽게쉽게 계정생성하는 법을 알려드렸습니다.
아무쪼록 쓸모있게 쓰시길 바라면서! 물러갑니다.. (__)(–)

[호스팅 구축] 트래픽 관리

Apache에서 트래픽을 제어하는 방법으로 mod_throttle과 mod_bandwidth가 있읍니다.

mod_throttle는 파일전송의 횟수나 양을 실시간으로 제어하는 것으로 초/분/시/일/주/로 
최대 전송량/전송횟수등을 지정할 수 있습니다.
mod_bandwidth는 파일전송의 대역폭을 실시간으로 제어하는 것으로 최대전송속도, 
최소전송속도 파일사이즈 범위별 전송속도등을 지정할 수 있읍니다.

예를 들어 특정사이트의 일일 최대 전송량을 5G로 제한하고 싶으면 mod_throttle로 
특정사이트의 최대 전송속도를 5Mbps로 제한하고 싶으면 mod_bandwidth로 설정할 수 있습니다.

먼저 웹호스팅 업체에서 트래픽 제어를 위해 많이 사용하고 있는 mod_throttle 부터 
설정해보도록 하겠습니다.

1. 다운로드
http://www.snert.com/Software/mod_throttle/
http://www.snert.com/Software/mod_throttle/mod_throttle312.tgz

2. 설치
먼저 소스를 /usr/local/src에 압축해제하고, 아파치 웹서버의 설치하는 방식에 따라
2가지 방법으로 설치합니다.

– 아파치 웹서버를 STATIC으로 설치시
mod_throttle.c 소스를 아파치 소스 모듈 디렉토리로 복사

# cp /usr/local/src/mod_throttle-3.1/mod_throttle.c 
/usr/local/src/apache-1.3.x/src/modules/extra/
$ cd /usr/local/src/apache-1.3.x/
$ ./configure #prefix=/usr/local/apache 
#activate-module=src/modules/php4/libphp4.a 
#add-module=src/modules/extra/mod_throttle.c ... 옵션 생략 ...
.. 기타 설치 내용 생략 ..

설치확인은 아파치 모듈리스트를 출력해서 볼 수 있습니다. 

$ /usr/local/apache/bin/httpd -l
Compiled-in modules:
http_core.c
mod_env.c
mod_log_config.c
mod_mime.c
...
mod_php4.c
mod_throttle.c
suexec: disabled; invalid wrapper /usr/local/apache/bin/suexec

– 아파치 웹서버를 DSO로 설치시

$ cd /usr/local/src/mod_throttle-3.1/
$ /usr/local/apache/bin/apxs -i -a -c mod_throttle.c

설치확인은 libexec 디렉토리에서 mod_throttle.so 공유라이브러리를 확인합니다.

$ ls /usr/local/apache/libexec
httpd.exp mod_bandwidth.so* mod_info.so* mod_speling.so*
libphp4.so* mod_cern_meta.so* mod_log_agent.so* mod_status.so*
libproxy.so* mod_cgi.so* mod_log_config.so* mod_throttle.so*
... 

3. 기본설정

만약 아파치가 DSO로 컴파일 되었다면 httpd.conf에 모듈 활성화 하는 2개의 라인이 
추가로 있어야 합니다.

#################################-
LoadModule throttle_module libexec/mod_throttle.so
AddModule mod_throttle.c
#################################-

아파치 기본설정 파일(httpd.conf)에서 mod_throttle를 사용할 수 있도록 기본설정을 합니다.
관리자 모드는 특정아이피(123.123.123.123)에서 접근만을 허용하며
/xxx/xxx/.htpasswd에 만들어진 아이디와 비밀번호를 사용하여 웹인증을 합니다.

#################################-
<IfModule mod_throttle.c>
# 관리자 모드 설정
<Location /throttle-status>
SetHandler throttle-status
Order deny,allow
Deny from all
# 허용하는 아이피주소
Allow from 123.123.123.123

# 이 페이지에 httpd 인증을 추가
AuthName "throttle-startus auth"
AuthType Basic
AuthUserFile /xxx/xxx/.htpasswd
AuthGroupFile /dev/null
require user admin master
</Location>

# 사용자 모드 설정
<Location /throttle-me>
SetHandler throttle-me
Order deny,allow
Deny from all
Allow from all
</Location>
</IfModule>
#################################-

이제 아파치를 재구동하고 관리자 모드와 사용자모드를 웹브라우저에서 확인합니다.
http://www.mydomain.com/throttle-status
http://www.mydomain.com/throttle-me

이제 도메인별 트래픽등의 할당량과 사용량을 실시간으로 보여주는 페이지를 볼 수 있읍니다.

4. 도메인별 트래픽 제어 설정
각각의 도메인마다 트래픽을 용량, 전송회수등으로 제어하는 설정을 하도록 하겠읍니다.
아래의 예제는 httpd.conf내의 virtualhost 부분입니다.

www.domain.com이라는 도메인의 일일 트래픽 전송량을 5000M로 제한하는 설정입니다.

#################################-
<VirtualHost 211.174.180.47>
# 일일 5000M 설정 (K/M/G 사용)
ThrottlePolicy Volume 5000M 1d
ServerAdmin root@www.domain.com
DocumentRoot /home/domain 
ServerName domain.com
ServerAlias www.domain.com
CustomLog logs/domain.com_log
ErrorLog logs/domain.com_error_log 
</VirtualHost> 
#################################-

5. 트래픽 초기화

– 트래픽 초과로 인한 초기화
트래픽을 제한하여 사용하다 보면 트래픽 초과로 인한 사이트 차단으로 서비스가 되지 
않는 경우가 발생합니다.
이때는 트래픽을 초기화하여 정상적으로 서비스 될 수 있도록 처리해야합니다.
초기화 하는 방법은 http://사이트도메인/throttle-status 페이지에 가면
도메인별로 통계를 볼 수 있습니다.
각 도메인의 좌측에 번호를 클릭하면 해당 도메인의 설정이 초기화 됩니다.

– 트개픽 측정주기별 초기화
위의 설정 ThrottlePolicy Volume 5000M 1d 와 같이 1일 기준으로 설정되었으면
매일 특정시간에 전체트래픽이 누적계산 되지않도록 전체를 초기화 해주어야 됩니다.
초기화 하는 방법은 http://사이트도메인/throttle-status 페이지에 가면
좌측상단에 “Reset All”을 클릭하도록 합니다.

보통 이 작업은 매일 자정에 하는 경우가 많으며 수동으로 할수가 없기때문에 
cron을 활용하여 자동으로 초기화 하도록 합니다.
자동 초기화에 대한 내용은 cron에 대한 내용을 다룰때 같이 설명하도록 하겠습니다.

트래픽 초과로 인한 사이트 차단이 되었을때 그에 따른 간단한 안내 메시지나 설명을 위한
에러페이지를 제작할 필요가 있으며,이를 위해 ErrorDocument 설정을 활용하시기 바랍니다

출처 : http://phpleader.net/bbs/view.php?&ss[fc]=7&bbs_id=php_07&page=5&doc_num=88

[호스팅 구축] 쉘 스크립트

#!/bin/bash
echo "
               [1] 사용자 계정 추가 합니다.
               
               [2] 네임서버 추가합니다. 
               
               [3] VirtualHost 추가하기.                

               [4] Mysql 계정추가하기.
              
               [5] sendmail 계정 추가하기.  
"

echo -n "select Number:"
read Num

case "$Num" in

#사용자 추가 하기 
1)
echo =======================================================
echo
echo  "< Hosting Server 사용자 추가 스크립트>"
echo
echo  계정ID, 계정Password 를 입력       
echo
echo =======================================================
echo 
echo -n "사용자 계정 입력:"
         read id

echo -n "사용자 패스워드 입력:"
         read pass

echo -n "
        사용자 계정: $id
        
        사용자패스워드: $pass
-------------------------------------------------------------
        맞으면 <Enter>를 누르고 틀리면 No를 입력하세요: "
        read chk

if [ "$chk" != "" ]

then
         exit
fi

echo""
echo "호스팅 사용자를 추가합니다."

#계정 ID 추가 
adduser $id
#패스 워드 추가

echo "$pass" | passwd --stdin "$id"
echo "

"
echo "사용자 아이디와 패스워드 입니다"
echo ""
echo ""
echo "사용자 ID: $id"
echo "패스워드 : $pass"
echo "사용자 추가를 완료했습니다"
exit;;

#네임 서버 추가 스크립트
2)
echo =======================================================
echo
echo  "< 네임서버 추가 등록추가 >"
echo
echo =======================================================
echo 
echo -n "url 주소를 입력하세요 :"
         read url

echo -n "서버 IP 입력하세요:"
         read ip
echo -n "
       
        사용자 도메인 : $url
          서버 IP     : $ip
-------------------------------------------------------------
        맞으면 <Enter>를 누르고 틀리면 No를 입력하세요: "
        read chk

if [ "$chk" != "" ]

then
         exit
fi

echo "zone \"$url\" IN {
        type master;
        file \"$url.zone\";
        allow-update { none; };
};" >> /etc/named.conf

#포워드존 파일 생성합니다 
touch /var/named/$url.zone

echo "\$TTL    86400
@       IN      SOA     ns.$url. root.ns.$url.  (
                                      1997022700 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
                IN      NS      ns.$url.
                IN      MX 10   mail.$url.
;
@               IN      A       $ip
www             IN      A       $ip
*               IN      A       $ip
" > /var/named/$url.zone

#named restart
/etc/init.d/named restart

echo "설정이  완료했습니다"

exit;;

# 가상호스트 추가하기

3)

echo =======================================================
echo
echo  "< 가상 호스트 추가하기 >"
echo
echo  계정 도메인, 계정ID, IP는 *:80 을 입력   
echo
echo =======================================================
echo 
echo -n "url 주소를 입력하세요 :"
         read url
echo -n "계정 ID를 입력 하세요:"
         read id
echo -n "서버 IP 입력하세요:"
         read ip
echo -n "
       
        사용자 도메인 : $url
            게정 ID   : $id
            서버 IP   : $ip

-------------------------------------------------------------
        맞으면 <Enter>를 누르고 틀리면 No를 입력하세요: "
        read chk

if [ "$chk" != "" ]

then
         exit
fi

echo "<VirtualHost $ip>
DocumentRoot /home/$id/public_html
ServerName $url
ServerAlias www.$url
#    ErrorLog logs/dummy-host.example.com-error_log
#    CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>" >> /etc/httpd/conf/httpd.conf

echo "설정이  완료했습니다"

#아파치 restart
service httpd restart

exit;;

# Myslq 계정 추가하기 
4)
echo =======================================================
echo
echo  "< Myslq 계정 추가하기  >"
echo
echo  계정ID, MySql Password를 입력
echo
echo =======================================================
echo 
echo -n "Mysql 계정 추가하기:" 
         read id

echo -n "Mysql 패스워드 :"
         read pass
echo -n "
       
        사용자 도메인 : $id
            서버 IP   : $pass

-------------------------------------------------------------
        맞으면 <Enter>를 누르고 틀리면 No를 입력하세요: "
        read chk

if [ "$chk" != "" ]

then
           exit
fi

echo "create database $id;
GRANT ALL PRIVILEGES ON $id.* TO $id@localhost IDENTIFIED by '$pass';" > ./tmp

echo "
       Mysql 루트 패스워드를 입력하세요    
"

mysql -u root -p mysql < ./tmp
rm -f ./tmp

echo "설정이  완료했습니다"
exit;;

5)
echo =======================================================
echo
echo       메일 추가하기        
echo
echo       계정 도메인, 메일ID, 메일Password 를 입력
echo
echo =======================================================
echo -n "url 주소를 입력하세요 :"
         read url
echo -n "계정 ID:"
         read id
echo -n "계정 패스워드:" 
         read pass
echo -n "
       
        사용자 도메인 : $url
            계정 ID   : $id
            서버 PASS : $pass
        
-------------------------------------------------------------
        맞으면 <Enter>를 누르고 틀리면 No를 입력하세요: "
        read chk
if [ "$chk" != "" ]
then
           exit
fi
echo "$url" >> /etc/mail/local-host-names

adduser -M $id -s /bin/false

echo "$id@$url  $id"  >> /etc/mail/virtusertable
echo "$pass" | passwd --stdin "$id"

#sendmail 설정 적용을 위한 메일 DB작업 
makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable
makemap hash /etc/mail/local-host-names < /etc/mail/local-host-names

#sendmail restart
/etc/init.d/sendmail restart

echo "설정이  완료했습니다"
exit;;*)
  .....
esac




==================================================================
또 다른 방법
==================================================================



아래 세가지가 있는데, 쉘스크립트를 조금만 아시는 분이라면 
소스만 보셔두 충분 할 것입니다. 
잘 모르신다면 설명과 함께 스크린샷도 같이 보시면 좋습니다. 
주의 하실 점은 레드헷 기반에서 작업하였고, 아파치는 /usr/local/apache에 
설치 되었었고, /usr/local/mysql 에 mysql이 설치 되었으며, 
dns는 /etc/named.conf 파일과 /var/named 아래디렉토리를 수정하고 
있습니다. 
이러한 부분들은 자신의 시스템에 맞춰서 설정하신후에 사용하시면 
됩니다. 
마지막으로 아래 쉘 스크립트들은 아주 간단한 문법으로 echo문이나 
간단한 메뉴 구성으로 만들어져 있으므로, 여러분이 직접 수정 보완하여서 
사용하실때 더 빛을 볼꺼라고 생각합니다^^

소스 

#!/bin/sh 
#
# P-Server Manager -- pbi12
# usage : P-Menu Setting-ID
#

echo 
echo http://linuxnew.com Made by Pbi12...
echo
echo "[ P-Server Manager ]" 
echo

select var in "useradd" "userdel" "public_html" "chmod" "db-creat" "db-drop" "db-privilege" "db-delete" "db-backup" "db-reload" "du" "exit"

do 
if [ "$var" = "useradd" ]; then 
echo "Add $1 Account~" 
/usr/sbin/useradd $1 -g other
passwd $1

elif [ "$var" = "userdel" ]; then 
echo "$1 User Delete!" 
/usr/sbin/userdel -r $1

elif [ "$var" = "public_html" ]; then 
echo "Make Web Derectory" 
mkdir /home/$1/public_html

elif [ "$var" = "chmod" ]; then 
echo "Setting public_html" 
chmod 711 /home/$1/
chmod 711 /home/$1/public_html

elif [ "$var" = "db-creat" ]; then 
echo "DB-Creat"
/usr/local/mysql/bin/mysqladmin -uroot -p create $1

elif [ "$var" = "db-drop" ]; then 
echo "DB-Drop"
/usr/local/mysql/bin/mysqladmin -uroot -p drop $1

elif [ "$var" = "db-privilege" ]; then 
echo "grant all privileges on N.N to $1@localhost identified by '암호' with grant option; INSERT INTO db VALUES('localhost', '$1', '$1','Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y'); "
/usr/local/mysql/bin/mysql -u root -p mysql

elif [ "$var" = "db-delete" ]; then 
echo "DELETE FROM user where user='$1'; DELETE FROM db where user='$1';"
/usr/local/mysql/bin/mysql -u root -p mysql

elif [ "$var" = "db-backup" ]; then 
echo "DB-Backup"
/usr/local/mysql/bin/mysqldump -u$1 -p $1 > $1.sql

elif [ "$var" = "db-reload" ]; then 
echo "DB-Reload"
/usr/local/mysql/bin/mysqladmin -uroot -p reload

elif [ "$var" = "du" ]; then 
echo "Du State"
du -sh /home/*

elif [ "$var" = "exit" ]; then 
echo "Thank you^^" 
exit 0

else 
echo "$var Re Selecte" 
fi 
done

이 프로그램은 인수로 아이디를 받습니다. 
그런후에 그 아이디에 맞춰서 작업을 합니다. 
메뉴는 12개가 있는데, 제가 계정을 주거나 DB를 새로 생성하거나 자주 사용하는 것들을 
이렇게 메뉴로 만들어 놓고서 계정을 줄때에 사용합니다. 
대충 살펴 보면 

[ P-Server Manager ] 
1) useradd 4) chmod 7) db-privilege 10) db-reload 
2) userdel 5) db-creat 8) db-delete 11) du 
3) public_html 6) db-drop 9) db-backup 12) exit

[ P-Server Manager ] 
1) useradd 4) chmod 7) db-privilege 10) db-reload 
2) userdel 5) db-creat 8) db-delete 11) du 
3) public_html 6) db-drop 9) db-backup 12) exit

계정을 생성하고 삭제하고 public_html 을 주고 퍼미션 조절하고, db생성하고, db계정도 생성을 합니다. 
db권한을 줄때에는 복사해서 붙여넣기 할 수 있도록 echo만 되어집니다. 
mysql 리로드 하고, du 로 /home 아래 에 있는 계정 사용자들의 
현재 사용 용량도 확인을 합니다. 
12번을 눌러서 exit 종료~ 
제가 개인적으로 서버 관리 할때에 사용하는 건데, 참고하세요^^

소스 

#/bin/sh
#
# $1 is acount name, $2 is domain name.!
# Domain Setting...
# Virtual Host Add acount Shell Program!
#
[ $# -ne 2 ] &&
{
echo
echo ===================================================
echo
echo P-Domain http://linuxnew.com Made by Pbi12...
echo
echo usage : $0 Setting-ID Setting-Domain
echo
echo ex. P-Domain pbi12 linuxnew.com
echo
echo ===================================================
echo
exit 1
}

if [ $2 != NULL ]; then
adduser $1 -g other
passwd $1
chmod 711 /home/$1

echo "
<VirtualHost 211.113.242.26>
ServerName $2
DocumentRoot /home/$1/public_html/
ServerAlias www.$2
</VirtualHost> " >> /usr/local/apache/conf/httpd.conf

echo "
zone \"$2\" IN {
type master;
file \"db.$2\";
};" >> /etc/named.conf

echo "
@ IN SOA ns.linuxnew.com. root.linuxnew.com. (
2001122600 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum

IN NS ns.linuxnew.com.

localhost IN A 127.0.0.1
@ IN A 211.113.242.26
ns IN A 211.113.242.26
www IN A 211.113.242.26
" > /var/named/db.$2

/usr/local/apache/bin/apachectl restart
/etc/init.d/named restart

echo
echo "########################################################"
echo
echo "[P-VirtualHost] '$1'의 가상 도메인을 셋팅하였습니다."
echo "Apache 와 Dns를 재가동 시켰습니다."
echo "'$2'도메인으로 접속하세요!"
echo "http://linuxnew.com -- Made by pbi12"
echo
echo "########################################################"
echo
fi

이건 P-VirtualHost 하고 거의 흡사 한건데, 이건 도메인을 새로 사서 등록하고, 
DNS를 셋팅할때에 이걸로 하는데, 사용법은 
프로그램이름 적고 생성할 아이디 적고 셋팅할 도메인을 적어주면, 
아이디는 -g other 그룹으로 생성을 하고, 퍼미션 조절을 해준다음에 
그 다음에는 dns 셋팅을 해주고, 
dns의 db파일을 생성해주고, 그리고 나서 아파치에서 가상 호스트 셋팅을 해줍니다. 
마지막으로 named와 apache를 재가동 시켜줍니다. 
도메인을 새로 만든 계정에 연결을 해주는 것으로 바로 도메인을 치면 연결이 됩니다~ 
여러도메인을 연결해주고 있는 저는 이것을 사용해서 한번에 셋팅을 해주고 있습니다.^^;

소스 

#/bin/sh
#
# $1 is acount name ...
# Virtual Host Add acount Shell Program!
#
[ $# -ne 1 ] &&
{
echo
echo ===================================================
echo
echo P-Virtual http://linuxnew.com Made by Pbi12...
echo
echo usage : $0 Setting-ID
echo
echo ===================================================
echo
exit 1
}

if [ $1 != NULL ]; then

adduser $1 -g other
passwd $1
chmod 711 /home/$1

echo "
<VirtualHost 211.113.242.26>
ServerName $1.linuxnew.com
DocumentRoot /home/$1/public_html/
</VirtualHost> " >> /usr/local/apache/conf/httpd.conf

echo "$1 IN A 211.113.242.26" >> /var/named/db.linuxnew.com

/usr/local/apache/bin/apachectl restart
/etc/init.d/named restart

echo
echo "########################################################"
echo
echo "[P-VirtualHost] '$1'의 가상 도메인을 셋팅하였습니다."
echo "Apache 와 Dns를 재가동 시켰습니다."
echo "http://linuxnew.com -- Made by pbi12"
echo
echo "########################################################"
echo
fi


쉘프로그램인데, 제가 제 시스템에서 새로운 계정을 만들때에 사용하는 것으로 
계정은 -g 옵션으로 other 그룹으로 생성합니다. 
그리고 dns와 apache를 셋팅해서 2차 도메인을 만들때에 사용하는 것으로 한번에 계정 생성하고, 
퍼미션 조절해주고, httpd.conf에 가상호스트 추가해주고, dns 셋팅해주고, 마지막에 재가동 시켜 줍니다. 
아래에 링크 시켜놨으니깐 참고하세요~

출처 : linux.co.kr
작성자 : pbi12@yahoo.co.kr


사용자 계정 추가 쉘 스크립트

사용법

 /root/script/newuser 사용자ID

소스

#!/bin/bash

clear

echo ==================================================================
echo " UserAdd Process Start "
echo ==================================================================

echo -n "User Name : "
read username

useradd $username

echo ------------------------
echo PassWord Setting
echo ------------------------
passwd $username

echo ==================================================================
echo " www root directory making "
echo ==================================================================

echo
echo -n "www root Directory path : "
echo /home/$username/public_html
mkdir -p /home/$username/public_html
echo ==================================================================
echo " root directory setting & test index.php making "
echo ==================================================================
chmod 775 /home/$username
chmod 775 /home/$username/public_html
chown $username.$username /home/$username/public_html

echo " " >>/home/$username/public_html/index.php
echo "<? phpinfo(); ?>" >> /home/$username/public_html/index.php

chown $username.$username /home/$username/public_html/index.php
chmod 775 /home/$username/public_html/index.php

echo checking -----------------------------------------------------------
ls -al /home/$username
echo checking -----------------------------------------------------------
ls -al /home/$username/public_html

echo ==================================================================
echo " MySQL useradd"
echo ==================================================================
echo "Username : $username"
echo "dbname : $username"
echo -n "User p/w : "
read userpw
echo " " >> mysql_useradd.sql
echo "use mysql" >> mysql_useradd.sql
echo "create database $username;" >> mysql_useradd.sql
echo "insert into user (host, user, password) values ('localhost', '$username', password('$userpw'));" >> mysql_useradd.sql
echo "insert into db values ('localhost', '$username', '$username', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');" >> mysql_useradd.sql
echo "FLUSH PRIVILEGES;" >> mysql_useradd.sql
/usr/local/mysql/bin/mysql -uroot -p97081056 < ./mysql_useradd.sql
cat ./mysql_useradd.sql
rm -rf ./mysql_useradd.sql

[호스팅 구축] 계정등록 절차 스크립트

웹호스팅 계정등록 절차

  • 현재 임시로 구현된 계정등록 스크립트를 이용할 때의 절차이며, 추후 계정생성 기능도 스크립트에 통합시켜서 좀더 단순화 할 예정이다.
  • 본 절차는 아래 서버호스팅 설정내용을 기초로 한 내용이므로 서버의 네임서버나 웹서버의 설정이 다른 경우 제대로 동작하지 않을 수 있다.

1. 웹호스팅 계정생성

[root@localhost ~]# useradd -g users guest1 //--> guest1 계정 생성
[root@localhost home]# chmod 701 /home/guest1/ //--> 계정 www 디렉토리의 웹접근 허용을 위한 작업

2. 웹호스팅 계정등록 스크립트 실행

[root@suware admin]# ./vhost.sh
echo -n "User Name : "
read username

echo -n "Web address : "
read webaddr

echo "Username : $username"
echo "Web address : $webaddr"

vhost_dir="/usr/local/apache2/conf/extra/httpd-vhosts.conf"
name_dir="/etc/named.external.zones"

# 아파치 .conf 파일에 가상호스트 부분을 추가함
echo "" >> $vhost_dir
echo "" >> $vhost_dir
echo "    ServerAdmin admin@mymail.com" >> $vhost_dir
echo "    DocumentRoot \"/home/$username/www\"" >> $vhost_dir
echo "    ServerName $webaddr" >> $vhost_dir
echo "    ServerAlias *.$webaddr" >> $vhost_dir
echo "    " >> $vhost_dir
echo "     Options IncludesNoExec" >> $vhost_dir
echo "    " >> $vhost_dir
echo "" >> $vhost_dir

# 네임서버 zone 파일에 도메인 추가함
echo "zone \"$webaddr\" IN {     type master; file \"general.zone\"; allow-update { none; }; };" >> $name_dir

echo "1)APACHE restarting..."
service httpd restart

echo "2)Name Server restarting..."
/etc/init.d/named restart


출처 : http://sharpwork.pe.kr/bbs/board.php?folder=&bo_table=linux&page=1&bbs_id=3023