【網絡運維】Linux:SELinux簡介和配置

SELinux 介紹

SELinux 概述

文件權限控制了哪些用戶或用戶組可以訪問哪些特定文件,但未限定用戶訪問文件的方式。

例如:對于文件的寫入權限而言, 結構化數據文件是否應當設計為只能使用特定的程序寫入,但其他編輯器仍可以打開和修改此文件,而這可能會導致損壞。文件權限僅僅是控制誰可以讀取、寫入或運行文件,無法控制如何使用文件。

Security Enhanced Linux (SELinux)是一個額外的系統安全層,主要目標是防止已遭泄露的系統服務訪問用戶數據。

例如:惡意人員成功入侵了 Web服務器進程,獲得進程的權限,也就是apache用戶和apache組的權限。該用戶和組對文檔根目錄/var/www/html具有讀取權限,還可以訪問/tmp和/var/tmp,以及全局可寫的其他任何文件和目錄。

SELinux 強制執行一組訪問規則,明確定義進程和資源之間允許的操作。每個進程、文件、目錄和端口都具有專門的安全標簽, 稱為SELinux上下文。上下文是一個名稱, SELinux策略使用它來確定某個進程能否訪問文件、目錄或端口。除非顯式規則授予訪問權限,否則,在默認情況下,策略不允許任何交互。

SELinux 標簽有多個內容:用戶,角色,類型和敏感度。rhel中默認策略targeted,基于類型部分。類型部分通常以_t結尾。
在這里插入圖片描述
示例:

  • web 服務器守護進程類型是 httpd_exec_t
  • web 服務器的網頁類型是 httpd_sys_content_t
  • web 服務器的端口類型是 http_port_t
  • /tmp 標簽 tmp_t
基本原理
  • SELinux默認策略允許apache進程訪問在/var/www/html文件夾下的文件和文件夾,以及其他一些具有httpd_sys_content_t上下文的文件夾,禁止訪問具有其他不匹配標簽的目錄。
  • 在 SELinux 的保護下,apache進程不允許訪問/tmp和/var/tmp目錄。因為/tmp、/var/tmp目錄的標簽是tmp_t,與默認策略不匹配。
命令選項 -Z

許多處理文件的命令都一個-Z 選項,用于顯示和設置SELinux上下文。

[root@server ~]# ps -C sshd -Z
LABEL                               PID TTY          TIME CMD
system_u:system_r:sshd_t:s0-s0:c0.c1023 951 ?    00:00:00 sshd
system_u:system_r:sshd_t:s0-s0:c0.c1023 1261 ?   00:00:00 sshd
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1276 ? 00:00:00 sshd
system_u:system_r:sshd_t:s0-s0:c0.c1023 2455 ?   00:00:00 sshd
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 2459 ? 00:00:00 sshd[root@server ~]# ls -Z /home
unconfined_u:object_r:user_home_dir_t:s0 furongwang# 其他命令中 -Z 選項
# cp -Z     set SELinux security context of destination file to default type
# mkdir -Z     set SELinux security context of each created directory to the default type
SELinux 模式
  • enforcing 模式: SELinux強制執行訪問控制規則。 在強制模式下,如果規則沒有明確允許訪問,則拒絕訪問,并寫入日志。此模式是默認模式。
  • Permissive 模式:SELinux 加載策略并處于活動狀態,但不強制執行訪問控制規則,?是記錄訪問違規。此模式有助于對應用和規則進行測試和故障排除。
  • disable 模式:完全關閉 SELinux。不拒絕任何SELinux違規,不予記錄。

查看當前模式

[root@server ~]# getenforce 

更改當前模式

[root@server ~]# setenforce 
usage:  setenforce [ Enforcing | Permissive | 1 | 0 ]# 強制模式臨時切換為允許模式
[root@server ~]# setenforce 0
# 或者
[root@server ~]# setenforce Permissive# 允許模式臨時切換為強制模式
[root@server ~]# setenforce 1
# 或者
[root@server ~]# setenforce Enforcing

模式切換注意事項:

  • 強制模式和允許模式之間變更,不需要重啟系統。
  • 從強制模式或者允許模式變更到禁用模式,或者從禁用模式變更到強制模式或者允許模式都需要重啟系統。

更改 SELinux 默認模式

