RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
«이전  1 ... 2 3 4 5 6 7 8 9 10 ... 12  다음»
출처 카페 > 컴시스템 / ykc1111
원본 http://cafe.naver.com/comsystem1111/244

shell에서 if문에서 쓰이는것들..

유닉스를 잘 안써서 잘몰랐었다..

if [ -r "$CATALINA_HOME"/bin/setclasspath.sh ]; then
  BASEDIR="$CATALINA_HOME"
  . "$CATALINA_HOME"/bin/setclasspath.sh
fi


요런걸쓸때 -r이 몰까 모르겠어서 찾아보았다 아래와 같다고 한다..

유닉스쉘을 지금은쓸기회가 없어서 그다지 -_- 필요없어보이긴하나 알고있으면 뭐~ 쓸모있을지도 몰라서 copy해 보았다..


-b 파일 : 파일이 블럭 장치 파일이면 참
-c 파일 : 파일이 문자 장치 파일이면 참
-d 파일 : 파일이 디렉토리이면 참
-e 파일 : 파일이 존재하면 참
-f 파일 : 파일이 정규 파일이면 참
-L 파일 : 파일이 심볼릭 링크이면 참
-p 파일 : 파일이 네임드(named) 파이프이면 참
-S 파일 : 파일이 소켓이면 참
-r 파일 : 파일이 읽기 가능이면 참
-s 파일 : 파일의 크기가 0보다 크면 참
-w 파일 : 파일이 쓰기 가능이면 참
-x 파일 : 파일이 실행 가능이면 참
파일1 -nt 파일2 : 파일1이 파일2보다 새로운 파일이면 참
파일1 -ot 파일2 : 파일1이 파일2보다 오래된 파일이면 참
파일1 -ef 파일2 : 파일1과 파일2가 같은 파일이면 참

문자열식은 문자열에 대한 비교를 한다.

-z 문자열 : 문자열의 길이가 0이면 참
-n 문자열 : 문자일의 길이가 0이 아니면 참
문자열1 = 문자열2 : 문자열1과 문자열2가 같으면 참
문자열1  != 문자열2 : 문자열1과 문자열2가 다르면 참

-h filename
               True if filename exists and is a  symbolic  link.
               With  all  other primitives (except -L filename),
               the symbolic links are followed by default.



문자열 비교
[ string ] - string이 빈 문자열이 아니라면 참
[ string1 = string2 ] - 두 문자열이 같다면 참
[ string1 != string2 ] - 두 문자열이 다르면 참
[ -n string ] - 문자열이 null(빈 문자열) 이 아니라면 참
[ -z string ] - 문자열이 null(빈 문자열) 이라면 참


산술 비교
`[ expr1 -eq expr2 ]` - 두 표현식 값이 같다면 참 ('EQual')
`[ expr1 -ne expr2 ]` - 두 표현식 갑이 같지 않다면 참 ('Not Equal')
[ expr1 -gt expr2 ] - `expr1 > expr2` 이면 참 ('Greater Then')
[ expr1 -ge expr2 ] - `expr1 >= expr2` 이면 참 ('Greater Equal')
[ expr1 -lt expr2 ] - `expr1 < expr2` 이면 참 ('Less Then')
[ expr1 -le expr2 ] - `expr1 <= expr2` 이면 참 ('Less Equal')
[ ! expr ] - expr 이 참이면 거짓, 거짓이면 참
[ expr1 -a expr2 ] - expr1 AND expr2 의 결과 (둘다 참이면 참, 'And')
[ expr1 -o expr2 ] - expr1 OR expr2 의 결과 (둘중 하나만 참이면 참, 'Or')


