2023年4月16日 星期日

website ssl

 #sudo apt-get install dirmngr

#更新

sudo apt-get update

# 安裝軟體管理套件

sudo apt-get install software-properties-common

# 加入 certbot ppa repository,並透過 apt-get update 取得套件資訊

sudo add-apt-repository ppa:certbot/certbot

sudo apt-get update

# 安裝 certbot for apache2

sudo apt-get install -y python3-certbot-apache


Now we are ready to install SSL Certificates. Execute the following command to install SSL Certificates.


Code

# 開始進行 Apache 的憑證安裝 

sudo certbot --apache


After executing above command we need provie an email account. Please provide email which you used frequently. You will going to recieve SSL Certificate expiration emails on this email.

Next you need to Agree the Terms of Service

Confirmation for sharing your email with Electronic Frontier

Now we need to select domains for which we need to Install SSL Certificates.

Finally select How to handle http requests. We are going to recomended select option 2


sudo certbot --apache


到期時自動續訂ssl

sudo certbot renew --dry-run


設定信任網域名,讓drupal可以輸入www.jujula.org 或 jujula.org 連線,而不會被拒絕訪問。

打開

sudo nano /var/www/html/sites/default/settings.php


設定信任網域名

$settings['trusted_host_patterns'][] = '^www\.jujula\.org$';  # Added by Google C2D

$settings['trusted_host_patterns'][] = '^jujula\.org$';  # Added by Google C2D




sudo nano /var/www/html/.htaccess


把http轉為https


RewriteEngine on

 

# Redirect to HTTPS


RewriteCond %{HTTPS} off


RewriteCond %{HTTP:X-Forwarded-Proto} !https


RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]




2019年11月12日 星期二

如何把 Debian 10 英文語系桌改成中文語系桌面

su - root
dpkg-reconfigure locales
然後英文語系及zh_tw.utf-8 和 big 5 打勾,接著預設選 zh_tw.utf-8 ,然後重開機或是登出登入即可。

2019年11月4日 星期一

Putty 中文顯示


要讓PUTTY顯示中文,除了自己要安裝中文的編譯器之外,就是要有良好設定了 ~~~
參考網路文章
Server 端設定
#vi /etc/profile
LC_CTYPE=en_US.ISO8859-1; export LC_CTYPE
LC_CTYPE=zh_TW.UTF-8; export LC_ALL
LANG=zh_TW.UTF-8; export LANG


SSH 連線軟體 Putty 設定:
Change Settings ->> Translation ->> Character set translation on received data ->> 選UTF-8

以Big5顯示
#vi /etc/profile
LC_CTYPE=en_US.ISO8859-1; export LC_CTYPE
LC_CTYPE=zh_TW.Big5; export LC_ALL
LANG=zh_TW.Big5; export LANG



SSH 連線軟體 Putty 設定:
Change Settings ->> Appearance ->> Cursor appearance ->> 改成 Underline
Change Settings ->> Appearance ->> Font settings ->> Change ->> 字型 選"細明體或新細明體" 字集 選 "CHINESE_BIG5"
Change Settings ->> Translation ->> Character set translation on received data ->> 選 User font encoding

這文章是人家寫的啦 ~~ 現在來找一下參數的解釋好了 ~~ 不然都是用人家的東西有點不好意思。
LC_CTYPE 類別是用來作 locale 下的字元處理~~而我們可以利用這個指令charmap來看一下這些屬於locale下的字元有哪些。而這些字元就是你可以顯示的東西,之前還有查過一些可以顯示的環境設定,不過都沒有用,我也不知道為啥,這個是我目前測試過可以用的。
OS : Fedora 14
gcc: 4.5.1

2019年10月27日 星期日

Linux 的 su 與 sudo 指令教學與範例


Linux 的 su 與 sudo 指令教學與範例

這裡介紹 Linux 中 su 與 sudo 指令的使用方式,並提供幾個常用的範例。


Linux 系統最高權限的管理者帳號為 root,也稱為超級使用者(superuser)帳號,這個帳號在使用上沒有任何限制,管理者只要取得這個帳號就可以對系統進行各種變更,例如格式化與掛載硬碟、新增或刪除使用者帳號、更改各種系統服務、更新系統等。