[root@server ~]# vim /etc/selinux/config
SELINUX=enforcing
SELINUXTYPE=targeted

在啟動時通過將向內核傳遞參數來設置SELinux 模式

  • enforcing=1,設置強制模式。
  • enforcing=0,設置許可模式。
  • selinux=0,來徹底禁用 SELinux。
  • selinux=1,啟用 SELinux(當設置enforcing參數是,該參數可以省略)。

實驗: selinux模式為enforcing情況下,破解root密碼。破解完成后不執行 touch /.autorelabel命令。

重啟測試:使用正確的密碼登錄。結果:登錄失敗。原因:用戶驗證程序無法訪問/etc/shadow,因為破解密碼過程中/etc/shadow文件標簽被破壞了。

處理方法:系統啟動時,內核添加參數 selinux=1 enforcing=0

控制文件 SELinux 上下文

新文件默認 SELinux 上下文

新文件通常從父目錄繼承其SELinux上下文,從而確保它們具有適當的上下文。

[root@server ~]# touch /tmp/ruike1
[root@server ~]# ls -dZ /tmp /tmp/ruike1 
drwxrwxrwt. root root system_u:object_r:tmp_t:s0       /tmp
-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 /tmp/ruike1[root@server ~]# cp /tmp/ruike1 /root/ruike5
[root@server ~]# ls -dZ /tmp /tmp/ruike1 /root /root/ruike5 
dr-xr-x---. root root system_u:object_r:admin_home_t:s0 /root
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 /root/ruike5
drwxrwxrwt. root root system_u:object_r:tmp_t:s0       /tmp
-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 /tmp/ruike1

以下兩種情況,文件的 SELinux 上下文保持不變:

  • cp -a 命令復制
  • 移動文件
[root@server ~]# cp -a /tmp/ruike1 /root/ruike1-a
[root@server ~]# ls -dZ /tmp /tmp/ruike1 /root /root/ruike1* 
dr-xr-x---. root root system_u:object_r:admin_home_t:s0 /root
-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 /root/ruike1-a
drwxrwxrwt. root root system_u:object_r:tmp_t:s0       /tmp
-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 /tmp/ruike1[root@server ~]# mv /tmp/furongwang /root/furongwang-mv
[root@server ~ ]# ls -1dZ /tmp /root /root/furongwang*system_u:object_r:admin_home_t:s0 /root
unconfined_u:object_r:admin_home_t:s0 /root/furongwang1unconfined_u:object_r:user_tmp_t:s0 /root/furongwang-aunconfined_u:object_r:user_tmp_t:s0 /root/furongwang-mvsystem_u:object_r:tmp_t:s0 /tmp
設置文件 SELinux 上下文

設置文件上下文命令

  • chcon 命令,直接更改文件SELinux上下文。但是,它不會將上下文更改保存到 SELinux 上下文數據庫中。系統下一次對所有文件進行 relabel 操作時,將導致該上下文恢復。它對于測試和實驗很有用。

  • restorecon 命令,根據 SELinux上下文數據庫中規則,恢復文件SELinux上下文。原先通過 chcon命令所做的更改,將失效。

示例:

[root@server ~]# mkdir /www
[root@server ~]# ls -Zd /www
unconfined_u:object_r:default_t:s0 /www[root@server ~]# chcon -t httpd_sys_content_t /www
[root@server ~]# ls -Zd /www
unconfined_u:object_r:httpd_sys_content_t:s0 /www[root@server ~]# restorecon -v /www
Relabeled /www from unconfined_u:object_r:httpd_sys_content_t:s0 to unconfined_u:object_r:default_t:s0
[root@server ~]# ls -Zd /www
unconfined_u:object_r:default_t:s0 /www

semanage fcontext 命令用于管理SELinux上下文數據庫中規則,restorecon 命令根據這些規則恢復文件上下文。semanage fcontext命令使用擴展的正則表達式指定路徑和文件名。比較常見的擴展正則表達式 (/.*)? ,表示隨意匹配/后面接任意數量字符,遞歸匹配文件夾下的子文件和子文件夾。

示例:

