이 프로그램은 이미 오래 전에 나돌던 프로그램입니다.

아시는 분은 다 아실 프로그램 dezend 입니다.

젠드엔코더로 암호화된 젠드 엔코더파일을 디코더하는 프로그램으로 방법은 간단합니다.

압축해제해서 디코더할 PHP소스 파일을 해당폴더에 넣어 php.exe 파일에 끌어넣기만 하면 됩니다.

예를 들어 test.php 파일을 php.exe 파일에 끌어넣기 하면 test.de.php 파일로 디코더되어 생성됩니다.

Dezend Encoder.zip

[출처] http://blog.habonyphp.com/383#.WWNC2-S1uUn


HTML 태그 내용을 그대로 출력하기 위해서는

<pre>  </pre> 태그사이에 html 소스를 입력해 주면 된다.


[Wed May 01 23:28:43 2013] [warn] Invalid command 'CBandLimit', undefined virtualhost name
[Wed May 01 23:28:43 2013] [warn] Invalid command 'CBandPeriod', undefined virtualhost name
 
위의 로그가 아파치 재시작 또는 문법 검증시 나타난다면

아파치 가상 호스트 설정파일에 ServerName 지시자가 주석처리되어 있거나 정의되지 않는 항목이 있는지

전체적으로 점검해 보아야 한다. 특히 Warning 로그에 해당 라인번호가 명시되지 않으니

수동으로 다 확인해야 한다.



쉘스크닙트를 작성하다 보면 특정 명령의 성공 유무가 궁금합니다.

이것은 해당 Process의 return 값하고 관계가 있을 수 있는데
C 프로그램의 main() 함수에서의 return 값 하고도 관계가 있습니다.
혹은 python 에서의 sys.exit(9) 같은 것과도 동일합니다.

모두 동일한데 0 이 리턴되면 정상이고 0이 리턴되지 않으면
오류로 간주합니다.

예를 들어

ls /etc | grep hosts

라는 명령을 실행하면

$ ls /etc | grep hosts
hosts
hosts.allow
hosts.deny


와 같은 결과가 나오고

$ echo $?
0

와 같이 이전 실행명령의 리턴값 ($?) 을 찍어보면 0 으로써 성공했다는 것이 나옵니다.

ls /etc 에 파일이나 폴더 목록을 보면서 hosts 라는 것이 있는 가를 grep 해본 결과입니다.

이제 host 대신 h_ost 라는 것을 대신 해 보면,

$ ls /etc | grep h_osts
$ echo $?
1


와 같이 0 이 아닌 값이 나옵니다.

이것을 기본적인 shell 스크립트로 만들어 본다면,

#!/bin/sh
ls /etc | grep h_osts
if [ $? -eq 0 ];then
    echo "CMD OK!"
else
    echo "CMD Failure!"
    exit 9
fi
echo "After CMD OK!"

위와 같이 만들 수 있습니다.

그런데 더 간단하게 보이는 방법으로서
명령을 실행하고 나서 쉘의 && || 논리 연산자를 이용하는 방법이 있습니다.

ls /etc | grep h_osts && echo "CMD OK!" || echo "CMD Failure!"

와 같이

CMD && 성공인경우의명령 || 실패인 경우의명령

과 같이 한줄로 표현 가능합니다. 물론 가독성을 위하여

ls /etc | grep h_osts \
    && echo "CMD OK!" \
    || echo "CMD Failure!"; exit 9
echo "After CMD OK!"

와 같이 줄 수 있습니다. (처음에는 적어도 그렇게 생각했지요) 

이것은 sh (bash 도 동일)의 논리 연산자의 실행 최적화와 관계 있는데요,

조건식 && 결과1 || 결과2

