Linux伺服器 Linux伺服器

伺服器建置實務上課教材

伺服器建置實務 > 課程內容 > 第 9 堂課 - 網頁伺服器 (Apache server) part1

第 9 堂課 - 網頁伺服器 (Apache server) part1

上次更新日期 2018/12/16

我們一般所謂的『看網站』或『建置網站網頁』等等,就是 www 伺服器所提供的功能。目前市面上有非常多的 www 伺服器軟體, 而 CentOS 上面則是提供最老牌、支援度最廣的 Apache 這個 www 伺服器軟體!在這個章節中,我們會介紹 Apache 的基礎設定, 關於首頁與首頁目錄的介紹,還有個人用戶的首頁設定,還有讓 www 伺服器達成類似 FTP 的功能等等。 現在就讓我們來玩一玩這個重要的東西吧!

  • 9.1: 什麼是 WWW 伺服器?
  • 9.2: Apache 初探
  • 9.3: Apache 的安全強化模組
  • 9.4: Apache 的用戶個人首頁
  • 9.5: FTP 伺服器的建置
  • 9.6: 本日練習

9.1: 什麼是 WWW 伺服器?

網際網路 (Internet) 目前會這麼火紅,基本上有兩個契機,一個是 80 年代用數位訊號代替信紙傳輸的 email 功能,這在當時是相當先進的技術! 第二個則是在 80 年代末期 90 年代初期火紅起來的 WWW (就是 httpd 協定) 功能,這個功能一開始是用在公司企業內部的資料分享, 後來被廣泛的使用在商業網站中!最大的優勢,其實就是那個超連結!用滑鼠點擊就可以跳動到下一頁, 不用動到鍵盤!這在當時,是更了不起的具有親和性的代表功能之一哩!

  • 什麼是 WWW,從主從式架構說起

WWW 是 World Wide Web 的縮寫,其中 Web 有廣播網的意思存在, 所以簡稱為全球資訊網。至於這個 WWW 是怎麼使用的呢? 基本上,是需要有 Server 與 Client 的架構,兩者間的傳輸方式如下所示:

WWW 的主從式架構

簡單的說,上圖的關係可以這樣看:

  • WWW 伺服器不但需要一個可讓用戶端瀏覽的平台,還需要提供用戶端一些資料才行!
  • 伺服器所提供的最主要資料是超文件標籤語言 (Hyper Text Markup Language, HTML)、多媒體檔案 (圖片、影像、聲音、文字等,都屬於多媒體或稱為超媒體)。
  • HTML 只是一些純文字資料,透過所謂的標籤 (<tag>) 來規範所要顯示的資料格式;
  • 在用戶端,透過瀏覽器的對 HTML 以及多媒體的解析,最後呈現在使用者的螢幕上。
  • http 協定與 apache 軟體的開發

伯納斯-李 (Tim Berners-Lee) 在 1980 年代為了更有效率的讓歐洲核子物理實驗室的科學家可以分享及更新他們的研究成果, 於是他發展出一個超文件傳輸協定 (Hyper Text Transport Protocol, HTTP)

