ubuntu安裝、設定與問題處理

為了因應各式各樣的客戶需求,towns 需學一下 ubunto的管理,以下為系統管理紀錄
Ubuntu與Debian 很像啊!

系統安裝
towns安裝的版本為Ubuntu 10.10 server 64bit版,安裝過程為中文化文字介面,可依需求自行選擇安裝,在這裡不多做說明
正體中文網站:http://www.ubuntu-tw.org/
原廠網站:http://www.ubuntu.com/


網路管理
1. 手動設定IP
習慣上towns在安裝完系統,會先修改測試機的IP位置
設定檔位置 /etc/network/interfaces
設定方式
 iface eth0 inet dhcp ==> iface eth0 inet static
                                         address 192.168.8.183
                                         netmask 255.255.255.0
                                         gateway 192.168.8.4
                                         dns-nameservers 192.168.1.20 8.8.8.8


重新啟動網路
1. ip add flush eth0 <== 這個動作會讓網路立刻斷掉
2. systemctl restart networking.service
/etc/init.d/networking restart
service networking restart
註1:這個動作最好是在 console 端執行,不然,斷了可能就要去機房了 = =
註2:如果只是要重新載入設定,只需要做第 2 點

相關資料:某外國大大的文章
https://www.configserverfirewall.com/ubuntu-linux/ubuntu-restart-network-interface

補充:在設定好 interfaces 檔案後,使用 systemctl restart networking.service 重新啟動網路,這個只會在 ip add 出現 secondary [interface name],不會自動更新,要下 ip add flush [interface name],清除原 IP,再執行 restart 才會更新

2. 設定網路介面開機不起動
將 auto enp0s3 ==> mark 掉就可以了

3. 靜態路由設定
一樣在該檔案中設定即可
例:up route add -host 192.168.10.2 gw 192.168.10.1 dev ens33


套件安裝與管理
1. 安裝套件
 1.1. towns到官網下載套件時,官方建意使用 aptitude 或 synaptic 來安裝套件
 aptitude install php5-gd <==使用aptiude自動安裝套件
 官方的套件搜尋頁面http://packages.ubuntu.com/

2. 套件管理
 dpkg --get-selections |grep <套件名稱> <==確認系統中是否安裝 ssh server
 dpkg --get-selections <== 列出所有已安裝套件,且有完整套件名稱
 dpkg -s <套件名稱> <== 取得套件安裝狀態及詳細資訊
 dpkg -S /etc/apache2/conf-available/security.conf <== 查詢 security.conf 檔案由什麼套件裝的
註:使用查詢指令時,必需是完整路徑
 dpkg -S <套件名稱> <== 取得套件檔案資訊
 dpkg -p <套件名稱> <== 取得套件詳細資訊
 dpkg -l <套件名稱> <== 取得套件簡易資訊
 dpkg -i <套件名稱> <== 安裝套件
 dpkg --print-architecture <== 顯示硬體平台資訊,可以判斷平台為64或32bit
 dpkg -L <套件名稱> <== 列出套件檔案及檔案路徑
 dpkg -r <套件名稱> <== 移除套件

註:log 檔沒有套件擁有者

參考資料:

酷米大的blog
http://www.kume.idv.tw/read-124.html

jimmy大的blog -- rpm vs dpkg
http://jamyy.us.to/blog/2005/08/143.html


系統管理
1. 系統語系變更
檔案位置:/var/lib/locales/supported.d/local
 en_US.UTF-8 UTF-8 ==> zh_TW.UTF-8 UTF-8  手動修改檔案內容,轉為zh_TW.UTF-8
 locale-gen zh_TW.UTF-8 ==> 指令修改語系,使用指令修改,系統會將每一個語系都加入local檔案中
 動態修改方式與RH系列相同 export LANG=en_US.UTF-8
相關資料:
http://jax-work-archive.blogspot.com/2010/06/ubuntu_29.html
此方式無效,重新啟動系統後,系統語系仍沒改變,只是增加系統語系支援


apache2 管理與路徑
設定檔路徑:/etc/apache2/apache2.conf
預設網頁路徑:/var/www
資料來源:http://tw.myblog.yahoo.com/56-david/article?mid=240&next=239&l=f&fid=24 感謝大大分享


