大數據系列之:Kerberos

大數據系列之:Kerberos

  • 基本概念
  • 工作流程
  • 安全特性
  • 應用場景
  • 總結
  • 加密原理
  • Kerberos認證流程
  • 更改您的密碼
  • 授予賬戶訪問權限
  • 票證管理
  • Kerberos 票據屬性
  • 使用 kinit 獲取票據
  • 使用 `klist` 查看票據
  • 使用 `kdestroy` 銷毀票據
  • .k5identity 文件描述

Kerberos 是一種網絡認證協議,廣泛用于在不安全的網絡環境中提供強大的身份驗證服務。它基于對稱密鑰加密技術,旨在確保客戶端和服務端之間的通信安全,防止未經授權的訪問。

基本概念

KDC (Key Distribution Center): KDC 是 Kerberos 系統的核心組件,負責生成和分發票據(tickets)。

KDC 通常分為兩個部分:

  • AS (Authentication Server): 負責驗證用戶的身份,并發放 TGT (Ticket-Granting Ticket)。
  • TGS (Ticket-Granting Service): 使用 TGT 驗證用戶身份,并發放服務票據(Service Tickets)。
  • TGT (Ticket-Granting Ticket): TGT 是 AS 發放的一種特殊票據,用于證明用戶已經通過了身份驗證。用戶可以使用 TGT 向 TGS 請求服務票據。
  • Service Ticket: 服務票據是 TGS 發放的一種票據,用戶可以使用它來訪問特定的服務。

工作流程

用戶請求 TGT:

  • 用戶向 AS 發送請求,包含用戶名和時間戳。
  • AS 驗證用戶身份(通常通過密碼),如果驗證成功,AS 生成一個 TGT 并加密后返回給用戶。

用戶請求服務票據:

  • 用戶使用 TGT 向 TGS 發送請求,請求中包含所需服務的名稱。
  • TGS 驗證 TGT,如果驗證成功,TGS 生成一個服務票據并加密后返回給用戶。

用戶訪問服務:

  • 用戶將服務票據發送給目標服務。
  • 服務驗證服務票據,如果驗證成功,允許用戶訪問服務。

安全特性

  • 對稱密鑰加密: Kerberos 使用對稱密鑰加密技術,確保數據在傳輸過程中不被竊取或篡改。
  • 時間同步: Kerberos 要求客戶端和服務器之間的時間同步,以防止重放攻擊。
  • 票據有效期: 票據有有限的有效期,過期后需要重新獲取,這增加了系統的安全性。

應用場景

Kerberos 廣泛應用于企業級網絡環境,特別是在需要高度安全的身份驗證和授權的情況下。

常見的應用場景包括:

  • Windows 域環境: Windows 域控制器使用 Kerberos 進行身份驗證。
  • Linux 和 Unix 環境: 許多 Linux 和 Unix 系統支持 Kerberos 身份驗證。
  • Web 服務: 一些 Web 服務使用 Kerberos 進行單點登錄(SSO)。

總結

  • Kerberos 是一種強大而復雜的認證協議,能夠有效保護網絡資源不受未授權訪問。
  • 通過使用對稱密鑰加密和時間同步機制,Kerberos 提供了高效且安全的身份驗證服務。

加密原理

在這里插入圖片描述

Kerberos認證流程

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

klist -ket zeppelin1.bigdata.net.keytab
Keytab name: FILE:zeppelin1.bigdata.net.keytab
KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
1 2021-03-03T03:48:45 zeppelin/zeppelin1.bigdata.net@OPTICS.bigdata.COM
kinit -kt zeppelin1.bigdata.net.keytab zeppelin/zeppelin1.bigdata.net@OPTICS.bigdata.COM

在這里插入圖片描述

更改您的密碼

要更改您的 Kerberos 密碼,請使用 kpasswd 命令。它會要求您輸入舊密碼(以防止其他人趁您不在時走到您的電腦前并更改您的密碼),然后兩次提示您輸入新密碼。(要求您輸入兩次的原因是為了確保您正確輸入了密碼。)例如,用戶 david 會執行以下操作:

