2017年7月2日星期日

加強ssh保安

為加強ssh的保安,我們可做以下工作:
A.不許root從ssh登入,改為增加用戶為sudoer。
B.禁止用戶用密碼遙距(ssh)登入,只可用key登入。
ssh server 限制用key登入ssh的好處就是入侵者基本上不可能暴力爆SSH server,撞中密碼。當然,也要保存好登入用的key。

以Ubuntu 16.04為例,我們可以按序做以下工作:

1. 增加一個用戶為sudoer

創建一個用戶sudoer_userabc
useradd -m sudoer_userabc

使用usermod去加用戶入"sudo"群組中
Ubuntu中,預設群組"sudo"中的用戶便可sudo (tested on Ubuntu 16.04)
usermod -aG sudo sudoer_userabc

測試
su sudoer_userabc
sudo apt-get update
如可正常update,則sudoer_userabc已是sudoer的一員了。

2. 生成一對密鑰

登入server, 執行
ssh-keygen

在過程中,會要求輸入密碼保護金鑰,作用是在每之使用金鑰時,要輸入密碼才可。注意,此密碼跟原本登入ssh server的密碼無關。建議可用一個簡單密碼來保護金鑰。有密碼保護的話,假設金鑰被人複制了一份,他也用不了。

之後會生成
目錄 ".ssh" (請確定".ssh"的權限是"700")
另外目錄下是一對金鑰,分別是
id_rsa (權限應為"600",這是key)
id_rsa.pub (權限應為"644",這是"鎖")


3.把"鎖"裝上

在目錄".ssh"中執行以下:

cat id_rsa.pub >> authorized_keys

mv id_rsa.pub authorized_keys

將key下載回來。
如是Linux或MacOS,直接用sftp登入下載便可。
如用Windows,可用以下工具

WinSCP (一個sftp工具)

http://winscp.net/

在Windows下,仍需下載puttygen及putty。


http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
用puttygen把id_rsa轉為putty格式,再用putty登入。

4. 修改sshd_config,改為只可用key登入

修改以下

============================================================
#修改port為XXXX
Port XXXX


#禁止root登入
PermitRootLogin no 

#允許用key登入,設定key的路徑 
PubkeyAuthentication yes
AuthorizedKeysFile      %h/.ssh/authorized_keys
============================================================

保存修改,重啟sshd,如可正常用key登入,再修改以下

============================================================
#禁止用密碼登入
PasswordAuthentication no 
============================================================

保存修改,重啟sshd。

5. 登入ssh

在Linux及macOS中,可用以下指令登入ssh
ssh -p port_of_sshd -i name_of_key user@sshd_server_ip

Windows中可用 putty.


完成!

ref:
https://blog.gtwang.org/linux/linux-ssh-public-key-authentication/
https://www.digitalocean.com/community/tutorials/how-to-create-a-sudo-user-on-ubuntu-quickstart

2017年5月12日星期五

Raspberry Pi 更改timezone

在Raspbian中更改time zone

root的身份鍵入以下command

sudo dpkg-reconfigure tzdata

接著便進入互動介面,選擇合適的地區。
保存後,重啟。

完成!

更新:
在Ubuntu 16.04上測試,也是一樣可用。
應該在Ubuntu系列的各版本都適用。
2017/7/2

ref http://aryo.lecture.ub.ac.id/configure-timezone-settings-on-raspberry-pi-raspbian-wheezy/comment-page-1/

2016年6月6日星期一

Yii2 i18n Basic Template 設置

在使用Yii2 的i18n做多語言設置時,主要有2個地方要設置的。

1. 設置檔案 web.php
 假設根目錄是/var/www/basic

編輯 /var/www/basic/config/web.php
加入藍色的設置。
預設的language是en-US。
翻譯的檔案分別是app.php 及error.php,在'/var/www/basic/messages/[language]'中。

<?php

$params = require(__DIR__ . '/params.php');