php.ini 路徑
/etc/php[版號]/apache2/


關於 sudo 設定方式

1. 將使用者加入 sudo 群組
adduser towns sudo <== 將 towns 加入 sudo 群組
deluser towns sudo <== 將 towns 移出 sudo 群組

這個方式最不好的地方就是使用者 sudo 權限過大,最好的方式是用 2 的方法

2. 修改 /etc/sudoers
這個方式可以參考 Linux 隨手記2 中 sudo 資訊

參考資料:阿舍大的隨手記
http://www.arthurtoday.com/2015/01/how-to-add-a-user-as-sudoer-using-the-command-line-in-ubuntu.html  


apt 指令說明

apt purge [套件名稱] <== 移除套件及設定檔

vi /usr/share/doc/apache2/changelog.Debian.gz <== 直接看檔案 apache2 更新情形
apt changelog apache2-bin <== 透過指令查看 apache2 更新情形

apt install [套件名稱] <== 安裝指定套件
apt install [套件名稱]=[版號] <== 指定安裝套件版號安裝
apt search [套件名稱] <== 查詢可安裝的套件
apt list --installed <== 列出已安裝套件
apt remove [套件名稱] <== 移除套件
apt update <== 重建 apt database
apt-cache policy openssh-server <== 列出舊版的 openssh-server 套件

apt repository 路徑 /etc/apt/sources.list.d/
add-apt-repository ppa:webupd8team/java <== 加入 webupd8team-ubuntu-java-xenial.list
add-apt-repository ppa:ondrej/pkg-gearman <== 加入 ondrej-ubuntu-pkg-gearman-xenial.list
這個檔案中只有一段網址,這個與 yum 的 repos 類似

參考資料:
小雨大口述

Aaron Kili 大的文章 -- 15 條常用的 apt 指令
http://www.tecmint.com/apt-advanced-package-command-examples-in-ubuntu/

Ravi Saive 大的文章 -- 25 條實用的 apt 基本指令
http://www.tecmint.com/useful-basic-commands-of-apt-get-and-apt-cache-for-package-management/ 

每日頭條 -- 使用新的 apt 命令在 Ubuntu 16.04 LTS 下管理軟體包
https://kknews.cc/zh-tw/tech/zq88p.html

ubuntu 論壇 -- 如何更新apache
https://www.ubuntu-tw.org/modules/newbb/viewtopic.php?post_id=330740

ubunt問簽 -- 如何通過apt-get降級軟件包?
https://ubuntuqa.com/zh-tw/article/137.html


變更預設編輯器

在 Redhat 系列,預設使用 vim,不過 ubuntu 預設使用 nano,當在 ubuntu 中有兩個以上的編輯器,且在第一次使用如 crontab -e 開啟編輯器時,系統會詢問使者,要預設使用 vim 或 nano,記得選習慣的,如果選錯時,可以到使用者家目錄下編輯 .selected_editor 檔案,就可以變更預設編輯器了

參考資料:Tsung 大的 blog
https://blog.longwin.com.tw/2008/10/ubuntu-debian-modify-default-edit-2008/ 


停用帳號

usermod -L [帳號]

參考資料:小賴大的 blog
https://dotblogs.com.tw/newmonkey48/2013/02/06/90292 


加入指定群組(未補齊)

新加入帳號

已存在帳號
usermod -g [群組名] [帳號] <== 修改使用者主群組
usermod -a -G [群組名] [帳號] <== 將使用者加入指定群組

參考資料:老周大 blog
http://mingwang0824.pixnet.net/blog/post/27200755-%5Bsystem%5D%E5%A6%82%E4%BD%95%E5%9C%A8linux%E4%B8%AD%E6%8A%8A%E6%9F%90%E5%80%8Buser%E5%8A%A0%E5%85%A5%E7%BE%A4%E7%B5%84-howto%3A-li 


防火牆設定