然而由於 root 權限非常高,縱使是 Linux 老手在使用時也必須非常小心,若下錯指令是有可能造成系統損毀的,因此在管理 Linux 系統時,通常不建議直接使用 root 登入系統進行所有的操作,有些人為了方便甚至使用 root 登入後進入 X Window 的桌面環境,這會讓整個桌面環境中所有的應用程式都直接取得 root 權限,任何程式都可以在未經許可的狀況下存取或更改系統的任何設定,對於 Linux 伺服器來說這樣的動作是非常危險的。



為了避免不小心把系統搞砸,降低出錯的機率,在維護 Linux 系統時標準的作法是使用一般的帳號登入,遇到需要 root 權限時,再使用 su 或 sudo 取得較高的權限進行系統變更,以下是 su 與 sudo 的用法教學。
su 指令


su 指令可以讓一般的 Linux 使用者取得 root 權限,取得 root 權限的使用者就如同 root 一樣可以對系統進行各種變更動作。su



單純執行 su 並輸入 root 的密碼之後,就可以取得 root 權限,在不過這種情況下,雖然使用者帳號的 user id 變成 0(root 的 user id),但是其他的環境變數並沒有跟著改變。

su 指令


若只是單純需要以 root 權限做一些更改檔案等小動作,以上面這種簡單的 su 用法就夠了,而如果是要進行比較複雜的系統管理,牽涉到許多 root 帳號的環境變數(例如 PATH 或 MAIL 等)時,就要改用下面這種方式:su -


在 su 後面加上一個減號後,就可以仿照 root 登入的方式,進入一個完整的 shell 環境,這個新的 shell 環境就跟使用 root 重新登入一樣。


su - 指令


不管是使用 su 或是 su -,都會開啟一個新的 shell 環境,在完成所有需要 root 權限的工作之後,要執行 exit 或是按下 Ctrl + d 才會離開該 shell。若在進入新的 shell 之後,僅只需要執行一行簡單的指令,執行完後就馬上跳出,可以使用 -c 參數來指定要執行的指令內容:su - -c "service nginx reload"



上面這個例子就會仿照重新登入的方式進到 root 帳號的 shell,並執行 service nginx reload,完成後就自動離開 root 的 shell。


su 除了可以讓一般使用者取得 root 權限之外,也可以取得其他的帳號權限,我們可以使用 -l 參數指定帳號名稱:su -l seal



上面這行指定可以取得 seal 這個帳號的權限,而這裡在輸入密碼時就要輸入 seal 這個帳號的密碼。如果您是在 root 權限之下透過 su 指令來取得一般使用者的權限,這種狀況就可以不需要輸入該使用者的密碼。



sudo 指令


sudo 指令類似 su,也是可以用來取得 root 或是其他帳號的權限,不過它在取得 root 或其他帳號權限的時候,是輸入自己的密碼,而不是 root 或其他帳號的密碼,使用上比較方便。


Ubuntu Linux 系統預設在安裝時基於安全考量,並不會啟用 root 帳號,無法用 root 直接登入系統,所有的系統管理動作都是透過 sudo 來取得 root 權限。


sudo 在使用上會跟 su -c 類似,執行完指定的指令之後就會自動離開,這個例子會以 root 權限執行 ls,查看一般使用者無法讀取的目錄:sudo ls /usr/local/protected



若要查看 gtwang 這個使用者家目錄的檔案,可以切換為該帳號的權限之後,再用 ls 查看:sudo -u gtwang ls ~gtwang



切換為 www 這個網頁伺服器用的系統帳號權限,編輯網頁檔案:sudo -u www vi ~www/htdocs/index.html



sudo 也可以用 -g 參數來取得指定群組的權限,例如取得 adm 群組權限後,查看系統的記錄檔:sudo -g adm view /var/log/syslog



等待十五分鐘之後重新開機:sudo shutdown -r +15 "quick reboot"



許多人會習慣拿 sudo 與 su 放在一起使用,這樣藉由 su 取得一個新的 shell,而且也不用輸入 root 的密碼,通常在 Ubuntu Linux 中很常用:sudo su -

/etc/sudoers 設定檔


sudo 可以在不需要 root 密碼的情況下取得 root 權限,當然在正常的 Linux 系統中不可能讓所有的使用者都可以使用 sudo,它是依據 /etc/sudoers 設定檔來管控的,只有在這個檔案中有被特別設定的使用者或群組才能使用 sudo 指令。


在編輯 /etc/sudoers 的時候,請使用 visudo 這個指令來開啟 vi 編輯器進行編輯,系統會在編輯完成後自動檢查設定檔的語法是否正確,避免錯誤的語法導致 sudo 無法使用。
個別使用者設定