와 같은 구문이 있다고 하였을 때
조건식이 True 이면 && 다음 구문까지 확인하여 마저 True인가를 확인하지만 이미 True이기 때문에 && 다음의 결과1은 실행시키지만, || 다음의 결과2 구문은 실행시키지 않습니다.
조건식이 False 이면 그 반대로 || 다음의 결과2 구문만 실행합니다.

그런데 위의 명령을 수행하면 성공 하던 안하던 간에 무조건 exit 9으로 종료를 해 버렸습니다.


생각해보니 
명령1 && 명령2 || 명령3
이 하나의 명령이고 그것에 이어 (';') exit 9 명령이 수행되기 때문입니다.

여기서는 위의 명령3을 exit 9 까지 하나로 묶어 처리해야 합니다.

결론은,

ls /etc | grep h_osts \
    && echo "CMD OK!" \
    || echo "CMD Failure!"; exit 9; }
echo "After CMD OK!"

와 같이 해 주면 되는 것이었습니다.

어느 분께는 도움이 되셨기를...

[출처] http://egloos.zum.com/mcchae/v/11221790



그냥 echo 명령만 사용하면 자동으로 줄바꿈이 되는데, 전에 출력한 문자열을 지우고  새 문자열을 겹쳐 쓰고 싶다면 -n 옵션과 -e 옵션을 사용하자.

-n 옵션은 줄바꿈을 하지 않는 것이고, -e 옵션은 리턴(\r), 탭(\t) 등을 사용할 수 있게 해 주는 옵션이다.

echo "abc\tdef"
abc\tdef
echo -e "abc\tdef"
abc    def

전에 출력한 문자열을 지우고 그 자리에 새로운 문자열을 출력하려면, 첫번째 문자열을 출력할 때 -n 옵션으로 줄바꿈을 억제한 후에 다음 문자열을 출력할 때 -e 옵션으로 리턴(\r)을 출력해서 프롬프트를 줄 시작점으로 보내주면 된다. 아래의 예시를 참고하자.

echo -n "this is the first."
sleep 3
echo -e "\rthis is the 2nd.   "

첫번째 문자열 출력후 3초후에 두번째 문자열을 같은 줄에 겹쳐 쓰게 된다.

두번째 문자열이 첫번째보다 짧다면 이전 출력 뒷부분이 남을 것이므로 뒤쪽에 공백(space)을 충분히 주자.

shell script에서 진행 상황을 표시해 주고 싶을 때 요긴하게 사용할 수 있다.

아래는 위의 내용을 응용한 쉘스크립트 예제파일이다.

processing.sh


[출처] http://bahndal.egloos.com/406163



php.ini 설정에서 register_globals = on/off 차이점과 기능설명

rester_globals 를 On 으로 하면 변수가 get, post, session 변수인지 체크하지 않아도 됩니다. 
쓰기에 따라서 보안적인 부분에 문제가 생길 수 있습니다
 

register_globals = on
가능 -> $_POST['u_id']
가능 -> $u_id
 
register_globals = off
가능 -> $_POST['u_id']
불가능 -> $u_id  
* extrract()로 처리하면 가능

php.ini에서 register_globals=off 일경우 헤더나 인클루드를 이용해서 상단에
@extract($_GET);
@extract($_POST);
@extract($_SERVER);
@extract($_FILES);
@extract($_ENV);
@extract($_COOKIE);
@extract($_SESSION);
 
위와 같이 처리해 주면 기존 소스를 그대로 사용할 수 있다.
혹은 받아오는 변수의 전체코드를 다 써주면 됨
$HTTP_GET_VARS[변수] 또는 $_GET[변수]
$HTTP_POST_VARS[변수] 또는 $_POST[변수]
$HTTP_COOKIE_VARS[변수] 또는 $_COOKIE[변수]
$HTTP_SESSION_VARS[변수] 또는 $_SESSION[변수]
$HTTP_POST_FILES[변수] 또는 $_POST_FILES[변수]



출처: http://gocoding.tistory.com/156 [Developer Factory]