kpasswd
Password for david@EXAMPLE.COM:
Enter new password:
Enter new password again:

授予賬戶訪問權限

如果您需要授予某人登錄您的賬戶的權限,可以通過Kerberos來實現,而無需告訴他們您的密碼。只需在您的主目錄下創建一個名為.k5login的文件。該文件應包含您希望授予訪問權限的每個人的Kerberos主體名稱,每個主體名稱必須單獨占一行。以下是一個示例 .k5login 文件:

jennifer@ATHENA
david@EXAMPLE.COM

此文件將允許用戶jennifer和david使用您的用戶ID,前提是他們各自領域中的Kerberos票據有效。如果您將在網絡上的其他主機上登錄,您可能希望在這些主機上的每個.k5login文件中包含您自己的Kerberos主體名稱。

使用.k5login文件比直接給出密碼要安全得多,因為:
您可以隨時通過從.k5login文件中移除相應的主體名稱來撤銷訪問權限。
雖然用戶對特定主機(或如果您的.k5login文件被共享,例如通過NFS,則是一組主機)上的您的賬戶有完全訪問權限,但他們不會繼承您的網絡特權。
Kerberos記錄了誰獲取了票據,因此系統管理員可以在必要時查明特定時間哪些用戶能夠使用您的用戶ID。

一個常見的應用場景是在root用戶的主目錄中放置一個.k5login文件,列出的Kerberos主體將獲得對該機器的root訪問權限。這使得系統管理員可以在不透露root密碼的情況下,允許用戶本地提升為root,或者遠程以root身份登錄,同時避免了在網絡上傳輸root密碼的風險。

票證管理

在許多系統中,Kerberos 被集成到登錄程序中,您在登錄時會自動獲得票證。其他程序(如 ssh)可以將您的票證副本轉發到遠程主機。這些程序中的大多數在退出時也會自動銷毀您的票證。然而,MIT 建議您在不再需要票證時明確地銷毀它們,以確保安全。一種確保這一點的方法是將 kdestroy 命令添加到您的 .logout 文件中。此外,如果您要離開計算機并且擔心入侵者利用您的權限,最安全的做法是銷毀所有票證副本,或者使用鎖定屏幕的屏保程序。

Kerberos 票據屬性

Kerberos 票據可以具有多種屬性:

  • 可轉發的票據:如果一個票據是可轉發的,那么 KDC 可以基于該可轉發票據簽發一個新的票據(必要時具有不同的網絡地址)。這允許在不重新輸入密碼的情況下進行身份驗證轉發。例如,如果擁有可轉發 TGT 的用戶登錄到遠程系統,KDC 可以為該用戶簽發新的 TGT,使用遠程系統的網絡地址,從而使得在該主機上的身份驗證像本地登錄一樣工作。
  • 當 KDC 基于可轉發票據創建新票據時,它會在新票據上設置轉發標志。任何基于設置了轉發標志的票據創建的票據也將具有其轉發標志。
  • 可代理的票據:類似于可轉發票據,可代理票據允許服務接管客戶端的身份。然而,與可轉發票據不同的是,可代理票據僅針對特定服務簽發。換句話說,不能基于可代理但不可轉發的票據簽發票證授予票據。
  • 代理票據:基于可代理票據簽發的票據。
  • 預設日期的票據:帶有無效標志簽發的票據。在票據上列出的開始時間之后,它可以提交給 KDC 以獲取有效的票據。
  • 帶有預設日期標志的票證授予票據可用于獲取預設日期的服務票據。
  • 可續期的票據:可以在用戶不重新輸入密碼的情況下用于獲取新的會話密鑰。可續期票據有兩個過期時間。第一個是此特定票據過期的時間。第二個是基于此可續期票據簽發的任何票據可能的最晚過期時間。
  • 初始標志票據:基于身份驗證協議簽發的票據,而不是基于票證授予票據。希望確保用戶的密鑰最近已提供驗證的應用服務器可以指定此標志必須設置才能接受票據。
  • 無效票據:必須被應用服務器拒絕。預設日期的票據通常帶有此標志發出,并且在能夠使用之前必須由 KDC 驗證。
  • 預先認證的票據:只有在請求票據的客戶端向 KDC 自身進行了認證后才會簽發的票據。
  • 硬件認證標志:設置在需要使用硬件進行認證的票據上。預計該硬件僅由請求票據的客戶端持有。
  • 傳輸策略檢查標志:如果票據設置了此標志,則表明簽發該票據的 KDC 實施了跨域檢查策略并檢查了票據上的跨域列表。跨域列表包含從首次簽發票據的 KDC 所屬領域到簽發當前票據的 KDC 所屬領域的所有中間域。如果沒有設置此標志,則應用服務器必須自己檢查跨域或拒絕票據。
  • 可作為委托方的標志:表示票據中指定的服務器根據該域的策略適合作為委托方。一些客戶端應用程序可能會使用此標志來決定是否將票據轉發到遠程主機,盡管許多應用程序并不遵守此標志。
  • 匿名票據:其中的命名主體是該域的通用主體;實際上并沒有指定將使用票據的具體個人。這種票據的目的僅僅是安全地分發會話密鑰。