[root@server ~]# echo Hello World > /www/index.html
[root@server ~]# ls -Zd /www/index.html
unconfined_u:object_r:default_t:s0 /www/index.html# 安裝 semanage 工具
[root@server ~]# yum install -y policycoreutils-python# 添加默認規則
[root@server ~]# semanage fcontext -a -t httpd_sys_content_t '/www(/.*)?'
[root@server ~]# semanage fcontext -l |grep '^/www(/.*)?'
/www(/.*)?    all files   system_u:object_r:httpd_sys_content_t:s0 # 只查看非默認策略
[root@server ~]# semanage fcontext -lC
SELinux fcontext  type      Context
/www(/.*)?     all files    system_u:object_r:httpd_sys_content_t:s0# 恢復文件上下文
[root@server ~]# restorecon -Rv /www/
Relabeled /www from unconfined_u:object_r:default_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0
Relabeled /www/index.html from unconfined_u:object_r:default_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0
[root@server ~]# ls -1Zd /www/ /www/index.html
unconfined_u:object_r:httpd_sys_content_t:s0 /www/
unconfined_u:object_r:httpd_sys_content_t:s0 /www/index.html# 刪除默認規則
[root@server ~]# semanage fcontext -d -t httpd_sys_content_t '/www(/.*)?'# 刪除目錄
[root@server ~]# rm -fr /www
示例:配置 web 站點主目錄
# 準備目錄
[root@server ~]# mkdir /www
[root@server ~]# echo woshichuantongpai > /www/index.html
[root@server ~]# semanage fcontext -a -t httpd_sys_content_t '/www(/.*)?'
[root@server ~]# restorecon -Rv /www/# 安裝 httpd
[root@server ~]# yum install -y httpd
[root@server ~]# systemctl enable httpd --now
[root@server ~]# vim /etc/httpd/conf/httpd.conf 
# 注釋122 行DocumentRoot,在122行后,添加如下內容:
# DocumentRoot "/var/www/html"
DocumentRoot "/www"
<Directory "/www">AllowOverride None# Allow open access:Require all granted
</Directory>
# 重啟服務
[root@server ~]# systemctl restart httpd# 訪問驗證
[root@server ~]# curl http://server.furongwang.cloud/
woshichuantongpai

控制端口 SELinux 上下文

端口 SELinux 上下文

SELinux還可以對端口標記。 當某個進程希望偵聽端口時, SELinux將檢查是否允許與該進程相關聯的標簽綁定該端口標簽。 這可以阻止惡意服務控制本應由其他網絡服務使用的端口。

在 targeted 策略中:

  • 端口 22/TCP ,具有標簽 ssh_port_t
  • 端口 80/TCP 和 443/TCP ,具有標簽 http_port_t
# 查看端口標記
[root@server ~]# semanage port -l | grep http_port_t
http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t            tcp      5988# 添加端口標記
[root@server ~]# semanage port -a -t http_port_t -p tcp 18020
[root@server ~]# semanage port -l|grep 18020
http_port_t                    tcp      18020, 80, 81, 443, 488, 8008, 8009, 8443, 9000# 修改網絡端口標記
[root@server ~]# semanage port -m -t ssh_port_t -p tcp 18020
[root@server ~]# semanage port -l | grep 18020
ssh_port_t                     tcp      18020, 22# 刪除端口標記
[root@server ~]# semanage port -d -t ssh_port_t -p tcp 18020
[root@server ~]# semanage port -l | grep 18020
示例:配置 web 站點監聽端口
[root@server ~]# vim /etc/httpd/conf/httpd.conf
# 修改原先的 Listen 80 為 Listen 18020
Listen 18020# 重啟服務
[root@server ~]# systemctl restart httpd
Job for httpd.service failed because the control process exited with error code.
See "systemctl status httpd.service" and "journalctl -xe" for details[root@server ~]# systemctl status httpd.service |cat |grep Per
......
Nov 29 11:55:26 server.furongwang.cloud httpd[3939]: (13)Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:18020
......# 配置端口
[root@server ~]# semanage port -a -t http_port_t -p tcp 18020
[root@server ~]# semanage port -l | grep 18020
http_port_t                    tcp      18020, 80, 81, 443, 488, 8008, 8009, 8443, 9000# 只查看改動標簽
[root@server ~]# semanage port -lC
SELinux Port Type              Proto    Port Number
http_port_t                    tcp      18020# 重啟服務并訪問
[root@server ~]# systemctl restart httpd# 訪問驗證
[root@server ~]# curl http://server.furongwang.cloud:18020/
Hello World

