작은숲:위키노트/리눅스 팁
리눅스 서버 부팅 과정
셸 프람프트 모양 변경하기
# /home/user/.bashrc
PS1="\u@\h:\w\\$ "
디렉토리 내 파일 갯수 확인
$ ls -l | grep ^- | wc -l
프로세스 확인
# ps ax | grep httpd | grep -v grep
열린 포트를 물고 있는 프로세스 확인
# lsof -i tcp:[PORT]
# fuser -n tcp [PORT]
리눅스 머신의 하드웨어 정보 확인하기
- 리눅스 버전
# uname -a
Linux devel 2.6.9-67.0.15.ELsmp #1 SMP Thu May 8 10:52:19 EDT 2008 i686 i686 i386 GNU/Linux
# cat /proc/version
Linux version 2.6.9-67.0.15.ELsmp ...
- 메모리 ( /proc 파티션은 램에 있는 내용 )
# cat /proc/meminfo
- CPU
# cat /proc/cpuinfo
- 디스크
# cat /proc/scsi/scsi # for SCSI
# cat /proc/ide/hda/model # for IDE
# cat /proc/mdstat # for RAID
- 네트워크
# cat /proc/net/netlink
- I/O 장치
- PCI 버스에 물려있는 각종 장치
# lspci - USB 장치
# lsusb
- PCI 버스에 물려있는 각종 장치
expect가 cron에서 안 돌아갈 때
expect를 이용한 쉘 스크립트가 쉘 상에서는 잘 돌아가는데 cron에 등록하면 돌아가지 않는 경우가 있다. 문제의 원인은 interact 명령어 때문이다.
#!/usr/bin/expect -f
send "\n\n"
spawn echo DO NOT ENTER PASSWORD! PLEASE WAIT!
spawn /usr/local/bin/rsync -auvz --delete -e ssh /home/serv/mobile/. user@211.111.111.111:/home/serv/mobile
expect "user@211.111.111.111's password: "
sleep 1
send "1234\r"
interact
interact 명령어는 expect 쉘이 사용자에게 다시 행동 권한을 돌려주는 것이다. 따라서, cron에서 그렇게 돌리면 중간에 에러가 발생하게 된다. 이를 해결하기 위해서는 interact 명령어 대신 expect eof 명령으로 바꿔준다. 이것은 spawn 명령어로 시작된 expect가 끝나는 것을 의미한다.
그리고, set timeout=36000 을 맨 위에 설정해 줌으로써 파일 용량이 커서 파일전송이 다 되기 전에 spawn이 끝나는 것을 막아야 한다.
#!/usr/bin/expect -f
set timeout=36000
send "\n\n"
spawn echo DO NOT ENTER PASSWORD! PLEASE WAIT!
spawn /usr/local/bin/rsync -auvz --delete -e ssh /home/serv/mobile/. user@211.111.111.111:/home/serv/mobile
expect "user@211.111.111.111's password: "
sleep 1
send "1234\r"
expect eof
리눅스 서버에 SSH, FTP 접속할 때 지연이 있을 때 해결 방법
서버에 SSH, FTP 접속할 때 시간이 걸리는 이유는 SSH 및 FTP 데몬이 접속 시에 접속한 호스트의 호스트명을 찾기 때문이다. 이를 해결하기 위해 /etc/hosts 파일에 호스트명을 등록해 주면 된다.
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 hope localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
211.111.111.117 happy
리눅스 서버 설치시 주의점
- 커스텀 스크립트, 컨트롤 패널, 출처를 알 수 없는 RPM에 의존하지 말고, 정석대로 [[작은숲:위키노트/Yum|Yum]으로 설치하고 yum으로 업데이트하는 습관을 기르면 새로운 보안 취약점이 알려지더라도 패치하기 쉽다.
- 웬만한 해외 서버는 보통 하루에 수만 번씩 SSH로 비번을 무작위 대입하여 로그인 시도가 들어온다. 비번은 아주 어렵게 설정하고, 가능하면 root로 직접 로그인하지 못하도록 하고(
PermitRootLogin no) 별도의 계정을 생성해서 sudo를 사용하는 것이 좋다. 여기에 [[작은숲:위키노트/Fail2ban|Fail2ban]까지 설치해 놓으면 평소에 ssh를 꺼놓을 필요 없다. 웹사이트 파일도 root가 아닌 별도의 계정이 소유하도록 해야 간단한 수정을 위해 root로 로그인해야 하는 부담을 덜 수 있다. - FTP를 비롯하여 보안이 취약하고 불필요한 서비스는 모두 제거하라. 웹 서버에는 ssh, 아파치 또는 nginx + PHP-FPM, DB, 이렇게 딱 4가지만 돌아가면 된다. 방화벽을 22번(ssh), 80번(http), 443번(https) 포트 외에는 모두 방화벽에서 막으면 된다.
- vsftpd는 지워도 된다. FTP 접속 프로그램에서 SFTP를 선택하면 SSH를 FTP처럼 사용할 수 있기 때문에, 보안도 향상되고 서버측에서도 불필요한 서비스 하나를 줄일 수 있게 된다.
- rsync를 이용해 매일 변경분만 백업할 수 있다.
- 모든 테이블을 InnoDB로 변환하면
mysqldump --single-transaction옵션을 사용해서 운영 중인 사이트의 DB 덤프도 안전하게 뜰 수 있다.
참고
- RC 스크립트
- 리눅스 부트 프로세스(/etc/rc.d/rc)
- 파일 접근 권한
- /proc 디렉토리
- 소켓 타임아웃
- 특정 포트를 사용 중인 프로세스 확인과 죽이기
- Shell Script
- CentOS 네임서버(DNS) bind 설정
- vi 명령어
| 배포판 | |
|---|---|
| 서버 프로그램 | |
| 시스템 도구 | |
| 시스템 보안 | |
| 시스템 설정 | |
| HOWTO 문서 | |
| 사용자 설정 | |
| 활용 | |
| 명령어 | |