* 설치 환경 : CentOS 6.x (64bit)

기본적으로 sftp는 로그를 남기지 않아 불편한 점이 종종 있는데 sftp 에 로그를 남기기 위해서는

아래와 같은 설정이 필요하다.


1. sshd_config 수정

vi /etc/ssh/sshd_config

Subsystem       sftp    /usr/libexec/openssh/sftp-server  를
Subsystem       sftp    /usr/libexec/openssh/sftp-server -f local2 -l INFO  로 변경


2. syslog.conf 수정 (CentOS 6.x 에서는 rsyslog.conf)

vi /etc/rsyslog.conf  파일에 아래 내용 추가

# sftp log
local2.*                        /var/log/sftp.log


3. logrotate.d 설정

vi /etc/logrotate.d/syslog 파일 내용 중

/var/log/spooler 하단에
/var/log/sftp.log
추가


4. 서비스 재시작

/etc/init.d/sshd restart
/etc/init.d/rsyslog restart


5. 확인

tail -f /var/log/sftp.log

'Works > CentOS & RockyLinux' 카테고리의 다른 글

yum 트랜잭션 및 롤백  (0) 2018.09.07
CentOS7 Locale설정  (0) 2018.05.29
dig 개념 및 사용법  (0) 2017.11.01
크론테이블에 등록 : crontab -e  (0) 2017.09.22
centos7 고정 ip 설정  (0) 2017.09.13


php.in 에 설정된 date.timezone 은 글로벌 설정으로 시스템에 등록된 모든 계정에 적용되는데

이를 특정 계정에 대해서 다른 date.timezone 으로 설정하려고 한다면 아래와 같이 하면 된다.

php.ini 의 date.timezone 이 date.timezone "Asia/Seoul" 일 때

특정 계정의 date.timezone을 America/New_York 로 바꾸고 싶으면

해당 계정의 Virtualhost 설정에 php_admin_value date.timezone "America/New_York" 를 추가해주고

웹서버 재시작을 해준다.

적용 여부 확인은 아래 php 구문이 담긴 php 파일을 만들어 웹상에서 호출한다.

echo date_default_timezone_get();


1. xe 관리지 모드 다이렉트 접속 URL

http://도메인주소/xe/?module=admin


 

홈페이지를 직접 관리를 하고 있는 사람은 보안에 유의하게 되는데 그러자면 간혹 관리자 페스워드를 변경해야 할 때가 있을 것입니다.


홈페이지의 내용을 관리하는 종합관리자 창을 열고 들어가는 페스워드는 자신이 마음데로 종합관리자 창 안의 root에서 변경을 하면 되지만 홈페이지에 파일을 올리고 내리는 FTP 페스워드는 텔넷 프로그램인 ssh나 ssh2 프로그램을 이용해서 서버에 접근을 해서 변경을 하게 됩니다.

그 변경된 번호로 FTP를 이용해야 만 됩니다.


ssh 프로그램으로 로그인 하고 들어가서 암호 변경 명령어 ‘passwd’를 치면 새로운 암호를 넣으라는 메시지가 나오고 반복해서 입력을 하게 되면 암호 변경이 되지요.


그런데 요사이는 보안이 한층 강화된 관계로 ssh 프로그램에서 접속을 해도 root 권한이 주어지지 않으면 직접 임의로 패스워드를 변경할 수가 없게 된다는 것입니다.

작금의 추세는 서버 호스팅 자에 한해서 root권한을 주고 일반 웹호스팅 유저에게는 root 권한을 주지 않는 경우가 있습니다.


그럴 땐 반드시 자신이 호스팅을 하고 있는 회사의 관리 홈피에 로그인을 한 다음에 서비스 관리에 들어가서 ftp 비번과 DB 비번을 동시에 바꾸어야 합니다.

만약에 DB를 사용하지 않고 있다면 DB는 필요 없겠으나 요즘 홈페이지가 모두 php 방식으로 전환되고 있으며, 그 방식은 mysql을 사용하므로 두 군데 다 바꾸어야합니다.

그렇게 하면 ftp와 DB 패스워드가 변경되게 되는 것입니다.