控制 SELinux 布爾值

SELinux 布爾值

SELinux 布爾值是可更改SELinux策略行為的開關,可以啟用和禁用。

# 查看SELinux布爾值
[root@server ~]# getsebool -a |grep httpd_enable_homedirs
httpd_enable_homedirs --> off
[root@server ~]# getsebool httpd_enable_homedirs
httpd_enable_homedirs --> off# 設置SELinux布爾值
[root@server ~]# setsebool 
Usage:  setsebool [ -NPV ] boolean value | bool1=val1 bool2=val2...
# 啟用value為1或者on或者true
# 禁用value為0或者off或者false[root@server ~]# setsebool httpd_enable_homedirs=1或者on或者true
[root@server ~]# setsebool httpd_enable_homedirs=0或者off或者false# 持久化設置布爾值,使用-P選項修改將寫入SELinux數據庫。
[root@server ~]# setsebool httpd_enable_homedirs=1
[root@server ~]# setsebool -P httpd_enable_homedirs=1

還可以semanage boolean 命令管理 SELinux 布爾值。

[root@server ~]# semanage boolean 
usage: semanage boolean [-h] [-n] [-N] [-S STORE] [  --extract  | --deleteall  | --list -C | --modify ( --on | --off ) boolean ]# 查看 SELinux 布爾值
[root@server ~]# semanage boolean -l
# 只查看非默認的 SELinux 布爾值
[root@server ~]# semanage boolean -l -C# 設置 SELinux 布爾值
[root@server ~]# semanage boolean -m -1|--on use_nfs_home_dirs
[root@server ~]# semanage boolean -m -0|--off use_nfs_home_dirs
# 相當于setsebool -P# 刪除原先自定義的 SELinux 布爾值
[root@server ~]# semanage boolean -D
示例:允許 httpd 訪問用戶家目錄
[root@server ~]# vim /etc/httpd/conf.d/userdir.conf
# 修改以下兩個參數UserDir enabledUserDir public_html
# 重啟服務
[root@server ~]# systemctl restart httpd# 設置權限
[furongwang@server ~]$ mkdir public_html
[furongwang@server ~]$ echo "Welcome to litang" > public_html/index.html
[root@server ~]# ll -d /home/furongwang
drwx-----x. 2 furongwang furongwang 83 81 16:20 /home/furongwan
[furongwang@server ~]$ chmod o+x /home/furongwang/# 未啟用布爾值訪問
[root@server ~]# curl http://server.furongwang.cloud:18020/~furongwang/
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access this resource.</p>
</body></html># 啟用布爾值訪問
[root@server ~]# setsebool httpd_enable_homedirs=1
[root@server ~]# curl http://server.furongwang.cloud:18020/~furongwang/
Welcome to litang
SELinux 問題處理思路
  1. 確定是否是 SELinux 引起的。
  2. 在做調整前,首先考慮 SELinux 是否正確的阻止了訪問。例如web服務器嘗試訪問/home目錄,如果web的內容不是用戶發布的,那么發生阻止信號是正確的阻止。如果這個訪問是被允許的,參考下面步驟。
  3. 最常見的 SELinux 問題是不正確的文件上下文。當文件是另外一個地方創建的,然后移動到新的地方,而新的地方需要新的上下文。在大多數情況,執行restorecon可以修復這個問題。這種修復問題方式對系統其他部分安全影響非常小。
  4. 另外一個問題可能是布爾值設置不當導致拒絕訪問。例如ftpd_anon_write布爾值控制匿名ftp用戶是否可以上傳文件。如果如需匿名用戶上傳文件,需要打開這個布爾值。調整布爾值需要小心,因為對系統影響范圍比較大。
  5. 還有可能是 端口上下文不匹配。
  6. 還有可能是 SELinux bug。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/92296.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/92296.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/92296.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GaussDB SQL執行計劃詳解

1 問題現象SQL執行計劃是GaussDB性能分析及調優的核心&#xff0c;它輸出三個關鍵信息&#xff1a;訪問路徑:掃描表數據的路徑。連接順序&#xff1a;多表連接順序。連接方式&#xff1a;多表連接方式。2 技術背景GaussDB SQL語句執行計劃是數據庫為運行SQL語句而執行的操作步驟…

