內容選單標籤

2017年7月25日 星期二

Centos7 get SElinux to allow Apache and Samba on the same folder



-------------------------------先安裝httpd
# yum -y install httpd
# rpm -qa | grep httpd
httpd-2.4.6-45.el7.centos.4.x86_64
httpd-tools-2.4.6-45.el7.centos.4.x86_64


# systemctl start httpd.service
# systemctl enable httpd.service

# systemctl status httpd

# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --reload
# firewall-cmd --list-all

http://163.16.63.191/




-------------------------------虛擬目錄

# adduser kkweb01
# passwd kkweb01           //123456

# ls -l /home

drwx------. 2 kkweb01 kkweb01 62  7月 26 11:16 kkweb01

# chmod 755 /home/kkweb01
# ls -l /home
drwxr-xr-x. 2 kkweb01 kkweb01 80  7月 26 11:23 kkweb01


# vi /home/kkweb01/index.html

This is Visual Dir...


# vi /etc/httpd/conf/httpd.conf
...
Alias /web01 "/home/kkweb01"


<Directory "/home/kkweb01">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted

</Directory>


# systemctl restart httpd



# ls -dZ /home/kkweb01
drwxr-xr-x. kkweb01 kkweb01 unconfined_u:object_r:user_home_dir_t:s0 /home/kkweb01


# chcon -R -t public_content_rw_t /home/kkweb01


# ls -dZ /home/kkweb01

drwxr-xr-x. kkweb01 kkweb01 unconfined_u:object_r:public_content_rw_t:s0 /home/kkweb01


# setsebool -P allow_httpd_anon_write 1



----------------------------無效
# ls -Z /home
drwx------. kkweb01 kkweb01 unconfined_u:object_r:user_home_dir_t:s0 kkweb01



# chcon -R -t httpd_sys_content_t /home/kkweb01
# ls -Z /home
drwx------. kkweb01 kkweb01 unconfined_u:object_r:httpd_sys_content_t:s0 kkweb01
----------------------------


http://163.16.63.191/web01/
This is Visual Dir...




-------------------------------samba

# yum -y install samba

# rpm -qa | grep samba

samba-common-4.4.4-14.el7_3.noarch

samba-common-libs-4.4.4-14.el7_3.x86_64
samba-4.4.4-14.el7_3.x86_64
samba-client-libs-4.4.4-14.el7_3.x86_64
samba-common-tools-4.4.4-14.el7_3.x86_64
samba-libs-4.4.4-14.el7_3.x86_64


# ls -l /home
drwxr-xr-x. 2 kkweb01 kkweb01 80  7月 26 11:23 kkweb01

# chown -R nobody:nobody /home/kkweb01

# ls -l /home
drwxr-xr-x. 2 nobody nobody 80  7月 26 11:23 kkweb01


# vi /etc/samba/smb.conf
...


[global]

workgroup = WORKGROUP

server string = Samba Server %v
#netbios name = centos
security = user
map to guest = bad user
dns proxy = no

#===== Share Definitions ====
[Samba分享]
path = /home/kkweb01
browsable =yes
writable = yes
guest ok = yes
read only = no

# systemctl start smb.service


# firewall-cmd --permanent --zone=public --add-service=samba
# firewall-cmd --reload
# firewall-cmd --list-all



# setsebool -P allow_smbd_anon_write 1




----------------------------------------------------無效
# ln -s /home/kkweb01 /samba_share



# ls -l /

...

lrwxrwxrwx.   1 root root   13  7月 26 12:01 samba_share -> /home/kkweb01
...

# ls -Z /
...
lrwxrwxrwx. root root unconfined_u:object_r:root_t:s0  samba_share -> /home/kkweb01
...

# chcon -R -t samba_share_t /samba_share

# ls -Z /
...
lrwxrwxrwx. root root unconfined_u:object_r:samba_share_t:s0 samba_share -> /home/kkweb01
...
----------------------------------------------------



\\163.16.63.191\Samba分享









2017年5月14日 星期日

C語言程式


-----------------------------選擇排序
#include<stdio.h>
int main()
{
int Ary[]={3,7,1,6,8};
int min,n=5;                 /*最小值、元素個數*/

for (int i =0;i<n-1;i++)     /*比較第幾回合*/
{
min=i;                   /*第1回合設定第1個元素為最小*/
for (int j=i+1;j<n;j++)  /*第1回合從第2個元素才開始比*/
{
if (Ary[j]<Ary[min])
{
min=j;
}
}

int tmp=Ary[i];
Ary[i]=Ary[min];
Ary[min]=tmp;
}

for(int i=0;i<n;i++)
{
printf("%d ",Ary[i]);
}

}


-----------------------------氣泡排序 小->大

#include<stdio.h>
int main()
{
int a[5]={9,8,6,4,3};
int n=5;
for (int i=0;i<=n-1;i++)          /*5個元素比4個回合*/
{
for (int j=0;j<n-i-1;j++)  
/*第1回j=0~4 因以[j+1]表示 所以j=0~3  第2回j=0~3 第3回j=0~2 第4回j=0~1*/
{
if (a[j]>a[j+1])
{
int max=a[j];
a[j]=a[j+1];
a[j+1]=max;
}
}
}

for (int i=0;i<n;i++)
{
printf("%d ",a[i]);
}
return 0;
}



