…生活與工作…個人的生活雜記….

QNAP Container Station檔案權限被複寫拯救方法

最近在整理QNAP裡面的資料,當你手癢按下了分享資料夾的進階資料夾權限之後,會發現可能某些網站會出現”Server unable to read htaccess file, denying access to be safe”這個403錯誤,可是你會發現在目錄內卻沒有.htaccess這個檔案。

想想可能是進階資料夾權限搞的鬼後,就把它取消。

恭喜你,就會遇到跟我一樣的冏況,在Container Station內的LXD容器權限全部變成777、ssh無法登入、主控台不能使用sudo變更權限等等問題。

或是出現 sudo: error while loading shared libraries: libsudo_util.so.0: cannot open shared object file: No such file or directory

權限錯亂

解決方法看到很多都推薦 “重裝”,可是有些東西重裝是很麻煩的。

我這邊有些方法可以提供給手癢的你試試。

取回sudo

我目前使用的是ubuntu系統,所以這邊都是以ubuntu的指令為主,如果有其他系統是使用者就請參閱各系統的指令,應該是大同小異。

在Container Station容器的終端機輸入 /bin/sh 進入終端介面,然後將以下指令貼上。

chown root:root /usr/bin/sudo
chmod 4755 /usr/bin/sudo
chmod 644 /usr/lib/sudo/sudoers.so
chmod 644 /etc/sudoers
chmod 755 /etc/sudoers.d
chmod 755 /etc/sudoers.d/90-lxd
chmod 755 /etc/sudoers.d/README

這樣應該就可以正常使用sudo了,如果有問題就看是哪個檔案權限錯誤,使用chmod修改即可。

取得套件acl

acl是用來查詢與修改linux檔案細部權限的套件,它可以查看權限外,還可以針對擁有者、擁有群組、其他使用者、其他群組做詳細設定。我們會使用到2個指令 getfacl 與 setfacl。

因為可以用sudo了,所以我們可以直接在主控台執行。

acl安裝方式如下:

sudo apt install acl -y

還原權限

我們必須要建立一個新的容器,這容器的版本與套件必須要與你的舊容器相同。建立完成的新容器安裝好acl後在根目錄執行以下指令:

sudo getfacl -R . > acl.txt

這樣就會建立出正確的權限資料,然後將這檔案移到你舊容器的根目錄(可以直接在NAS搬移,Container Station的目錄在 /var/lib/lxd/storage-pools/default/containers/),並且執行下面指令:

sudo setfacl --restore=acl.txt

等到執行完畢後就可以將容器重啟,待重啟完成後權限就會恢復正常了。ssh等服務也可以正常使用了。