해킹당한 워드프레스 재설치(…젠장)

자주 글을 올리는 것도 아니라서 모르고 있었는데 얼마전 페이지를 확인해보니 사용자페이지는 아무 내용도 안나오고, 스팸 댓글들이 죄다 승인처리가 되어 있고, 심지어는 작성한 적 없는 글까지 게재되어 있다는 걸 확인하게 되었습니다.
뭔가 이상한데를 들어가거나 뭘 한 기억이 없는데 해킹을 당한 원인은 파악하진 못했지만, 아무래도 설치했더 플러그인 중에 해킹된 것으로 설치가 되어 이것이 기동시마다 계속 이상한 플러그인을 설치해대는것 같습니다.

  • 증상 목록
    • 사용자 페이지( ../wp-admin/users.php ) 조회 불가
    • 생성한 적 없는 계정이 wp_user, wp_usermeta 테이블에 생성됨
    • 승인한 적이 없는 스팸 댓글들이 승인 처리됨
    • 설치한 적이 없는 플러그인들이 설치되어 있음
    • ..\wordpress\wp-content\ 내에 mu_plugins 라는 디렉토리가 삭제해도 계속 생성되고 이상한 php(예 : 01-mu-CloudBridgeSync.php) 정보들이 생성됨
  • 조치사항
    • phpadmin 들어가서 wordpress DB의 wp_user, wp_usermeta 테이블에 이상한 사용자 계정들죄다 삭제
    • phpadmin에서 wordpress DB export (* 혹시나 작업 실패시 대비)
    • wp-content/uploads/ 내용을 별도 위치에 복사하고 존재해서는 안되는 php파일이 있는지 확인 및 삭제 처리
      • sudo cp -r ..경로/wordpress/wp-content/uploads ..경로/uploads_backup
      • sudo find ..경로/uploads_backup/ -type f -name “.php” -delete
      • sudo find ..경로/uploads_backup/ -type f -name “.php*” -delete
    • wordpress 디렉토리 강제 삭제
      • 모든 하위 파일/폴더의 immutable 속성 강제 해제 : sudo chattr -R -i ..경로/wordpress/
      • 워드프레스 전체 디렉토리 삭제 : sudo rm -rf ..경로/wordpress
    • Synology NAS에 웹서비스로 구동하고 있었으므로 webservice 중지 : 패키지센터 web staion 중지
  • WordPress 다운로드 및 재설치
  • 새로 다운로드된 wp-config-sample.phpwp-config.php로 복사하여 편집
    • DB 이름, DB 유저, DB 비밀번호, DB 호스트 수정
  • 백업 및 검증한 uploads 디렉토리 복사 : sudo cp -r ..경로/uploads_backup/* ..경로/wordpress/wp-content/uploads/
  • uploads 폴더 내 PHP 실행 차단 .htaccess 생성: ..경로/wordpress/wp-content/uploads/.htaccess 파일로 저장
    • ㄹㄹㄹㄹ
  • 워드프레스 경로 권한 설정 :
    • sudo chown -R http:http /volume1/web/wordpress
    • sudo chmod -R 755 /volume1/web/wordpress
    • sudo chmod -R 775 /volume1/web/wordpress/wp-content/uploads
  • 플러그인 재설치(jetpack등 아예 검증된 플러그인들만 설치함)

…현재까진 정상 가동 중

Western Digital My Book 12TB 외장HDD

예전에 NAS에 넣으려고 외장형 8TB(그땐 Elements 였지만) 2개를 사다 달았는데, UHD리핑해서 담아두려니까 턱없이 모잘라서 외장하드 하나 사서 달아야 겠다 생각하고 예의 주시하고 있었는데 얼마전 $200 밑으로 가격이 나와서 재빨리 구매해버린 WD 12TB 외장 하드입니다.

포장 박스 앞면
박스 뒷면
박스 개봉

왼쪽 공간에 어댑터와 USB케이블이 있고, 우측에 HDD가 있습니다.

HDD 본체

세로로 길게 세우게 되어 있는데 발열을 위한 환기구가 있습니다.

HDD, 어댑터, USB케이블

당연히 어댑터는 돼지코끼워야 하고, USB케이블은 3.0입니다.

특이하게 전원 표시 LED같은게 없어서 켜져 있는지 외관으론 확인이 안되는군요.

DS218+에서 인식시킨 상태

당연히 12TB라지만 사용가능용량은 저 정도입니다.

아직까지 사용중에 이상한 점은 없었네요. 용량이 너무 빨리 찼다는 거 말곤.😨

Synology NAS DSM7.0 WordPress 충돌…🤬

Synology DSM 7.0이 나왔다고 해서 아무 생각없이 업그레이드했더니만, NAS에 설치한 WordPress가 맛탱이가 가버렸네요.

WordPress를 강제로 php 7.3으로 지정해버리고 가상호스트를 이상하게 이전시켜줘서 구동도 안되어서 차라리 벼르고 있었던 WordPress를 수동으로 깔자!를 진행해서 현재 보여지는 대로 복구는 해서 그 절차를 기록해둡니다. (또 까먹을까봐… 급하게 하느라 수동설치까지 해버렸는데 어쩌면 굳이 안해도 되는 설정을 했을 수도 있고, 이전된 설정을 조정해줬으면 정상화되었을지도 모르겠네요. – 기존에 nginx에 php7.4로 구성을 했었더랬습니다.)

  1. phpAdmin은 업그레이드된 패키지를 그대로 써도 문제 없어서 일단 백업을 함
이 이미지는 대체 속성이 비어있습니다. 그 파일 이름은 image-1024x520.png입니다

2. 기존 ../Web/Wordpress 를 통채로 복사해서 임시 디렉토리에 저장

3. wordpress 공식사이트에서 wordpress-5.7.2.zip 다운로드 및 NAS web/wordpress에 압축해제

4. DSM에서 web directory 권한을 SYSTEM에게 부여

( * 404 오류 땜에 넣었는데 안해도 될련지? https://mariushosting.com/synology-how-to-fix-wordpress-error-404/ )

5. theme라던가 plugin 등 설정을 백업한 디렉토리에서 wordpress 수동설치한 디렉토리에 맞춰 복사 (복사 시 http계정으로 작업하던지 권한을 제대로 부여해야 함… 이거 땜에 나중에 제대로 설치도 안되고 골탕 좀 먹었음…😥)

6. WebStation에서 가상호스트 생성

7. DSM>제어판>보안>인증서에서 let’sencrypt 인증서 설정이 제대로 되어 있는지 확인(뜬금없이 NAS기본 인증서로 되어 있어서 인증서 오류로 wordpress 접근이 불가했었음)

8. 이부분도 필요한진 모르겠는데 https://hemiani.com/2019/08/21/synology-nas%EC%97%90-nginx-%EB%A1%9C-wordpress-%EC%9A%B4%EC%98%81%EC%8B%9C-404-%EC%98%A4%EB%A5%98-%EB%8C%80%EC%9D%91/ 에서 적었던 설정을 일부 적용했었는데 NAS시스템과 nginx구조가 바뀌어서 먹히는 건지 하면 안되는 건지 모르겠음-.-

일단 이렇게 해서 현재 wordpress 작동은 하고 있음…

  • Jetpack는 업데이트가 안되서 지우고 새로 깔아버림. wpsmush는 설치가 안됨 멍청하게 복원한다고 ftp로 파일을 덮어썼으니 디렉토리 소유자가 바뀌어서 설치가 안되었….🤐
  • 언제부터 플러그인이나 업데이트 설치할때마다 ftp 접속 설정을 물어보게 바뀐거지….??

Synology NAS PHP 7.4 적용

아침에 패키지 업데이트를 해야 한다고 뜨는게 있어서 봤더니
자동업데이트되어 할 거 없나보다..했더니 PHP 7.4가 신규등록되어 있네요.
설치하고 WordPress에도 적용해야 겠구나..했더니..뭔가 설정파일(www.phpMyAdmin.enable.conf) 구성이 바뀌어 있네요.

vim /var/packages/phpMyAdmin/target/nginx_conf/www.phpMyAdmin.enable.conf

중간에 fastcgi_pass unix:/run/php-fpm/php??-fpm.sock; 를 run/php-fpm/php74-fpm.sock; 로 변경했습니다. /run/php-fpm/ 디렉토리를 보면 php74-fpm.sock 가 있더라구요.

PHP 7.4를 설치했으니 74파일이 보일겁니다. (아 저 나머지 버전들 지우면 안되나…)

그리고 또 하나 파일을 수정

vim /var/packages/phpMyAdmin/INFO 
7.4니까 7.4로 수정

그리고 재기동…

WordPress 관리자 콘솔에서 PHP 플러그인으로 확인
MyPHPAdmin에서 확인 가능

Synology NAS phpAdmin php 5.6 –> 7.3 적용

…솔직히 뭐가 나아진 건진 모르겠음-.-;

www.phpMyAdmin.enable.conf 수정

vim /var/packages/phpMyAdmin/target/nginx_conf/www.phpMyAdmin.enable.conf
핑크색으로 표기된 5.6 정보를 수정:
fastcgi_pass unix:/run/php-fpm/php56-fpm.sock; –> fastcgi_pass unix:/run/php-fpm/php73-fpm.sock;
vim /var/packages/phpMyAdmin/INFO 
PHP5.6>=5.6.17-0017 –> PHP7.3>=7.3.7-0002

참고로 이 글 작성당시 php7.3 버전,

7.3.7-0002
적용은 자알 되었는데…

….

그런데 이렇게 설정해도 php5.6 은 현재는 삭제할 수 없음-.-;;
시놀로지에서 제공하는 wordpress를 깔지 말고 직접 wordpress를 받아서 수동으로 깔고 해야 한다나…-.-;;;

현재까진 별 의미없는 뻘짓임…쳇. 안그래도 Apache 2.2, 2.4, php7.0까지 쓸데없이 돌고 있어서 짜증이구만🤬

Synology NAS에 Nginx 로 WordPress 운영시 404 오류 대응

한동안 바빠서 (새로 산 TV로 영화 열심히 보느라…) 신경 안쓰고 있었더니 Blog가 메인페이지에서 글 내용이나 카테고리, 메뉴 등으로 들어가면 404 페이지 오류를 열나게 뱉어내고 있었습니다. 하아아…😥

난 뭐 건드린게 없는데 하며 이것 저것 막 건드려봐도 바뀌는게 없고…
그와중에 Jetpack도 이 사이트가 hemiani.com 맞냐 백업이냐 매번 물어보고
맞다고 설정해주면 오류 나고 진행이 안되고…

열심히 검색해보니 server.webstation-vhost.conf 파일을 수정해줘야 한다고…

관리자 권한으로 /etc/nginx/app.d/server.webstation-vhost.conf 파일을 편집

수정할 서버 부분에서(* server_name 으로 구분),

index    index.html  index.htm  index.cgi  index.php  index.php5 ;<br>error_page 400 401 402 403 404 405 406 407 408 500 501 502 503 504 505 @error_page;

라고 된 부분에

try_files $uri $uri/ /index.php?$args;

삽입.

요렇게…

저장 후,

nginx -s reload 로 nginx 재시작

그랬더니 정상적으로 작동… 에이씨..

  • 웹스테이션에서 가상호스트 추가나 변경 시 수정한 내용이 삭제되므로 수동으로 고쳐줘야 하는 듯…
  • DSM 업데이트 하고 나면 또 수정해줘야 함을 발견….😑
  • NAS 재기동만 해도 또 수정해줘야 함을 정전되고 나서 발견….😣

/etc/nginx/conf.d/가상호스트 디렉토리 내에 config 파일을 생성

location /{
        try_files $uri $uri/ /index.php?$args;
}

/etc/nginx/app.d/server.webstation-vhost.conf 서버 마지막항목에 해당 config 파일 include되었는지 확인/추가

include /usr/local/etc/nginx/conf.d/가상호스트/user.conf*;

재기동.


2023-10-22 DSM7.0으로 올린 이후로 구조가 바뀌었는지 자꾸 404ERROR 뱉어내서 귀찮다고 고유주소 방식을 일반 방식으로 바꿔썼는데 나스 맛탱이 가서 재 설치하면서 살펴보니 가상서버 디렉토리가 없음

include /usr/local/etc/nginx/conf.d/가상호스트/user.conf*; 했던 그 가상호스트 이름으로 디렉토리를 만들어 주고 그 디렉토리에 user.conf 만든 걸 넣어 주고 nginx 재기동하니 404에러 안나고 정상적으로 이동됨. 나스 재기동해도 초기화되지 않았음.

SQUASHFS error – ASUS RT-AC68U

얼마 전부터 WordPress 플러그인인 Jetpack에서 하루에도 몇십번씩 블로그가 연결안되었다 되었다 하는 알림을 날려와서 스트레스 잔뜩 받고 있었는데, 공유기 로그를 보다 보니 아래와 같은 오류가 나고 있었습니다.

Apr 11 23:01:29 kernel: SQUASHFS error: xz_dec_run error, data probably corrupt
Apr 11 23:01:29 kernel: SQUASHFS error: squashfs_read_data failed to read block 0x187b0a6
Apr 11 23:01:29 kernel: SQUASHFS error: Unable to read data cache entry [187b0a6]
Apr 11 23:01:29 kernel: SQUASHFS error: Unable to read page, block 187b0a6, size 4f78
Apr 11 23:01:29 kernel: SQUASHFS error: Unable to read data cache entry [187b0a6]
Apr 11 23:01:29 kernel: SQUASHFS error: Unable to read page, block 187b0a6, size 4f78
Apr 11 23:01:29 kernel: SQUASHFS error: Unable to read data cache entry [187b0a6]
Apr 11 23:01:29 kernel: SQUASHFS error: Unable to read page, block 187b0a6, size 4f78
Apr 11 23:01:29 kernel: SQUASHFS error: Unable to read data cache entry [187b0a6]
Apr 11 23:01:29 kernel: SQUASHFS error: Unable to read page, block 187b0a6, size 4f78
Apr 11 23:01:29 kernel: SQUASHFS error: Unable to read data cache entry [187b0a6]
Apr 11 23:01:29 kernel: SQUASHFS error: Unable to read page, block 187b0a6, size 4f78
Apr 11 23:03:29 kernel: SQUASHFS error: xz_dec_run error, data probably corrupt
Apr 11 23:03:29 kernel: SQUASHFS error: squashfs_read_data failed to read block 0x187b0a6
Apr 11 23:03:29 kernel: SQUASHFS error: Unable to read data cache entry [187b0a6]
Apr 11 23:03:29 kernel: SQUASHFS error: Unable to read page, block 187b0a6, size 4f78
Apr 11 23:05:29 kernel: SQUASHFS error: xz_dec_run error, data probably corrupt
Apr 11 23:05:29 kernel: SQUASHFS error: squashfs_read_data failed to read block 0x187b0a6
Apr 11 23:05:29 kernel: SQUASHFS error: Unable to read data cache entry [187b0a6]
Apr 11 23:05:29 kernel: SQUASHFS error: Unable to read page, block 187b0a6, size 4f78
Apr 11 23:05:29 kernel: SQUASHFS error: Unable to read data cache entry [187b0a6]
Apr 11 23:05:29 kernel: SQUASHFS error: Unable to read page, block 187b0a6, size 4f78
Apr 11 23:05:29 kernel: SQUASHFS error: Unable to read data cache entry [187b0a6]
Apr 11 23:05:29 kernel: SQUASHFS error: Unable to read page, block 187b0a6, size 4f78
Apr 11 23:05:29 kernel: SQUASHFS error: Unable to read data cache entry [187b0a6]
Apr 11 23:05:29 kernel: SQUASHFS error: Unable to read page, block 187b0a6, size 4f78
Apr 11 23:05:29 kernel: SQUASHFS error: Unable to read data cache entry [187b0a6]
Apr 11 23:05:29 kernel: SQUASHFS error: Unable to read page, block 187b0a6, size 4f78

검색해봐도 직접적인 정보는 없고 flash memory가 망가졌다거나 펌웨어에 문제가 있다고 해서 일단 수동으로 펌웨어를 재설치를 해봤지만 동일 증상이 발생했습니다.

그래서 공장초기화를 했는데, 그래도 똑같은 현상이 발생하더군요.

그럼 공장초기화한김에 다시한번 펌웨어를 업데이트를 했더니 이젠 에러로그는 안납니다. -.- 펌웨어 설치가 잘못되었던 건지…

근데 지금 글을 쓰고 있는데도 연결이 안된다고 알림을 보내는 Jetpack은 대체 뭐냐…-.-

알고보니 4/11자로 펌웨어가 업데이트 되었었네요-.- 공장초기화하고 펌웨어 업데이트를 다시 해서 된게 아니라 그 시점에 새 펌웨어가 배포가 되었던 거네요.

그래서 그런가 조금 끊어짐 알림 메일은 덜 오는 거 같긴 한데 아직 완전히 없어지진 않네요…

공유기는 공유기고 NAS는 NAS다…(?)

지난주부터 하루에 몇십번씩 jetpack은 연결끊김 알림이 오고, NAS는 접속이 되었다 안되었다 하고, 블로그도 마찬가지로 접속이 되었다 안되었다 하고….

let’sencrypt 인증서 만료 안내 메일이 와서 인증서 갱신을 하려고 했더니만 계속 접속실패떨어지고…

공유기도 몇번씩 껐다 켜주고 NAS도 몇번씩 재기동을 해줘도 현상은 나아지질 않아서…

스트레스 만빵인데 검색해보니 시놀로지 NAS에 router 설정하지 말고 수동으로 공유기에서 직접 포트포워딩을 해줘야 한다는 얘기가 보여서 밑져야 본전이니 해보자…

시놀로지 NAS의 제어판>외부 액세스>라우터구성에 이전에 설정했던 포트포워딩 항목들 죄다 지워버리고…
공유기에 포트포워딩항목에 다시 정리해서 등록했더니..

인증서 갱신도 잘되고, 하루에 30번이 넘게 오던 jetpack 연결끊김/연결 알람도 없고… NAS와 블로그 반응도 덜 버벅거리는 느낌마저 듭니다.

역시 공유기는 공유기의 역할을, NAS는 NAS의 역할을 시키는게 정론인것 같습니다.

WordPress 요약글처리 및 child theme 생성

워드프레스로 글을 생성해서 메인페이지를 들어오면
사진이랑 글 내용 전체가 표시가 되어버려서 요약글로 보이게 하는 것을 이전에 어디서
뒤져보고 적용해놓고 까맣게 잊고 있었는데…

오늘 뜬금없이 Twenty Seventeen 테마가 업데이트 되었다고 해서
업데이트를 시도했더니 테마 파일을 커스터마이징해버린게 있어서
업데이트가 안되었습니다.

그래서 테마를 날리고 다시 테마 받아서 깔고 뻘짓을 하고 나서 찾아보니 테마 파일 자체를 고치지 말고 child theme를 만들어서 쓰는게 낫다는 얘기가 있었더군요… (뭘 알아야지…)

Twenty Seventeen 기준으로 작업했습니다. (혹 테마에 따라 다를 수도?)

일단 검색에 찾아본대로 child theme 디렉토리를 생성해 줬습니다.

테마니까 당연히 theme 디렉토리에 생성합니다.

style.css 와 functions.php를 아래 내용으로 생성

style.css

/*
  Theme Name: MyTwenty Seventeen Child Theme
  Template: twentyseventeen
*/ 