/etc/sudoers 對個別使用者設定的語法格式如下:帳號名稱 來源主機=(可切換帳號) 可執行的指令



其中四的欄位的意義為: 帳號名稱

可以使用 sudo 的帳號名稱。 來源主機

限制使用者從特定網路主機連線時,才能使用 sudo 指令,可用來防止入侵者從不明的主機登入攻擊。若指定為 ALL 則代表不限制來源主機。 可切換帳號

可以取得哪些帳號的權限。若指定為 ALL 則代表可以取得任何帳號的權限。 可執行的指令

在取得特殊權限後,可以執行的指令。若指定為 ALL 則代表可以執行任何令。


若要讓 gtwang 這個帳號可以使用 sudo 執行所有的指令,則在 /etc/sudoers 中加入這一行設定:gtwang ALL=(ALL) ALL



基本上讓使用者允許使用 sudo 指令取得 root 權限,就等同於讓該使用者成為一位系統管理者了,所以別隨便開放 sudo 給一般的使用者,尤其是對於 Linux 不甚熟悉的人。


假設 accmgr 這個管理者是專門幫使用者重新這定密碼的,我們就可以透過這樣的設定限制 accmgr 這個管理者只能使用 root 權限執行 passwd 來更改使用者的密碼,而不能做其他的事情:accmgr ALL=(root) /usr/bin/passwd



上面這種寫法有一個漏洞,就是 accmgr 也可以更改 root 帳號的密碼,如果 root 的密碼可被任意更改,整個系統的管理權限也會被取得,所以我們必須防止 accmgr 更動 root 的密碼:accmgr ALL=(root) !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root



這裡我們將可執行的指令加上更多的限制,首先是不可以直接執行 /usr/bin/passwd,僅允許 /usr/bin/passwd 加上一般的使用者帳號,然後將 /usr/bin/passwd root 這個更改 root 密碼的指令也禁止。
群組設定


如果要對特定群組底下的所有帳號一次開放權限,可以使用這樣的群組設定語法:%群組名稱 來源主機=(可切換帳號) 可執行的指令



群組設定的語法跟個別帳號的方式相似,只不過群組的名稱在指定時前面要加上一個百分比 % 的符號,而其餘欄位則都相同。例如若要讓 wheel 群組中的所有使用者都可以使用 sudo,則加入:%wheel ALL=(ALL) ALL

不用輸入密碼


如果想要讓特定的使用者可以在不需要輸入密碼的情況下,直接使用 sudo,可以加入 NOPASSWD 的設定,例如:gtwang ALL=(ALL) NOPASSWD:ALL



讓整個群組的使用者都不需要密碼:%wheel ALL=(ALL) NOPASSWD:ALL



在沒有加入 NOPASSWD 的設定之下,如果使用者在五分鐘之內連續使用 sudo 好幾次,那麼只有在第一次使執行時需要輸入密碼,隨後再次執行 sudo 時,系統就不會要求使用者重複輸入,這樣的設計是預設五分鐘之內連續執行的指令應該都是同一人所為,所以不用再次輸入密碼,但若是超過五分鐘之後,就要重新驗證密碼。
使用別名


有的時候 /etc/sudoers 的設定比較複雜,例如遇到很多的使用者以及指令組合的狀況時,我們可以使用別名(alias)的方式來管理設定:User_Alias MYACC = accmgr, gtwang, seal Cmnd_Alias MYEXE = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root MYACC ALL=(root) MYEXE



這裡我們使用 User_Alias 建立一個帳號別名 MYACC,其內容就是等號後方的那些帳號名稱,而 Cmnd_Alias 則是建立指令的別名,若要建立來源主機的別名則可用 Host_Alias,所有的別名都要以大寫英文字母來命名,這樣的話就可以將冗長的設定簡化,並且重複使用,日後要修改也會比較方便。

Debian 10 如何設定語系



到這個 /var/lib/locales/supported.d 資料夾看看有沒有一個叫做 locale 的檔案,有的話直接修改,沒有就新增一個,其實,不管有沒有這個檔案,都可用下面這個指令來編輯,反正沒有的話, vi 就會變成是要新增檔案哩 !

sudo vi /var/lib/locales/supported.d/local

