プロジェクトフォルダで「sudo chmod -R 777 ./」を「sudo chmod -R 777 /」と打ってしまったようだ。
suコマンドやsudoコマンドの実行、VSCodeの起動等何もできなくなってしまった。
VMのイメージのバックアップはあるので1からプロジェクトを作り直せば解決はするのだが、滅多に起きないトラブルなのでどこまで復活できるか試してみた。
はじめに
- setuidが必要なコマンドの復旧
- sshd関係のアクセス権の修復
- VSCodeが起動しない!!
- 小ネタ
環境
仮想マシン:VirtualBox
OS:CentOS (GNOME Desktop)
IDE:VSCode
setuidが必要なコマンドの復旧
su, sudoはsetuidが必要であるがパーミッションを777に変えたことでsetuidが落ちてしまい実行出来なくなった。本来の4755に戻す必要がある。
幸いrootのログインが許可されていたのでCentOSのGNOME Desktopからrootでログインを試みた。
ログインユーザが入力できない場合Ctrl+Alt+F2でユーザ名を変更できる。
ログインできたので早速ターミナルを起動して以下のコマンドを実行。
$ chmod 4755 /bin/su
$ chmod 4755 /bin/sudo
rootをログアウトし、通常のユーザでログインする。
suコマンドが使えるようになったがsudoコマンドはいくつかのファイルの権限をチェックするらしく、エラーが出て実行できない。
sudoコマンドの権限を戻していく。
$ su -
$ password:
$ chmod 755 /etc/sudoers.d
$ chmod 644 /usr/libexec/sudo/sudoers.so
$ chmod 440 /etc/sudoers
$ chmod 644 /etc/sudo.conf
sudoコマンドが使えるようになった。
sshd関係のアクセス権の修復
system.logを確認するとSSH関係のWarningが出ているので権限を戻していく。
$ chmod #### /xx/xxkey ←後日記載
$ chmod #### /xx/xxkey ←後日記載
$ chmod #### /xx/xxkey ←後日記載
VSCodeが起動しない!!
開発プロジェクトに問題ないかGNOMEのランチャからVSCodeを起動。しかし、起動せずアラートすら出ない。
何かエラーがでていないかsystem.logを確認したがVSCodeに関するログはない。
今度はターミナルから直接コマンドを実行してみる。しかし、エラーメッセージも表示されず終わる。
$ code .
$
codeコマンドにオプションをつけて実行してみるといつもの出力がされた。パスが通っていないわけではないようだ。
$ code --help
$ code -v
しばらく手詰まり。。。
ランチャのアプリに起動コマンドの定義があることを知った。
/usr/share/applications/に移動する。
VSCodeのアプリのアイコンを右クリックして「プロパティ」を確認。
基本タブ-起動コマンド:"/usr/share/code/code --unity-launch %F"
%Fは多分ファイル名だろう。ファイル名は省略してこの1行をターミナルで実行してみる。
$ /usr/share/code/code --unity-launch
:FATAL:setuid_sandbox_host.cc(158)] The SUID sandbox helper binary was found, but is not configured correctly. Rather than run without sandboxing I'm aborting now. You need to make sure that /usr/share/code/chrome-sandbox is owned by root and has mode 4755.
エラーきたー!
エラーに従って権限を戻す。
$ su -
$ password:
$ cd /usr/share/code/
$ chmod 4755 chrome-sandbox
VSCodeの起動を試みる。
きたー!VSCodeきたー!
小ネタ
/etc/sudo.confの権限を戻す前にsudoコマンドを実行すると以下のメッセージがでる。
$ sudo [コマンド]
/etc/sudo.conf is world writable
あなたはシステム管理者から通常の講習を受けたはずです。
これは通常、以下の3点に要約されます!
#1) 他人のブライバシーを尊重すること。
#2) タイプする前に考えること。
#3)大いなる力には大いなる責任が伴うこと。
password:
$
滅多にお目にかかれないメッセージに遭遇してビビった。
3番目のメッセージは古くからの格言だがスパイダーマンで有名になった言葉らしい。
おわりに
教訓 権限変更はフォルダを指定しよう。chmod -R [パーミッション] [任意のフォルダ名]
参照URL
suコマンドの権限変更からVSCode起動までに参考にさせていただいたページがたくさんありました。
URLを保存していなかったので紹介できませんがお礼を申し上げます。