이렇게 바꾸면 ftp로 서버의 파일을 열고 들어가서 파일 관리를 하면 되겠지만, 문제는 테크노트 사용자는 이때 홈페이지가 열리지 않게 됩니다.

왜냐 하면 페스워드 변경으로 인해서 자신이 사용하는 테크노트로 만든 홈페이지와 서버상의 DB를 연결시켜주는 정보가 일치하지 않게 되어서 나타나는 현상인데요.

그 때는 다시 DB 정보를 추가로 입력해 주어야 하는 것입니다.


방법>

ftp로 들어가서 technote6/data/instail/setup_mysql.php 파일을 삭제합니다.

그리고 자신의 홈페이지 http://www.000.com/technote6/admin.php?를 불러내면 그 곳에 DB정보를 입력하라고 창이 뜨게 될 것입니다.

처음 테크노트를 설치할 때 창인데요.

다시 정보를 정확하게 입력하면 바로 설치가 되고 홈페이지가 정상으로 인터넷상에 보이게 됩니다.


정보입력창


 

 

host name 에는 자신이 호스팅하는 그 회사의 호스트를 씁니다. (자신의 홈피 호스트가 아닙니다.)

모르면 회사에 물어봐야 하고, 자신의 홈페이지 서버제공 회사 홈피에 들어가서 가보면

ftp 부분에 DB 정보와 함께 상세한 정보가 같이 나옵니다.


DB name = 예. DB 106788

DB user ID =예, 자신의 아이디

DB name passwd =예, 자신의 새로운 비밀번호 


위와같이 완료하면 종합관리자 로그인 창이 다시 보일 것입니다.

그러면 홈페이지가 정상적으로 보입니다.

 

[출처] http://tip.daum.net/openknow/52962478

 

Description : 아파치가 접근할 수 있는 각 디렉토리에 대하여 어떤 서비스와 기능을 허용할 것인지 
거부할 것인지 여부를 설정할 수 있다. 디렉토리에 대한 설정 내용은 그 하부 디렉토리에도 영향을 
미친다.

 Syntax : <Directory directory-path> ... </Directory>


< Directory> tag에 의하여 각 directory마다 적절하게 permission을 걸수가 있다.

<Directory />
Options FollowSymLinks
AllowOverride None
< /Directory>

DocumentRoot 값으로 변경

<Directory "/home/httpd/html">

지정할수 있는  옵션의 예이다.
None
어떤 옵션도 이용할 수 없다.
All 지정한 directory에서 모든 명령을 이용할 수 있다.
Indexes URL에 지정된 디렉토리에 (index.html 같은) 지정된 파일이 없을 경우 디렉토리의 파일 목록을 보여주는 옵션.
Includes 서버측의 추가적인 정보를 제공할 수 있게 한다.
IncludesNoExec 서버측의 추가적인 정보를 제공할 수 있게 하지만, 어떠한 실행 파일을 실행하는 것을 방지한다. 
FollowSymLinks  디렉토리상의 심볼릭 링크를 사용가능하게 한다.
ExecCGI CGI 스크립트를 실행할 수 있게 한다.
MultiViews  All 옵션이 설정되었을 때만 지정된 목록의 multiviews를 허용한다.

AllowOverride None
.htaccess파일은 서버의 각 디렉토리에 만들어서 각 디렉토리에 대한 접근을 제어하기 위한 것으로 디렉토리에 .htaccess파일이 있으면, 서버 전체에 작용하는 access.conf 보다 우선권을 가진다.

.htaccess파일에 대한 Override에 대한 옵션이다.
None .htaccess파일을 읽을 수 없게 한다.
All 모든 지정에 대해 가능하게 한다.
Options 규정된 디렉토리 형식을 콘트롤하는 지정의 사용을 허락한다.
FileInfo 문서형식을 콘트롤하는 지정의 사용을 허용한다.
AuthConfig  사용자 인증 지정의 사용을 허용한다. 사용자 인증 변수를 사용한다.
Limit 호스트 접근을 콘트롤하는 지정을 허용한다.