파일 조건
[ -b FILE ] - FILE 이 블럭 디바이스 이면 참
[ -c FILE ] - FILE 이 문자 디바이스 이면 참.
[ -d FILE ] - FILE 이 디렉토리이면 참
[ -e FILE ] - FILE 이 존재하면 참
[ -f FILE ] - FILE 이 존재하고 정규파일이면 참
[ -g FILE ] - FILE 이 set-group-id 파일이면 참
[ -h FILE ] - FILE 이 심볼릭 링크이면 참
[ -L FILE ] - FILE 이 심볼릭 링크이면 참
[ -k FILE ] - FILE 이 Sticky bit 가 셋팅되어 있으면 참
[ -p FILE ] - True if file is a named pipe.
[ -r FILE ] - 현재 사용자가 읽을 수 있는 파일이면 참
[ -s FILE ] - 파일이 비어있지 않으면 참
[ -S FILE ] - 소켓 디바이스이면 참
[ -t FD ] - FD 가 열려진 터미널이면 참
[ -u FILE ] - FILE 이 set-user-id 파일이면 참
[ -w FILE ] - 현재 사용자가 쓸 수 있는 파일(writable file) 이면 참
[ -x FILE ] - 현재사용자가 실행할 수 있는 파일(Executable file) 이면 참
[ -O FILE ] - FILE 의 소유자가 현재 사용자이면 참
[ -G FILE ] - FILE 의 그룹이 현재 사용자의 그룹과 같으면 참
[ FILE1 -nt F - : FILE1이 FILE2 보다 새로운 파일이면 ( 최근파일이면 ) 참
[ FILE1 -ot F - : FILE1이 FILE2 보다 오래된 파일이면 참
[ FILE1 -ef F - : FILE1 이 FILE2의 하드링크 파일이면 참

2006/09/08 15:57 2006/09/08 15:57
이 글에는 트랙백을 보낼 수 없습니다
Linux  2006/09/08 15:54

Process accounting

1 . 패키지 설치 확인

# rpm qa | grep I acct

2. accounting 실행

# service psacct start

3 . 모든 사용자 계정명령어 자동입력

            # accton /var/account/pacct

프로세스 통계용 소프트웨어는 수행된 모든 명령들을 디폴트로 /var/account/pacct에 저장한다.

프로세스 어카운팅

# rpm qf | /sbin/accton

            (psacct-6.3.2-24

# rpm ql psacct

ac 명령어 사용

# ac d

# ac p

sa를 이용해 보고서 작성

# sa

로그 서버 만들기

대상 서버 (대상서버설정)

# vi /etc/hosts

192.168.46.100    loghost

#vi /etc/syslog.conf

*.info;mal.none;news.none;authpriv.none;cron.none @loghost

Page 744의 설정처럼 전부 변경, 설정 예 중 하나를 설정 하면 됨

# /etc/init.d/syslog restart

로그 서버 설정 법(log server)

# vi /etc/hosts

127.0.0.1 localhost. Localdomain localhost

192.168.40.46 loghost

192.168.40.45 web1

192.168.40.40 web2

# ps ef | grep syslogd

# pkill -9 syslogd

# ps ef | grep syslogd

# /sbin/syslogd r m 0

# vi /etc/sysconfig/syslog

SYSLOGD_OPTIONS= -r m 0

            -r 옵션은 리모트 로그를 받겠다는 의미

로그서버에서 모니터링

# tail f /var/log/messages

web1, 대상 서버들에서 로그남기기

* 일부러 로그인 실패하기

* 자기 자신에게 root 로그인 실패해 보기

Tcp wrapper 설정

l       Xinetd 서비스는 기본적으로 tcp wrapper 의 설정을 적용받는다.

l       설정 파일만 수정해 주면 됨

l       /etc/hosts.deny

l       /etc/hosts.allow

TCP Wrapper ?

인터넷 상에서의 접속은 대부분 TCP 프로토콜을 이용하여 이루어지게 됩니다.

이러한 TCP 접속에 대해 Wrap를 씌워 서버로 접근하는 불필요한(?) 접속에 대해 적절한 제한을 가해주는 것이 바로 TCP Wrapper입니다.


TCP Wrapper
는 그 특성상 서비스(데몬)별 및 IP별로 구분하여 설정할 수 있으며, “접속 거부접속 허용을 적절히 제어함으로써 그 효과를 볼 수 있습니다.


접속 거부 : /etc/hosts.deny

TCP Wrapper에서 접속 거부를 설정하는 곳입니다.

여기에 설정된 주소들은 모두 접속이 거부됩니다.

접속 허용 : /etc/hosts.allow

TCP Wrapper에서 접속 허용을 설정하는 곳입니다.

여기에 설정된 주소들은 모두 접속이 허용됩니다.

/etc/hosts.deny

# vi /etc/hosts.deny

            all:all                   ->모두 제한 ( 서비스: 사용자IP)

# telnet localhost             ->모두 제한을 걸어 두었으므로 텔넷으로 접속이 되지 않는다

/etc/hosts.allow

# vi /etc/hosts.allow

in.telnetd : 192.168.40.46 -> 특정IP만 텔넷을 허용하겠다

sshd : all                                       -> sshd 서비스는 모두 허용하겠다.

서비스명 : 허용IP

서비스명 : 허용 네트웍 (192.168.40.)           ->네트웍IP 적용시 마지막에 꼭점을 찍을 것

서비스명 : all                                 -> (전부허용)

deny 모두 닫아주고 난뒤에 allow로 특정IP, 네트웍만을 열어주기위해서 사용.

한마디로 보안을 위해서 제한을 걸어두는 것이다 .

관련 명령어

출력내용 끝의 접미사 구분

sa와 관련한 옵션

들은 프린트물을 참조하시오 ^^

스크립트 작성 실습

* 스크립트 파일명: sa.ksh

* 생성될 리포트 파일 명은 날짜가 파일명에 들어가도록 만들기

* 하루간 기록을 파일에 남기기

* 전체 기록을 파일에 남기기

* 사용자 기록을 파일에 남기기

* 현재 통계 기록을 병합하기

* 스크립트가 하루에 한번 새벽 2시에 실행하도록 crom 에 등록하기

/root/sa.ksh

# vi /root/sa.ksh

            #!기록할 파일명

            file_name=date +%Y%m%d

            #file_name=date +%Y%m%d-%H%M%S                ->시분초까지 기록할 경우

            #sa 프로그램경로

            sa=/usr/sbin/sa

            #기록할 디렉토리명

            recorddir=/var/log/acct

            #기록할 디렉토리가 없을 경우 디렉토리 생성

            if [ ! d $recorddir ] ; then

                          mkdir $recorddir

            fi

            # 디렉토리/파일명 지정

            pathname=$recorddir/$file_name

            ######### 파일 기록 ###########

            #날짜 기록 년월일

            date =%Y/%m/%d > $pathname

            #하루간 기록(cron을 매일 돌릴 경우)

            echo ================================ >> $pathname

            echo Days Activity >> $pathname

            echo ================================ >> $pathname

            $sa I >> $pathname

            #전체기록

            echo ================================ >> $pathname

            echo Totals Activity >> $pathname

            echo ================================ >> $pathname

            $sa >> $pathname

            # 사용자 기록

            echo ================================ >> $pathname

            echo User Activity >> $pathname

            echo ================================ >> $pathname

            $sa m >> $pathname

            #현재의 통계 기록을 savacct파일에 병합하기

            #sa s

시스템 모니터링 1

l       시스템의 성능은 여러 가지 프로그램의 요청에 효율적으로 조정하여 사용하는가에 달려 있다

l       가장 중요한 시스템 자원

n       cpu

n       메모리

n       I/O

n       네트웍

시스템 모니터링 분야와 관련 프로그램

시스템 모니터링 프로그램

분야

모니터링 프로그램

CPU

Top, ps, uptime, vmstat, pstree, iostat, sar

메모리

Free, vmstat, sar

디스크 I/O

Df, du, quota, iostat, sar

네트워크

Ping, netstat, traceroute, tcpdump, nmap, netcat, ntop

파일(소켓포함)

Lsof

1.       시스템이 정상적으로 동작하고 있을 때 모니터링 하기

2.       주기 적인 점검 필수

3.       자동화 노력이 필요함

프로세스 상태

프린트물 참조 하기 . ^^

ps aux | more 에 대한 기술

l       프로세스 상태에서 D는 인터럽트가 불가능한 sleep 상태로 page fault등을 의미하며 page fault 등을 통해 I/Ownd인 상태를 나타낸다.

l       W memory에 상주하는 페이지가 없다는 것을 의미하며 프로세스가 swapout된 상태를 나타낸다.

Free

# free

cached                           total    dsed     free       shared   buffed    cached

Menm:                386008   375153   10852     0            57912     139220

-/+buffers/cache;            160        204987

Swap:                2096472 160  2096312

문제 : 현재 여유가 있는 메모리 양은 ?

버퍼캐쉬

l       디스크를 읽는 일은 메모리 보다 느리다.

l       디스크의 동일 짧은 영역을 일은 빈번하다

l       ls 명령어를 모든 사용자들이 얼마나 자주 사용할지 생각해 보자

l       디스크로부터 한번 읽어 들인 정보를 메모리에 상당시간 보관한다면 읽을 때만 시간이 소용 될 뿐 속도가 전반적으로 빨라질 것이다.

l       디스크 버퍼링 (disk buffering) 이라한다.

l       이런 목적으로 쓰이는 메모리를 버퍼 캐쉬

(buffer cashe)

2006/09/08 15:54 2006/09/08 15:54
이 글에는 트랙백을 보낼 수 없습니다
출처 블로그 > 브라이언 블로그
원본 http://blog.naver.com/jk997600/110005991932
* 리눅스에서 파일 검색
- Tips/Linux | 2006/06/10 10:17
문자열찾기 방법 1 - 영어만 주로 가능
grep -rw "찾는문자열" ./

문자열찾기 방법 2 - 대/소문자 구분 안하고 검색
grep -i -l "찾는문자열" * -r 2> /dev/null

문자열찾기 방법 3 - 한글, 영어 모두 가능
find . -exec grep -l "찾는문자열" {} \; 2>/dev/null

문자열찾기 방법 4 - 한글,영어, 대소문자 안가리고 검색
find . -exec grep -i -l "찾을문자열" {} \; 2>/dev/null

문자열찾은 후 치환
find . -exec perl -pi -e 's/찾을문자열/바꿀문자열/g' {} \; 2>/dev/null

파일명 찾기
find / -name 파일명 -type f

파일명 찾기(대소문자 구별없음)
find / -iname 파일명 -type f

디렉토리 찾기
find / -name 파일명 -type d

디렉토리 찾기(대소문자 구별없음)
find / -iname 파일명 -type d
2006/09/08 15:52 2006/09/08 15:52
이 글에는 트랙백을 보낼 수 없습니다
Linux/FTP  2006/09/08 14:43
### ftp 명령어 모음 ###

ascii : 전송모드를 ASCII모드로 설정한다.(ascii또는 as)

binary : 전송모드를 BINARY모드로 설정한다.( binary또는 bi)

bell : 명령어 완료시에 벨소리를 나게한다.(bell)

bye : ftp접속을 종료하고 빠져나간다.(bye)

cd : remote시스템의 디렉토리를 변경한다.(cd 디렉토리명)

cdup : remote시스템에서 한단계 상위디렉토리로 이동한다.(cdup)

chmod : remote시스템의 파일퍼미션을 변경한다.(chmod 755 index.html)

close : ftp접속을 종료한다. (close)

delete : remote시스템의 파일을 삭제한다.(delete index.old)

dir : remote시스템의 디렉토리 내용을 디스플레이한다.(dir)

disconnect : ftp접속을 종료한다.(disconnect)

exit : ftp접속을 종료하고 빠져나간다.(exit)

get : 지정된 파일하나를 가져온다.(get index.html)

hash : 파일전송 도중에 "#"표시를 하여 전송중임을 나타낸다.(hash)

help : ftp명령어 도움말을 볼 수 있다.(help또는 help 명령어)

lcd : local시스템의 디렉토리를 변경한다.(lcd 디렉토리명)

ls : remote시스템의 디렉토리 내용을 디스플레이한다. (ls 또는 ls -l)

mdelete : 여러개의 파일을 한꺼번에 지울 때 사용한다.( mdelete *.old)

mget : 여러개의 파일을 한꺼번에 가져오려할 때 사용한다. ( mget *.gz)

mput : 한꺼번에 여러개의 파일을 remote시스템에 올린다.(mput *.html)

open : ftp접속을 시도한다.(open 168.126.72.51또는 open ftp.kornet.net)

prompt : 파일전송시에 확인과정을 거친다. on/off 토글 (prompt)

put : 하나의 파일을 remote시스템에 올린다.(put index.html)

pwd : remote시스템의 현재 작업디렉토리를 표시한다.(pwd)

quit : ftp접속을 종료하고 빠져나간다.(quit)

rstatus : remote시스템의 상황(version, 어디서, 접속ID등)을 표시한다.(rstatus)

rename : remote시스템의 파일명을 바꾼다.(remote 현재파일명 바꿀파일명)

rmdir : remote시스템의 디렉토리을 삭제한다.(rmdir 디렉토리명)

size :remote시스템에 있는 파일의 크기를 byte단위로 표시한다.(size index.html)

status : 현재 연결된 ftp세션모드에 대한 설정을 보여준다.(status)

type : 전송모드를 설정한다.(type 또는 type ascii 또는 type binary)
2006/09/08 14:43 2006/09/08 14:43
이 글에는 트랙백을 보낼 수 없습니다
Linux  2006/09/08 14:36
출처 블로그 > hyperlancer님의 블로그
원본 http://blog.naver.com/hyperlancer/120014817994
1. 약간의 이론

1.1 소개

LinuxThreads는 다중 쓰레드 프로그래밍을 위한 리눅스 라이브러리이다. LinuxThreads는 커널 수준의 쓰레드를 제공한다; 쓰레드들은 clone() 시스템콜에 의해 만들어지고 모든 스케줄링은 커널에서 이루어진다. Posix 1003.1c API를 구현하였고 커널 2.0.0이상의 커널과 적절한 C 라이브러리를 가지고 있는 어떠한 리눅스 시스템에 동작한다.

1.2 쓰레드란 무엇인가?
쓰레드는 프로그램을 통한 제어의 순차적인 흐름이다. 그래서 다중 쓰레드 프로그래밍은 여러 제어 쓰레드가 한 프로그램에서 동시에 수행하는 병렬 프로그래밍의 한 형태이다.
다중 쓰레드 프로그래밍은 모든 쓰레드가 같은 메모리 공간을 (그리고 파일 디스크립터와 같은 일부 시스템 자원들을) 공유하는 유닉스 스타일의 다중 프로세싱과는 다르다. 대신에 유닉스의 프로세스와 같이 자신만의 고유 메모리상에 동작한다. 그래서 한 프로세스의 두 쓰레드 사이의 문맥 교환(context switch)는 두 프로세스 사이의 문맥 교환보다 굉장한 수월하다.
쓰레드를 사용하는 두 가지 이유가 있다:
  • 어떤 프로그램들은 하나의 제어 흐름 보다는 서로 통신하는 여러 쓰레드로 작성될 때만 최고의 성능을 낼 수 있다. (즉, 서버들)
  • 다중 프로세서 시스템에서, 쓰레드들은 여러 프로세서상에서 병렬적으로 수행될 수 있다. 이는 한 프로그램이 다른 프로세서에 작업을 분배할 수 있게 해준다. 이런 프로그램은 한 번에 한 CPU만을 사용할 수 있는 단일 쓰레드 프로그램보다 훨씬 더 빠르다.
1.3 원자성(atomicity)과 휘발성(volatility)
쓰레드에 의해 공유되는 메모리를 접근하는데는 더 주의가 필요하다. 병렬 프로그램은 일반적인 지역 메모리처럼 공유 메모리 객체를 접근할 수 없기 때문이다.
원자성(atomicity)는 어떤 객체에 대한 연산은 분리될 수 없는, 인터럽트 되는 않는 과정으로 이루어져야 된다는 개념을 말한다. 공유 메모리상의 데이터에 대한 연산은 원자적으로 이루어질 수 없다. 게다가 GCC 컴파일러 는 종종 레지스터에 공유 변수들의 값을 버퍼링하는 최적화를 수행할 것이다. 이렇게 메모리 연산을 피하는 것이라도 모든 프로세서가 공유 데이터의 값이 변경된 것은 알 수 있어야만 한다.
레지스터에 공유 메모리의 값을 버퍼링하는 GCC의 최적화를 막기 위해 공유 메모리 상의 모든 객체는 volatile 속성의 타입으로 선언되어야 한다. 단 한 word의 volatile 객체를 읽고 쓸는 것은 원자적으로 이루어지기 때문이다.

1.4 Lock (잠금)
결과값을 읽어오기 저장하는 것은 독립된 메모리 연산이다: ++i은 항상 공유 메모리 상의 i을 1만큼 증가시키지는 않는다. 두 연산 사이에 다른 프로세서가 i을 접근할 수 있기 때문이다. 그래서 두 프로세스가 둘 다 ++i을 수행한다면 2가 아닌 1만 증가될 수도 있다.
그래서 한 쓰레드가 변수의 값을 바꾸는 동안은 다른 쓰레드가 그 변수에 대한 작업을 할 수 없게 하는 시스템 콜이 필요하다. 이는 아래 설명한 lock 방법으로 구현된다. 공유 변수의 값을 바꾸는 루틴을 수행하는 두 쓰레드가 있다고 가정을 하자. 그 루틴이 정확한 결과를 얻기 위해서는 다음과 같이 해야 한다.
  • i 변수에 대해 lock을 건다.
  • 잠긴 변수의 값을 수정한다.
  • lock을 제거한다.
한 변수에 대한 lock이 걸릴 때 그 lock을 건 쓰레드만이 그 값을 바꿀 수 있다. 잠근 때문에 다른 쓰레드들은 블럭이 될 것이다. 한 변수에 대해서 는 한 번에 하나의 lock만이 허용되기 때문이다. ㅍ첫번째 쓰레드가 lock 을 제거할 때만 두번째 쓰레드가 lock을 걸 수 있다. 그 결과 공유 변수를 이용하는 것은 다른 프로세서들의 활동을 느리게 할지도 모든다. 하지만 일반적인 참조는 지역 캐시를 이용한다.

2. 그리고 약간의 실제

2.1 pthread.h 헤더
LinuxThreads가 제공하는 것은 쓰레드 루틴들의 프로토타입을 선언하는 /usr/include/pthread.h 헤더를 통해서 이용 가능하다.
다중 쓰레드 프로그램의 작성은 기본적으로 두 단계의 과정이다:
  • 공유 변수들에 lock을 걸고 쓰레드를 만들기 위한 pthread 루틴들을 사용한다.
  • 쓰레드 서브 루틴에 넘겨야 할 모른 인자들을 포함하는 구조체를 만든다.
몇 가지 기본적인 pthread.h의 루틴들을 간단히 설명하면서 이 두 단계를 실펴보자.

2.2 lock의 초기화
해야만 하는 첫번째 행동들 중의 하나는 모든 lock들을 초기화하는 것이다. POSIX lock들은 pthread_mutex_t 타입의 변수로 선언된다; 각 lock을 초기화하기 위허 다음 루틴을 호출할 필요가 있다:
int pthread_mutex_init(pthread_mutex_t *mutex,  const pthread _mutexattr_t *mutexattr); 
묶어서 보면:
#include〈pthread.h〉... pthread_mutex_t lock; pthread_mutex_init(&lock, NULL); ... 
pthread_mutex_init 함수는 mutex 인자가 가1르키는 mutex 객체를 mutexattr에 의해 명시된 mutex 속성에 따라 초기화를 한다. mutexattr의 NULL이면, 디폴트 속성이 사용된다. 계속해서 이 초기화된 lock들을 어떻게 사용하는지 보겠다.

2.3 쓰레드 생성하기
POSIX는 각 쓰레드를 나타내기 위해 사용자가 pthread_t 타입의 변수를 선언하도록 한다. 다음 호출로 쓰레드가 생성된다:
int pthread_create(pthread_t *thread, pthread_attr_t *attr,  void *(*start_routine)(void *), void *arg); 
성공한다면 새로이 생성된 쓰레드의 id가 thread 인자가 지시한 영역에 저장되고 0인 리턴된다. 에러가 발생하면 0이 아닌 값이 리턴된다.
f() 루틴을 수행하는 쓰레드를 만들고 f()에 arg 변수를 가르키는 포인터를 넘기기 위해서는 다음과 같이 한다:
#include〈pthread.h〉... pthread_t thread; pthread_create(&thread, NULL, f, &arg). ... 
f() 루틴은 다음과 같은 프로토타입을 가져야 한다:
void *f(void *arg); 
2.4 깨끗한 종료
마지막 단계로 f() 루틴의 결과를 접근하기 전에 만든 모든 쓰레드가 종료 할 때까지 기다려야 한다. 다음을 호출한다:
int pthread_join(pthread_t th, void **thread_return); 
th가 가르키는 쓰레드가 종료할 때까지 위의 함수를 호출한 쓰레드의 수행 을 멈춘다. 만약 thread_return이 NULL이니면 th의 리턴값은 thread_return이 가리키는 영역에 저장된다.

2.5 쓰레드 루틴에 데이터 전달하기
호출한 루틴의 정보를 쓰레드 루틴에 넘기는 두 가지 방법이 있다:
  • 전역 변수
  • 구조체
첫번째의 전역변수로 정보를 넘기는 방법은 각각의 쓰레드들이 그 값을 변경해 버리므로 그렇게 좋은 방법이 아니다. 물론 하나의 쓰레드만 실행되는 경우에는 상관이 없겠지만, 하나 이상의 쓰레드가 같은 변수를 참조할 경우 변경된 값을 가진 변수가 다른 쓰레드에 영향을 미치게 될 것이다.
두번째 것이 코드의 모듈성을 보전하는 데 가장 좋은 선택이다. 구조체는 세 가지 단계의 정보를 포함해야 한다; 첫째로 공유 변수들과 lock들에 관한 정보, 두번째로 루틴에서 필요로 하는 모든 데이터에 대한 정보, 세번째로 쓰레드를 구분해주는 id와 쓰레드가 이용할 수 있는 CPU의 수에 대한 정보 (런타임에 이 정보를 제공하는 것이 더 쉽다). 구조체의 첫번째 요소을 살펴보자; 넘겨진 정보는 모든 쓰레드들 사이의 공유된 것이어야한다. 그래서 필요한 변수들과 lock들의 포인터를 사용 해야 한다. double 타입의 공유 변수 var와 그 에 대한 lock을 넘기기 위해 구조체는 두 멤버 변수를 가져야만 한다:
double volatile *var; pthread_mutex_t *var_lock; 
volatile 속성의 사용 위치에 주목하라. 이는 포인터 자체가 아니라 var가 volatile임을 나타낸다.

2.6 병렬 코드의 예
쓰래들를 이용하여 쉽게 병렬화를 할 수 있는 프로그램의 예는 두 벡터의 스칼라곱을 계산이다. 주석을 붙인 코드를 제시한다.
/* 컴파일 하려면 gcc -D_REENTRANT -lpthread */
#include〈stdio.h〉#include〈pthread.h〉/* 알맞은 구조체 선언 */ typedef struct {     double volatile *p_s; /* 스칼라 곱의 공유 변수 */     pthread_mutex_t *p_s_lock; /* 변수 s의 lock */     int n; /* 쓰레드의 수 */     int nproc; /* 이용할 수 있는 프로세서의 수 */     double *x; /* 첫번째 벡터의 데이터 */     double *y; /* 두번째 벡터의 데이터 */     int l; /* 벡터의 길이 */ } DATA; void *SMP_scalprod(void *arg) {     register double localsum;     long i;     DATA D = *(DATA *)arg;     localsum = 0.0;     /* 각 쓰레드는 i = D.n에서 부터 스칼라 곱을 시작한다.     D.n = 1, 2, ...     D.nproc 값을 갖는다. 정확히 D.nproc개의 쓰레드가 있기     때문에 i의 증가 같은 D.nproc이다. */     for(i = D.n; i〈 D.l; i += D.nproc)         localsum += D.x*D.y;     /* s에 대한 lock을 건다 ... */     pthread_mutex_lock(D.p_s_lock);     /* ... s의 값을 바꾼다. ... */     *(D.p_s) += localsum;     /* ... 그리고 lock를 제거한다. */     pthread_mutex_unlock(D.p_s_lock);     return NULL; } #define L 9 /* 벡터의 차원 */ int main(int argc, char **argv) {     pthread_t *thread;     void *retval;     int cpu, i;     DATA *A;     volatile double s = 0; /* 공유 변수 */     pthread_mutex_t s_lock;     double x[L], y[L];     if (argc != 2) {         printf("usage: %s n", argv[0]);         exit(1); }    cpu = atoi(argv[1]);     thread = (pthread_t *) calloc(cpu, sizeof(pthread_t));     A = (DATA *) calloc(cpu, sizeof(DATA));     for (i = 0; i〈 L; i++)         x = y = i;     /* lock 변수를 초기화한다. */     pthread_mutex_init(&s_lock, NULL);     for (i = 0; i〈 cpu; i++) {         /* 구조체를 초기화한다. */         A.n = i; /* 쓰레드의 수 */         A.x = x;         A.y = y;         A.l = L;         A.nproc = cpu; /* CPU의 수 */         A.p_s = &s;         A.p_s_lock = &s_lock;         if (pthread_create(&thread, NULL, SMP_scalprod, &A)) {             fprintf(stderr, "%s: cannot make threadn", argv[0]);         exit(1);         }     }     for (i = 0; i〈 cpu; i++) {         if (pthread_join(thread, &retval)) {             fprintf(stderr, "%s: cannot join threadn", argv[0]);         exit(1);         }     }     printf("s = %fn", s);     exit(0); }
  출처 : http://kldp.org/Translations/html/Thread_Programming-KLDP/Thread_Programming-KLDP-2.html
2006/09/08 14:36 2006/09/08 14:36
이 글에는 트랙백을 보낼 수 없습니다

서버점검사항
1. SUID 점검하기.(root 소유의 SetUID및 SetGID 파일들 점검

    find / -user root -perm -4000 -print (SetUID)
    find / -user root -perm -2000 -print (SetGID)
    find / -user root -perm -4000 -print -xdev

2. 파티션별 디스크사용량 점검
    df -h

3. 파일무결성 점검.

    http://weblog.websea.co.kr/tripwire/tripwire

4. 백도어 설치여부 점검.(/dev 체크 및 rootkit 점검)

    find /dev -type f -exec ls -l {} \;
    ./chkrootkit
   
5. 현재 열려진 포트 및 응답가능한 포트 점검.

    netstat -atp | grep LISTEN (사용 프로토콜 : TCP인가? 또는 UDP인가?
사용중인 포트번호
서버와 연결된 IP 및 도메인명
생성 PID
서비스중인 프로세스명
현재 응답가능상태인가?
    lsof | grep LISTEN(현재 서비스 중인 프로세스명(데몬명)
    현재 생성중인 PID번호.
현재 서비스중인 프로세스의 소유자
프로토콜 버전 : Ipv4 또는 Ipv6
TCP 또는 UDP의 여부
응답가능 상태인가?

6. 실생중인 프로세스 및 데몬점검.(프로세스의 생성관계)

    pstree

7. 시스템 운용상황 점검.

   top -d2

8. 백업점검.

   /home2/backup/nexfor/
   /home2/backup/websea/

9. 스팸메일 점검.(메일큐 디렉토리 점검)

  /var/spool/mqueue    (동일한 날짜, 동일한 사이즈를 가진 다수 파일구분)

10. Core 점검.

  서버내에 긴급한 이상이 발생하였을 경우나 시스템의 정확한 분석을 위해
  서버의 메모리 상태를 순간적으로 dump 받는 경우의 파일
  find / -name core -exec ls -l {} \;
 
11. 파일용량 점검

  repquota -av -ag
  df -h

12. 최근 서버 접속자 점검.

  vi /var/log/secure
  last -n 10  최근 10번째까지의 접속기록을 확인.

13. 계정별 최후접속기록 점검.

lastlog는 현재 /etc/passwd에 존재하는 모든 계정을 대상으로 하
여 언제 마지막으로
서버에 접속을 했는가를 확인.
Mail, adm, bin 등의 계정들은 모두 "** Never logged in **" 이라
고 되어 있는것이 정상.

  lastlog

14. 현재 서버접속자 보기

   w (telnet)
   ftpwho(ftp)

15. root명령어 사용기록 점검.

vi /root/.bash_history  (.set nu)
cat /root/..bash_history | wc -l    (1000라인 이상 되어야 정상)

16. 계정별 사용명령어파일 점검.

find / -name .bash_history -exec ls -l {} \;    (각 계정
별 .bash_history 파일의 존재여부)
find / -name .bash_history -exec cat {} \;     (파일의 내용까
지 모두 확인해 볼 수 있음)

17. root소유자 점검(UID와 GID가 0인 사용자 점검)

cat /etc/passwd | grep 0:0

18. 서버내에 중요한 디렉토리 점검

/etc/xinetd.d/    (xinetd로 서비스되는 인터넷서비스 파일들이 존재하는 디렉토리)
/etc/rc.d/           (부팅에 관계된 파일) (파일들을 복사 후 파일용량등을 비교하기) (커널패닉의원인)
/etc/rc.d/init.d/ (부팅시에 특정 서비스나 데몬들을 시작시키는 스키립트 파일)

19. .rhosts 파일 점검

원격에서 패스워드등의 확인과정없이 바로 접속하기 위해서 사용되는 파일

find / -name .rhosts -exec ls -l {} \;
find / -name .rhosts -exec cat {} \;

20. 메모리사용량 점검.

free -m
cat /proc/meminfo   (free 와 top 는 이 파일을 참조하여 보여준다.)
top -d2

21. 중요 관리자용명령어 점검.

아래의 명령어들을 퍼미션을 100으로 설정한다. 변경 후 퍼미션 변경여부를 확인.

chmod 100 /usr/bin/top
chmod 100 /usr/bin/pstree
chmod 100 /usr/bin/w
chmod 100 /bin/ps
chmod 100 /usr/bin/who
chmod 100 /usr/bin/find
chmod 100 /bin/df
chmod 100 /bin/netstat
chmod 100 /sbin/ifconfig
chmod 100 /usr/sbin/lsof
chmod 100 /usr/bin/make
chmod 100 /usr/bin/gcc
chmod 100 /usr/bin/g++
chmod 100 /usr/bin/c++

22. su 명령어를 이용한 root권한 사용자 점검.

su 명령어의 사용내역을 확인할 수 있음.

cat /var/log/messages | grep root

23. 최근 n 일전 변경된 파일 점검. (단위는 일)

find / -ctime -1 -print | more

24. http://weblog.websea.co.kr/

25. find 를 이용한 특정파일 점검하기.

.exec 파일찾기
find / -name '.exec' -exec cat {} \; -print

.forward 파일체크
find / -name '.forward' -exec cat {} \; -print

write 퍼미션이 있는 파일(디렉토리)찾기
find / -type f  \( -perm -2 -o -perm -20 \) -exec ls -lg {} \;
find / -type d \( -perm -2 -o -perm -20 \) -exec ls -ldg {} \;

SteUID SetGID 체크하기
find / -type f \( -perm -004000 -o -perm -002000 \) -exec ls -
lg {} \;

/dev 체크
find /dev -type f -exec ls -l {} \;

소유자없는 파일 및 디렉토리 찾기
find / -nouser -o -nogroup -print

원격리모트 접속허용 파일(.rhosts)찾기
find / -name .rhosts -print

최근 변경된 파일들 찾기.(파일or디렉토리) 단위는 일
find / -ctime -20 -type f or d

현재 서버에서 열려진 포트 및 접근저보 점검

netstat -an | grep LISTEN   (포트들과 열결되어 있는 실행데몬들을 확인)
lsof | grep LISTEN   (좀 더 자세히 확인)

26. 관리자용 명령어 퍼미션 수정하기.

chmod 100 /usr/bin/top
chmod 100 /usrbin/pstree
chmod 100 /usr/bin/w
chmod 100 /bin/ps
chmod 100 /usr/bin/who
chmod 100 /usr/bin/find
chmod 100 /bin/df
chmod 100 /bin/netstat
chmod 100 /sbin/ifconfig
chmod 100 /usr/sbin/lsof
chmod 100 /usr/bin/make
chmod 100 /usr/bin/gcc
chmod 100 /usr/bin/g++
chmod 100 /usr/bin/c++

27. 중요한 파일퍼미션과 소유권 제한 및 점검.

chmod 644 /etc/service
chmod 600 /etc/xinetd
chmod 644 /etc/mail/aliases
chmod 600 /etc/httpd/conf/httpd.conf
chmod 644 /var/log/wtmp
chmod 644 /var/run/utmp
chmod 644 /etc/motd
chmod 644 /etc/mtab
chmod 600 /etc/syslog.conf

/etc, /usr/etc, /bin, /usr/bin, /sbin, /usr/sbin

chmod 1777 /tmp
chmod 1777 /var/tmp

28. umask 값 확인하기.

root의 umask 값 확인하기.
umask
022 -->파일은 644 디렉토리는 755로 생성됨.
027 -->파일은 640 디렉토리는 750로 생성됨.

29. /dev 에 device 파일 이외의 것이 존재하고 있는지 확인.

find /dev -type f -exec ls -l {} \;

30. 일반사용자의 명령어 패스

/usr/local/bin:usr/local/mysql/bin:/home/hosting/bin/
일반사용자가 사용가능한 명령어를 모두 이것에 둠.

31. 관리자의 명령어 패스

:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin

/X11:/usr/X11R6/bin:/usr/kerberos/bin:/root/bin

32. 특정 그룹만의 su 사용권한 허용하기

vi /etc/group  (wheel구릅에 su 사용권한을 가질 유저 추가하기)
wheel:x:10:root,cream

vi /etc/pam.d/su (두줄 추가하기)

auth sufficient /lib/security/pam_rootok.so
auth required  /lib/security/pam_wheel.so allow group=wheel

vi /var/log/message 에서 확인

33. chmod 400 /etc/shadow

34. 시스템 기본로그파일.

/var/log/messages
/var/log/secure
/var/log/wtmp
/var/run/utmp
/var/log/lastlog

35. utmp, wtmp, lastlog 파일

utmp파일 : 현재시스템에 접속해 있는 사용자의 정보를 가지고 있음.

strings utmp | more

정보 이용 명령어
login(1), who(1), init(8), last(8), lastcomm(8)

wtmp파일 : 처음부터 접속했던 모든 사용자의 로그인정보와 로그아웃정보를 가지고 있음.

strings wtmp | more

정보 이용 명령어
login(1), who(1), init(8), last(8), lastcomm(8)

lastlog 파일

가장 최근에 로그인한 정보를 저장함.

last 라는 명령어로 확인할 수 있음.

36.  패스워드 유출대처방안(웹)

perl을 이용한 방법.


   AllowOverride FileInfo AuthConfig Limit
   Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
   Options Indexes SymLinksIfOwnerMatch IncludesNoExec ExecCGI
   Options Indexes SymLinksIfOwnerMatch IncludesNoExec
  
       Order allow,deny
       Allow from all
  
  
       Order deny,allow
       Deny from all
  


SSI의 exec 명령어를 이용하는 방법

#    AddType text/html .shtml
#    AddHandler server-parsed .shtml

27. PortSentry를 이용한 실시간 해킹방어 구현.(잘못 사용할시 서버접속 안됨)

tar -xvzf portsentry-1.1.tar.gz
make linux
make install

/usr/local/psionic/portsentry/portsentry -tcp
/usr/local/psionic/portsentry/portsentry -udp
/usr/local/psionic/portsentry/portsentry -stcp
/usr/local/psionic/portsentry/portsentry -atcp
/usr/local/psionic/portsentry/portsentry -stdp

vi /etc/hosts.deny 점검.

28. Chkrootkit 로 백도어 점검.

tar -xvzf chkrootkit.tar.gz
make sense
./chkrootkit     (점검명령어)

29 ping 을 이용한 DOS 공격 막는 방법.

vi  /etc/sysctl.conf
net.ipv4.icmp_echo_ignore_broadcasts = 1

sysctl -w
/etc/rc.d/init.d/network restart
sysctl -a | grep ignore_broadcasts

30. Nmap를 이용 포트스켄 하여 해킹가능성 체크.

nmap -sS -p80 211.42.48.110 -O -v www.armian.net
nmap -sS -O -v 211.42.48.114

2006/09/08 14:36 2006/09/08 14:36
이 글에는 트랙백을 보낼 수 없습니다
출처 카페 > 사일런트밥 / art4linux
원본 http://cafe.naver.com/art4linux/3

작성자 : 좋은진호(truefeel, http://coffeenix.net/)
작성일 : 2003.10.01(수)
수정일 : 2004.01.08(목), chroot_list_enable 글 추가

이 글은 7월에 썼던 'vsftpd에서 한글파일로그와 lastlog 로긴확인하기'를 기초로 작성하였다.

1. vsftpd FTP 서버에 대해

vsftpd는 UNIX 시스템에서 사용할 수 있는 free FTP 서버(라이센스는 GPL)이다.
vsftpd가 내세우고 있는 것은 보안, 성능, 안정성이다. 지금까지 vsftpd의 자체 보안 문제가 있어
보안권고가 나온 적은 없다.(Redhat의 rpm 패키지중에 tcp_wrappers 지원없이 만들어져서 업데이트
rpm은 나온 적 있음)

* 지원 및 테스트된 OS

- Linux (Redhat, SuSE, Debian)
- Solaris (버전에 따라 IPv6나 inet_aton함수때문에 설치가 잘 안될 수 있음)
- FreeBSD, OpenBSD
- HP-UX
- IRIX

* 주요 기능

- 가상 IP별 별도의 환경 설정 기능 (설정파일의 listen_address= 이용)
- 가상 사용자 설정
- 전송 대역폭 지정
- PAM 지원 (버전 1.2.0부터는 PAM을 통한 wtmp에 로긴 로그를 남김)
- xferlog 표준 로그 파일보다 상세한 자체 로그 파일 형식 지원
- Standalone 방식과 inetd(xinetd)를 통한 운영 모두 지원
- IP별 다른 환경 파일 지정 기능 (tcp_wrappers와 함께 사용할 때)
- ...

2. vsftpd 설치

※ 설치는 Redhat 기준. 솔라리스의 PAM에 대한 것은 README.solaris 파일 참조한다.

http://vsftpd.beasts.org/ 에서 최신버전(현재 1.2.0)의 소스를 받아온다.

-------------------------------------------------------------
# tar xvfz vsftpd-1.2.0.tar.gz
# cd vsftpd-1.2.0
-------------------------------------------------------------

한글로 된 파일명을 전송할 때 로그에 파일명이 ???? 로 남지 않도록
logging.c 파일을 연 후 140번째 줄의

str_replace_unprintable(p_str, '?');

를 다음처럼 주석 처리한다.

/* str_replace_unprintable(p_str, '?'); */

또한 tcp_wrappers를 통한 접속제어를 사용하려면 builddefs.h 에서

#undef VSF_BUILD_TCPWRAPPERS 를
#define VSF_BUILD_TCPWRAPPERS 로 바꾼다.

-------------------------------------------------------------
# make
# make install (vsftpd 데몬, man page, xinetd 용 설정 파일 설치)
# cp vsftpd.conf /etc (환경설정 파일 복사)
# chmod 600 /etc/vsftpd.conf
# cp RedHat/vsftpd.pam /etc/pam.d/vsftpd (PAM 설정 파일 복사)
-------------------------------------------------------------

/etc/pam.d/vsftpd 첫번째 줄에 다음과 같이 있다.

pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed

즉, /etc/ftpusers 파일에 존재하는 ID는 접속할 수 없게된다.(sense=deny)

-------------------------------------------------------------
# FTP 접속을 허용하지 않을 ID를 등록한다.
# /etc/passwd를 참조해서 설치할 서버의 환경에 맞게 등록
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
smmsp
xfs
gdm
mysql
-------------------------------------------------------------

3. vsftpd.conf 의 주요 설정

-------------------------------------------------------------
# anonymous 사용자의 접속 허용 여부 (default = YES)
# 공개된 형태의 FTP 서버로 운영할 것이 아니라면 NO로 한다.
anonymous_enable=NO
# 로컬 계정 사용자의 접속 허용 여부 (default = NO)
local_enable=YES

# write 명령어 허용 여부 (defualt = NO)
write_enable=YES
# 로컬 계정 사용자용 umask (default = 077)
local_umask=022

# anonymous 사용자가 파일을 업로드 할 수 있는지 여부 (default = NO)
# anon_upload_enable=YES
# anonymous 사용자의 디렉토리 생성 허용 여부 (default = NO)
# anon_mkdir_write_enable=YES

# 파일 전송 로그를 남길 것인지 여부 (default = YES)
xferlog_enable=YES
# xferlog 표준 포맷으로 로그를 남길지 여부 (기본 설정파일은 YES)
# 아래에서 NO로 설정했을 때를 설명함
xferlog_std_format=YES
# 파일 전송 로그 파일명
xferlog_file=/var/log/vsftpd.log

# FTP 서버 접속할 때 로긴 메시지 (default = vsFTPd 버전번호)
# 한글 사용 가능
# ftpd_banner=Welcome to blah FTP service.

# 사용자의 홈디렉토리를 벗어나지 못하도록 제한하기 위한 설정 (default=NO)
# 제한이 필요할 경우 YES로 바꾼 후 제한할 사용자 ID를 chroot_list_file= 에 설정한 파일에
# 지정한다.
# chroot_local_user= 설정과 관련이 있으니 '3. 문제 해결'을 꼭 읽어보라.
#
# chroot_list_enable=YES
# chroot_list_file=/etc/vsftpd.chroot_list

# -------------------------------------------------------------------
# 기본 설정 파일에는 없는 설정값으로 필요한 설정만 추가한다.
# ※ 중요한 설정은 굵은 글씨로 표시
# -------------------------------------------------------------------

# PAM 파일명을 지정 (설치할 때 /etc/pam.d/vsftpd명으로 복사함)
pam_service_name=vsftpd

# wtmp에 로그 남기기 (YES로 해야만 last 명령어로 접속 여부 확인 가능)
session_support=YES

# 사용자가 자신의 home directory를 벗어나지 못하도록 설정
chroot_local_user=YES

# 새로운 디렉토리에 들어갔을 때 뿌려줄 환경 메시지를 저장한 파일명
# message_file=.message

# xferlog 형식으로 log를 남기려면 (위에서 이미 YES로 했음)
# xferlog_std_format=NO
#
#  - xferlog 표준 포맷은 로긴, 디렉토리 생성등의 로그를 남기지 않음
#   그러나 vsftpd 스타일 로그는 이를 포함한 보다 상세한 로그를 남김
#  - vsftpd 스타일 로그 예
#
#  Sun Jul 12 01:38:32 2003 [pid 31200] CONNECT: Client "127.0.0.1"
#  Sun Jul 12 01:38:34 2003 [pid 31199] [truefeel] FAIL LOGIN: Client "127.0.0.1"
#  Sun Jul 12 01:38:38 2003 [pid 31199] [truefeel] OK LOGIN: Client "127.0.0.1"
#  Sun Jul 12 01:38:41 2003 [pid 31201] [truefeel] OK MKDIR: Client "127.0.0.1", "/mp3"
#  Sun Jul 12 01:39:06 2003 [pid 31201] [truefeel] OK UPLOAD: Client "127.0.0.1", "/델리
#  스파이스 5집 - [04]키치죠지의 검은 고양이.mp3", 6855473 bytes, 3857.39Kbyte/sec

# 전송속도 제한 (0은 제한없음, 단위는 초당 bytes)
anon_max_rate=0
local_max_rate=0
trans_chunk_size=0

# 최대 접속 설정 (단 xinetd를 통하지 않고 standalone으로 동작할 때만 사용 가능)
# standalone을 위해서는 listen=YES 추가하고 별도로 vsftpd를 띄워야 함
#
# max_clients=최대 접속자 수, max_per_ip=IP당 접속 수
# max_clients=100
# max_per_ip=3

# Standalone 으로 운영할 때 listen=YES. 포트 변경을 원할 경우 listen_port 설정
# 디폴트 포트는 21번 포트이다.
# listen=YES
# listen_port=21
-------------------------------------------------------------

필요한 설정이 끝났으면 xinetd를 재실행한다.

-------------------------------------------------------------
# /etc/rc.d/init.d/xinetd restart
-------------------------------------------------------------

4. 문제 해결

1) ftpwho 같은 명령은 있나?
  또한 last를 해도 접속된 걸 확인할 수가 없는데 방법이 없나?

 ftpwho 형태의 명령은 없으며 임시적으로 다음 명령어 등으로 확인할 수 있다.

 # ps -ef|grep vsftpd
 # fuser -v ftp/tcp

 vsftpd v1.2.0이상부터 PAM을 통해 wtmp에 로그를 남기므로 last로 접속여부를 확인할 수 있다.

2) 한글 파일명이 전송될 때는 vsftpd.log 에 ???? 로 남는다. 해결책은?

 vsftpd는 출력할 수 없다고 판단하는
 ASCII 코드 31 이하, 128~159, 177 문자를 모두 ? 로 바꿔서 저장을 한다.
 따라서 이 부분을 처리하지 않고 저장하도록 소스를 수정한 후 컴파일하면 해결된다.

3) 사용자가 홈디렉토리를 못 벗어나게 하고 싶는데?

/etc/vsftpd.conf에 다음을 추가하면, 모든 사용자는 자신의 홈디렉토리만 접근할 수 있다.

chroot_local_user=YES

또한 특정 사용자로만 제한을 하고 싶다면 다음과 같이 한다. /etc/vsftpd.chroot_list에는 제한할
사용자 ID를 한줄에 하나씩 나열하면 된다.

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

주의할 것은 chroot_local_user=YES와 chroot_list_enable=YES를 함께 사용할 경우에는
/etc/vsftpd.chroot_list에 포함된 사용자 ID만 제한없이 홈디렉토리를 벗어날 수 있다.
즉, 반대로 작용한다.

standalone으로 FTP서버가 동작중이면 재실행 필요. standalone에 대해서는 6)번에서.

4) root로 접속할 수는 없나?

 가능하면 root 접속은 허용하지 않기를 바란다.
 /etc/ftpusers 파일에서 root를 빼면 접속이 가능하다.

5) ID/비밀번호가 정확히 맞는데 로긴할 때 자꾸 530 Login incorrect. 라고 나온다.

 /etc/ftpusers (또는 vsftpd.ftpusers)에 등록된 사용자인지 확인한다.
 여기에 등록된 사용자는 로긴할 수 없다. 이럴 때 /var/log/messages에 다음과 같은 로그가 남는다.

 Aug 16 22:21:52 truefeel vsftpd: PAM-listfile: Refused user xxxxxxxx for service vsftpd

6) standalone으로 운영하고 싶다.
  (즉, apache나 sendmail처럼 xinetd 통하지 않고 운영을 원한다.)

 /etc/xinetd.d/vsftpd (vsftpd가 아닌 다른 파일명일 수 있음) 에서 disable = yes 로 변경하여
 xinetd로 서비스 하지 않도록 설정한다. xinetd 를 재실행하면 이제 xinetd를 통한 ftp 서비스는 종료된다.

 레드햇의 경우 /etc/rc.d/init.d/xinetd restart

 이제 vsftpd 데몬를 실행한다. (소스로 설치시 기본 경로는 /usr/local/sbin)

 # /usr/local/sbin/vsftpd &

7) 다른 포트(기본 21번)를 사용하고 싶다. (예를 들어 11121번 포트를 원할 때)

 * xinetd를 이용하는 경우

  /etc/service 에 'ftp2  11121/tcp' 한 줄을 추가한다.
  그리고 /etc/xinetd.d/vsftpd (vsftpd가 아닌 ftp와 같은 다른 파일명일 수 있음) 에서
  service ftp 를 service ftp2로 바꾸고, xinetd 를 재실행한다.

 * standalone으로 운영하는 경우

  /etc/vsftpd.conf 에서 listen_port=11121 을 추가하고 vsftpd 서버를 재실행한다.

 바뀐 포트로 운영중인지 확인은 netstat -atnp(리눅스) 또는 netstat -an(그 이외 유닉스)

