內容選單標籤

2017年4月28日 星期五

ch15 Apache

Linux的安全防護機制

1.防火牆 FirewallD (外部)
# systemctl stop firewalld.service
# systemctl disable firewalld.service

# firewall-cmd --permanent --add-service=http
success
# firewall-cmd --reload
success



2.增強安全機制 SELinux Security Enhanced Linux (內部)
# vi /etc/sysconfig/selinux
#SELINUX=enforcing
SELINUX=disable                                //關閉SELinux,存檔後重新開機設定值才生效
...

# sestatus
SELinux status:                 enabled
...




-----------------------------------------------------安裝
# yum install -y httpd httpd-tools
# rpm -qa | grep httpd
httpd-tools-2.4.6-45.el7.centos.4.x86_64
httpd-2.4.6-45.el7.centos.4.x86_64
# systemctl start httpd
# systemctl enable httpd
# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since 五 2017-04-28 13:55:50 CST; 1min 24s ago


--------------------------------------------虛擬目錄
# mkdir /home/test
# vi /home/test/index.html
this is visual DIR
...

# vi /etc/httpd/conf/httpd.conf
...
Alias /test "/home/test"
<Directory "/home/test">
    Require all granted
</Directory>

# systemctl restart httpd


# chcon -R -t httpd_sys_content_t /home/test
# ls -Z /home/test
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html

# sestatus
SELinux status:                 enabled
...




2017年4月25日 星期二

ch14 系統服務與排程



服務 service 是背景執行的程式,通常會占用一個埠號,等待外部連線要求。Linux的服務通稱為Daemon,所以其服務名稱通常以d 結尾,如:httpd。
Linux 以新一代系統服務管理 systemd 取代 init。
常見系統管理使用的服務:
atd.service                           //一次性的工作排程服務
crond.service                      //週期性的工作排程服務
NetworkManager.service   //動態網路連線設定管理
network.target                    //固定式網路管理服務
sysinit.target                      //系統啟動
quotacheck.service            //磁碟配額檢查服務
syslog.service                    //系統日誌管理服務
sendmail.service               //電子郵件伺服器服務
smartd.service                  //磁碟健康狀態回報服務
sshd.service                      //加密遠端登入服務
httpd.service                     //網頁伺服器服務
cups.socket                      //列印伺服器服務

服務分為:
.service
在背景持續執行並等待的服務,能快速提供服務,但較耗費系統資源。適合快速且連線數龐大的服務,如:httpd.service

.socket
通訊埠有客戶端連線時才啟動的服務,速度相對較慢,但不耗費系統資源。適合不須快速且連線數較少的服務,如:cups.socket


# ls /usr/lib/systemd/          //此目錄放置的是systemd執行檔
catalog                systemd-coredump           systemd-shutdown
ntp-units.d            systemd-cryptsetup         systemd-shutdownd
...


//此目錄放置的是系統重要的Unit服務與Target設定檔及與系統啟動相關的服務
# ls /usr/lib/systemd/system    
arp-ethers.service                      remote-fs-pre.target
auditd.service                          remote-fs.target
...

systemctl   [選項]   命令   服務對象名稱 

常用命令:
start                        啟動服務
stop                        停止服務
restart                     重啟服務
enable                     開機啟動
disable                    開機不啟動
status                      服務目前狀態



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

Linux 系統服務類型:
1. Standalone獨立服務
無論有無客戶要求,常駐系統背景,占用一定程度的系統資源,目的是為了在最短時間提       供客戶要求。如:httpd、sendmail、named...  

2. xinetd總管服務
有些服務不是常有客戶要求,就可以將這些服務註冊在一個總管型的服務xinetd。只要該服   務的port有客戶提出要求,xinetd這個常駐服務在負責將該服務啟動,當客戶要求處理完畢,再將該服務從系統中移除,以保系統資源的最佳狀況。如:telnet、tak...
CentOS預設已不安裝 xinetd套件。




-------------------------------------------------------
系統排程
CentOS安裝完成後,開機會自動啟動 crond 服務,crond負責每分鐘讀取排程設定檔:
/etc/crontab

# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |    .------------- hour (0 - 23)
# |    |   .---------- day of month (1 - 31)
# |    |   |   .------- month (1 - 12) OR jan,feb,mar,apr ...
# |    |   |   |   .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |    |   |   |   |
# *  *  *  *  * user-name  command to be executed







2017年4月19日 星期三

Excel vba



20101版本啟用vba
檔案-->選項-->自訂功能區-->V開發人員







Private Sub ComboBox2_Change()

If (ComboBox2.Value = "新案" Or ComboBox2.Value = "檢卷") Then TextBox4.Text = "事務官" Else TextBox4.Text = "書記官"
If ComboBox2.Value = "新案" Then TextBox6.Text = TextBox3.Text Else TextBox6.Text = ""

End Sub

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

Private Sub CommandButton1_Click()

Range("B1").Select
Selection.End(xlDown).Select

If (TextBox6.Text) <> "" Then Sheets("案號管理").Range("A" & ActiveCell.Row + 1).Value = TextBox6.Value

Sheets("案號管理").Range("B" & ActiveCell.Row + 1).Value = TextBox1.Value
Sheets("案號管理").Range("C" & ActiveCell.Row + 1).Value = ComboBox1.Value
Sheets("案號管理").Range("D" & ActiveCell.Row + 1).Value = TextBox2.Value
Sheets("案號管理").Range("E" & ActiveCell.Row + 1).Value = ComboBox2.Value
Sheets("案號管理").Range("F" & ActiveCell.Row + 1).Value = TextBox3.Value

Sheets("案號管理").Range("G" & ActiveCell.Row + 1).Value = TextBox4.Value

Sheets("案號管理").Range("H" & ActiveCell.Row + 1).Value = TextBox5.Value


Selection.End(xlDown).Select

CommandButton1.Enabled = False
CommandButton2.Enabled = False

End Sub


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

Private Sub CommandButton2_Click()
       ActiveCell.Offset(0, 3).Value = ComboBox2.Value
       ActiveCell.Offset(0, 4).Value = TextBox3.Value
       ActiveCell.Offset(0, 5).Value = TextBox4.Value
       ActiveCell.Offset(0, 6).Value = TextBox5.Value
       ActiveCell.Offset(0, -1).Value = TextBox6.Value
       CommandButton1.Enabled = False
       CommandButton2.Enabled = False

End Sub


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

Private Sub CommandButton3_Click()

ComboBox1.Value = ""
TextBox2.Value = ""
ComboBox2.Value = ""
TextBox3.Value = ""
TextBox4.Value = ""
TextBox5.Value = ""
TextBox6.Value = ""

TextBox1.SetFocus

End Sub

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




Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Range("B2").Select
Dim i As Integer
i = 0

Do While Not (ActiveCell.Offset(i, 0).Value = "")
   
    If (ActiveCell.Offset(i, 0).Value = Val(TextBox1.Value) And ActiveCell.Offset(i, 1).Value = ComboBox1.Value And ActiveCell.Offset(i, 2).Value = Val(TextBox2.Value)) Then
     
       ComboBox2.Value = ActiveCell.Offset(i, 3).Value
       TextBox3.Value = ActiveCell.Offset(i, 4).Value
       TextBox4.Value = ActiveCell.Offset(i, 5).Value
       TextBox5.Value = ActiveCell.Offset(i, 6).Value
       TextBox6.Value = ActiveCell.Offset(i, -1).Value
     
       CommandButton1.Enabled = False
       CommandButton2.Enabled = True
     
       ActiveCell.Offset(i, 0).Select
     

        Exit Do
    Else
        i = i + 1
    End If
   
    CommandButton1.Enabled = True
    CommandButton2.Enabled = False

Loop
End Sub




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


Private Sub TextBox3_Change()

If ComboBox2.Value = "新案" Then TextBox6.Text = TextBox3.Text Else TextBox6.Text = ""

End Sub



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



Private Sub UserForm_Activate()
TextBox1.Text = Year(Date) - 1911
CommandButton1.Enabled = False
CommandButton2.Enabled = False