apt install ufw <== 安裝防火牆
ufw enable <== 啟動防火牆
ufw disable <== 關閉防火牆
ufw status <== 檢查防火牆狀態
ufw allow ssh <== 開放 SSH 服務
ufw allow in 8080 <== 開放 8080 port 連入
ufw deny out 4662 <== 封鎖 4662 port 送出
ufw deny in 4662/udp <== 封鎖 UDP 使用 4662 port 連入
ufw status numbered <== 查詢防火牆規則編號
ufw delete [規則號碼] <== 刪除指定編號的規則
ufw default deny incoming <== 設定防火牆預設為連入全部拒絕
ufw allow to 192.168.1.100 port 22 from 192.168.10.0/24 <== 同意由192.168.10.0/24 網段使用 ssh 連入 192.168.1.100主機
ufw status verbose <== 列出防火牆詳細資料
註:可以看到預設值及每一條規則

註1:使用 systemctl status ufw 只會看到服務是否啟動,要看到防火牆是否有 enable 必需使用 ufw status,啟動必需使用 ufw enable
註2:預設為 allow all

參考資料:
Peter 大的 blog
https://www.peterdavehello.org/2016/01/ubuntu-based-gnulinux-firewall-ufw-essential-config/

阿舍大的 blog
http://www.arthurtoday.com/2013/12/ubuntu-ufw-add-firewall-rules.html  

ubuntu -- UFW wiki
https://help.ubuntu.com/community/UFW


服務管理

/etc/init.d/[服務名稱] start 
service [服務名稱] start

rc1.d、rc2.d、rc3.d、rc4.d、rc5.d、rc6.d

---------------------------------------------------------------------------------------------------------

service 指令

service --status-all <== 列出目前所有服務
[ + ]  acpid <== 已啟動 acpid
[ - ] acpid <== 已停止 acpid

service acpid status <== 列出 acpid 服務狀態

service 能使用的 option
{start|stop|restart|force-reload|status}

參考資料:

ubuntu 討論區
https://askubuntu.com/questions/57909/how-do-you-get-a-list-of-all-starting-services 

ubuntu 討論區 -- [+、-、?] 說明
https://askubuntu.com/questions/407075/how-to-read-service-status-all-results

---------------------------------------------------------------------------------------------------------

設定開機啟動、關閉該服務及移除在 init.d/ 的執行檔

update-rc.d acpid defaults <== 產生 acpid 連接於/etc/rc2-5.d/中,連結開頭為 S*(狀態 2-5 run-level 啟動)
update-rc.d acpid disable <== 修改 acpid 於/etc/rc2-5.d/中的連結開頭為 K*
update-rc.d acpid enable [2|3|4|5] <== 修改 acpid 於/etc/rc2-5.d/中的連結開頭為 S*
update-rc.d -f apparmor remove <== 移除 apparmor 於/etc/rc2-5.d/中的連結
註1:一般只會用到 defaults 及 disable 兩個參數
註2:可使用 sysv-rc-conf 查看開機啟動情形及直接設定是否開啟
註3:使用 sysv-rc-conf 必需安裝 sysv-rc-conf 套件
註4:ubuntu 16.04.5 LTS 版本中有不少的服務仍使用 server 指令管理,要確定該服務是否預設開機啟動,查看 /etc/rc2-5.d 中是否有捷徑,有就是在 2-5 模式下會自動啟動
註5:另一個輔助套件 upstart

參考資料:

man update-rc.d

ubuntu 討論區
https://askubuntu.com/questions/2263/chkconfig-alternative-for-ubuntu-server

頭城國小資訊組
http://blog.ilc.edu.tw/blog/blog/25793/post/87877/524466

補充說明:
有些 APP(如 Jira 7.9.1 版),安裝後,會因為沒有完整的寫開啟動流程,會造成無法透過 update-rc.d 這個指令來管理,所為的沒有完整是指在 /etc/init.d/的 script 少寫,以 Jira 7.9.1 來說,就少寫了 ### BEGIN INIT INFO and ### END INIT INFO 這一段說明,造成了 insserv warning script 'k01jira' missing lsb tags and overrides 及 另一個錯誤,這時就無法使用 update-rc.d 來管理

處理方式:在 /etc/init.d/jira 中加入以下 tags
### BEGIN INIT INFO
# Provides:             jira
# Required-Start:       $local_fs $remote_fs
# Required-Stop:        $local_fs $remote_fs
# X-Start-Before:
# X-Stop-After:
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Description:          Runs the jira services
# Short-Description:    Runs the jira services
### END INIT INFO
這樣就可以透過 update-rc.d 來管理 jira 是否開機啟動

