Go-Ethereum

Mist 可以(通過 IPC)與其他使用者執行的 geth 實例通信嗎?

  • May 19, 2017

我知道Mist 無法連接到另一台電腦中的 geth 節點,但是如何連接在同一台電腦上但在不同使用者下執行的 geth 實例?

我的目標是讓 Alice 和 Bob 在同一個 Linux 機器上執行同一個錢包(通過 Mist),但是當電腦啟動時,geth 總是在後台執行,這樣區塊鏈總是在沒有需要讓 Mist UI 24/7 全天候打開。

為此,我創建了一個名為 的使用者geth,並創建了一個名為的共享文件夾,該文件夾/home/shared將保存.ethereum子文件夾。然後我為所有使用者創建這些符號連結:

/home/geth/.ethereum -> /home/shared/.ethereum
/home/alice/.ethereum -> /home/shared/.ethereum
/home/bob/.ethereum -> /home/shared/.ethereum

然後我執行geth

sudo runuser -l geth -c 'nohup /home/shared/Ethereum-Wallet-linux64-0-8-1/resources/node/geth/geth > /home/geth/geth.log 2>&1 &' &

它似乎執行和同步良好。問題是當我嘗試在 alice 或 bob 的會話中執行 Mist 時,它給出:

[2016-08-06 15:02:36.604] [INFO] Sockets/node-ipc - Connect to {"path":"/home/alice/.ethereum/geth.ipc"}
[2016-08-06 15:02:36.621] [WARN] Sockets/node-ipc - Connection failed, retrying after 1000ms...
[2016-08-06 15:02:37.623] [WARN] Sockets/node-ipc - Connection failed, retrying after 1000ms...
[2016-08-06 15:02:38.624] [WARN] Sockets/node-ipc - Connection failed, retrying after 1000ms...
[2016-08-06 15:02:39.626] [WARN] Sockets/node-ipc - Connection failed, retrying after 1000ms...
[2016-08-06 15:02:40.626] [WARN] Sockets/node-ipc - Connection failed, retrying after 1000ms...
[2016-08-06 15:02:41.628] [WARN] Sockets/node-ipc - Connection failed, retrying after 1000ms...
[2016-08-06 15:02:42.630] [WARN] Sockets/node-ipc - Connection failed, retrying after 1000ms...

我認為這是一個權限問題,但我創建了一個名為 的 unix 組family,將所有使用者(geth、alice 和 bob)放入其中,並為所有人提供了足夠的權限來讀取 ipc 文件,證明:

$ ls -lha /home/alice/.ethereum/
total 496K
drwxrwx--- 6 alice family 4.0K Aug  6 14:58 .
drwxrwsr-x 5 alice family 4.0K Aug  5 17:19 ..
drwxrwx--- 2 alice family 468K Aug  6 15:16 chaindata
drwxrwx--- 2 alice family 4.0K Aug  6 14:58 dapp
srwxrwx--- 1 geth  family    0 Aug  6 14:58 geth.ipc
drwxrwx--- 2 alice family 4.0K Aug  5 12:21 keystore
-rw-rwx--- 1 alice family   64 Aug  5 11:40 nodekey
drwxrwx--- 2 alice family 4.0K Aug  6 14:58 nodes

但是,在進行這些權限更改後,它仍然無法連接。IPC 連接有什麼問題?

**更新:**顯然,在我停止 geth 並再次執行它之後,它會再次重新創建文件,但只有 600 個權限。所以也許在創建文件後更改權限是不夠的,我必須讓 geth 創建具有正確權限的文件?我試圖通過做兩件事來做到這一點:

  1. 使用umask 022:這不起作用,無論是通過添加它/home/geth/.profile還是在啟動 geth via 之前添加它sudo runuser -l geth -c 'umask 022 && nohup /home/shared/Ethereum-Wallet-linux64-0-8-1/resources/node/geth/geth > /home/geth/geth.log 2>&1 &' &
  2. 使用 ACL:做setfacl -d --set u::rwx,g::rwx,o::- /home/shared/.ethereum. 還是不行。
  3. 通過設置文件夾的getid sudo chmod g+s /home/shared/.ethereum

它仍然不起作用,geth繼續在 /home/shared/.ethereum 中創建一個 600 文件而不是 660

**更新二:**更改 ipc 文件的權限以777使其工作!!!為什麼770不工作?我很困惑。我不想使用 777,因為它似乎存在安全風險。

:'(

$ getfacl geth.ipc 
# file: geth.ipc
# owner: geth
# group: gatecoin
user::rwx
group::rwx
other::---

我解決了這個問題,考慮到這兩點:

  • 我正在使用umask 022,但正確的做法是umask 002. 但是,這仍然不起作用(可能是因為 geth 在創建套接字文件時對遮罩進行了硬編碼,而不是查詢使用者的預設 umask)。作為解決方法,我在啟動 geth 後不久在套接字文件上使用 chmod 770。
  • 組權限是正確的,但是將使用者添加到與使用者相同的組後geth,我忘記了使用者必須重新登錄才能使更改生效。重新啟動電腦後,所有權限都開始工作。

引用自:https://ethereum.stackexchange.com/questions/7799