8) 업로드 파일 크기를 제한하는 방법은 없나요? 이를테면 5MB이상의 파일은 업로드 못한다든지.

현재 1.2.1버전까지 vsftpd 자체에 설정하는 방법은 없습니다.

5. 참고할만한 문서

* vsftpd 1.2.0 설치 문서
 ftp://vsftpd.beasts.org/users/cevans/untar/vsftpd-1.2.0/INSTALL
* vsftpd.conf man page
* vsftpd에서 한글파일로그와 lastlog 로긴확인하기 (좋은진호)
 http://coffeenix.net/board_view.php?bd_code=4
* vsftpd에서 전송속도 제한 (bandwidth limit) (좋은진호)
 http://coffeenix.net/board_view.php?bd_code=21

2006/09/08 14:35 2006/09/08 14:35
이 글에는 트랙백을 보낼 수 없습니다
출처 블로그 > 영혼의 소리...카리스마 그리고 이성
원본 http://blog.naver.com/kill_9/100004874536

#!/bin/bash


# 이 스크립트는 해당 디렉토리 이하, 확장자가 txt인 파일의 문자열을 교체한다.

# 서브사이드 스크립트(Server Side Script)의 일괄적인 문자열 교체에 유용하다.


target_dir="/www/htdocs"

target_files=$(find "$target_dir" -name "*.txt" -type f)