Dim i As Integer
i = 1
Do While Not (Sheets("dataSource").Range("A" & i) = "")
     ComboBox1.AddItem (Sheets("dataSource").Range("A" & i))
    i = i + 1
Loop


Dim j As Integer
j = 1
Do While Not (Sheets("dataSource").Range("C" & j) = "")
     ComboBox2.AddItem (Sheets("dataSource").Range("C" & j))
    j = j + 1
Loop

End Sub


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

2017年4月18日 星期二

ch13 網路指令與管理



CentOS兩種網路設定模式:
1. NetworkManager 適用動態網路設定
    如使用筆記型電腦上網方式因位置而不同,NetworkManager工具提供各類場合變換連線設       定功能。CentOS7預設啟動NetworkManager服務,可用systemctl指令將其換為network服務。


# systemctl disable NetworkManager.service      //開機不啟用

# systemctl stop NetworkManager.service          //停止服務

# chkconfig network on                                       // 開機啟用network

# systemctl start network.service                         // 啟動network

# systemctl status network                                   //確認network服務執行中
● network.service - LSB: Bring up/down networking
   Loaded: loaded (/etc/rc.d/init.d/network)
   Active: active (exited) since 二 2017-04-18 14:15:41 CST; 11min ago
...


2. network 適用固定位址的主機
Linuxn伺服器主機大都以network服務管理網卡,此服務位在 /etc/init.d/network,他是執行腳本,可啟動或停止系統網路設備。而network服務會讀取系統網路組態目錄下的設定檔

# cat /etc/sysconfig/network-scripts/ifcfg-eno16777736
TYPE="Ethernet"
BOOTPROTO="none"                                          //自動取得IP則為dhcp,固定IP則是static或none
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"                                                   //是否支援ipv6
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
NAME="eno16777736"
UUID="0f512752-90bd-45ed-892c-3f478f19f84d"
DEVICE="eno16777736"                                                 //設備名稱
ONBOOT="yes"                                                               //開機是否啟動此網路卡
IPADDR="163.16.63.191"
PREFIX="24"
GATEWAY="163.16.63.254"
DNS1="163.16.1.23"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_PRIVACY="no"





-------------------------------------------ifconfig命令設定網路卡
# ifconfig eno16777736
...
inet 163.16.63.191                   //IP 位址
ether 00:0c:29:c1:31:fa           //MAC位址
RX packets 308907  bytes      //已接收封包數
TX packets 8504  bytes           //已傳送封包數
...collisions 0                           //封包碰撞累計次數


# ifconfig eno16777736 up          //啟動網路卡
# ifconfig eno16777736 down     //停止網路卡
# ifconfig eno16777736 192.168.2.30 netmask 255.255.255.0        //設定網卡IP與netmask

--------------------------------------------------ip工具
ip 命令所做的設定結果不會存至系統組態檔中,所以重開後會回復原系統儲存的組態,若要實際修改系統的網路設定,可使用setup工具或修改系統網路設定檔。

# ip address show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    ...
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    ...
//UP設備已啟動   LOOPBACK是迴路設備   BROADCAST廣播設備
  MULTICAST可同時將封包傳送到其它系統網路


# ip -s link show eno16777736      // -s 設備統計資料   link 省略IP位址相關資訊
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:0c:29:c1:31:fa brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    1132284    13471    0       817     0       0
    TX: bytes  packets  errors  dropped carrier collsns
    19107      122      0       0       0       0

//RX 接收 TX傳送 統計資料   
  bytes 接收或傳送位元組總數 
  packets 接收或傳送封包總數
  errors 接收或傳送錯誤總數
  dropped 因缺乏資源而被放棄的封包總數
  carrier 接收者溢位導致放棄封包的總數
  mcast 已接收多重廣播封包總數
  overrun 因失去載波,導致連結媒體失敗的總次數
  collsns 碰撞事件總次數
       
# ip address add 10.0.0.2/24 brd + dev eth0      //指派10.0.0.2位址給eth0設備                                                                                                                //brd +選項會依網路遮罩,自動設定廣播位址
# ip address show dev eno16777736
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:c1:31:fa brd ff:ff:ff:ff:ff:ff
    inet 163.16.63.191/24 brd 163.16.63.255 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet 10.0.0.2/24 brd 10.0.0.255 scope global eno16777736