02.【數據結構-C語言】順序表(線性表概念、順序表實現:增刪查、前向聲明、順序表實現通訊錄項目:增刪改查、通訊錄數據導入及保存到本地文件)

目錄 1. 線性表 2. 順序表概念及分類 2.1 順序表的概念 2.2 順序表分類 2.3 動靜態順序表對比 3. 順序表的實現&#xff08;附完整版代碼&#xff09; 3.1 順序表結構體聲明 3.2 初始化&銷毀 3.3 插入&#xff08;尾插、頭插、指定位置之前插入&#xff09; 3.4 …

MyBatis核心配置深度解析:從XML到映射的完整技術指南

&#x1f527; MyBatis核心配置深度解析&#xff1a;從XML到映射的完整技術指南 &#x1f680; 引言&#xff1a;MyBatis作為Java生態中最受歡迎的持久層框架之一&#xff0c;其強大的配置體系是實現靈活數據訪問的核心。本文將深入解析MyBatis的配置文件架構、映射機制以及高級…

OpenCV HSV與RGB顏色模型的區別

HSV與RGB顏色模型的區別 HSV&#xff08;Hue, Saturation, Value&#xff09;和 RGB&#xff08;Red, Green, Blue&#xff09;是兩種不同的顏色表示方式&#xff0c;主要區別如下&#xff1a;對比項RGBHSV定義基于紅、綠、藍三原色的混合基于色相&#xff08;H&#xff09;、飽…

具有柔性關節的機械臂matlab仿真

柔性關節機械臂MATLAB仿真方案&#xff0c;包含動力學建模、控制器設計和可視化分析。該方案基于拉格朗日方程建立柔性關節模型&#xff0c;并實現了PD控制、滑模控制和自適應控制三種控制策略。 MATLAB仿真 %% 柔性關節機械臂仿真 - 完整系統 % 作者: MATLAB技術助手 % 日期: …

數據結構—隊列和棧

1.二級指針的使用二級指針&#xff1a; 1. 在被調函數中&#xff0c;想要修改主調函數中的指針變量&#xff0c;需要傳遞該指針變量的地址&#xff0c;形參用二級指針接收。 2.指針數組的數組名是一個二級指針&#xff0c;指針數組的數組名作為參數傳遞時&#xff0c;可用二級指…

均線:從市場脈搏到量子計算的時空密碼

一部跨越百年的技術分析進化史,揭示金融市場的數學本質 引言:金融市場的永恒羅盤 在華爾街百年風云中,一個簡單的數學工具始終閃耀著智慧光芒——移動平均線(Moving Average)。從杰西利弗莫爾的手繪圖表到文藝復興科技的量子模型,均線系統完成了從經驗工具到科學框架的驚…

Python 通過Playwright+OpenCV破解滑動驗證碼 實例

由于公司最近需要對接某業務系統&#xff0c;涉及到部分數據需要提交至其它平臺業務系統&#xff0c;只有其它平臺賬戶&#xff0c;沒有接口&#xff0c;因此做此開發。首先通過OpenCV計算出驗證驗證碼滑塊距離&#xff0c;根據距離&#xff0c;使用 Playwright 利用滑動距離模…

山東省天地圖API申請并加載到QGIS和ArcGIS Pro中

目的&#xff1a;在QGIS/ArcGIS Pro中加載山東省不同時期的歷史影像1、申請API 山東省天地圖的API和國家天地圖的API不通用&#xff0c;需要單獨申請。 https://shandong.tianditu.gov.cn/ 打開本地服務資源找到影像的詳情頁 點擊申請地址按照下面的步驟一步一步來&#xff0c;…

qt窗口--02

文章目錄qt窗口--02QMessageBoxQColorDialogQFileDialogQFontDialogQInputDialog、結語很高興和大家見面&#xff0c;給生活加點impetus&#xff01;&#xff01;開啟今天的編程之路&#xff01;&#xff01; 作者&#xff1a;?( ‘ω’ )?260 我的專欄&#xff1a;qt&#…

Linux seLinux