# shell 내부변수 조정, 단, bash 버전 2.xx 이상에선 아래의 코드를 사용하지 않아도 된다.

IFS='

'

from_str='원본 문자열'

to_str='치환할 문자열'


# 루프로 해당 디렉토리내의 모든 파일(/www/htdocs 내의 *.txt 파일)을 조사한다

# 파일에 일치하는 패턴이 있으면 치환, redirection 시켜 새로운 파일(파일명.newfile)을 만든다

# 새로운 파일을 기존의 파일명으로 바꾼다.

# 하나의 파일 실행이 끝나면 특정 메세지를 띄운다.

for file in $target_files ; do

  result=$(grep "$from_str" "$file")

  if [ X"$result" != "X" ] ; then

     sed "s;${from_str};${to_str};g" "$file" > ${file}.newfile

     mv -f "${file}.newfile" "$file"

     echo "Changed String : $file"

  fi

done

exit 0

find 로 문자열 찾아서 치환

* 리눅스에서 파일 검색
- Tips/Linux | 2006/06/10 10:17
문자열찾기 방법 1 - 영어만 주로 가능
grep -rw "찾는문자열" ./

문자열찾기 방법 2 - 대/소문자 구분 안하고 검색
grep -i -l "찾는문자열" * -r 2> /dev/null