-----------------------------Factorial

#include<stdio.h>
int fact(int n)
{
int result;
if (n==1)
{
result=1;
}
else
{
result=n*fact(n-1);
}

return result;
}

int main()
{
int x;
scanf("%d",&x);
printf("%d!= %d",x,fact(x));
}




-----------------------------Fibonacci Number

#include<stdio.h>
int Fib(int n)
{
int result;
if (n==0)
{
result=0;
}
else
if(n==1)
{
result=1;
}
else
if(n>=2)
{
return Fib(n-1)+Fib(n-2);
}

return result;
}

int main()
{
int x;
scanf("%d",&x);
printf("%第%d項= %d",x,Fib(x));
}




-----------------------------Great Command Divisor

#include<stdio.h>
int GCD(int a,int b)
{
int c=a%b;
if (c==0)
{
return b;
}
else
{
return GCD(b,c);
}


}

int main()
{
int x,y;
scanf("%d %d",&x,&y);
printf("GCD(%d,%d)= %d",x,y,GCD(x,y));
}




-----------------------------Hanoi Tower

#include <stdio.h>
int cnt=0;
void hanoi(int n, char A, char B, char C)
{
if (n==1)
{
/*³Ì©³ n¡A±qA~C*/
printf("%d ¡G ±N²Ä %d ­Ó¶ê½L¥Ñ %c  ²¾¨ì %c \n",++cnt,n,A,C);

}
else
{
/*²Ä n-1¼h¡A¥ý¥Ñ A~B */
hanoi(n-1,A,C,B);
printf("%d ¡G ±N²Ä %d ­Ó¶ê½L¥Ñ %c  ²¾¨ì %c \n",++cnt,n,A,C);
/*¦A¥Ñ B~C*/
hanoi(n-1,B,A,C);
}
}



int main()
{
int n;
scanf("%d",&n);
hanoi(n,'A','B','C');
printf("²¾°Ê %d ¼h¡A¦@»Ý²¾°Ê %d ¦¸",n,cnt);
}

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

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

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

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


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



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

2017年5月5日 星期五

ch7 使用者帳號管理

# groupadd kkGroup
# cat /etc/group
...
kkGroup:x:1000:

useradd   [選項]   帳號名稱
選項:
-c    註解
-g   主要群組名稱或GID
-G   附加群組名稱或GID
-d    指定家目錄
-e    建立的帳號有效日期
-u    指定帳號的UID編號


# useradd -g kkGroup kk1
# id kk1
uid=1000(kk1) gid=1000(kkGroup) groups=1000(kkGroup)


# cat /etc/passwd           //使用者帳號資料
...
kk1:x:1000:1000::/home/kk1:/bin/bash
帳號名稱:密碼:UID:GID:註解:家目錄:登入時使用的shell
//若要停止帳號登入,可將密碼資料 x 改成 !


# cat /etc/shadow           //使用者密碼
...
kk1:!!:17291:0:99999:7:::


# usermod -G root kk1

# id kk1
uid=1000(kk1) gid=1000(kkGroup) groups=1000(kkGroup),0(root)
使用者編號uid(使用者名稱)   群組編號   群組名稱   附加群組資訊


# userdel -r kk1           //刪除帳號及其家目錄所有檔案
# id kk1
id: kk1: no such user
# ls /home

# groupdel kkGroup    //刪除沒有使用者指派的群組



變更檔案權限---         chmod

變更檔案擁有者---     chown

變更檔案所屬群組--- chgrp





    



2017年5月4日 星期四

ch17 DNS

BIND Berkeley Internet Name Domain
FQDN Fully Qualified Domain Name

資源記錄:

網域名稱   [TTL]   [類別]   記錄的類型   值

網域名稱:也可以是IP位址
TTL:記錄存活的時間值
類別:以TCP/IP網路,則一定是 IN

記錄的類型:
SOA:       權限開始
NS:          DNS伺服器
MX:         郵件交換器
A:            位址
PTR:       指標
CNAME:標準名稱

值:記錄的值




# yum install -y bind bind-chroot bind-utils

# rpm -qa | grep bind
bind-libs-9.9.4-38.el7_3.3.x86_64
bind-chroot-9.9.4-38.el7_3.3.x86_64
bind-libs-lite-9.9.4-38.el7_3.3.x86_64
bind-license-9.9.4-38.el7_3.3.noarch
bind-9.9.4-38.el7_3.3.x86_64
bind-utils-9.9.4-38.el7_3.3.x86_64


---------------------------------------------------------------------------
bind:DNS伺服器主要套件,提供基礎的DNS功能

重要目錄與檔案說明:
/etc/named.conf                  //bind主設定檔
/etc/named.rfc1912.zones   //管轄網域設定檔
/usr/sbin/named                  //系統服務執行檔,名稱為named

# ls /var/named                   //所有管轄網域的資源紀錄預設放在此目錄
chroot  data  dynamic  named.ca  named.empty  named.localhost  named.loopback  slaves