테마명은 대충 지어도 별 상관이 없는데 Template 명은 부모 테마명을 정확히 써줘야
하고, 이 주석문이 없어도 제대로 구동이 안되더군요.

functions.php

<?php
  function theme_enqueue_styles() {
    wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
    wp_enqueue_style( 'child-style', get_stylesheet_directory_uri() . '/style.css', array( 'parent-style' ) );
  }
  add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' );
?>

요기까지 하면 일단 테마 생성은 되고 괸리자페이지>외모>테마에 가면 생성된 child theme 확인이 가능합니다.

child theme 디렉토리에 screenshot.png 를 채워 넣으면 미리보기 이미지로 보인다는데 귀찮아서 패스…

그리고 원래 하려고 했던 요약글 처리를 content.php 를 부모테마와 똑같이 child theme 에 디렉토리 만들어 주고 내용 수정.

즉, ../web/wordpress/wp-content/themes/twentyseventeen-child/template-parts/post/content.php 을 만들어야 한다는 것이죠.

부모 theme의 content.php를 복사해놓고 그걸 고칩니다.
entry-content 부분을 찾아 수정했습니다. (바탕색 다른 부분이 추가한 부분)

content.php

	<div class="entry-content">
		<?php
/* preview post 20190222 - start */
			if ( is_single() ) :