'Works > PHP' 카테고리의 다른 글

리눅스 대량의 파일 지우기  (0) 2017.11.20
Dezend Encoder  (0) 2017.07.10
sqlsrv 함수로 mssql 접속하는 테스트페이지  (0) 2017.03.29
php 퍼미션 관련 함수  (0) 2016.10.25
PHP 문자열 함수  (0) 2016.06.30


## 설치 환경

- OS : CentOS 6
- 아파치 : httpd 2.4.25
- mod_url : 1.6.2.7 (최신버전인 1.8 버전은 컴파일 과정에서 에러남)

# 아파치 설치과정 : 본 블로그의 다른 게시물 참조

mod_url 설치를 위해서 최신 버전을 설치하려고 했으나 컴파일 에러 발생.
따라서 약간 버전이 낮은 것으로 컴파일 하여 설치 성공

[ Download & 소스 설치 ]  2186-mod_url-apache2-1.6.2.7.tar.bz2


# wget http://kldp.net/modurl/release/2186-mod_url-apache2-1.6.2.7.tar.bz2
# bzip2 -d 2186-mod_url-apache2-1.6.2.7.tar.bz2
# tar -xvf mod_url-apache2-1.6.27.tar

[ 컴파일 ]

# /usr/local/apache/bin/apxs -i -a -c mod_url.c

그러면 아파치 모듈 디렉토리 (/usr/local/apache/modules) 에 설치된다. (755 권한인지 확인)

-rwxr-xr-x 1 root root 13775  6월  5 18:24 mod_url.so

[ 환경 설정 ]

아파치 설정파일 httpd.conf 에 아래 부분이 이미 추가 되어 있다.

LoadModule redurl_module      modules/mod_url.so

그 하단에

<IfModule mod_url.c>
        CheckURL On
</IfModule>

부분만 추가시키고 아파치 웹 서버를 재구동 시킨다.


tcpdump 명령어 사용법



ㅁ 기본 옵션들


# tcpdump [ -AdDefIKlLnNOpqRStuUvxX ][ -B buffer_size ][ -c count ][ -C file_size ][ -G rotate_seconds ][ -F file ][ -i interface ][ -m module ][ -M secret ][ -r file ][ -s snaplen ][ -T type ][ -w file ][ -W filecount ][ -E spi@ipaddr algo:secret,... ][ -y datalinktype ][ -z postrotate-command ][ -Z user ]


ㅁ 각종 예제


# tcpdump -i eth0 => 인터페이스 eth0 을 보여줌

# tcpdump -w tcpdump.log => 결과를 파일로 저장, txt 가 아닌 bin 형식으로 저장됨

# tcpdump -r tcpdump.log => 저장한 파일을 읽음

# tcpdump -i eth0 -c 10 => 카운터 10개만 보여줌

# tcpdump -i eth0 tcp port 80 => tcp 80 포트로 통신하는 패킷 보여줌

# tcpdump -i eth0 tcp port 80 => tcp 80 포트로 통신하는 패킷 보여줌

# tcpdump -i eth0 src 192.168.0.1 => source ip 가 이것인 패킷 보여줌

# tcpdump -i eth0 dst 192.168.0.1 => dest ip 가 이것인 패킷 보여줌


* and 옵션으로 여러가지 조건의 조합 가능

# tcpdump -i eth0 src 192.168.0.1 and tcp port 80 => source ip 가 이것이면서 tcp port 80 인 패킷 보여줌


# tcpdump -i eth0 dst 192.168.0.1 => dest ip 가 이것인 패킷 보여줌

# tcpdump host 192.168.0.1 => host 를 지정하면, 이 ip 로 들어오거가 나가는 양방향 패킷 모두 보여줌

# tcpdump src 192.168.0.1 => host 중에서 src 가 이것인것 만 지정

# tcpdump dst 192.168.0.1 => host 중에서 dst 가 이것인것 만 지정