$config = [
... ...
  'language' => 'zh-TW',
  
  'components' => [
... ...        
        'i18n' => [
            'translations' => [
            'app*' => [
                'class' => 'yii\i18n\PhpMessageSource',
                'fileMap' => [
                    'app' => 'app.php',
                    'app/error' => 'error.php',
                ],
            ],
        ],

... ...
];


2. 建立目錄及檔案
在/var/www/basic/vendor/yiisoft/yii2/messages中已有部分翻譯,只是檔案名不同,直接 copy便可。
如zh-TW,

cp -r /var/www/basic/vendor/yiisoft/yii2/messages/zh-TW /var/www/basic/messages
cd  /var/www/basic/messages
mv yii.php app.php

DONE

2016年3月23日星期三

Vtiger CRM 中文亂碼

在試用VtigerCRM時發現中文亂碼。分別在顯示時及轉PDF時出現。
實現環境:
Centos 7 + Vtiger6.4

解決辦法:
1. 顯示時的中文亂碼
是由於Database 的Charset不正確造成的,只要更改為UTF8便可。
但如Database已生成,建議重新安裝Vtiger比較節省時間。google了,似乎沒有辦法直接轉換。曾經試過把Database匯出SQL,更改SQL中chatset為UTF8,再匯入。但加index時出現了一些錯誤信息。未知是否有影響。

比較簡單的方法是在安裝Vtiger時,只要把Database的Charset改成UTF8便可。在安裝完成後,所有tables及fields的charset都是UTF8,問題便解決了。

方法如下:
mysql -u root -p
CREATE DATABASE vtiger CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE USER 'vtiger'@'localhost' IDENTIFIED BY 'testing';
grant all privileges on `vtiger`.* to 'vtiger'@'localhost';
FLUSH PRIVILEGES;


2. 轉PDF時出現中文亂碼
TCPDF及字型的問題。
已放棄Vtiger,具體解決方法參考以下
http://www.ossez.com/forum.php?mod=viewthread&tid=761
http://wiki.debian.org.hk/w/Where_can_I_find_fonts_for_GNU/Linux


2015年11月26日星期四

在Centos中添加SWAP

在DigitalOcean 的 VPS中用yum update時出現了以下錯誤:
" ... cannot allocate memory ..."

VPS雖然只有512M,但仍未用完。但是沒有SWAP。
Google 後發現,原來真是RAM不足,可能是在安裝過程中某個套件需要更多的RAM吧!不想升VPS計劃,因該主機工作簡單,沒必要用更多RAM的計劃。那只好加SWAP了,反正用的是SSD,速度已不錯的。

以下是在centos7.1中做一個2GB swap的步驟:
1. 生成一個2GB檔案,用來做SWAP
  $ dd if=/dev/zero of=/swapfile bs=1024 count=2M

2. 轉"swapfile"為SWAP格式
  $ mkswap /swapfile

   開啟SWAP
  $ swapon /swapfile

   查看情況
  $ top

  KiB Mem :   501144 total,    47088 free,   318512 used,   135544 buff/cache

  KiB Swap:  2097148 total,  2006484 free,    90664 used.    63632 avail Mem

3. 修改 fstab, 使reboot後可自行加載swap
  $ vi  /etc/fstab

   加入以下一行
  /swapfile swap swap defaults 0 0


完成!

Ref:
https://www.centos.org/docs/5/html/5.2/Deployment_Guide/s2-swap-creating-file.html

2015年11月11日星期三

列出檔案清單

本文以WINDOWS 7作實驗,其他WINDOWS系統都應該杷同。

目標:
列出指定目錄及所有子目錄中的檔案,匯出成一個檔案。

1. 將 Windows console 轉成UTF-8編碼
不知為何,Windows的console不是UTF-8編碼的,如此一來,有部分檔案名會亂碼,必須將編碼轉成UTF-8。
在console執行

$ chcp 65001


2. 列出檔案清單
先列子目錄,以檔案名+日期(舊到新)排序,匯出到檔案 "list_all.txt"

$ dir /s /ognd > list_all.txt

  /S          顯示指定目錄及所有子目錄中的檔案。
  /O          依照指定的排序順序來列出檔案。
  sortorder    N  依名稱 (英文字母)   S  依大小 (最小的在前)
               E  依副檔名 (英文字母) D  依照日期與時間 (日期較早的在前)
               G  先列出子目錄        -  表示相反的順序

完成!

ref:
1. http://blog.darkthread.net/post-2011-08-11-command-prompt-codepage.aspx
2. http://superuser.com/questions/269818/change-default-code-page-of-windows-console-to-utf-8
3. windows help
DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]
  [/O[[:]sortorder]]  [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4]

  [drive:][path][filename]
              指定要顯示的磁碟機、目錄或檔案。

  /A          依照指定的檔案屬性來顯示檔案。
  attributes   D  目錄                R  唯讀檔
               H  隱藏檔              A  保存檔
               S  系統檔案            -  無意義
               L  重新分析點          -  首碼表示否定
  /B          使用單純格式 (沒有標頭資訊或摘要)。
  /C          顯示檔案大小千位數分隔符號。這是預設值。使用 /-C 來停用
              分隔符號的顯示。
  /D          與寬的列表格式相同,但是依照欄來排序。
  /L          使用小寫顯示。
  /N          使用新的長列表格式,檔名會顯示在最右方。
  /O          依照指定的排序順序來列出檔案。
  sortorder    N  依名稱 (英文字母)   S  依大小 (最小的在前)
               E  依副檔名 (英文字母) D  依照日期與時間 (日期較早的在前)
               G  先列出子目錄        -  表示相反的順序
  /P          當資料填滿整個螢幕時暫停顯示。
  /Q          顯示檔案擁有者。
  /R          顯示檔案的替代資料流。
  /S          顯示指定目錄及所有子目錄中的檔案。
  /T          指定用來顯示或排序的時間欄位
  timefield   C  建立
              A  上次檔案存取時間
              W  上次寫入檔案時間
  /W          使用寬的列表格式。
  /X          顯示對非 8.3 格式的檔案產生的短檔名。這個格式和 /N 相同,
              但是短檔名會插入在長檔名之前。如果沒有長檔名存在,該處會
              顯示空白。
  /4          顯示四位數的年份

參數可能會在 DIRCMD 環境變數預先設定。您可以在任何參數使用連字號字首(-)
來覆蓋預先的設定--例如: /-W

2015年10月4日星期日

centos 7 更改timezone


1. 找出要更改的time zone的正確名稱

以香港為例:

# timedatectl list-timezones | grep Hong

將列出
Asia/Hong_Kong


2. 更改time zone
# sudo timedatectl set-timezone Asia/Hong_Kong


檢查
# date
Sun Oct 4 23:44:21 HKT 2015


"HKT" => 香港時間


完成!

updated 2016/5/31
以上同樣可用於Ubuntu 16.04 LTS.

ref:
http://www.cyberciti.biz/faq/centos-linux-6-7-changing-timezone-command-line/