參考資料:
StackEchange 討論 -- foibs 大的回應
https://raspberrypi.stackexchange.com/questions/13358/insserv-warning-script-mathkernel-missing-lsb-tags-and-overrides

---------------------------------------------------------------------------------------------------------

systemctl 指令

ubuntu 也有這個指令

systemctl stop apparmor <== 停止 apparmor

service 檔案存放路徑
/lib/systemd/system/

開機啟動檔存放路徑
/etc/systemd/system/multi-user.target.wants/

---------------------------------------------------------------------------------------------------------

systemd-sysv-install disable vsftpd


版本查看

cat /etc/issue 


DNS 套件

bind9、bind9-host、bind9utils

設定檔路徑
/etc/bind/named.conf


完整清除不需要的 kernel

boot 空間開太小,又常更新的最後結果,就是空間不足,這時如果要完全清除多餘的 kernel 就得使用下面這個指令了

apt purge linux-image-4.4.0-38-generic

註1:記得使用前先查看目前使用的 kernel 版本,再執行,不要刪到目前的版本
註2:系統會建議使用 apt autoremove 一次移除所有不需要的 kernel 及相關套件

參考資料:
https://ubuntuforums.org/showthread.php?t=2353529 


忘記 root 密碼處理

1. 在開機選單選第一項按 e
2. 到 linux......... ro 這一行末加入 quiet splash rw init=/bin/bash
3. 按 F10 進入開機流程
4. 出現 root@(none):/#
5. 將 root 的密碼欄位清空(編輯 /etc/shadow)
6. 離開此畫面 exit。這時系統會 halt(Kernel panic)
7. 強制關閉系統
8. 啟動系統後,root 就沒有密碼了
9. 使用 passwd 重設密碼

註:這個方式在 Linux base 系統上應該是通用的

參考資料:
jefflee168 大的文章
http://www.linuxdiyf.com/linux/21513.html

熊貓大文章
http://blog.topspeedsnail.com/archives/6042


ubuntu server 版預設是光溜溜的,連 OpenSSH 都沒裝,所以在安裝系統時,套件選擇有兩項一定要選

1. manual package selection ==> 必需安裝,否則無法手動更新

2. OpenSSH server ==> 必需安裝,否則無法遠連入 


新增帳號

1. adduser [帳號] <== 互動模式

2. useradd -m -s /bin/bash [帳號] <== 手動模式。-m 建立 家目錄、-s 指定使用的 shell