打開之後,請加入下面這幾行字串,如果已經有的,就不用再加了,只要加沒有的就可以了,不然,把下面這幾行複製貼上來蓋掉原來的,也是可以的,然後,在加好之後就存檔離開。

zh_TW.UTF-8 UTF-8
en_US ISO-8859-1
en_US.UTF-8 UTF-8
zh_TW BIG5

接著,請執行下列任一指令來產生語系檔,而產生出來的語系檔案會放在 /usr/lib/locale 資料夾。

sudo locale-gen



sudo dpkg-reconfigure locales

上面的指令執行完成後,先登出再登入,或是重新啟動之後,再用下面的指令來檢查已安裝的語系,應該就會看到 zh_TW 了哩 !

locale -a





或是第二種方法

怎麼讓 Debian 10 出現的訊息變成是中文的呢 ? 會遇到這個問題的情況,在安裝的過程中,忘了或沒去變更預設的語系 (locale),所以,Debian 10 就會使用預設的美國英文 (en_US.UTF-8) 來做為系統的語系,因此,所有的訊息就都是英文

首先,可以先用 locale 指令確認一下目前使用的語系為何,預設的情況下,應該會看到像下面這樣,所有的語系設定都是 en_US.UTF-8 的。

$ locale 
LANG=en_US.UTF-8 
LANGUAGE= LC_CTYPE="en_US.UTF-8" 
LC_NUMERIC="en_US.UTF-8" 
LC_TIME="en_US.UTF-8" 
LC_COLLATE="en_US.UTF-8" 
LC_MONETARY="en_US.UTF-8" 
LC_MESSAGES="en_US.UTF-8" 
LC_PAPER="en_US.UTF-8" 
LC_NAME="en_US.UTF-8" 
LC_ADDRESS="en_US.UTF-8" 
LC_TELEPHONE="en_US.UTF-8" 
LC_MEASUREMENT="en_US.UTF-8" 
LC_IDENTIFICATION="en_US.UTF-8" 
LC_ALL=

確定沒有設定成中文後,接下來就要把 Debian 10 的語系來改成中文了,台灣的正體中文使用的語系代碼是「zh_TW」,所以,操作步驟的指令們就是下面這樣。
sudo locale-gen zh_TW
sudo locale-gen zh_TW.UTF-8
sudo dpkg-reconfigure locales
sudo update-locale LANG="zh_TW.UTF-8" LANGUAGE="zh_TW"

上面的指令都跑完後,用 locale 指令來看的話,語系還會是原來的 en_US.UTF-8,會這樣,是因為要語系環境變數要登出再登入才會變更哩 ! 因此,設定完成後,請先登出再登入,再用 locale 指令來看,應該就會是 zh_TW.UTF-8 了哩 !
$ locale 
LANG=zh_TW.UTF-8 
LANGUAGE=zh_TW 
LC_CTYPE="zh_TW.UTF-8" 
LC_NUMERIC="zh_TW.UTF-8" 
LC_TIME="zh_TW.UTF-8" 
LC_COLLATE="zh_TW.UTF-8" 
LC_MONETARY="zh_TW.UTF-8" 
LC_MESSAGES="zh_TW.UTF-8" 
LC_PAPER="zh_TW.UTF-8" 
LC_NAME="zh_TW.UTF-8" 
LC_ADDRESS="zh_TW.UTF-8" 
LC_TELEPHONE="zh_TW.UTF-8" 
LC_MEASUREMENT="zh_TW.UTF-8" 
LC_IDENTIFICATION="zh_TW.UTF-8" 
LC_ALL=

之後,如果需要再改回英文語系的話,就只要執行下面這一行指令,然後,再登出再登入或重新開機之後,就會回到英文語系了哩 ! ...

sudo update-locale LANG="en_US.UTF-8" LANGUAGE="en_US.UTF-8"

另外,附帶一提的,如果你有遇到類似像下面這樣的錯誤訊息的話,也是和語系設定有關,y就是沒有產生相對的語系檔,一樣用上面提到的指令來產生,應該就可以解決了哩 ! ...

....
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory .....



或是參考這篇
在 Ubuntu 16.04 中設定 locale 環境變數

新裝乾淨的 ubuntu 通常 locale 都沒設好,這會導致一些錯誤,像是 pip install 就會炸了