# tcpdump net 192.168.0.1/24 => CIDR 포맷으로 지정할 수 있다.

# tcpdump tcp => TCP 인것만

# tcpdump udp => UDP 인것만

# tcpdump port 3389 => 포트 양뱡항으로 이것인 것.

# tcpdump src port 3389 => src 포트가 이것인 것.

# tcpdump dst port 3389 => dst 포트가 이것인 것.


* combine : and ( && ) , or ( || ) , not ( ! ) 으로 여러가지를 조합해서 사용 가능

# tcpdump udp and src port 53 => UDP 이고 src 포트가 53 인 것

# tcpdump src x.x.x.x and not dst port 22 => src ip 가 x.x.x.x 이고 dst 포트가 22 가 아닌 것


* grouping : ( )

# tcpdump 'src x.x.x.x and ( dst port 3389 or 22 )' => src ip 가 x.x.x.x 이고 ( dst 포트가 3389 또는 22 ) 인 것  ==> 여기서는 ' ' 가 반드시 있어야 한다.

[출처] http://moyaria.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4%EC%97%90%EC%84%9C-tcpdump-%EB%AA%85%EB%A0%B9%EC%96%B4%EC%9D%98-%EC%98%B5%EC%85%98-%EC%A0%95%EB%A6%AC


1. UID 로 된 uid 를 다른 계정명과 그룹명으로 변경

find /home -uid UID -exec chown 계정명:그룹명 {} \;

ex) find /home/apple -uid 500 -exec chown apple:users {} \;

예제 해설) /home/apple 하위 경로에 있는 모든 파일 및 디렉토리에 대해서 uid 가 500 인 것을

uid : apple 과 gid : users 로 변경해라


2. 현재 경로의 모든 파일에 대해 내용검색을 하여 keyword 라는 패턴을 new_keyword로 치환

find ./ -exec perl -pi -e 's/keyword/new_keyword/g' {} \;