/* preview post 20190222 - end */		
				/* translators: %s: Name of current post */
				the_content(
					sprintf(
						__( 'Continue reading<span class="screen-reader-text"> "%s"</span>', 'twentyseventeen' ),
						get_the_title()
					)
				);

				wp_link_pages(
					array(
						'before'      => '<div class="page-links">' . __( 'Pages:', 'twentyseventeen' ),
						'after'       => '</div>',
						'link_before' => '<span class="page-number">',
						'link_after'  => '</span>',
					)
				);
/* preview post 20190222 - start */
			else :
			the_excerpt( sprintf(
			__( 'Continue reading<span class="screen-reader-text"> "%s"</span>', 'twentyseventeen' ),
			get_the_title()
			) );

			wp_link_pages( array(
			'before'      => '<div class="page-links">' . __( 'Pages:', 'twentyseventeen' ),
			'after'       => '</div>',
			'link_before' => '<span class="page-number">',
			'link_after'  => '</span>',
			) );
			endif;				
/* preview post 20190222 - end */		
		?>
	</div><!-- .entry-content -->

Synology NAS, WordPress NGINX로 구동 설정

아무것도 모른 상태에서 블로그 살리겠다고 검색과 삽질을 통해 블로그를 구축은 어찌어찌 성공했는데…