使用 kinit 獲取票據

如果您的站點已經將 Kerberos V5 與登錄系統集成,您在登錄時會自動獲得 Kerberos 票據。否則,您可能需要顯式地獲取 Kerberos 票據,使用 kinit 程序。同樣,如果您的 Kerberos 票據過期,也請使用 kinit 程序獲取新的票據。

要使用 kinit 程序,只需鍵入 kinit,然后在提示符下輸入您的密碼。例如,Jennifer(用戶名為 jennifer)在 Bleep, Inc.(一個虛構的公司,域名是 mit.edu,Kerberos 領域是 ATHENA.MIT.EDU)工作。她會鍵入:

shell% kinit
jennifer@ATHENA.MIT.EDU 的密碼: <-- [在這里鍵入 Jennifer 的密碼。]
shell%

如果您鍵入了錯誤的密碼,kinit 會給出以下錯誤消息:

shell% kinit
jennifer@ATHENA.MIT.EDU 的密碼: <-- [在這里鍵入錯誤的密碼。]
kinit: 密碼不正確
shell%

這樣您就不會獲得 Kerberos 票據。

默認情況下,kinit 假設您希望獲取默認領域中自己的用戶名的票據。假設 Jennifer 的朋友 David 來訪,并希望借用她的窗口檢查郵件。David 需要在自己的領域 EXAMPLE.COM 中獲取自己的票據。他會鍵入:

shell% kinit david@EXAMPLE.COM
david@EXAMPLE.COM 的密碼: <-- [在這里鍵入 David 的密碼。]
shell%

David 就可以使用這些票據登錄到他自己的機器。請注意,他在 Jennifer 的機器上本地輸入了自己的密碼,但從未通過網絡傳輸。本地主機上的 Kerberos 完成了對另一個領域中的 KDC 的身份驗證。

如果您希望將票據轉發到另一臺主機,需要請求可轉發的票據。您可以通過指定 -f 選項來實現這一點:

shell% kinit -f
jennifer@ATHENA.MIT.EDU 的密碼: <-- [在這里鍵入您的密碼。]
shell%

請注意,kinit 不會告訴您它已獲取了可轉發的票據;您可以使用 klist 命令進行驗證(參見 使用 klist 查看票據)。

通常,您的票據有效期為您系統默認的票據生命周期,許多系統默認為十小時。您可以使用 -l 選項指定不同的票據生命周期。在值后添加字母 s 表示秒,m 表示分鐘,h 表示小時,d 表示天。例如,要獲取有效期為三小時的可轉發票據給 david@EXAMPLE.COM,您會鍵入:

shell% kinit -f -l 3h david@EXAMPLE.COM
david@EXAMPLE.COM 的密碼: <-- [在這里鍵入 David 的密碼。]
shell%

注意