ex) find ./*.php -exec perl -pi -e 's/abc.com/abc.kr/g' {} \;

예제 해설) 현재 경로 (하위 포함) 의 모든 php 파일에 포함된 abc.com 이라는 패턴을 abc.kr 로 치환해라

3. 현재 경로에서만 소유자가 nobody인 php파일을 모두 삭제


find ./ -maxdepth 1  -user nobody -name "*.php" -exec rm {} \;

4. 특정날짜 기준으로 파일 찾기

4-1 특정 날짜 이후 생성된 파일 찾기
find ./ -type f -newerct yyyy-mm-dd

4-2 특정 날짜 이전에 생성된 파일 찾기
find ./ -type f !-newerct yyyy-mm-dd

위 두 명령어를 조합하여 일정 기간내에 생성된 파일을 찾을 수 있다.

ex) find ./ -type f -newerct 2020-01-01 ! -newerct 2020-01-31
(2020년 1월 1일 부터 1월 31일 이내에 생성된 파일을 출력)

응용) find ./ -type f -newerct 2020-01-01 ! -newerct 2020-01-31 -exec rm -rf {} \; 
(2020년 1월 1일 부터 1월 31일 이내에 생성된 파일 삭제)

5. 수정된 날짜/시간 기준으로 찾기

find ./ -type f -mtime +30 (30일 지난 파일)
find ./ -type f -mtime 30 (30일째 되는 파일)
find ./ -type f -mtime -30 (30일이 안되는 파일)
find ./ -type f -mmin +30 (30분 지난 파일)
find ./ -type f -mmin 30 (30분째 되는 파일)
find ./ -type f -mmin -30 (30분이 안되는 파일)

[기타] 명령어 응용을 위한 옵션 정리
-atime : access time
-ctime : create time
-mtime : modified time

-newerct : create time
-newermt : modified time
-newerat : access time


# vi /etc/default/useradd (또는 useradd -D로 출력가능)

# useradd defaults file
# 기본적으로 생성되는 신규사용자가 기본적으로 속해지는 그룹, 이 그룹은 useradd -g로 지정하는 로그인그룹(또는 이니셜그룹)을 의미하는 것이 아니라, useradd -G로 지정되는 부차적인 그룹(2차 그룹)을 의미한다. 기본값인 100은 GID를 의미하며, 신규로 생성되는 사용자는 GID가 100인 users 그룹에 속하게 된다. (신규로 생성되는 사용자는 이 설정에 따라 무조건 users 그룹을 2차그룹으로 가지게 된다) 하지만 배포판에 따라 이 설정이 무시되는 경우도 있음(-g, -G 등으로 직접 명시해야 속하는 경우)
GROUP=100

# 기본적으로 생성할 신규사용자의 홈디렉토리 생성의 위치를 결정한다. 기본값인 /home은 /home 아래에 신규유저의 이름으로 신규유저의 홈 디렉토리를 생성토록 한다. useradd -d로 임의의 위치를 지정할 수 있다.
HOME=/home

# 패스워드의 유효기간이 만료 후 계정이 비활성화 되기 까지의 기간(number of days). 0은 패쓰워드가 만료되면 바로 계정이 비활성화 되어 사용할 수 없게 한다. -1은 이 기능을 사용하지 않음. useradd -f로 임의의 값을 넣을 수 있다.
INACTIVE=-1

# 계정의 사용기간을 지정한다. 이 날짜가 지나면 계정으로 로그인이 불가능 하다. 입력형식은 YYYY-MM-DD이며 기본값인  blank는 계정의 만료일을 정하지 않음을 의미한다. useradd -e로 임의의 값을 넣을 수 있다.
EXPIRE=

# 기본적으로 사용할 쉘을 지정함. 사용할 수 있는 쉘의 목록은 /etc/shells에서 확인 가능하다. useradd -s 로 원하는 쉘을 선택할 수 있다.
SHELL=/bin/bash

# 기본적으로 복사해 올 환경설정 파일의 위치를 지정한다. 새로운 사용자가 생성되면 /etc/skel 에 있는 환경설정 파일을 복사해온다.(.bash_profile, .bashrc 등) useradd -m -k 로 임의의 환경설정을 복사해 올 수 있다.
SKEL=/etc/skel

useradd 명령을 옵션 없이 실행하였을 경우에 이 파일의 내용이 모두 그대로 적용이 된다. 하지만 useradd의 각 옵션들을 사용하면 이 옵션들이 우선 적용되어 이 파일의 내용은 무시된다.

-----------------------------------------------------------------------------------------------

# vi /etc/login.defs

# 패쓰워드의 유효기간을 정의. 패쓰워드를 변경하지 않고 로그인 할 수 있는 최대기간
PASS_MAX_DAYS 99999

# 패쓰워드 변경 후 재 변경까지 필요한 최소 날 수. 이 기간이 지정되면 패쓰워드 변경 후에 일정기간 동안에는 패쓰워드를 변경하지 못함. (You must wait longer to change your password)
PASS_MIN_DAYS 0

# 최소한 패쓰워드의 문자 수
PASS_MIN_LEN  5

# 패쓰워드 유효기한 전에 변경 알림 메세지를 출력하는 날의 수
PASS_WARN_AGE 7

# UID의 시작값
UID_MIN       500

# UID의 종료값
UID_MAX     60000

# GID의 시작값
GID_MIN       500

# GID의 종료값
GID_MAX     60000

# 생성되는 사용자의 홈 디렉토리의 퍼미션을 결정하는 UMASK 값
UMASK    066

(오직 홈 디렉토리 퍼미션만을 결정하는 UMASK 값이며, 로그인 후 적용되는 UMASK는 .bashrc에서 결정)

참고)

데비안 패키지 (우분투 등)에서는  adduser로 생성되는 계정의 홈 디렉토리의 퍼미션은  /etc/adduser.conf 에서  DIR_MODE에서 지정한 퍼미션으로 설정됩니다. 예를 들어  DIR_MODE=0700 으로 하면 700 퍼미션으로 신규 사용자의 홈디렉토리가 생성이 되지요.
하지만 래드햇 계열에서는 adduser도 /etc/login.defs파일을 참조합니다.

즉 데비안 패키지에서 생성되는 홈 디렉토리의 퍼미션은
* useradd로 사용자를 생성할 경우 /etc/login.defs에서 UMASK 값 으로 사용자의 홈 디렉토리의 퍼미션이 결정됩니다.
* adduser로 사용자를 생성할 경우 /etc/adduser.conf에서 DIR_MODE=퍼미션 으로 사용자의 홈 디렉토리의 퍼미션이 결정됩니다.

-----------------------------------------------------------------------------------------------

# vi /etc/passwd
사용자명 : useradd [name] / usermod -l new_name [name]
password : pwconv --> /etc/shadow
UID : useradd -u / usermod -u
GID : useradd -g / usermod -g
comments : useradd -c / usermod -c 등으로 부가정보를 추가하면 여기에 기록됨
홈디렉토리 : /etc/default/useradd 의 HOME 또는 useradd -d / usermod -d
로그인 쉘 : /etc/default/useradd 의 SHELL 또는 useradd -s / usermod -s

ruset : x : 512 : 512 : : /home/ruset : /bin/bash

# vi /etc/shadow
사용자명 : useradd [name] / usermod -l new_name [name]
암호화된 password (by md5) : passwd [name]
변경일 수 count (from 1970.1.1) : passwd를 실행한 일을 1970년 1월 1일로 부터 몇 일이 경과 되었는지 나타냄.
PASS_MIN_DAYS : /etc/login.defs 에서 정의
PASS_MAX_DAYS : /etc/login.defs 에서 정의
PASS_WARN_AGE : /etc/login.defs 에서 정의
INACTIVE : /etc/default/useradd 의 INACTIVE 또는 useradd -f / usermod -f / chage -I
EXPIRE : /etc/default/useradd 의 EXPIRE 또는 useradd -e / usermod -e
Reserved : 예약공간

ruset : $1$liU69g8r$L3q1Rr3XcZ58E8RX4RHeS1 : 13616 : 0 : 99999 : 7 : : :

-----------------------------------------------------------------------------------------------

# useradd
-u : uid 지정
-g : 로그인 그룹(이니셜 그룹)의 gid 또는 그룹명을 지정 (1개의 그룹만 지정가능)
-G : 부가그룹 (2차그룹)의 GID 또는 그룹명을 지정 (다수의 그룹을 지정가능)
-e : 계정의 사용기한을 지정(이 날이 지나면 로그인 불가)
-f : 패스워드가 만료된 후에 계정이 비활성화되기까지의 기간을 설정한다. 0은 패스워드 만료 후에 바로 계정이 비활성화 된다. (-1은 이 기능을 사용치 않음)
-m -k :   -m 옵션은 신규유저의 홈 디렉토리가 존재하지 않는다면 사용자의 홈을 생성하고, -k 옵션으로 지정한 디렉토리내의 파일들을 신규유저의 홈 디렉토리로 복사한다. (만약  -k 옵션을 생략시 자동적으로 /etc/skel에 있는 파일을 복사한다) -k 옵션은 -m과 함께만 사용할 수 있다. (-k 옵션은 단독으로 사용이 불가능)
-d : 사용자의 홈 디렉토리를 지정함.
-s : 사용자의 로그인 쉘을 지정
-o : 이미 존재하는 UID와 GID를 갖게 함. (duplicate (non-unique) UID)
-p : 패스워드를 지정



출처: http://psman2.tistory.com/entry/useradd와-여러가지-설정들 [R.U Ready?]