The Pursuit of Happyness

반응형

PHP 모범 사례 2


http://www.hanbit.co.kr/book/look.html?isbn=978-89-6848-225-0

- 비밀번호 관리

-- DB가 해킹당해도 비밀번호를 알 수 없게 평문이나 복호화가 가능한 비밀번호를 저장하지 말 것

-- 비밀번호에 제한을 두지 말 것

-- 비밀번호를 절대 이메일로 보내지 말 것

-- bcrypt로 해시화 할 것

암호화 NO, 해시화 YES!

해싱 알고리즘 (MD5, SHA1, bcrypt, scrypt ...)

bcrypt - 단점은 느린 속도. 레인보우 테이블 공격을 저지하기 위해 데이터에 솔트를 추가한다.

password_hash() 함수를 사용하면 default로 bcrypt 해싱 알고리즘을 사용한다. (참고 password_verify(), password_needs_rehash())


- 날짜, 시간, 시간대

-- 기본 시간대 지정

php.ini 파일에 date.timezone 항목을 설정한다.

혹은 date_default_timezone_set() 함수를 이용해서 설정한다.


-- DateTime 클래스

-- DateInterval 클래스, DatePeriod 클래스

DateTime 클래스를 조작하기 위해서 사용된다.


ex)


<?php

$datetime = new DateTime();    // create DateTime instance 


$interval = new DateInterval('P2W');    // Period of 2 weeks


$datetime->add($interval);

echo $datetime->format('Y-m-d H:i:s');


$dateInterval = DateInterval::createFromDateString('-1 day');

$datePeriod = new DatePeriod($datetime, $dateInterval, 3);    // 3 periods

foreach ($datePeriod as $date) {

    echo $date->format('Y-m-d') . PHP_EOL;

}



주) 예전에는 strtotime 을 이용해서 date을 변경해 가면서 for 문을 돌렸는데, 조금 더 직관적인 방법이 되었네요..



반응형

반응형

SSH 서버에 접속할 때, 비밀번호 입력 모드가 매우 늦게 뜨거나, 입력 후에도 로그인까지 상당히 오랜 시간이 걸리는 경우가 있습니다.

(30초에서 2분정도 걸리는 경우도 있다고 하네요..)


원인을 파악하기 위해서 ssh 접속시 "-vvv" 옵션을 추가하면 ssh 접속을 위해서 주고 받는 정보들이 자세히 나오게 됩니다.

내용을 살펴보면 ssh 접속이 느린 이유가 나오는데요, 대표적인 케이스 두 가지에 대한 해결책을 정리해 보았습니다.


1. GSSAPI 인증문제

SSH 로그인 시에 SSH 클라이언트는 몇 가지 인증 과정을 거치는데요, 그 중에 GSSAPI 인증이라는 단계가 있습니다. 이 과정은 SSH 서버가 GSSAPI 서버에 접속해서 클라이언트의 유효성을 인증받는 과정이 들어가 있는데, 이 과정이 실패할 때 SSH 세션이 시작되는 것이 상당히 지연되기도 합니다. 

해결책은 SSH 설정에서 GSSAPI 인증을 사용하지 않게 해 주는 것입니다.

SSH 설정 파일을 열어서 GSSAPIAuthentication 을 검색합니다.


$ vi /etc/ssh/sshd_config 


해당 항목의 값을 "no" 로 설정합니다.


GSSAPIAuthentication no

 

SSH 서버를 재시작 합니다.


$ systemctl restart sshd


2. 역방향 DNS 조회 문제

SSH 접속이 느려지는 다른 문제로는 역방향 DNS 조희 입니다. SSH 서버가 클라이언트로부터 로그인 요청을 받으면, 서버는 보안상의 이유로 클라이언트의 IP에 대해서 역방향 DNS를 조회합니다. 만약 역방향 조회가 실패하면 timeout 시간 만큼 접속이 늦어집니다.


역방향 DNS 조회 기능을 사용하지 않게 해주기 위해서 설정 파일을 엽니다.


$ vi /etc/ssh/sshd_config 


UseDNS 라는 항목을 검색해서 아래와 같이 해당 항목의 값을 "no"로 설정합니다.


UseDNS no


참고로 제가 설치한 CentOS에서는 "UseDNS yes" 가 주석처리 되어 있었는데, 주석을 풀고 값을 no로 설정했을 때 문제가 해결되었습니다.


SSH 서버를 재시작 합니다.


$ systemctl restart sshd






반응형

반응형
이 포스트는 아래 링크에 있는 자료를 요약한 자료 입니다.

http://www.thegeekstuff.com/2008/11/3-steps-to-perform-ssh-login-without-password-using-ssh-keygen-ssh-copy-id/ 



ssh-keygen 과 ssh-copy-id 를 이용하면  패스워드를 입력하지 않고 리눅스 서버에 접속할수 있습니다.

ssh-keygen 은 public / private 키를 생성하는 명령어이고,

ssh-copy-id 는 로컬 호스트에 있는 public 키를 원격 서버에 있는 인증된 키를 저장하는 파일 (authorized_keys)  에 추가해 주는 명령어 입니다.

ssh-copy-id 는 원격 호스트의 홈 폴더에 있는 ~/.ssh 폴더, ~/.ssh/ authorized_keys 파일에 적절한 권한을 부여해줍니다.


1 단계 로컬호스트에서 ssh-key-gen 을 이용하여 public / private 키를 생성하기

userid@local-host$ [Note: You are on local-host here]

userid@local-host$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/userid/.ssh/id_rsa):[Enter key]
Enter passphrase (empty for no passphrase): [Press enter key]
Enter same passphrase again: [Pess enter key]
Your identification has been saved in /home/userid/.ssh/id_rsa.
Your public key has been saved in /home/userid/.ssh/id_rsa.pub.
The key fingerprint is:
73:b4:ee:aa:b5:c5:d8:e1:f1:a5:1e:26:5f:2f:53:9f userid@local-host

2 단계 ssh-copy-id 를 이용해서 원격 서버로 public 키를 복사하기

userid@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub remote-host
userid@remote-host's password:
Now try logging into the machine, with "ssh 'remote-host'", and check in:

.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.
Note: ssh-copy-id 는 원격 서버에 있는 .ssh/authorized_key 에 public 키를 추가해 주는 작업입니다.


3단계 패스워드없이 원격서버에 로그인하기

userid@local-host$ ssh remote-host
Last login: Sun Nov 16 17:22:33 2008 from 192.168.1.2
[Note: SSH did not ask for password.]

userid@remote-host$ [Note: You are on remote-host here]

정리를 해 보면 서버1에서 서버2에 접속하기 위해서는 서버1에서 공용키를 생성해서 서버2에 복사해서 인증을 해 두어야 한다는 것입니다.

맥에서는 ssh-copy-id 라는 명령어가 없기 때문에 ssh-copy-id 에 해당하는 부분은 수동으로 설정을 해야 합니다.

방법은 서버1에서 ssh-keygen 으로 생성한 ~/.ssh/id_rsa.pub 파일을 서버2로 보냅니다. 

scp ~/.ssh/id_rsa.pub remote-host:home/userid

서버2에 로그인 하여, 다음의 명령어를 이용하여 public 키를 추가합니다.

cat ~/id_rsa.pub >> ~/.ssh/authorized_key



반응형