為了讓 HTTP 這個協定得以順利的應用,大約在 90 年代初期由伊利諾大學的國家超級電腦應用中心 (NCSA, http://www.ncsa.illinois.edu/) 開發出伺服器 HTTPd (HTTP daemon 之意)

由於 HTTPd 這個伺服器一直沒有妥善的發展,於是一群社群朋友便發起一個計畫,這個計畫主要在改善原本的 HTTPd 伺服器軟體,他們稱這個改良過的軟體為 Apache,取其『一個修修改改的伺服器 (A patch server)』的雙關語!

這個 Apache 在 1996 年以後便成為 WWW 伺服器上市佔率最高的軟體了 (http://httpd.apache.org/)。

  • 什麼是 URL (Uniform Resource Locator)

在主從式架構的 WWW server / client 功能中,就是前面剛剛談到的圖示內容,裡面有談到用戶端得要透過瀏覽器 (browser) 向伺服器要求資料才行!要求資料的動作就稱為向 Server 下達要求 URL 的動作!那這個 URL 其實就是放在伺服器端的一個檔案, 或者是一組程式啦!這個 URL 的格式通常如下:

  • <協定>://<主機位址或主機名稱>[:port]/<目錄資源>
  • 範例:http://dic.vbird.tw/linux_server2/
  • 範例:https://www.google.com

上述通常協定有 http 以及 https 兩種,一個是有加密,一個是未加密的網頁文件資料。至於目錄資源就是剛剛上面談到的, 那就是放在伺服器上面的一個檔案或一組程式碼囉!你會知道檔案如果是中文,那麼你填寫的網址 (URL) 就得要輸入中文才行! 因此,一般建議你的網頁檔名用英文,原因在此!

  • 什麼是靜態與動態 WWW 網站

一般 WWW 網站有分為動態與靜態兩種,這兩種的分別並不是在於『畫面會動』,而是在於『內容是否會改變』的緣故! 我們在資傳系大一下的網頁設計課程中,設計的資料都是屬於靜態的,即使內容有 CSS 小動畫,那內容還是屬於靜態喔! 所謂的動態大致上其實元件是這樣的:

  • 主要的組成元件: 作業系統平台+WWW伺服器+資料庫系統+網頁程式語言,還有 client 的瀏覽器!

基本上,就像我們去 google 找資料,或者是去 yahoo 讀新聞一樣,其實連上去的『網址』都一樣,但是因為你讀的時間不同, 或者是查詢的資料不同,對方給予你的回應也就不一樣~這才是所謂的動態網站的意思!這樣對於上述所謂的資料庫, 有比較清晰一些嘛?如果以圖示來看,各元件的關係有點像底下這樣:

動態網站元件

另外,須注意 WWW 伺服器與資料庫系統為兩個獨立的系統,因此需要透過網頁程式語言進行溝通!所以,我們才會用到類似 PHP 等網頁程式語言。 一般來說,目前市面上常見的 WWW server 主要架構,有可能是被稱為 LAMP 的環境,有點像底下這樣:

  • Linux 環境: Linux + Apache + Mariadb + PHP --> LAMP

如果是 Windows 作為主要的作業系統環境的話,那麼相關的軟體大概有可能是這樣的:

  • Windows 環境: Windows + IIS + MS SQL + .NET

這樣,你或許會比較清楚每個名詞所代表的意義了!

  1. Internet 會火紅的原因,在 90 年代以前的兩個主因為何?
  2. WWW 是什麼字的縮寫
  3. WWW 伺服器主要是提供 (1)哪些多媒體? (2)主要使用的語言簡稱為何?
  4. Tim Berners-Lee 發展出來的超文件傳輸協定,英文簡稱為何?
  5. 90 年度初期由國家超級電腦應用中心設計出來的 WWW server 伺服器名稱為何?
  6. 上面的伺服器後來被網路社群接管,接管後的名稱是什麼?
  7. URL 的撰寫方式為何?
  8. 靜態網站與動態網站,你覺得,最大的差別是動態網站裡面提供了什麼元件?
  9. 市面上使用比較廣泛的 Linux 系統使用的 LAMP server 是哪些元件的整合縮寫?

9.2: Apache 初探

現在我們知道市面上支援度比較廣的還是屬於 Apache 這個 WWW 伺服器,在我們的 CentOS 7 上面預設的 WWW 伺服器也就是 Apache! 而 Apache 的軟體名稱在 CentOS 上面被稱為 httpd,這個你得要清楚!此外,Apache 在 CentOS 7 上面還有很多外掛的其他軟體, 該軟體通常使用 mod_??? 為名喔!如果要架設伺服器,口訣還是再次強調一下:

  1. 安裝
  2. 啟動
  3. 開機啟動
  4. 防火牆
  5. 測試
  • 完全預設的 Apache 伺服器條件

事實上,CentOS 7 預設的 Apache 環境,就可以讓你玩的很開心了!因此,我們就使用預設的環境來實做測試測試!不過這裡再次強調喔, 在 CentOS 當中,Apache 軟體名稱被稱為 httpd 喔!注意注意!

完成如下的練習:
  1. 安裝 Apache 軟體
  2. 使用預設值啟動 Apache 軟體
  3. 設定開機會啟動這個軟體
  4. 你的 Apache 軟體是對全世界放行的,請觀察或重新設定防火牆
  5. 打開瀏覽器,輸入網址列的你的主機名稱,看看能否觀察到相關的網頁資料?
  6. 同時請觀察已經啟動的埠口,是否有讓 httpd 啟動的號碼?

在預設的情況下,你還是得要記憶一下 Apache 的一些基礎資料才行!基礎資料有這些需要記憶的!

  • 基礎設定檔位於: /etc/httpd/conf/httpd.conf
  • 附加設定檔位於: /etc/httpd/conf.d/*.conf
  • 預設啟動埠口在: port 80
  • 預設伺服器管理員 email: root@localhost
  • 預設首頁目錄位於: /var/www/html
  • 預設首頁檔案檔名: index.html
  • 預設所有人均可以瀏覽網頁

上面最重要的,當然就是預設的首頁目錄,以及首頁檔案。首頁目錄的意思,就是讓你的網站總網頁需要放置在該目錄內, 至於首頁檔,就是瀏覽到該目錄時,第一個主動讀出的檔案名稱!知道之後就來玩一下底下這題:

完成如下的練習:
  1. 觀察完首頁之後,請將預設的首頁改成顯示你的大名與學號即可。
  • 基礎設定值的理解與修改

你當然可以修改預設的設定值,只是要自己承擔風險!舉例來說,如果你改了連線埠口,那麼就得要告訴別人你的連線埠口即將跑到類似如下的網址,否則將無法被瀏覽:

  • http://localhost:85/

基本上,常見的設定值有底下這幾個,你可以稍微看看:

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf

Listen 80                     # 預設 Apache 的監聽埠口

ServerAdmin root@localhost    # 可以改成任何一個合法的 email address 即可!出問題時,螢幕會顯示出來!

DocumentRoot "/var/www/html"  # 就是預設的首頁目錄位置

<Directory "/var/www/html">   # 針對首頁目錄所進行的各項權限控制項目
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted       # 設定誰可以瀏覽的參數,詳細語法後續會談到。
</Directory>

<IfModule dir_module>         # 設定首頁檔名
    DirectoryIndex index.html
</IfModule>

<Files ".ht*">                # 設定在本伺服器中,只要開頭檔名為 .ht 的檔案,就不可以被瀏覽
    Require all denied
</Files>

<IfModule alias_module>       # 指定 http://server/cgi-bin/ 為 CGI 的主要放置網址
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

<IfModule mime_module>        # 指定副檔名的其他功能
    TypesConfig /etc/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    #AddHandler cgi-script .cgi
    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
</IfModule>

AddDefaultCharset UTF-8             # 指定預設的語系資料,通常可以直接註解即可!

# Some examples:                    # 指定一些常見的錯誤顯示方式,須搭配 Web 常見的錯誤代碼
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html

基本上,你什麼都不需要修改啦!啟動就好了!不過,如果需要某些特定的功能,還是得要進行一些微調才行!

完成如下的練習:
  1. 讓管理員的 email 改為 student@pc*.dic.ksu
  2. 讓語系資料交給網頁自己管理,取消強制的 utf8 語系輸出
  3. 當 index.html 找不到,會再找尋 welcome.html 以 default.html 等檔名作為首頁檔。 上面這三點處理完畢之後,請記得一定要重新啟動 httpd 才會生效
  4. 當你在網址列輸入 http://localhost/checkwelcome/ 時,就會輸出 welcome.html 的內容,而 welcome.html 內容請填寫『this filename is welcome.html』即可
    1. 先到網站主目錄去,然後才建立上述的 checkwelcome 目錄
    2. 進入到上面建立的目錄,然後使用 vim 建立 welcome.html 這個檔案,並將內容填寫進去。
    3. 打開瀏覽器直接輸入上面的網址試看看。

9.3: Apache 的安全強化模組

近年來 Apache 被攻擊的情況越來越嚴重,其實,大部分都是因為 Apache 上面開發的軟體可能會被誤用所致。事實上, Apache 已經提供了一個安全強化模組來預防這些笨笨的問題~只是,大家都沒有發現這個好用的機制,因此就沒有啟用這個功能啦! 現在,就讓我們來安裝與啟用這個好用的功能吧!(無論你喜歡不喜歡,目前 Internet 上面的攻擊就是這麼多! 為了自保,你『務必』要完成底下的實做!否則哪天你的 WWW 伺服器被打趴,那就慘了!)

  • 安裝 mod_security 模組

在 CentOS 7 底下,有個名為 mod_security 的模組,那就是安全強化的模組了!直接裝上它即可!

[root@localhost ~]# yum search mod_
[root@localhost ~]# yum install mod_security
[root@localhost ~]# rpm -ql mod_security
/etc/httpd/conf.d/mod_security.conf
/etc/httpd/conf.modules.d/10-mod_security.conf
/etc/httpd/modsecurity.d
/etc/httpd/modsecurity.d/activated_rules
/usr/lib64/httpd/modules/mod_security2.so
/usr/share/doc/mod_security-2.9.2
/usr/share/doc/mod_security-2.9.2/CHANGES
/usr/share/doc/mod_security-2.9.2/LICENSE
/usr/share/doc/mod_security-2.9.2/NOTICE
/usr/share/doc/mod_security-2.9.2/README.TXT
/var/lib/mod_security

上面就是值得注意的檔案囉!另外,由於 mod_security 是由第三方組織所提供的,所以,如果有興趣的話,你可以到底下的兩個相關網站去查詢一下:

由於預設的設定檔比較舊,建議就是要更新到最新版。而官網上面建議使用 git 這個指令來直接上網更新,因此,我們需要先安裝 git 這個軟體才行喔!

[root@localhost ~]# yum install git
  • 修改設定並啟動 httpd

由於安全強化模組的設定機制是在 /etc/httpd/modsecurity.d 這個目錄內,因此,我們建議你應該要前往該目錄再進行安全機制設定檔的同步動作。 整體的流程是這樣的:

[root@localhost ~]# cd /etc/httpd/modsecurity.d
[root@localhost modsecurity.d]# git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
Cloning into 'owasp-modsecurity-crs'...
remote: Enumerating objects: 68, done.
remote: Counting objects: 100% (68/68), done.
remote: Compressing objects: 100% (40/40), done.
remote: Total 7626 (delta 40), reused 48 (delta 28), pack-reused 7558
Receiving objects: 100% (7626/7626), 2.68 MiB | 882.00 KiB/s, done.
Resolving deltas: 100% (5448/5448), done.

[root@localhost modsecurity.d]# ll
drwxr-xr-x. 2 root root    6  4月 11  2018 activated_rules
drwxr-xr-x. 7 root root 4096 12月 16 08:21 owasp-modsecurity-crs  <==請進入此目錄

[root@localhost modsecurity.d]# cd owasp-modsecurity-crs
[root@localhost owasp-modsecurity-crs]# cp crs-setup.conf.example crs-setup.conf

[root@localhost owasp-modsecurity-crs]# cd rules/
[root@localhost rules]# mv REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
[root@localhost rules]# mv RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf

[root@localhost rules]# vim /etc/httpd/conf.d/mod_security.conf
# 在這個檔案的最下方,增加底下四行字
<IfModule security2_module>
        Include modsecurity.d/owasp-modsecurity-crs/crs-setup.conf
        Include modsecurity.d/owasp-modsecurity-crs/rules/*.conf
</IfModule>

[root@localhost rules]# systemctl restart httpd

[root@localhost rules]# tail -n 20 /var/log/httpd/error_log | grep -A 7 'modsecurity.org'
[Sun Dec 16 08:33:24.944078 2018] [:notice] [pid 6971] ModSecurity for Apache/2.9.2 (http://www.modsecurity.org/) configured.
[Sun Dec 16 08:33:24.944086 2018] [:notice] [pid 6971] ModSecurity: APR compiled version="1.4.8"; loaded version="1.4.8"
[Sun Dec 16 08:33:24.944091 2018] [:notice] [pid 6971] ModSecurity: PCRE compiled version="8.32 "; loaded version="8.32 2012-11-30"
[Sun Dec 16 08:33:24.944095 2018] [:notice] [pid 6971] ModSecurity: LUA compiled version="Lua 5.1"
[Sun Dec 16 08:33:24.944098 2018] [:notice] [pid 6971] ModSecurity: LIBXML compiled version="2.9.1"
[Sun Dec 16 08:33:24.944102 2018] [:notice] [pid 6971] ModSecurity: Status engine is currently disabled, enable it by set SecStatusEngine to On.
[Sun Dec 16 08:33:25.022832 2018] [auth_digest:notice] [pid 6971] AH01757: generating secret for digest authentication ...
[Sun Dec 16 08:33:25.023778 2018] [lbmethod_heartbeat:notice] [pid 6971] AH02282: No slotmem from mod_heartmonitor

最終,你只要看到上述重要的關鍵字,那就代表 mod_security 順利的啟動運作了!恭喜!你的 Apache 有稍微安全一點點了喔!

9.4: Apache 的用戶個人首頁

就像我們在大一下的網頁設計課程一樣,每個同學都有自己的個人首頁,相關的個人首頁連線方式,有點像底下的網站這樣:

上面的網頁你隨便點一個學號的連結進入,然後看一下網址列,就會知道該連結是連結到類似如下的網址:

  • http://your.host.name/~username/

因此,每個系統的使用者,就可以擁有自己的個人首頁,上傳、下載資料都在自己的家目錄底下,就能夠處理了! 不需要請 root 協助進行任何動作的!這就是 Apache 的個人首頁功能!不過,要達成個人首頁的功能,還需要一些其他的設定才行! 底下我們就依序來處理處理!

  • Apache 主要設定資訊

其實,Apache 預設就安裝了個人首頁支援的模組,只是需要將設定打開而已。設定擋在 CentOS 7 裡面是放置在 /etc/httpd/conf.d/userdir.conf 內。 另外,預設的 Apache 個人首頁目錄是放置在名為 public_html 的目錄下,對於一般用戶來說,這麼複雜的目錄名稱很討厭。所以, 我們想要將這個設定值改成 www 就好了。因此,你得要這樣修訂:

[root@localhost ~]# vim /etc/httpd/conf.d/userdir.conf
<IfModule mod_userdir.c>
    UserDir www
</IfModule>
<Directory "/home/*/www">
    AllowOverride FileInfo AuthConfig Limit Indexes
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>

[root@localhost ~]# apachectl configtest
Syntax OK

[root@localhost ~]# systemctl restart httpd

記得,設定完畢之後,一定需要重新啟動 httpd 這個服務才行喔!這個最容易忘記!

  • 個人首頁目錄的修訂

預設的個人家目錄,為了保密,通常是設定為 700 的分數 (drwx------),這樣可以避免用戶自己的資料被偷看。 但是,如此一來,首頁目錄也就無法被查閱啊!因此,這時候就得要修改一下權限才可以。修改的權限成為 (drwx--x--x) 即可! 不需要給全部的權限喔!

現在,假設你要讓 student 擁有個人首頁,那你可以使用 student 的身份,進行如下的動作即可:

[student@localhost ~]$ chmod 711 ~student
[student@localhost ~]$ mkdir ~student/www
[student@localhost ~]$ echo "check student web page" > ~student/www/index.html

之後在網址列輸入 http://your.host.name/~student 查閱是否有資料即可!

完成下列練習
  1. 先以上述的作法完成 userdir 的個人首頁設定
  2. 建立一個名為 webuser1 的帳號,密碼設定為 thewebman ;
  3. 切換到 webuser1 的身份,然後在家目錄建立名為 www 的目錄,且在該目錄下新增 index.html 檔案, 檔案內容就設定為『 I am webuser1 』即可。
  4. 嘗試到瀏覽器瀏覽 http://your.server.name/~webuser1 看看出了什麼問題?
  5. 請嘗試自行修改權限資料
  6. 在 WWW 伺服器上,若未來每個用戶新建時,都會自動擁有 www 目錄,且該目錄下都會有 index.html,內容為『 Personal web page !』, 又該如何處理?
  7. 上述動作完成後,請建立 webuser2 的帳號,同時修改好正確的權限,然後使用瀏覽器瀏覽,看看能否得到正確答案?

9.5: FTP 伺服器的建置

既然有個人首頁了,當然要讓使用者自行傳輸檔案到伺服器上,使用的方法當然就是 FTP 最快了!因此,我們可以搭配一個簡易的 FTP 伺服器,稱為 vsftpd 這個軟體,就能夠提供個人首頁了喔!相當容易!

完成下列練習
  1. 安裝 vsftpd
  2. 啟動 vsftpd
  3. 下次開機依舊可以啟動 vsftpd
  4. 防火牆的設定主要有兩點:
    • 設定好 Internet 可以連線到我的 FTP 埠口
    • 在 /etc/sysconfig/iptables-config 裡面加入 nf_conntrack_ftp 以及 nf_nat_ftp 兩個常用的 FTP 模組。設定完畢後務必重新啟動 iptables 服務。
  5. 在測試方面,主要有主 FTP 站及個人 FTP 使用兩個測試:
    • 主測試:在瀏覽器直接輸入 ftp://your.hostname 確認可以使用匿名 FTP。
    • 主測試:在 /var/ftp/pub 底下丟入幾個檔案,再回上一步去確認有沒有新增檔案在 pub 目錄
    • 個人用戶:使用瀏覽器輸入 ftp://webuser1@your.hostname/ ,並輸入 webuser1 的密碼,來確認能否登入系統。
  • 讓個人用戶被鎖定在家目錄內

因為 FTP 預設會讓用戶離開家目錄,不太安全。因此得要進行修改才行,免得使用者迷路了!設定的方法其實也很簡單, 你就複製貼上底下的幾個設定值到設定檔內即可!

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
allow_writeable_chroot=YES  # 這一行預設不存在,請自己加入喔!

[root@localhost ~]# touch /etc/vsftpd/chroot_list  # 寫入這個檔案的用戶才可以脫離家目錄

[root@localhost ~]# systemctl restart vsftpd

設定完畢之後,再次使用 FTP 用戶端軟體,看看能不能脫離使用者家目錄呢?這就是一個很重要的個人化設定喔!

9.6: 本日練習

現在來複習一下今日的動作,作為本日的點名與查驗資訊。請在目前的雲端機器上面完成底下的實做,要完成且讓老師檢查完畢後,才可以離開教室喔!

完成下列的練習 (一定要上面的練習全部完成之後,底下的練習才會正確無誤!)

  1. 建立一個名為 webadmin 的帳號,這個帳號的密碼為 myadmin
  2. 這個帳號可以有個人首頁,亦即可以在 http://your.hostname/~webadmin 看到他的首頁,且首頁的內容會是『我的個人首頁,歡迎光臨呢!』
  3. 這個帳號可以透過 FTP 來上傳下載他的網頁資料
  4. 這個帳號可以使用 samba 來掛載他的家目錄,samba 的密碼為 myadmin
  5. 將底下的答案以網頁列表的方式寫入 http://your.hostname/ans.html 檔案中:
    1. WWW Server 主要傳輸什麼資料給瀏覽器
    2. 所謂的動態網站 LAMP 最早主要指的是那四個軟體?
    3. WWW 預設的協定為 http,這個協定的埠口主要是哪個號碼?
    4. 一般預設的網頁首頁檔名為何?
    5. httpd 的主設定檔檔名
    6. CentOS 的主要網頁首頁目錄預設是在哪個目錄下?
    7. 當你輸入的網址讓 WWW 伺服器找不到時,該錯誤代碼的數字是多少?
    8. 要放行個人首頁時,你的家目錄權限應該要改為幾分?