...

# ip address del 10.0.0.2/24 dev eno16777736      //移除設備IP位址

# ip link set eno16777736 up      //啟用網路設備   down 停用




----------------------------------
網路測試工具

# ping 168.95.1.1 -c 5      //-c 數字   只送出一定次數的ICMP封包
PING 168.95.1.1 (168.95.1.1) 56(84) bytes of data.
64 bytes from 168.95.1.1: icmp_seq=1 ttl=247 time=3.41 ms
...


# traceroute 168.95.1.1      //了解伺服器目的主機之間,經過所有節點的連線狀態
traceroute to 168.95.1.1 (168.95.1.1), 30 hops max, 60 byte packets
 1  163.16.63.254 (163.16.63.254)  0.352 ms  0.430 ms  0.376 ms
 2  10.163.17.125 (10.163.17.125)  1.519 ms  1.479 ms  1.404 ms
...


# netstat                           //主機上所有網路連接資訊
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0     52 163.16.63.191:ssh       163.16.63.190:59969     ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  5      [ ]         DGRAM                    8962     /run/systemd/journal/socket
unix  10     [ ]         DGRAM                    8964     /dev/log
...

//-n 不使用名稱改用埠號顯示 
   -t  只列出TCP協定封包的連線資訊
   -u 只列出UDP協定封包的連線資訊
   -l  只列出正在傾聽的連線資訊
   -p  列出連線是由哪個行程處理的








2017年4月16日 星期日

Ch11 常用工具指令


//目錄空間使用量
# du /var

# du -sh /var      //-s 顯示目錄總用量,不顯示子目錄,-h 以磁碟單位顯示,MB、GB
100M    /var


# df
檔案系統                 1K-區段           已用       可用           已用%   掛載點
/dev/mapper/centos-root 18307072  944900   17362172    6%           /
devtmpfs                         923900      0             923900        0%           /dev
....


# df -h
檔案系統                          容量     已用      可用    已用%   掛載點
/dev/mapper/centos-root   18G      923M     17G     6%          /
devtmpfs                           903M    0            903M   0%         /dev



# wc anaconda-ks.cfg              //統計檔案行數、字數、大小 byte
  39   96 1035 anaconda-ks.cfg



# echo "ABCDEFG" | tr ABC xyx      //取代
xyxDEFG

# echo "ABCDEFG" | tr -d 'AB'         //-d 刪除
CDEFG



# ping 168.95.1.1      //送出ICMP通訊協定的ECHO_REQUEST封包至特定主機
PING 168.95.1.1 (168.95.1.1) 56(84) bytes of data.
64 bytes from 168.95.1.1: icmp_seq=1 ttl=247 time=2.69 ms
...


# yum install traceroute
# traceroute 168.95.1.1      //列出ICMP封包從本機到目的主機,經過的路由器IP


# yum install net-tools      // ifconfig、netstat


# yum install bind-utils     //nslookup、dig
# nslookup 168.95.1.1

# dig 168.95.1.1


# hostname
F303.centos

# cat /etc/hostname
F303.centos






2017年4月13日 星期四

ch9 系統管理工具

FirewallD

//FirewallD動態設定防火牆,不須重啟即可套用,亦提供多個zone供選擇設定,對於經常更換使用地點的筆記型電腦更加方便。
zone可針對主機位於什麼環境而建立防火牆的處理原則。

# firewall-cmd --state   //目前是否執行中

running

# firewall-cmd --get-active-zone   //列出目前已設定的 zone
public zone
  interfaces: eno16777736

# firewall-cmd --zone=public --list-all   //列出zone的某一個網路介面,詳細設定
public (default, active)
  interfaces: eno16777736
  sources:
  services: dhcpv6-client ssh                   //允許的服務、埠號
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

# firewall-cmd --get-zones                                                     //列出所有可選擇的zone,分別代表
block dmz drop external home internal public trusted work //不同地點的防火牆設定原則。