php 5.2, php 7.0이 같이 돌고 있고, apache 2.2, apache 2.4 가 죄다 돌고 있어서 synology 자체에서 쓴는 nginx까지 세개가 돈다는 게 뭔가 좀 이상하다는 생각이 들더군요.

php 5.2는 phpadmin 종속이라 어쩔 수 없다고 치고, apache 2.2보다 2.4가 낫대서 깔다보니 쓸데없이 몇개씩 돌고 있어서 또 검색의 힘과 삽질의 근성으로 도전…

가상호스트의 http 백엔드 서버만 바꿔주면 되는 줄 알았더니 메인페이지만 나오고 서브페이지만 들어가면 404에러를 뱉어내더군요…

서버를 몇번씩 수정하고 재기동하고 난리를 쳐서 결국 성공하고 그 이력을 기록해 둡니다. (또 까먹을까봐)

더 헤매게 된 이유가 모델과 dsm버전이 다르면 환경도 다른 경우가 있나보더군요. 검색한 정보를 토대로 암만 찾아도 내껀 그런게 안나오는게 있고 하더라구요.

적용한 환경입니다.

  • 모델 : DS218+
  • DSM 버전:DSM 6.2.1-23824 Update 4
  • 사전에 가상호스트 등은 전부 설정해서 워드프레스가 멀쩡히 돌아가는 것 확인한 상태

