Go-Ethereum
Mist 可以(通過 IPC)與其他使用者執行的 geth 實例通信嗎?
我知道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 創建具有正確權限的文件?我試圖通過做兩件事來做到這一點:
- 使用
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 &' &
- 使用 ACL:做
setfacl -d --set u::rwx,g::rwx,o::- /home/shared/.ethereum
. 還是不行。- 通過設置文件夾的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
,我忘記了使用者必須重新登錄才能使更改生效。重新啟動電腦後,所有權限都開始工作。