서버로부터 자료를 얻어갈 수 있는 위치를 제어한다.
Order allow,deny
Allow from all
Deny from env=no_access

Limit에 관련된 부분을 설정을 한다.

order : 서버가 access control을 수행하는 순서를 나타낸다. 여기서는 allow기능을 먼저 수행하고, deny기능을 수행하라는 것이다.

deny, allow - deny 지시자 부터 검사하고 allow 지시자를 검사
allow, deny - allow 지시자 부터 검사하고 deny 지시자를 검사
mutual-failure - allow목록에 없는 모든 host에게 접속을 거부

allow from : 나열되는 주소들에 대한 access control을 가능하게 한다. 
사용 가능한 주소는 도메인 네임, 호스트 이름 주소, 호스트 ip 주소, ip 주소의 앞부분 3바이트, 모든 주소에 해당하는 all이 있다.
deny from : allow from과 반대되는 개념이다.
< /Directory>

ex1)

<Directory "/www/n">
   Options FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
< /Directory>



ex2)

<Directory /a/service/html/>
    Options FollowSymLinks MultiViews Includes
    AllowOverride None

    Order allow,deny
    Allow from all
< /Directory>

<Directory />
    Options FollowSymLinks
    AllowOverride None
< /Directory>



출처 : http://0thinktank.tistory.com/91


 

검색엔진을 제어해야 하는 이유는 불필요한 검색 트래픽 낭비를 줄여 불필요한 네트워크 사용을 제한

 

노출을 원하지 않는 검색엔진에 자신의 홈페이지 정보를 제어할수 있다.

robot.txt

 

로봇이 임의의 SITE/ 에 방문하면 먼저 SITE/robots.txt 파일 호출함 (정상적인 정보 수집 BOT일때)
로봇의 접근 권한 및 접근가능한 경로에 대한 정보를 분석하여 자신이 수집해도 되는 콘텐트만을 수집한다

웹 사이트의 최상위 루트에 robots.txt 파일이 있어야함
robots.txt 화일에는 최소한 한개의 “disallow” 필드(field)가 존재해야 함

robot.txt 파일이름은 소문자로 작성 (공백 허용되지 않음) 

 

ex) 예제들

 

홈페이지 전체가 모든 검색엔진에 노출되기를 원치 않음
User-agent: *

 

Disallow: /

 

홈페이지 전체가 모든 검색엔진에 노출되기를 원함
User-agent: *

Disallow:

 

홈페이지 디렉토리중 일부만 검색엔진에 노출하고 싶음

User-agent: *
Disallow: /my_photo/
Disallow: /my_diary/

 

홈페이지 전체를 노출시키지만 특정 검색엔진 (EvilRobot)만 거부
User-agent: EvilRobot
Disallow: /

 

홈페이지 전체가 노출되지만 특정검색엔진에서만 노출되기를 원함
User-agent: NaverBot
Disallow:
User-agent: *
Disallow: /

 

/help.html과 /help/index.html 둘 다 허용 안함
disallow: /help

/help/index.html는 허용 안하나, /help.html은 허용 됨. 
disallow: /help/ 