/etc/nginx/app.d 에서 server.webstation-vhost.conf 읽기

가상서버를 여러개 돌린다면 항목중에 server_name 내도메인; 으로 되어있는 server { } 항목을 찾아서 include 로 시작해서 .conf로 끝나는 부분을 찾습니다.

include /usr/syno/etc/security-profile/tls-profile/config/vhost_b2944df6-4fe4-4afd-9211-f654ed87ce44.conf*;

…당연히 고유id니까 다 다른 값으로 채워졌겠죠.

다음으로 위에서 찾은 vhost_ 와 .conf를 제외한 고유아이디를 /usr/local/etc/nginx/conf.d 디렉토리에 user.conf.wordpress-permalink 파일을 생성합니다. (권한 문제로 su vim user.conf.wordpress-permalink 으로 실행해야 할 겁니다.)

location /{
try_files $uri $uri/ /index.php?$args;
}

위의 텍스트를 입력하면 됩니다.

이제 설정을 적용했으니 nginx를 재기동 해야합니다 :

sudo synoservice --restart nginx

apache 2.4를 삭제해도 잘 도는 걸 보면 멀쩡히 잘 되고 있음을 알 수 있습니다.

이제 php 5.6하고 apache 2.2를 지울 수 있는 방법을 찾아봐야지…