public:公開的場所,不信任網域內所有連線,只有被允許的連線才能進入,一般只要設定這裡就可以了
external:公開的場所,應用在IP是NAT的網路
dmz:(DemilitarizedZone)非軍事區,允許對外連線,內部網路只有允許的才可以連線進來
work:公司、工作的環境,只有被允許的連線才能進入
home:家庭環境,只有被允許的連線才能進入
internal:內部網路,應用在NAT設定時的對內網路,只有被允許的連線才能進入
trusted:接受所有的連線
drop:任何進入incoming的封包全部丟棄,只有往外outgoing的連線是允許的
block:任何進入的封包全部拒絕,並以icmp回覆對方,只有往外的連線是允許的

# firewall-cmd --permanent --zone=home --change-interface=eno1677736   //--permanent所作變更
success                                                                       //寫入設定檔,否則重啟FirewallD後即無效。


# firewall-cmd --reload
success

# firewall-cmd --get-active-zone
home
  interfaces: eno1677736
public
  interfaces: eno16777736

----------------------------------------service and port
//service在FirewallD中代表一個或多個port所組成的一個服務名稱
# firewall-cmd --get-services   //列出所有可使用的service
RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imaps ipp ipp-client ipsec iscsi-target kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind rsyncd samba samba-client smtp ssh telnet tftp tftp-client transmission-client vdsm vnc-server wbem-https


# ls /usr/lib/firewalld/services   //這些service定義檔所在目錄
amanda-client.xml        iscsi-target.xml  pop3s.xml  dns.xml ....


# cat /usr/lib/firewalld/services/dns.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>DNS</short>
  <description>The Domain Name System (DNS) is used to provide and request host and domain names. Enable this option, if you plan to provide a domain name service (e.g. with bind).</description>
  <port protocol="tcp" port="53"/>                      //dns service包含2個協定或port
  <port protocol="udp" port="53"/>
</service>


# firewall-cmd --zone=public --add-service=dns   //加入service
success


# firewall-cmd --zone=public --add-port=9958/tcp   //加入port
success


[root@F303 ~]# firewall-cmd --zone=public --list-all
public (default, active)
  interfaces: eno16777736
  sources:
  services: dhcpv6-client dns ssh
  ports: 9958/tcp
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:



---------------------------------壓縮檔案-備份

# ls
anaconda-ks.cfg  testfile
# gzip testfile      //壓縮
# ls
anaconda-ks.cfg  testfile.gz      //原檔會被壓縮檔取代

# gunzip testfile.gz      //解壓縮

# ls
anaconda-ks.cfg  testfile


# ls
anaconda-ks.cfg  f1  f2  f3
# tar -czvf f.tar.gz f*      //c:產生包裹檔  z:壓縮功能zip v:觀看指令進度 f:指定目的檔名
f1
f2
f3
# ls
anaconda-ks.cfg  f1  f2  f3  f.tar.gz

# tar -xzvf f.tar.gz      //x:解開包裹檔



---------------------------------設定系統時間

Linux時間分為
1.硬體時間:CMOS負責
2.系統時間:作業系統負責。開機時,系統時間讀取硬體時間後,便由作業系統管理。


# yum install ntp
# ntpdate watch.stdtime.gov.tw      //連接至NTP伺服器校時
14 Apr 10:57:54 ntpdate[18262]: no server suitable for synchronization found
# hwclock -w      //系統時間寫入硬體時間
# hwclock -r      
西元2017年04月14日 (週五) 11時00分53秒  -0.401824 秒



---------------------------------系統排程工作

Linux預設會啟動crond服務,持續檢視系統的排程工作與時間。

# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |    .------------- hour (0 - 23)
# |    |   .---------- day of month (1 - 31)
# |    |   |   .------- month (1 - 12) OR jan,feb,mar,apr ...
# |    |   |   |   .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |    |   |   |   |
# *  *  *  *  * user-name  command to be executed
 29  9 15 8  *      //8月15日早上9點29分
  0 17 10 *  *      //每月10日下午5時
  0   4   * *  6      //每周六早上4時