123456789 $ pip install virtualenvwrapperTraceback (most recent call last): File "/usr/bin/pip", line 11, in <module> sys.exit(main()) File "/usr/lib/python2.7/dist-packages/pip/__init__.py", line 215, in main locale.setlocale(locale.LC_ALL, '') File "/usr/lib/python2.7/locale.py", line 581, in setlocale return _setlocale(category, locale)locale.Error: unsupported locale setting


這裡簡單備忘一下如何快速將 locale 全域設成 zh_TW.UTF-8
設定要產生的語系 /var/lib/locales/supported.d/<config name>
產生語系設定檔 $ sudo locale-gen 去吃第 1. 點的設定
update-locale 語系,由系統寫入全域設定 /etc/default/local

以下說細一點,有錯請指正

首先用 $ locale 看一下現在的語系設定

$ localelocale: 
Cannot set LC_CTYPE to default locale: 
No such file or directorylocale: Cannot set LC_ALL to default locale: 
No such file or directory
LANG=en_US.UTF-8
LANGUAGE=LC_CTYPE=zh_TW.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=


新增一個檔案在 /var/lib/locales/supported.d/locale,內容如下

12 zh_TW.UTF-8 UTF-8en_US.UTF-8 UTF-8


用 locale-gen 產生設定檔,可用 $ locale -a 列出目前支援的語系設定

$ sudo locale-genGenerating locales (this might take a while)... 
en_AG.UTF-8... done 
en_AU.UTF-8... done 
en_BW.UTF-8... done 
en_CA.UTF-8... done 
en_DK.UTF-8... done 
en_GB.UTF-8... done 
en_HK.UTF-8... done 
en_IE.UTF-8... done 
en_IN.UTF-8... done 
en_NG.UTF-8... done 
en_NZ.UTF-8... done 
en_PH.UTF-8... done 
en_SG.UTF-8... done 
en_US.UTF-8... done 
en_ZA.UTF-8... done 
en_ZM.UTF-8... done 
en_ZW.UTF-8... done 
zh_TW.UTF-8... done
Generation complete.


用 $ sudo update-locale LC_ALL="zh_TW.UTF-8" 將設定檔寫入, 設定 LC_ALL 會覆寫全部 locale 中全部 LC_ 開頭的設定,這個指令會去寫 /etc/default/locale,所以也可以 cat 它確認究竟寫了什麼設定進去,當然也可以只 update 自己想要的參數,改完重新登入即可

檢查一下



$ localeLANG=en_US.UTF-8
LANGUAGE=LC_CTYPE="zh_TW.UTF-8"
LC_NUMERIC="zh_TW.UTF-8"
LC_TIME="zh_TW.UTF-8"
LC_COLLATE="zh_TW.UTF-8"
LC_MONETARY="zh_TW.UTF-8"
LC_MESSAGES="zh_TW.UTF-8"
LC_PAPER="zh_TW.UTF-8"
LC_NAME="zh_TW.UTF-8"
LC_ADDRESS="zh_TW.UTF-8"
LC_TELEPHONE="zh_TW.UTF-8"
LC_MEASUREMENT="zh_TW.UTF-8"
LC_IDENTIFICATION="zh_TW.UTF-8"

bash: warning: setlocale: LC_ALL: cannot change locale

用 SSH 登入遠端伺服器時,看到「-bash: warning: setlocale: LC_ALL: cannot change locale」的錯誤訊息嗎? 會遇到它是因為 SSH 連線上遠端主機時,會自動將本機的 LC_* 變數(locale)傳送一份到遠端主機,如果伺服器上不支援你指定的語系,就會出現「-bash: warning: setlocale: LC_ALL: cannot change locale」錯誤啦!
要解決這個錯誤,有幾種做法,最治標的做法是幫遠端伺服器補上缺少的語系,這邊以 zh_TW.UTF-8 舉例,至於你需要補上的語系,可以看錯誤訊息的最後面:
sudo locale-gen zh_tw.UTF-8

sudo update-locale
幫每台機器都補上語系很麻煩,你也可以將 SSH 的自動傳送 LC_* 功能關掉,讓遠端伺服器用它預設的語系,如果你的操作都是英文,其實不會有太大問題。
以 Mac 為例,在 /etc/ssh/ssh_config 裡面,把 SendEnv LANG LC_* 註解掉即可,完成後:

Host *
#   SendEnv LANG LC_*

Debian 10 清除 cache 容量

查詢單前目錄容量 du -sh * or du

查詢 cache 目前容量

df -h

清除容量

apt-get clean


這樣就 ok 嚕~