문자열찾기 방법 3 - 한글, 영어 모두 가능
find . -exec grep -l "찾는문자열" {} \; 2>/dev/null

문자열찾기 방법 4 - 한글,영어, 대소문자 안가리고 검색
find . -exec grep -i -l "찾을문자열" {} \; 2>/dev/null

문자열찾은 후 치환
find . -exec perl -pi -e 's/찾을문자열/바꿀문자열/g' {} \; 2>/dev/null

파일명 찾기
find / -name 파일명 -type f

파일명 찾기(대소문자 구별없음)
find / -iname 파일명 -type f

디렉토리 찾기
find / -name 파일명 -type d

디렉토리 찾기(대소문자 구별없음)
find / -iname 파일명 -type

xargs - 명령 결과를 다른 명령의 아규먼트로 넣기
find . -name "*py" -print | xargs  -i -t cp {} backup

응용은 요고와 같다
find ./* -exec grep -l '찾는문법' {} \; | xargs -i -t perl -pi -e 's/찾을문자열/바꿀문자열 {}
2006/09/08 14:33 2006/09/08 14:33
이 글에는 트랙백을 보낼 수 없습니다
Linux  2006/09/08 14:33
출처 블로그 > 유아
원본 http://blog.naver.com/uad0kz0n/100006393481
리눅스 시스템의 기본 로케일을 EUC-KR로 지정합니다.
/etc/sysconfig/i18n의 LANG 변수를 ko_KR.eucKR 로 셋팅함으로 설정할 수 있습니다.
현재 로케일 설정은 '#echo $LANG' 으로 확인할 수 있습니다.
제 시스템의 설정입니다.

# cat /etc/sysconfig/i18n
LANG="ko_KR.eucKR"
SUPPORTED="en_US.UTF-8:en_US:en:ko_KR.eucKR:ko_KR:ko"
SYSFONT="lat0-16"
SYSFONTACM="iso01"

먼저 서버측 설정을확인합니다. 바로 이것이 한글 로케일링이라는
것으로 리눅스하에서 기본 캐릭터 셋팅을 한글로 해주는 것입니다.
2006/09/08 14:33 2006/09/08 14:33
이 글에는 트랙백을 보낼 수 없습니다
출처 카페 > ARM Core Commun.. / 한미소
원본 http://cafe.naver.com/armcore/187

자료 출처 : http://wiki.kldp.org/KoreanDoc//html/EmbeddedKernel-KLDP/index.html

임베디드 시스템 엔지니어를 위한 리눅스 커널 분석

남상규

http://ruby.medison.co.kr/~halite
선임 연구원
(주)메디슨
초음파 연구소

halite (at) medison.com

$Date: 2002/05/21 01:10:08 $

이 문서는 리눅스 커널을 임베디드 시스템에 포팅하려는 엔지니어들을 위한 기본 지식 습득을 위해 만들어졌다. 리눅스 커널 자체의 원론적인 것 보다는 임베디드 시스템에 리눅스 커널을 포팅할 때 엔지니어가 리눅스 커널에 쉽게 접근하기 위한 정보나 혹은 방법을 제공하는 것이 목적이다. 그러므로 OS에 대한 이론 보다는 OS가 만들어지는 방법이나 부팅되는 순서 메모리에 적재되고 실행되는 순서 등에 대해 기술하고 더불어 커널을 만들기 위해 필요한 도구들의 사용법에 대해 알아본다.

원문은 http://ruby.medison.co.kr/~halite 에있고 가장 먼저 업데이트될 것이다.

틀린 내용이 있을 수도 있다. 이런 것에 대해선 으로 연락 바란다.

$Revision: 1.13 $

차례
1. 리눅스 커널 컴파일하기
1.1. 리눅스 일반
1.1.1. 왜 리눅스인가?
1.1.2. 리눅스 소스 디렉토리 구조
1.2. LXR
1.3. 소스 코드 얻기
1.4. 소스 코드 풀기
1.5. 컴파일 준비
1.6. 커널 설정
1.7. 커널 컴파일
1.8. 커널 테스트 및 설치
2. Makefile 분석
2.1. 부팅 과정의 이해[1]
2.2. 커널 이미지 파일의 구조
2.2.1. 커널의 부팅
2.2.2. zimage와 bzImage의 차이
2.3. bzimage가 만들어지는 과정 추적-Makefile 분석
2.3.1. $(topDIR)/Makefile
2.3.2. $(topDIR)/arch/i386/Makefile
2.3.3. $(topDIR)/arch/i386/boot/Makefile
2.3.4. $(topDIR)/arch/i386/boot/compressed/Makefile
2.3.5. $(topDIR)/arch/i386/boot/tools/build.c
2.4. bzImage가 만들어지는 과정 추적-Log 분석
2.4.1. make bzImage 순서 정리
2.4.2. Log
2.5. 단계별 자세한 분석
2.5.1. -Ttext 0x0의 의미
2.5.2. 분석
3. 크로스 컴파일러 만들기
3.1. 크로스?
3.2. 툴체인
3.2.1. 배경
3.2.2. 미리 만들어진 툴체인
3.2.3. 툴체인 만들기
4. ARM 리눅스
4.1. ARM 프로세서 MMU(Memory Management Unit)
4.1.1. 개요
4.1.1.1. TLB
4.1.1.2. 메모리 접근
4.1.1.3. 변환 테이블
4.1.1.4. 도메인
4.1.2. 변환 절차
4.1.3. 변환 테이블 베이스
4.1.4. 1레벨 읽기
4.1.5. 1레벨 디스크립터
4.1.6. 섹션 디스크립터와 섹션 변환
4.1.7. 페이지 테이블 디스크립터
4.1.8. 2레벨 디스크립터
4.1.9. 큰 페이지 변환
4.1.10. 작은 페이지 변환
4.1.11. 캐시와 쓰기 버퍼 제어
4.1.12. 접근 권한
4.2. Assabet 보드용 커널 컴파일
4.3. ARM 리눅스 Makefile 분석
4.3.1. $(TOPDIR)/arch/arm/Makefile
4.3.2. $(TOPDIR)/arch/arm/vmlinux.lds
4.3.3. $(TOPDIR)/arch/arm/boot/compressed/vmlinux.lds
4.3.4. Log 분석
4.4. 소스 분석
4.4.1. arch/arm/boot/compressed/head.S
4.4.2. arch/arm/kernel/head-armv.S
5. 리눅스 커널 부팅
5.1. 커널 시작
5.2. lock_kernel()
5.2.1. Lock이 왜 필요하지?
5.2.2. Lock - 기초적 설명
5.2.3. i386, ARM의 스핀락
5.3. setup_arch()
5.4. trap_init()
5.5. init_IRQ()
5.6. sched_init()
5.7. init()
5.8. dmesg 정리
6. 디바이스 드라이버
6.1. 디바이스 번호
6.2. 샘플 디바이스 드라이버
6.3. 모듈 동작의 이해
6.4. 알아야할 것 들
A. SEGA DreamCast Linux
A.1. LinuxSH
A.2. 드림캐스트에서 리눅스 실행해 보기
B. 리눅스에 시스템 콜 만들어 넣기
B.1. 시스템 콜의 흐름
B.2. IDT(Interrupt Descriptor Table)
B.3. 시스템 콜 테이블
B.4. 시스템 콜 추가
C. Inline Assembly
C.1. 인라인 어셈블리 기초
C.1.1. 알아야할 것 들
C.1.2. 어셈블리
C.1.3. Output/Input
C.1.3.1. Constraints
C.1.3.2. Modifier
C.1.3.3. ARM Family Constraints
C.1.3.4. i386 Family Constraints
C.2. 사례 분석
C.2.1. strcpy()
C.2.2. _set_gate()
2006/09/08 14:29 2006/09/08 14:29
이 글에는 트랙백을 보낼 수 없습니다
«이전  1 ... 2 3 4 5 6 7 8 9 10 ... 12  다음»
웅쓰:웅자의 상상플러스
웅자의 상상플러스
전체 (379)
게임 (5)
영화 (2)
기타 (23)
맛집 (5)
영어 (2)
대수학 (3)
형태소 (5)
Hacking (9)
Linux (112)
HTML (48)
Application_developing (48)
Web_developing (102)
Window (11)
«   2024/11   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
  1. 2016/01 (1)
  2. 2015/12 (3)
  3. 2015/10 (3)
  4. 2015/03 (2)
  5. 2015/01 (4)