루트 하위에 있는 xml 확장자를 가진 모든 파일의 색인을 거부
Disallow: /*.xml$ 

루트에 test.html 과 ?가 포함된 파일의 색인을 거부한다
Disallow: /test.html? 

 

구글의 이미지를 검색하는 로봇에게 gif와 jpg로 된 이미지를 모두 검색하지 않도록 함

User-agent: Googlebot-Image
Disallow: /*.gif$
Disallow: /*.jpg$ 

예외적인 상황들

HTML (HEAD) 와 (/HEAD) 사이에 (META NAME=”ROBOTS” CONTENT=”NOINDEX, NOFOLLOW”)
라는 메타태크그를 추가함으로써 문서 하나하나에 대해 정확하게 명시를 해주므로 가장 확실하게 로봇 접근을 차단할수 있음

 

검색엔진에 Robot를 차단하더라도 자신의 페이지중 일부가 나타날수 있음
기타 문서나 사이트들이 자신의 웹 문서를 링크할 경우 자동적으로 생성되어 나타날수 있음
이 경우 Robot 과 무관함 (robots.txt 를 무시하는 로봇들도 있을수 있음)
Robot 들의 IP들을 알 경우 IP를 통해 정책수립해도 상관없음

주석문을 작성하기 위해서는 앞에 #를 적어주시면 됩니다. 

로봇의 이름은 개별 검색사이트를 방문해야함

 

로봇들 Agent 이름명

 

구글: Googlebot
구글 이미지 : googlebot-image
네이버 : cowbot

 

네이버 : User-Agent: Yeti/1.0 (NHN Corp.; http://help.naver.com/robots/)
야후 : Slurp
야후 이미지 : Yahoo-MMCrawler
엠파스봇 : empas
MSN : MSNBot
첫눈: 1Noonbot 1.0

다음 : daumoa

 

실제 Apache Log (구글봇 접근)

 

61.xx.xx.84 – – [22/Aug/2010:06:10:03 +0900] “GET /robots.txt HTTP/1.1” 404 –
61.xx.xx.84 – – [22/Aug/2010:06:10:03 +0900] “GET /152 HTTP/1.1” 200 54216

 

61.xx.xx.84 로봇이 접근해서 robot.txt 파일을 읽었는데 404에러 robot.txt 파일이 없다.???
없으니깐 /152번 글을 GET 해가지고 갔다? 200 정상 메세지니깐??

 

 봇 아이피를 이용한 제어

 

IP 기반으로 차단하기 위해서는 해당 봇들에 대한 아이피 정보들을 가지고 있어야 함

 

아래 사이트에서는 각 검색엔진들의 아이피 정보를 제공한다.

 

http://iplists.com

사이트 접근하면 각종 봇들에 대한 아이피 대역 리스트를 받아 볼수 있음.

해당 사이트의 정보들을 가지고 방화벽 운영해본 결과 그럭저럭 맞는거 같음

 

참조 URL : http://idchowto.com/?p=591


네이버에서는 외부 사이트의 크롤링을 위해 현재 NaverBot과 Yeti Bot을 운영하고 있습니다.

한국에서 개방된 사이트를 운영하면서 이 두 로봇이 사이트를 방문하지 않는다면 거의 좌절이라 할 수 있을 것입니다.


사이트에서 로봇방문흔적을 보려면 대부분 로그분석도구로 알 수 있는데 서버나 사이트 내에 IP주소와 에이전트를 판단하는 스크립트를 심어서 제공해주고 있지만, 솔루션에 따라 제대로 보여주지 못하는 때도 있을 것입니다.


사이트방문자가 급격히 줄었거나 할 경우 검색엔진에서의 인덱싱 현황 체크와 함께 로봇 IP도 확인해서 대응하여야 하겠습니다.
아래는 네이버發 아이피 리스트입니다.
 
1. NaverBot
  Mozilla/4.0compatible;NaverBot/1.0;http://help.naver.com/customer_webtxt_02.jsp
  114.111.36.23~24
  114.111.36.26
  114.111.36.29~32
  114.111.36.36
  114.111.36.45
  61.247.221.80~94
 

 

2. Yeti Bot
  1)국내용
    Yeti/1.0 (NHN Corp.; http://help.naver.com/robots/
    61.247.204.21~24
    61.247.204.31
    61.247.204.35~39
    61.247.204.42~46
    61.247.222.44~45
    61.247.222.46 (crawl-61-247-222-46.naver.jp 일본용?)
    61.247.222.49~50
    61.247.222.54~56
    61.247.222.82~83(crawl-61-247-222-46.naver.jp)
    175.158.29.209~210  

 

  2)일본용
    119.235.237.15~20
    119.235.237.33
    119.235.237.77
    119.235.237.85~87
    119.235.237.92~93
    119.235.237.95
    119.235.237.135
    202.131.30.146~150
    202.131.30.170

 

최근 추가로 확인된 IP

125.209.208.0~125.209.255.255


퍼온곳 : http://construe.tistory.com/314


1. between 응용

특정 범위 내의 데이터를 조회 하고 싶을 때

select * from 테이블명 where 필드명 between 값1 and 값2;

ex) board01 테이블의 no 필드가 1부터 20 까지의 모든 데이터를 추출할 경우

select * from board01 where no between 1 and 20; 


LINUX 웹 서버를 운영하면서 문제가 생겼다.

 

각각의 사이트들을 하루에 한번씩 백업 폴더로 카피하는데 PHP 세션디렉토리를 지우지 않아 몇달간 모인 세션파일이 수백만개가 넘어가 버려 rm 으로 지워 지지 않는다.

 

문제는 리눅스의 파티션에 들어갈수 있는 파일 갯수(inode)가 정해져 있다는 것이다.

df -i 로 확인 해보면 된다.

이문제로 운영중인 서버에 세션이 생성되지 않아 서버가 죽는 경우가 생겼다.

 

하여간 몇가지 방법으로 삭제를 시도를 해보았지만 실패....

 

시도한 방법을 나열하자면...

1. rm -rf *

2. find . -type f -exec rm -fv {} \;

3. find . -type f -delete

4. perl 을 이용한 스크립트

 

너무 파일이 많은지 서버 자원만 엄청 사용하고 결국 포기 했다.

 

그래서 시도한 방법이 현재 운영중인 사이트를 다른 폴더로 옮기고 재빨리 파티션자체를 포멧하고 다시 복구 시키는 방법을 썻다.

손이 많이 가지만 가장 깔끔한 방법...

 

하지만 다른 한대의 서버에는 다른쪽으로 옮길 파티션(하드)가 존재하지 않아 포기

 

몇일후 PHP 를 이용해서 지워도 되겠다는 생각에 아래 스크립트를 실행 시켰다.

 

$dir = "/home/linkFolder/img";
$dh = opendir( $dir);
$i = 0;
while (($file = readdir($dh)) !== false) {
  $file = "$dir/$file";
  if (is_file( $file)) {
    unlink( $file);
    if (!(++$i % 1000)) {
      echo "$i files removed\n";
    }
  }
}

 

오호~~ 잘 지워 진다. 속도로 빠르다. 50만개정도 삭제 하는데 20분도 안걸렸다.

 

역시 내가 PHP를 사랑할 수 밖에 없는 이유다. 보안이 어쩌고 하지만 안되는게 없는 PHP이다. ㅎㅎ



출처: http://blog.yesyo.com/entry/리눅스-대량의-파일-지우기 [MintState WebLog]


초기 mysql root 패스워드 설정 및 비번 변경과 root 비번 잃어버렸을 경우 변경 하는방법


1. 초기 mysql root 패스워드 설정하기

mysql 서버에 패스워드 없이 로그인 하게되면 서버에 만들어진 데이터베이스나 테이블
기타 이곳에 저장된 자료가 외부인에게 노출될 수 있다. 따라서 이러한 보안을 목적으로
root 패스워드를 지정하면 mysql 서버를 안전하게 보호할 수 있다.

mysql> use mysql;
mysql> update user set password=password('123456') where user='root';
Query OK, 2 rows affected (0.03 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> flush privileges; <--- 적용
flush privileges; 를 하지 않으면 mysql에서 빠져나와서 root 로그인이 안된다.
확인한다.
mysql> select host, user, password from user;
+----------------------------------------------------------------+
| Host user password |
+----------------------------------------------------------------+
| localhost root 2e01146f5c065853 |
| localhost.localdomain root 2e01146f5c065853 |
+----------------------------------------------------------------+

mysql> \q
Bye
------------------------------------------------------------------------------------
[주의]# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
그대는 mysql 을 shutdown 하거나 reload 하면 된다.
# /usr/local/mysql/bin/mysqladmin -u root -p shutdown
하면 패스워드를 묻는데 이때 입력하면 설정한 mysql이 적용이된다.
# /usr/local/mysql/bin/mysqladmin -u root -p reload;
------------------------------------------------------------------------------------

# mysql -u root -p [Enter] // root 패스워드로 로그인
Enter password: ******

※ Mysql 서버에 root 패스워드가 설정되면 이제 부터는 mysql 서버에 접속하기 위해서는
위와 같이 -u 뒤에 root입력하고 -p 옵션을 사용하여 패스워드를 사용한다는 것을 명시해야 한다.
그리고 엔터를 치면 root 패스워드를 입력받기 위해 커서가 멈춘다.
(mysql 명령어만 입력하고 엔터를 치면 패스워드를 묻지 앟고 바로 mysql> 프롬프트가 나온 옛 시절을 생각해 보면 금방 차이를 느낄수 있음)

2. 루트 비번 변경

mysql> use mysql;
mysql> update user set password=password('123456') where user='root';
mysql> flush privileges;

3. root 패스워드를 분실한 경우(응급조치)

mysql을 오랫동안 사용하지 않았을 경우에 간혹 root패스워드가 기억나질않아서 당황할 때가 있습니다. 시스템관리자라면 시스템의 root나 MySQL의 root의 암호를 잊어 버렸을 때를 대비해서 패스워드를 새로 설정하는 방법을 반드시 숙지하고 있어야 할 것입니다.

① 실행중인 msyql 종료

# ps -ef | grep mysqld
root 9567 1 0 Mar16 ? 00:00:00 sh ./mysqld_safe
root 9576 9567 0 Mar16 ? 00:00:00 /usr/local/mysql/libexec/mysqld
root 9578 9576 0 Mar16 ? 00:00:00 /usr/local/mysql/libexec/mysqld
root 9579 9578 0 Mar16 ? 00:00:00 /usr/local/mysql/libexec/mysqld

# killall mysqld

② grant-table 미사용모드로 mysql시작(권한 테이블을 사용하지 않는 옵션으로 데몬 실행)

nt일 경우 :
c:\program files\mysql\mysql server 4.1\bin>mysqld-nt --standalone --skip-grant-tables
만약 Error 2003 Hy000 Can't connect to MySQL server on 'localhost' 와 같은 메세지가 나온다면

c:\program files\mysql\mysql server 4.1\bin>mysqld --defaults-file="c:\program files\mysql\mysql server 4.1\my.ini" --consol --skip-grant-tables
따로 프롬프트는 떨어지지 않으므로 새로 cmd창을 열어서 접속해 본다.


# ./safe_mysqld --skip-grant-tables &
[1] 12084
# Starting mysqld daemon with databases from /usr/local/mysql/data
#

# ./mysql -u root mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 3.22.24
Type 'help' for help.
mysql>

※ mysqld_safe 명령어는 mysql 데몬을 실행시킨다.

③ update문으로 root사용자 패스워드 갱신

mysql> update user set password=password('123') where user = 'root';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> \q
Bye

④ 실행중인 mysql 다시 종료(권한 테이블을 사용하지 않는 데몬을 종료)

# ps -ef | grep mysqld
root 12084 11558 0 20:10 pts/2 00:00:00 sh ./mysqld_safe --skip-grant-ta
root 12090 12084 0 20:10 pts/2 00:00:00 /usr/local/mysql/libexec/mysqld
root 12092 12090 0 20:10 pts/2 00:00:00 /usr/local/mysql/libexec/mysqld
root 12093 12092 0 20:10 pts/2 00:00:00 /usr/local/mysql/libexec/mysqld
#
# killall mysqld
mysqld daemon ended
[1]+ Done ./mysqld_safe --skip-grant-tables
#

⑤ Mysql 데몬 재 실행 후 갱신된 패스워드로 로그인

# ./safe_mysqld &
[1] 12102
# Starting mysqld daemon with databases from /usr/local/mysql/data
#

# ps -ef | grep mysql
root 12102 11558 0 20:13 pts/2 00:00:00 sh ./mysqld_safe
root 12108 12102 0 20:13 pts/2 00:00:00 /usr/local/mysql/libexec/mysqld
root 12110 12108 0 20:13 pts/2 00:00:00 /usr/local/mysql/libexec/mysqld
root 12111 12110 0 20:13 pts/2 00:00:00 /usr/local/mysql/libexec/mysqld

# mysql -u root -p
Enter Password: ***************