Linux seLinux 1、什么是selinux&#xff0c;security enhanced linux–安全加強的linux。 是由美國國家安全局開發的以及歷史。selinux之前是基于自主存取控制方法DAC&#xff0c; 只要符合權限即可&#xff0c;通過suid和sgid特殊權限存在有一定的安全隱患&#xff0c; 甚至一…

Linux: NFS 服務部署與autofs自動掛載的配置

Linux&#xff1a; NFS 服務部署與autofs自動掛載的配置NFS&#xff08;Network File System&#xff0c;網絡文件系統&#xff09;是一種基于 TCP/IP 協議的網絡文件共享協議&#xff0c;允許不同主機在網絡中共享文件資源&#xff0c;實現跨主機的文件訪問與管理&#xff0c;…

【深度學習②】| DNN篇

0 序言 本文將系統介紹基于PyTorch的深度神經網絡&#xff08;DNN&#xff09;相關知識&#xff0c;包括張量的基礎操作、DNN的工作原理、實現流程&#xff0c;以及批量梯度下降、小批量梯度下降方法和手寫數字識別案例。通過學習&#xff0c;你將掌握DNN的核心概念、PyTorch實…

Xcode 26 如何在創建的 App 包中添加特定的目錄

功能需求 在某些情況下,我們需要將特定文件放在 Xcode 編譯鏈接后 App 包里的指定目錄中,比如將 AI 大模型相關文件放在它們對應名稱的目錄中: 正常情況下,Xcode 會將項目目錄中的所有文件都平鋪放到 App 包的根目錄里。那么,要如何形成上面這種文件目錄層級呢? 在本篇…

linux-系統性能監控

linux-系統性能監控一、cpu1.1 查看cpu的信息1.2 cpu性能指標1.3 編寫監控cpu使用率的腳本1.4 查找出使用cpu最高的10個進程二、內存2.1 查看內存信息2.2 交換&#xff08;swap&#xff09;分區2.2.1 查看交換分區的積極程度2.2.2 查看交換分區的大小2.2.3 管理交換分區2.3 編寫…

AgxOrin平臺JetPack5.x版本fix multi-cam race condition 補丁

本文包含三個針對NVIDIA Linux驅動程序的補丁修復: 多攝像頭競爭條件修復 在capture-ivc驅動中新增信號量機制,解決多攝像頭同時操作時的競爭條件問題(Bug 4425972)。主要修改包括在通道上下文結構中添加信號量,并在通道ID通知和取消注冊時進行信號量操作。 內存泄漏修復…

【Go】P3 Go語言程序結構

Go語言程序結構Go語言程序結構命名規則與編程慣例核心規則四種聲明語句詳解var聲明&#xff1a;變量聲明const聲明&#xff1a;常量聲明type聲明&#xff1a;類型定義func聲明&#xff1a;函數聲明簡短變量聲明(:)使用規則和限制指針&#xff1a;安全的內存地址操作基本概念和操…

【機器學習深度學習】知識蒸餾實戰:讓小模型擁有大模型的智慧

目錄 引言&#xff1a;模型壓縮的迫切需求 一、知識蒸餾的核心原理 1.1 教師-學生模式 1.2 軟目標&#xff1a;知識傳遞的關鍵 1.3 蒸餾損失函數 二、實戰&#xff1a;Qwen模型蒸餾實現 2.1 環境配置與模型加載 2.2 蒸餾損失函數實現 2.3 蒸餾訓練流程 2.4 訓練優化技…

基于MCP提示構建工作流程自動化的實踐指南

引言 在現代工作和生活中&#xff0c;我們經常被各種重復性任務所困擾——從每周的膳食計劃到代碼審查反饋&#xff0c;從文檔更新到報告生成。這些任務雖然不復雜&#xff0c;卻消耗了大量寶貴時間。MCP&#xff08;Model Context Protocol&#xff09;提示技術為解決這一問題…

apache-tomcat-11.0.9安裝及環境變量配置

一、安裝從官網上下載apache-tomcat-11.0.9,可以下載exe可執行文件版本&#xff0c;也可以下載zip版本&#xff0c;本文中下載的是zip版本。將下載的文件解壓到指定目錄&#xff1b;打開tomcat安裝目錄下“\conf\tomcat-users.xml”文件&#xff1b;輸入以下代碼&#xff0c;pa…