bind-chroot:加強bind套件的安全性,將bind工作目錄移至獨立的目錄下
        禁錮機制:

# ls -l /var/named/chroot
總計 0
drwxr-x---. 2 root  named 41  5月  3 15:11 dev
drwxr-x---. 4 root  named 28  5月  3 15:11 etc
drwxr-x---. 3 root  named 18  5月  3 15:11 run
drwxrwx---. 3 named named 18  5月  3 15:11 usr
drwxr-x---. 5 root  named 48  5月  3 15:11 var



bind-utils:DNS相關工具套件,提供dig等測試工具


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

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


# systemctl start named
# systemctl enable named
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.







dig   @[名稱伺服器位址]   名稱   [查詢類型]

查詢類型:
a:查詢IP位址,預設,可省
mx:查郵件伺服器
ns:查名稱伺服器
cname:查別名
ptr:由IP位址反查名稱
hinfo:DNS伺服器系統資訊


//預設DNS伺服器
# cat /etc/resolv.conf
# Generated by NetworkManager
search centos
nameserver 163.16.1.23



# dig tw.yahoo.com
...
;; QUESTION SECTION:                       //我們向DNS提出的問題
;tw.yahoo.com.                  IN      A

;; ANSWER SECTION:                         //DNS查詢後得到的答案
tw.yahoo.com.           52      IN      CNAME   media-router-fp1.prod.media.yahoo.com.
...

;; AUTHORITY SECTION:                  //該名稱的管轄單位
wg1.b.yahoo.com.        105017  IN      NS      yf1.yahoo.com.
wg1.b.yahoo.com.        105017  IN      NS      yf3.a1.b.yahoo.net.
wg1.b.yahoo.com.        105017  IN      NS      yf2.yahoo.com.
wg1.b.yahoo.com.        105017  IN      NS      yf4.a1.b.yahoo.net.

;; ADDITIONAL SECTION:                //額外資訊
yf1.yahoo.com.          18617   IN      A       68.142.254.15
yf2.yahoo.com.          18617   IN      A       68.180.130.15

;; Query time: 4 msec
;; SERVER: 163.16.1.23#53(163.16.1.23)      //由哪提供資料
;; WHEN: 五  5月 05 11:28:35 CST 2017
;; MSG SIZE  rcvd: 285


# dig @168.95.1.1 tw.yahoo.com
...
;; Query time: 2 msec
;; SERVER: 168.95.1.1#53(168.95.1.1)        //指定hinet的DNS查詢
;; WHEN: 五  5月 05 11:46:18 CST 2017
;; MSG SIZE  rcvd: 167



# dig @localhost www.google.com
...
;; ANSWER SECTION:
www.google.com.         300     IN      A       64.233.187.103
...


# dig @127.0.0.1 www.google.com
...
;; ANSWER SECTION:
www.google.com.         149     IN      A       64.233.187.105
...


# dig @163.16.63.191 www.google.com
; <<>> DiG 9.9.4-RedHat-9.9.4-38.el7_3.3 <<>> @163.16.63.191 www.google.com
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached


# vi /etc/named.conf
...
options {
//      listen-on port 53 { 127.0.0.1; };
        listen-on port 53 { any; };              //可以公開服務的DNS
...
 allow-query     { 163.16.63.0/24; };
...



# systemctl restart named

# dig @163.16.63.191 www.google.com
...
;; ANSWER SECTION:
www.google.com.         300     IN      A       64.233.187.104
...




-----------管理一個網域

# vi /etc/named.rfc1912.zones
...
zone "kk.rwm" IN {
        type master;
        file "named.kk";
        allow-update { none; };
};




# cp /var/named/named.empty /var/named/named.kk
# vi /var/named/named.kk
$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       163.16.63.191
www     A       163.16.63.191


# chown root:named /var/named/named.kk
# ls -l /var/named/named.kk
-rw-r-----. 1 root named 166  5月  5 13:59 /var/named/named.kk


# systemctl restart named



# dig @127.0.0.1 www.kk.rwm
...
;; QUESTION SECTION:
;www.kk.rwm.                    IN      A

;; ANSWER SECTION:
www.kk.rwm.             86400   IN      A       163.16.63.191
...


# dig @163.16.63.191 www.kk.rwm
...
;; QUESTION SECTION:
;www.kk.rwm.                    IN      A

;; ANSWER SECTION:
www.kk.rwm.             86400   IN      A       163.16.63.191
...



---------------------------------windows10測試
ipv4網卡,慣用伺服器:163.16.63.191

C:\Users\User>nslookup
DNS request timed out.
    timeout was 2 seconds.
預設伺服器:  UnKnown
Address:  163.16.63.191
>

> www.kk.rwm
伺服器:  UnKnown
Address:  163.16.63.191

名稱:    www.kk.rwm
Address:  163.16.63.191
>

> www.google.com
伺服器:  UnKnown
Address:  163.16.63.191

未經授權的回答:
名稱:    www.google.com
Addresses:  2404:6800:4008:c05::93
          172.217.17.196
>

> exit




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


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