您不能混合單位;指定 3h30m 的生命周期會導致錯誤。另外,請注意大多數系統指定了最大票據生命周期。如果您請求的票據生命周期超過最大值,它將自動縮短為最大生命周期。

使用 klist 查看票據

klist 命令用于顯示您的票據。當您首次獲取票據時,通常只會有一個票據授予票據。列表看起來會是這樣的:

shell% klist
Ticket cache: /tmp/krb5cc_ttypa
Default principal: jennifer@ATHENA.MIT.EDUValid starting     Expires            Service principal
06/07/04 19:49:21  06/08/04 05:49:19  krbtgt/ATHENA.MIT.EDU@ATHENA.MIT.EDU
shell%

票據緩存是指您的票據文件的位置。在上面的例子中,此文件名為 /tmp/krb5cc_ttypa。默認主體是您的 Kerberos 主體。

“有效開始時間”和“到期時間”字段描述了票據的有效期間。“服務主體”描述了每個票據。票據授予票據的第一部分為 krbtgt,第二部分為領域名稱。

現在,假設 jennifer 連接到主機 daffodil.mit.edu,然后再次輸入 klist,她將看到以下結果:

shell% klist
Ticket cache: /tmp/krb5cc_ttypa
Default principal: jennifer@ATHENA.MIT.EDUValid starting     Expires            Service principal
06/07/04 19:49:21  06/08/04 05:49:19  krbtgt/ATHENA.MIT.EDU@ATHENA.MIT.EDU
06/07/04 20:22:30  06/08/04 05:49:19  host/daffodil.mit.edu@ATHENA.MIT.EDU
shell%

這里發生了什么:當 jennifer 使用 ssh 連接到主機 daffodil.mit.edu 時,ssh 程序向 KDC 展示了她的票據授予票據,并請求了一個針對主機 daffodil.mit.edu 的主機票據。KDC 發送了主機票據,ssh 隨后將該票據展示給主機 daffodil.mit.edu,因此她無需輸入密碼即可登錄。

假設您的 Kerberos 票據允許您登錄到另一個域中的主機,例如 trillium.example.com,該主機也位于另一個 Kerberos 領域 EXAMPLE.COM。如果您 ssh 到這個主機,您將收到一個針對 EXAMPLE.COM 領域的票據授予票據,以及一個新的針對 trillium.example.com 的主機票據。klist 將顯示如下內容:
% klist

shell% klist
Ticket cache: /tmp/krb5cc_ttypa
Default principal: jennifer@ATHENA.MIT.EDUValid starting     Expires            Service principal
06/07/04 19:49:21  06/08/04 05:49:19  krbtgt/ATHENA.MIT.EDU@ATHENA.MIT.EDU
06/07/04 20:22:30  06/08/04 05:49:19  host/daffodil.mit.edu@ATHENA.MIT.EDU
06/07/04 20:24:18  06/08/04 05:49:19  krbtgt/EXAMPLE.COM@ATHENA.MIT.EDU
06/07/04 20:24:18  06/08/04 05:49:19  host/trillium.example.com@EXAMPLE.COM
shell%

根據您的主機和領域的配置,您還可能看到一個服務主體為 host/trillium.example.com@ 的票據。如果是這樣,這意味著您的主機不知道 trillium.example.com 所屬的領域,因此它向 ATHENA.MIT.EDU KDC 請求了引薦。下次您連接到 trillium.example.com 時,這條奇怪的記錄將用于避免再次請求引薦。

根據您的主機和域的配置,您可能會看到一個帶有服務主體 host/trillium.example.com@ 的票據。如果出現這種情況,這意味著您的主機不知道 trillium.example.com 屬于哪個域,因此它向 ATHENA.MIT.EDU 的 KDC 請求了引薦。下次您連接到 trillium.example.com 時,這個看起來奇怪的條目將被用于避免再次請求引薦。

