說明:該筆記爲本人在CentOS發行版的學習過程中記錄一些知識點和操作經驗使用,不保證適用於其他linux發行版,以下所有的操作記錄和知識點均來源於網絡和個人的經驗積累,與大家共享。
【shell命令運行符號‘&’ ‘;’ ‘&&’的區別】
[root@localhost ~]# command1&command2&command3
#三個命令同時執行
[root@localhost ~]# command1;command2;command3
#不管前面命令執行成功沒有,後面的命令繼續執行
[root@localhost ~]# command1&&command2&&command3
#只有前面命令執行成功,後面命令才繼續執行
【記錄ssh日誌】
[root@localhost ~]# vim /etc/ssh/sshd_config
#修改LogLevel選項值爲INFO
LogLevel INFO
【ssh禁用空密碼】
[root@localhost ~]# vim /etc/ssh/sshd_config
#修改PermitEmptyPasswords選項值爲no
PermitEmptyPasswords no
【修改登錄banner】
改變登錄banner可以隱藏操作系統類型和版本號和其它系統信息,這些信息可以會對攻擊者有用。
[root@localhost ~]# true > /etc/motd
[root@localhost ~]# echo "Authorized uses only. All activity may be monitored and reported." >>/etc/motd
[root@localhost ~]# chown root:root /etc/motd
[root@localhost ~]# chmod 644 /etc/motd
[root@localhost ~]# true > /etc/issue
[root@localhost ~]# echo "Authorized uses only. All activity may be monitored and reported." >> /etc/issue
[root@localhost ~]# true > /etc/issue.net
[root@localhost ~]# echo "Authorized uses only. All activity may be monitored and reported." >> /etc/issue.net
【設置Bash保留歷史命令的條數】
[root@localhost ~]# vim /etc/profile
#只保留最新執行的5條命令
HISTSIZE=5
【設置ssh自動註銷時間】
[root@localhost ~]# vim /etc/profile
#600秒無操作自動退出
TMOUT=600
[root@localhost ~]# vim /etc/ssh/sshd_config
#300秒ssh無操作自動退出
ClientAliveInterval 300
ClientAliveCountMax 0
【限制能夠su到root的用戶】
[root@localhost ~]# vim /etc/pam.d/su
#在其中添加以下內容
auth required pam_wheel.so use_uid
#隨後執行以下命令:
[root@localhost ~]# usermod -G10 sam #將sam用戶添加到wheel組
【配置syn-send檢查】
當客戶端發出的syn包帶有時間戳的情況下,經過NAT轉換後,如果使用的端口被之前使用過,而且時間戳大於本次syn包中的時間戳。系統將會直接丟棄。造成本次鏈接無法正常完成TCP/IP的3次握手。
net.ipv4.tcp_timestamps這個參數默認是開啓的,它會複用鏈接,並去檢查這個IP包裏面的時間是不是比當前的時間大,如果大,那麼就丟棄該包(見rfc1323,TCP相關的,網上查到的),從而造成SYN-SENT發送後,沒有迴應。
解決方法如下:
[root@localhost ~]# vim /etc/sysctl.conf
# 修改/etc/sysctl.conf文件,在最後增加如下內容
# Add by sam
# Controls the timestamps check in syn-send
# 0 --> do not check
# 1 --> check
net.ipv4.tcp_timestamps = 0
[root@localhost ~]# sysctl -p
#設置完成後,執行sysctl -p,重載sysctl規則
#隨後執行sysctl -a |grep timestamps,查看生效情況
[root@localhost ~]# sysctl -a |grep timestamp
net.ipv4.tcp_timestamps = 0
【遷移linux服務器用戶名密碼和家目錄】
將原系統中的/etc/passwd , /etc/group , /etc/shadow備份出來,在新系統中將上述3個文件替換此處的同名文件
將原系統中的/home目錄壓縮備份,在新系統中替換/home/下的所有內容
【修改環境變量在命令行顯示指定名稱】
[root@localhost ~]# vim /etc/profile
PS1="[\u@Sam_Linux_CentOS6.5 \\W]# "
顯示效果:
[sam@Sam_Linux_CentOS6.5~]#
[root@Sam_Linux_CentOS6.5~]#
【允許監聽IPv6端口】
[root@localhost ~]# vim /etc/modprobe.conf
alias net-pf-10 off (off修改爲on)
alias ipv6 off (off修改爲on)
options ipv6 disable=1 (1修改爲0)
#修改後效果如下
alias net-pf-10 on
alias ipv6 on
options ipv6 disable=0
【配置hitstory加上時間戳和用戶名】
[root@localhost ~]# vim /etc/profile
export HISTTIMEFORMAT = "%F %T `whoami`"
【新建用戶並修改密碼】
[root@localhost ~]# useradd [用戶名]
[root@localhost ~]# echo "[密碼]" | passwd --stdin [用戶名]
【查看某個命令屬於哪個包】
[root@localhost ~]# yum provides semanager
【修改目錄和文件的上下文屬性】
[root@localhost ~]# chcon -R -t samba_share_t /smb1
# 給/smb1目錄增加samba_share_t的上下文屬性
# 但是容易被重置刪除屬性,一般情況下不建議使用此方法。
【修改shell腳本從doc屬性修改爲unix屬性】
vim打開一個shell腳本
:set ff
可看到dos或unix的字樣,如果的確是dos格式的
那麼用 :set ff=unix
把它強制爲unix格式的
然後存盤退出後就可運行。
【查看進程優先級】
[root@localhost ~]# ps -e -o class,rtprio,pri,nice,cmd
class:調度類別
rtprio:實時優先級
pri:靜態優先級
nice:手動調整靜態優先級
nice和pri的對應關係,一一對應 [-20,19] <-> [100,139]
cmd中加了中括號的,屬於內核線程
【手動調整進程優先級】
[root@localhost ~]# nice N COMMAND #以優先級N運行
[root@localhost ~]# renice -N #PID #對於已經運行的進程,需要用renice,指定pid
[root@localhost ~]# chrt N COMMAND #以優先級N運行
[root@localhost ~]# chrt -r -p N #PID #調整RR類別的實時優先級,以優先級N運行
[root@localhost ~]# chrt -f -p N #PID #調整FIFO類別的實時優先級,以優先級N運行
【綁定進程至某CPU上】
使用mask的方式綁定
0x0000 0001(16進制) —— 0000 0001(2進制) —— CPU0
0x0000 0002(16進制) —— 0000 0010(2進制) —— CPU1
0x0000 0003(16進制) —— 0000 0011(2進制) —— CPU0和CPU1
使用方法:
[root@localhost ~]# taskset -p #MASK #PID
[root@localhost ~]# taskset -p 0x00000004 31987 #將31987號進程綁定在CPU2上
[root@localhost ~]# taskset -p -c 0-2,7 31987 ##將31987號進程綁定在CPU0, CPU1, CPU2, CPU7上
或者使用numa也可以綁定
【查看進程的系統調用】
[root@localhost ~]# strace -o /tmp/strace.out -p #PID
#查看已啓動進程的系統調用,不加-o 也行,-o是輸出成文件供後續分析使用
[root@localhost ~]# strace -c -p #PID
[root@localhost ~]# strace -c #COMMAND
#追蹤總體結果,形成統計信息
[root@localhost ~]# strace #COMMAND
#查看命令的系統調用
【對文件系統進行壓力測試】
dd, iozone, io-stress, fio(專業工具,較難)
【查看配置文件,不顯示註釋和空行】
[root@localhost ~]# more xxx |grep -v ^$|grep -v ^#
【各種監控系統狀態的命令】
sar, dstat, vmstat, mpstat, iostat, top, free, iotop, uptime, cat /proc/meminfo, ss, netstat, lsof, perf, strace
【生成自簽名的CA證書,可用於SSL劫持】
[root@localhost ~]# (umask 077; openssl genrsa -out private/cakey-2.key 2048)
[root@localhost ~]# openssl req -new -x509 -key private/cakey-2.key -out cacert-2.crt -days 3650
[root@localhost ~]# cat private/cakey-2.key cacert-2.crt > ca-2.pem
[root@localhost ~]# openssl pkcs12 -export -out ca-2.pfx -inkey /etc/pki/CA/private/cakey-2.key -in /etc/pki/CA/cacert-2.crt
Enter Export Password:
Verifying - Enter Export Password:
其中cacert-2.crt可以用於導入PC
ca-2.pem和ca-2.pfx可以用於導入服務器進行ssl劫持
#打印出證書的內容:
[root@localhost ~]# openssl x509 -in cert.pem -noout -text
#打印出證書的系列號
[root@localhost ~]# openssl x509 -in cert.pem -noout -serial
#打印出證書的擁有者名字
[root@localhost ~]# openssl x509 -in cert.pem -noout -subject
#以RFC2253規定的格式打印出證書的擁有者名字
[root@localhost ~]# openssl x509 -in cert.pem -noout -subject -nameopt RFC2253
#在支持UTF8的終端一行過打印出證書的擁有者名字
[root@localhost ~]# openssl x509 -in cert.pem -noout -subject -nameopt oneline -nameopt -escmsb
#打印出證書的MD5特徵參數
[root@localhost ~]# openssl x509 -in cert.pem -noout -fingerprint
#打印出證書的SHA特徵參數
[root@localhost ~]# openssl x509 -sha1 -in cert.pem -noout -fingerprint
#把PEM格式的證書轉化成DER格式
[root@localhost ~]# openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER
#把一個證書轉化成CSR
[root@localhost ~]# openssl x509 -x509toreq -in cert.pem -out req.pem -signkey key.pem
【linux查看物理CPU數量,邏輯CPU數量,每個CPU的核心數】
#查看物理CPU的個數
[root@localhost ~]# cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l
#查看邏輯CPU的個數
[root@localhost ~]# cat /proc/cpuinfo |grep "processor"|wc -l
#查看CPU是幾核
[root@localhost ~]# cat /proc/cpuinfo |grep "cores"|uniq
【修改hostname】
CentOS6.5及以下版本
第1步:修改network文件,修改HOSTNAME字段
[root@localhost ~]# vim /etc/sysconfig/network
#修改前
HOSTNAME=localhost.localdomail
#修改後
HOSTNAME=admin.example.local
第2步:修改hosts文件,在127.0.0.1和::1對應的域名處加上剛剛修改後的hostname
[root@localhost ~]# vim /etc/hosts
#修改前
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
#修改後
127.0.0.1 admin admin.example.local localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 admin admin.example.local localhost localhost.localdomain localhost6 localhost6.localdomain6
第3步:手動重啓服務器或使用hostname命令修改當前主機名,如果條件允許儘量手動重啓服務器
[root@localhost ~]# hostname admin.example.local