補充:如果使用了如編號式的帳號,會出現以下錯誤訊息,可以使用 --force-badname 忽略
Please enter a username matching the regular expression configured
via the NAME_REGEX[_SYSTEM] configuration variable.  Use the `--force-badname'
option to relax this check or reconfigure NAME_REGEX.


帳號、密碼原則(Ubuntu 16.04.2 LTS)
設定方式與 CentOS 7 相同,只差在設定檔不同

密碼複雜性設定 
1. 帳密安全性
安裝 libpam-pwquality 套件
apt-get install libpam-pwquality

設定 /etc/pam.d/common-password(長度7碼以上、同時含數字及字母)
password    requisite      pam_pwquality.so dcredit=-1 ucredit=0 ocredit=0 lcredit=-1 minlen=8 retry=3 maxrepeat=3

設定 /etc/login.defs(90天要更換一次、新密碼不能立即修改)
PASS_MAX_DAYS 90
PASS_MIN_DAYS 1
PASS_WARN_AGE 7
註:已建立帳號必需確認/etc/shadow 中第四、五、六欄位
:1:90:7:

設定 /etc/pam.d/common-password(不能與前四組相同)
password        [success=1 default=ignore]      pam_unix.so obscure use_authtok try_first_pass sha512 remember=2

設定/etc/pam.d/common-auth(重試密碼上限5次、失敗帳號鎖定30分鐘或由管理員啟用)
auth       requisite     pam_tally2.so deny=5 unlock_time=1800
補1:手動解鎖 pam_tally2 -r -u [帳號]
補2:查看帳號是否被鎖住可以看 /var/log/auth.log
pam_tally2(sshd:auth): user user1 (1001) tally 6, deny 5
Failed password for user1 from 10.113.119.54 port 61178 ssh2
補3:該行請放於所有設定的最頂端

設定 /etc/profile.d/autologout.sh(閒置15分鐘後登出)
TMOUT=900
readonly TMOUT
export TMOUT

第一次登入需改密碼
passwd -e [帳號] <== 利用帳號過期方式處理

參考資料:
傲笑紅塵路
http://www.lijyyh.com/2012/07/pam-managing-account-security-with-pam.html

ssorc
https://ssorc.tw/1216 

 國外大大
https://www.cyberciti.biz/faq/linux-unix-login-bash-shell-force-time-outs/

Mowd 大的 blog
https://blog.mowd.tw/p/3238

--------------------------------------------------------------------------------------------------------

如果不安裝 libpam-pwquality 可以使用舊版的 pam_cracklib 達到相同的效果

設定 /etc/pam.d/common-password(長度7碼以上、同時含數字及字母、帳密不能相同)
password    required      pam_cracklib.so dcredit=-1 ucredit=0 ocredit=0 lcredit=-1 minlen=8 retry=3 maxrepeat=3 reject_username

minlen = 密碼長度 + ucredit(大寫的 credit 值)+ lcredit(小寫的 credit 值)+ dcredit(數字的 credit 值) + ocredit(特殊符號(或其他)的 credit 值)

補充:so 檔存放位置 /lib/x86_64-linux-gnu/security/(ubuntu 20.04)


啟動 apache SSL

1. 安裝 apache2
apt install apache2

2. 啟用 SSL
a2enmod ssl

註:執行後,系統會查看相關模組是否正確

3. 重啟動 apache2

參考資料:割~LZ 大的文章
http://chyuan3c.pixnet.net/blog/post/167336994-%E5%95%9F%E7%94%A8ubuntu%E7%9A%84https 


關閉 AppArmor(Ubuntu 16.04.2 LTS)

這個有點像是 CentOS 中的 selinux 功能

1. 到 /boot/grub/grub.cfg 中到
menuentry 'Ubuntu' <== 第一個開機列表
linux /boot/vmlinuz-4.4.0-91-generic ........... apparmor=0 <== 這一行行尾加入 apparmor=0
2. 移除 apparmor 套件
apt remove apparmor

註1:towns 在修改 grub.cfg 這個檔案,是修改 /etc/default/grub,在GRUB_CMDLINE_LINUX="apparmor=0" 這一行加入 apparmor=0 這一段,而後重建 /boot/grub/grub.cfg 這個檔案
註2:是否要移除套件,towns 覺得是不用的
註3:重建 grub.cfg 檔
update-grub

參考資料:官方文件 -- AppArmor 說明
https://help.ubuntu.com/community/AppArmor 

指令說明

aa-exec
aa-remove-unknown
aa-status <== 查詢 AppArmor 狀態
aa-enabled
apparmor_status <== 查詢 AppArmor 狀態


tripwire 架設與安裝

參考資料:Justin Ellingwood大大的文章
https://www.digitalocean.com/community/tutorials/how-to-use-tripwire-to-detect-server-intrusions-on-an-ubuntu-vps 


啟用/停用 apache 的 modules

a2enmod [module]

a2dismod [module]

參考資料:Jered 大的文章
http://articles.slicehost.com/2010/3/26/enabling-and-using-apache-s-mod_status-on-ubuntu 

啟用/停用 apache 的 網站

a2dissite [site]
a2ensite [site]
註:[site]這個可以用 conf-available 中的檔名或前名

啟用/停用 apache 的 設定檔

a2disconf [configuration]
a2enconf [configuration]
註:[configuration]這個可以用 conf-available 中的檔名或前名


關閉 httponly 功能

因為他是個弱點,必需要關起來,有兩個地方需要關閉

1. PHP:在/etc/php/[版號]/apache/php.ini 中加入 session.cookie_httponly = true

2. 在/etc/apache2/conf-available/security.conf 中加入 Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure

3. 重啟 apache2

註:要關閉那一個 cookie 要由弱掃報告中查看,下面的範例是指 _crumb 這個 Cookie ,這是 apache 的,所以要關閉2
Vulnerability Detection Result:
The cookies:
Set-Cookie: _crumb=

參考資料:camel 大的 blog
https://blog.camel2243.com/2016/11/23/security-set-cookie-httponly-%EF%BC%8C%E9%81%BF%E5%85%8D-xss-%E6%94%BB%E6%93%8A%E6%99%82%E5%AD%98%E5%8F%96%E4%BD%A0%E7%9A%84-session-id  


在 Ubuntu 中要使用 mail 指令,需要安裝 bsd-mailx 套件


apt 與 dpkg 資料庫有同步的問題,當 towns 使用 apt remove <套件> 後,dpkg -L <套件>,還是能看到該套件的殘留檔,奇怪啦!CentOS 到沒這個問題


當安裝必需同時加入其他套件(如 postfix 等等…)系統會主動協助設計設定檔


ubuntu 不能在 /etc/crontab 中設定排程,不然會造成 cron.server 失效。這個與 CentOS 不同呢!不過,建議如果要這麼設定,就放到 /etc/cron.d/ 或使用 crontab -e 吧!

 


安裝 apache + php7 應含 libapache2-mod-php7.0 套件,這時 apache 才能正常使用 php7

參考資料:howtoforge
https://www.howtoforge.com/tutorial/install-apache-with-php-and-mysql-on-ubuntu-16-04-lamp/ 


apache 開啟核心紀錄

有時會因為系統問題或 DoS 造成 apache crash,這時就需要 Croedump,來協助找出問題

設定 /etc/apache2/apache2.conf 於最後一行加入
CoreDumpDirectory /tmp/apachecoredump
建立檔案路徑
mkdir -p /tmp/apachecoredump
修改ownner 為 www-data or httpd
chown -R [user]:[user] /tmp/apachecoredump
修改權限為 755
chmod 755 /tmp/apachecoredump
重新載入 Apache
systemctl reload apache2

參考資料:

herb 大口述

Jacob 大回應
https://serverfault.com/questions/470407/how-to-get-a-core-dump-from-apache-when-segfaulting 


關閉 ubuntu 自動更新

ubuntu disable auto update
/etc/apt/apt.conf.d/10periodic
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1"; <== 改為 0
APT::Periodic::AutocleanInterval "0";

參考資料:Brian 大口述 


Cron 設定應注意事項

如果設定於 /etc/cron.d/ 中必需要加上執行者,該檔案才會被執行,如果沒有寫,則會發生無執行的情形

10 13 * * * root /usr/sbin/ntpdate 192.168.56.101

參考資料:stackexchange 討論 - Stephen Harris 回應
https://unix.stackexchange.com/questions/296347/crontab-never-running-while-in-etc-cron-d


ubuntu 預設同步的 time server

ubuntu 16.04.4 版本在安裝後,自動會啟動對外校時服務 systemd-timesyncd.service,固定連接的 IP 有 91.189.89.199、91.189.94.4 等等,可以透過以下指令查看目前時間同步狀態

systemd-timesyncd.service
timedatectl status

參考資料:ubuntu 官方文件
https://help.ubuntu.com/lts/serverguide/NTP.html.en 


時區相關指令

timedatectl status <== 顯示目前系統時區狀態


boot 空間已滿造成 kerner 無法更新的處理方式

ubuntu 預設會自動更新 kernel,好處是安全性會一直更新,壞處是可能會自動發生問題,再者如果預設的 /boot 空間不足,也容易發生空間滿了而無法更新等問題,而且通當發生了空間已滿,就無法使用如 apt autoremove 或 apt purge 方式自動移除 kernel 檔案,這時可以手動移除相關檔案並強制更新

方式一:使用原有 boot 空間
1. 確認目前使用的 kernel 版本
uname -r
2. 將未使用的 kerner 版本移出(手動用 mv 移出)
3. 強制更新(如果沒有使用強制更新,系統會出現 kernel 異常而無法更新的錯誤)
apt update <== 先更新套件的 list
apt upgrade -f <== 強制更新套件
4. 重新啟動系統
5. 再次更新(如果有一段時間沒更新,更新後,boot 會再滿起來,有部分套件、kernel 都會無法更新)
重復以上步驟至所有套件更新完成

方式二:不使用原有 boot 空間
這個方式會比方式一簡單且安全
1. 將原有的 kernel 移到另一個目錄(建個 /boot2 目錄將原有的 /boot 中的檔案全部移過去)
2. 卸載 /boot,再將 /boot2 中的檔案移到 /boot 中(這個動作是將原掛載的 /boot 磁區移除,將 /boot 放到 / 中)
3. 修改 /etc/fstab,將檔案中掛載 /boot 的行 # 掉(這麼做,系統在開機時,會自動抓取 /之下的 /boot)
4. 更新 kernel。這時 boot 已經使用 / 的空間了,只要 / 空間充足,就不會再發生 boot 空間用滿的問題了
註:在第二次使用這個方式後,有發生了開機後仍抓取舊的 boot 磁區問題,這時後可以使用 grub-install /dev/sda 方式重新安裝 grub,就可以修正抓到舊磁區的問題了

資料來源:
Brain 大口述
James 大口述
阿舍大文章
https://www.arthurtoday.com/2013/05/ubuntu-remove-all-older-linux-kernels.html


設定 php 版本

在更新 PHP 版本後,通常會保留舊版用於程式測試,不過更新後系統的 link 會自動轉為最新版本的 PHP 連接,這時可以用以下方式處理

1. 手動修改 link
/etc/alternatives/

2. 使用指令修改 link
update-alternatives --set php /usr/bin/php[版本]
update-alternatives --set php-config /usr/bin/php-config[版本]
update-alternatives --set phpize /usr/bin/phpize[版本]

3. 直接使用 php[版號]

註1:第二點時要注意,可能不止一個指令要改,可以到 /etc/alternatives/ 中看有哪些 php 指令
註2:update-alternatives 指令
update-alternatives --help
update-alternatives --all

參考資料:
忽倫大的 blog
http://cometlc.pixnet.net/blog/post/5736658-downgrade-from-php7-to-php-5.6-on-ubuntu-16.04  


手動更新 kernel

在 apt upgrade 發生了無法更新 kernel 的問題,可以透過手動下載 kernel 放入後,下 update-grub,就會自動掃描在 /boot 中的 kernel 了 


apt VS apt-get

 

參考資料:系統極客
https://www.sysgeek.cn/apt-vs-apt-get


apt autoremove 注意事項

這個是個很方便的工具,協助管理者自動刪除不需要的套件,但也需注意,如需共存(如php 7.0、php 7.2),就要注意在移除時,是否同時移除了相關套件

 


rc.local 設定方式

CentoOS 7 與 Ubuntu 16.04 在這個地方是有差異的

1. 檔案位置
Ubuntu 16.04:/etc/rc.local
CentoOS 7:/etc/rc.d/rc.local

2. 啟用方式
rc-local.service 服務需啟動
rc.local 必需設為可執行

參考資料:
brian 大口述

StackExchage 討論串 -- Kevin Bowen 回應
https://askubuntu.com/questions/765120/after-upgrade-to-16-04-lts-rc-local-is-not-executing-a-command  


關於 upgrade 自動化佈署的問題

當在執行 apt upgrade 時,常常會出現一些詢問,如 install the package maintainer's version、keep the local version currently installed 等…,這些詢問如果沒有人為介入操作,在很多自動佈署時會卡住(如 ansible),這時需要使用 dpkg 參數來解決,如使用  Dpkg::Options::='--force-confold' 在更新時,會自動選指保留舊設定,這個是非常方便的功能

完整指令
apt-get update && DEBIAN_FRONTEND='noninteractive' apt-get -fy -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' upgrade
更新 apt 下載清單及需更新的下載內容 => 跳過互動式安裝流程 => 更新所有套件並修復損壞套件,回應皆答 y,dpkg 選項為比對設定檔後保留舊有設定檔

註1:這個指令下了後,可以完成所有的 kernel 更新,不過,有不少套件並沒有同時更新,這個是否表示使用了 "DEBIAN_FRONTEND='noninteractive'" 這一段環境變數設定後,會直接跳過會發生互動性更新的套件呢?
註2:如果去除了"DEBIAN_FRONTEND='noninteractive'",這一段,用 Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold',這兩個參數沒有生效,仍會跳出 跳過互動式安裝流程

註:使用 dpkg --force-help 可以看到更詳細的說明

指令修正
apt update && DEBIAN_FRONTEND='noninteractive' apt -o Dpkg::Options::='--force-confold' dist-upgrade -f -y
這一段主要是將 upgrade 改為 dist-upgrade

參考資料:
stackoverflow 討論-- Vladimí 大回應
https://stackoverflow.com/questions/24926985/force-no-prompt-in-apt-get-upgrade-or-apt-get-dist-upgrade

stackexchange 討論 -- lynxman 大回應
https://serverfault.com/questions/227190/how-do-i-ask-apt-get-to-skip-any-interactive-post-install-configuration-steps

man dpkg -- 詳細說明每個參數所代表的義意
--force-confold <== 保留舊版的設定資料

阿舍大 -- 移除舊 unbunt kernel
https://www.arthurtoday.com/2013/05/ubuntu-remove-all-older-linux-kernels.html

Debian管理者手冊
https://debian-handbook.info/browse/zh-TW/stable/sect.automatic-upgrades.html 


apache 指令

apachectl configtest <== 測試 config 檔是否設定正確 

參考資料:
stack exchange 討論串
https://serverfault.com/questions/232145/command-to-check-validity-of-apache-server-config-files


NFS Client 應安裝的套件

nfs-common


使用 Firefox 網頁出現 SSL_ERROR_RX_RECORD_TOO_LONG 錯誤

這個錯誤出現通常是 apache 針對指定網頁的設定檔中,沒有指定 SSL 資訊造成,將資料補進 <VirtualHost ></VirtualHost> 中,這個問題就解了 


修改主機名稱

hostnamectl set-hostname [hostname]

 


nginx 連接 80 port 出現錯誤

在設定完 nginx 後連接 http 出現 The plain HTTP request was sent to HTTPS port 這個錯誤

將設定檔中 ssl on; 設為 ssl off; 後重新啟動 nginx 就可以了

參考資料:
palmer_kai 大文章
https://blog.csdn.net/palmer_kai/article/details/89668053


ubuntu 19.10 網路設定

ubuntu 19.10 在網路設定上做了不少改變,沒有使用以前  interfaces 檔來設定,而是改為 netplan 進行管理,相關設定檔就寫在下面啦!

設定檔(預設):
/etc/netplan/50-cloud-init.yaml

設定完成後必需下指令,設定值才會生效
netplan apply

參考資料:
Francisco 大的文章
https://devtutorial.io/how-to-configure-network-static-ip-address-on-ubuntu-19-10.html 


sudo 管理

1. 寫入 /etc/group/sudo 群組
這個表示完全開放,但無法設定參數
2. 寫入 /etc/sudoers
這裡可以設定比較細緻
註:1優先,讀到就不讀2

免密碼設定

vi /etc/sudoers
towns ALL=(ALL) NOPASSWD: ALL


ubuntu 很多的指令很喜歡去抓 hostname 如 sudo ,如果沒有,將目前的 hostname 寫到 /etc/hosts/ 做對應,sudo su - 就會等很久

 


ubuntu 預設服務

在系統中,有很多預設幫我們裝好的服務,有時會造成困擾呢!不過將來的發展看來都會走像這個模式,CentOS 也有

16 版預設開啟
timesyncd.service

18 以上版本預設開啟
timesyncd.service
resolved.service

詳細資料可以使用
systemctl list-unit-files |grep systemd


ESM (Extended Security Maintenance) 超過五年後的延長維護

16.04 超過五年,安全性更新就要收費提供了

參考資料
Gea-Suan 大文章
https://blog.gslin.org/archives/2020/11/12/9800/ubuntu-16-04-xenial-%E7%9A%84-esm-%E6%BA%96%E5%82%99%E4%B8%AD/

官方說明
https://ubuntu.com/blog/ubuntu-16-04-lts-esm-migration-path

留言

這個網誌中的熱門文章

zimbra 安裝、管理、設定

Fortigate 100D -- 管理、設定

IT 隨手記6