您可以使用 -f 選項查看適用于您的票據的標志。這些標志包括:
F: 可轉發(Forwardable)
f: 已轉發(forwarded)
P: 可代理(Proxiable)
p: 代理(proxy)
D: 可預設日期(postDateable)
d: 預設日期(postdated)
R: 可續期(Renewable)
I: 初始(Initial)
i: 無效(invalid)
H: 硬件認證(Hardware authenticated)
A: 預認證(preAuthenticated)
T: 轉發策略已檢查(Transit policy checked)
O: 可委托(Okay as delegate)
a: 匿名(anonymous)
以下是一個示例列表。在這個例子中,用戶 Jennifer 獲取了初始票據(I),這些票據是可轉發的(F)和預設日期的(d),但尚未驗證(i):

shell% klist -f
Ticket cache: /tmp/krb5cc_320
Default principal: jennifer@ATHENA.MIT.EDUValid starting      Expires             Service principal
31/07/05 19:06:25  31/07/05 19:16:25  krbtgt/ATHENA.MIT.EDU@ATHENA.MIT.EDUFlags: FdiI
shell%

在以下示例中,用戶 david 的票據從另一臺主機轉發(f)到此主機。這些票據是可以再次轉發的(F)

shell% klist -f
Ticket cache: /tmp/krb5cc_p11795
Default principal: david@EXAMPLE.COMValid starting     Expires            Service principal
07/31/05 11:52:29  07/31/05 21:11:23  krbtgt/EXAMPLE.COM@EXAMPLE.COMFlags: Ff
07/31/05 12:03:48  07/31/05 21:11:23  host/trillium.example.com@EXAMPLE.COMFlags: Ff
shell%

使用 kdestroy 銷毀票據

您的 Kerberos 票據是證明您確實是您自己的憑證,如果有人獲得了存儲這些票據的計算機的訪問權限,票據可能會被竊取。一旦發生這種情況,擁有這些票據的人可以在票據過期之前冒充您。因此,當您離開計算機時,應該銷毀您的 Kerberos 票據。

銷毀票據非常簡單。只需輸入 kdestroy

shell% kdestroy
shell%

如果 kdestroy 未能銷毀您的票據,它會發出提示音并顯示錯誤消息。例如,如果 kdestroy 找不到任何可銷毀的票據,它會顯示以下消息:

shell% kdestroy
kdestroy: 在銷毀緩存時未找到憑據緩存文件
shell%

.k5identity 文件描述

.k5identity 文件位于用戶的家目錄中,包含了一組規則,用于根據訪問的服務器選擇客戶端主體。這些規則用于在可能的情況下從緩存集合中選擇一個憑證緩存。

空白行和以 # 開頭的行將被忽略。每一行的格式如下:

principal_field=value ...

如果服務器主體滿足所有字段約束條件,則選擇該主體作為客戶端主體。以下字段被識別:

  • realm
  • 如果已知服務器主體的域(realm),則將其與值進行匹配,該值可以使用 shell 通配符。對于基于主機的服務器主體,通常只有在 krb5.conf 中有主機名映射時,域才會被知道。
  • service
  • 如果服務器主體是基于主機的主體,則將其服務組件與值進行匹配,該值可以使用 shell 通配符。
  • host
  • 如果服務器主體是基于主機的主體,則將其主機名組件轉換為小寫,并與值進行匹配,該值可以使用 shell 通配符。
  • 如果服務器主體符合 .k5identity 文件中的多個行的約束條件,則使用第一個匹配行的主體。如果沒有行匹配,則將通過其他方式選擇憑證,例如域啟發式或當前主要緩存。

示例

以下示例 .k5identity 文件在服務器主體屬于該領域時選擇客戶端主體 alice@KRBTEST.COM,在服務器主機位于子域內時選擇主體 alice/root@EXAMPLE.COM,以及在訪問 mail.example.com 上的 IMAP 服務時選擇主體 alice/mail@EXAMPLE.COM:

alice@KRBTEST.COM       realm=KRBTEST.COM
alice/root@EXAMPLE.COM  host=*.servers.example.com
alice/mail@EXAMPLE.COM  host=mail.example.com service=imap

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

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

相關文章

WPF 免費UI 控件HandyControl

示例效果和代碼 直接可以用 Button 按鈕 | HandyOrg 1.安裝 , 輸入 HandyControl 2.<!--配置HandyControl--> <!--配置HandyControl--> <ResourceDictionary Source"pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml"/> …

windows部署docker

1.下載docker 打開瀏覽器&#xff0c;訪問 Docker Desktop 下載頁面。 2.安裝 Docker Desktop 運行安裝程序&#xff1a; 雙擊下載的 Docker Desktop 安裝包&#xff0c;啟動安裝程序。 選擇安裝選項&#xff1a; 按照屏幕上的指示進行操作。建議選擇默認選項&#xff0c;包…

【Linux】遠程登錄時,使用圖形界面報錯:MoTTY X11 proxy: Unsupported authorisation protocol

1、問題描述 使用 MobaXterm 遠程登錄Ubuntu后,使用sudo權限運行圖形界面程序報錯: MoTTY X11 proxy: Unsupported authorisation protocol (gpartedbin:10518): Gtk-WARNING **: 22:01:34.377: cannot open display: localhost:10.02、查看SSH配置 修改 SSH 服務端配置,…

解決 Hugging Face SentenceTransformer 下載失敗的完整指南:ProxyError、SSLError與手動下載方案

問題背景 在使用 Hugging Face 的 SentenceTransformer 加載預訓練模型 all-MiniLM-L6-v2 時&#xff0c;遇到了以下錯誤&#xff1a; 代理連接失敗&#xff08;ProxyError / SSLError: KRB5_S_TKT_NYV&#xff09;大文件下載中斷&#xff08;unexpected EOF while reading&a…

MySQL——DQL的單表查詢

1、查詢表中所有的字段&#xff08;列&#xff09; 語法&#xff1a;select * from 表名; * 是通配符&#xff0c;用來表示所有的字段&#xff08;列&#xff09;。 select 表示查詢哪些列。 from 表示從哪張表中查詢。 2、查詢表中指定的字段 語法&#xff1a;select 列…

開源RuoYi AI助手平臺的未來趨勢

近年來&#xff0c;人工智能技術的迅猛發展已經深刻地改變了我們的生活和工作方式。 無論是海外的GPT、Claude等國際知名AI助手&#xff0c;還是國內的DeepSeek、Kimi、Qwen等本土化解決方案&#xff0c;都為用戶提供了前所未有的便利。然而&#xff0c;對于那些希望構建屬于自…

[WUSTCTF2020]CV Maker1

進來是個華麗的界面&#xff0c;我們先跟隨這個網頁創造一個用戶 發現了一個上傳端口&#xff0c;嘗試上傳一個php文件并抓包 直接上傳進不去&#xff0c;加個GIF89A uploads/d41d8cd98f00b204e9800998ecf8427e.php 傳入 并且報告了 上傳路徑&#xff0c;然后使用蟻劍連接

Spring 中的 IOC

&#x1f331; 一、什么是 IOC&#xff1f; &#x1f4d6; 定義&#xff08;通俗理解&#xff09;&#xff1a; IOC&#xff08;Inversion of Control&#xff0c;控制反轉&#xff09; 是一種設計思想&#xff1a;對象不再由你自己創建和管理&#xff0c;而是交給 Spring 容器…

Vue2-實現elementUI的select全選功能

文章目錄 使用 Element UI 的全選功能自定義選項來模擬全選 在使用 Element UI 的 el-select組件時&#xff0c;實現“全選”功能&#xff0c;通常有兩種方式&#xff1a;一種是使用內置的全選功能&#xff0c;另一種是通過自定義選項來模擬全選。 使用 Element UI 的全選功能…

小菜Go:Ubuntu下Go語言開發環境搭建

前置要求Ubuntu環境搭建 文章推薦 此處推薦一個比較好的文章&#xff0c;基本按部就班就歐克~ 安裝虛擬機&#xff08;VMware&#xff09;保姆級教程&#xff08;附安裝包&#xff09;_vmware虛擬機-CSDN博客 安裝可能遇到的問題 虛擬機安裝遇到的問題如&#xff1a;Exception…

安卓中app_process運行報錯Aborted,怎么查看具體的報錯日志

我在pc端生成了一個jar包&#xff0c;可以正常執行&#xff0c;但是導入到安卓的/data/local/tmp下面執行就會報錯 執行命令如下&#xff1a; adb shell cd /data/local/tmp app_process -Djava.class.path/data/local/tmp/demo.jar /data/local/tmp com.example.demo.Hello然…

Python 面向對象 - 依賴倒置原則 (DIP)

1. 核心概念 依賴倒置原則(Dependency Inversion Principle, DIP) 是SOLID原則中的"D"&#xff0c;包含兩個關鍵點&#xff1a; 高層模塊不應依賴低層模塊&#xff0c;二者都應依賴抽象抽象不應依賴細節&#xff0c;細節應依賴抽象 2. 使用場景 典型應用場景 系…

centos7 yum install docker 安裝錯誤

1、錯誤信息&#xff1a; [rootlocalhost atguigu]# yum install docker 已加載插件&#xff1a;fastestmirror, langpacks Repository base is listed more than once in the configuration Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http:…

【Gorm】模型定義

intro package mainimport ("gorm.io/gorm""gorm.io/driver/sqlite" // GORM 使用該驅動來連接和操作 SQLite 數據庫。 )type Product struct {gorm.Model // 嵌入GORM 內置的模型結構&#xff0c;包含 ID、CreatedAt、UpdatedAt、DeletedAt 四個字段Cod…

R語言從專家到小白

文章目錄 下載安裝R下載安裝R StudioCRAN 下載安裝R Index of /bin https://cran.r-project.org/ 下載安裝R Studio https://posit.co/download/rstudio-desktop/ CRAN R綜合檔案網絡。 CRAN 鏡像是一個提供 R 語言軟件和包的在線服務&#xff0c;用戶可以從不同的地區選擇…

Java的Selenium的特殊元素操作與定位之時間日期控件

分為兩種情況: 控件沒有限制手動輸入&#xff0c;則直接調用sendKeys方法寫入時間數據 //時間日期控件處理 chromeDriver.get ("https://www,fliggy,com/?ttidsem.000000736&hlreferidbaidu.082076&route sourceseo"); chromeDriver.findElement (By.xpat…

38常用控件_QWidget的enable屬性(2)

實現用另一個按鈕切換之前按鈕的“可用”狀態 在同一個界面中,要求不同的控件的 objectName 也是必須不同的.(不能重復&#xff09; 后續就可以通過 ui->objectName 方式來獲取到對應的控件對象了 ui->pushButton // 得到了第一個按鈕對應的對象 ui->pushButton 2 //…

【Linux學習筆記】初識進程概念和進程PCB

【Linux學習筆記】初識馮諾依曼體系和進程PCB &#x1f525;個人主頁&#xff1a;大白的編程日記 &#x1f525;專欄&#xff1a;Linux學習筆記 文章目錄 【Linux學習筆記】初識馮諾依曼體系和進程PCB前言一. 馮諾依曼體系結構1.1 關于馮諾依曼體系的要點&#xff1a; 二. 操…

7.3 主成分分析(PCA)

一、協方差矩陣 這節是介紹 SVD 在統計和數據分析中的一個主要應用&#xff0c;即主成分分析。例子來自于人類的基因組&#xff0c;臉部識別和金融&#xff0c;目的是理解一個大的數據矩陣&#xff08;測量值&#xff09;。對于 n n n 個樣本&#xff0c;我們每個測量 m m m…

anaconda安裝使用+pytorch環境配置(cpu)+pycharm環境配置(詳細教程)

一、anaconda下載 1.anaconda官網嘗試下載&#xff1a; 官網網址&#xff1a;Anaconda | Built to Advance Open Source AI 1.進入官網 2.點擊Products->Distribution&#xff0c;跳過注冊進入下載頁面 3.選擇系統下載 2.清華鏡像下載 1.網址&#xff1a;Index of /anac…