インターネットにアクセスできず、コンピュータを再起動できない場合は、どのように回復できますか?
chmod -x chmod
?
答え1
1 - プログラミング言語を使用した実装chmod
ルビー:
ruby -e 'require "fileutils"; FileUtils.chmod 0755, “chmod"'
Python:
python -c "import os;os.chmod('/bin/chmod', 0755)”
真珠:
perl -e 'chmod 0755, “chmod”'
ノード.js:
require("fs").chmod("/bin/chmod", 0755);
氏:
$ cat - > restore_chmod.c
#include <sys/types.h>
#include <sys/stat.h>
int main () {
chmod( "/bin/chmod", 0000755 );
}
^D
$ cc restore_chmod.c
$ ./a.out
2 - chmodを使用して別の実行可能ファイルを作成する
実行可能ファイルを作成して:
$ cat - > chmod.c
int main () { }
^D
$ cc chmod.c
$ cat /bin/chmod > a.out
実行可能ファイルをコピーします。
$ cp cat new_chmod
$ cat chmod > new_chmod
3 - BusyBoxの起動(内部にchmodを含む)
4 - Gnu Tarの使用
特定の権限を持つアーカイブを作成し、それを使用してchmodを復元します。
$ tar --mode 0755 -cf chmod.tar /bin/chmod
$ tar xvf chmod.tar
ファイルを作成しなくても、すぐに同じことができます。
tar --mode 755 -cvf - chmod | tar xvf -
別のマシンのソケットを開き、アーカイブを作成してローカルに復元します。
$ tar --preserve-permissions -cf chmod.tar chmod
$ tar xvf chmod.tar
もう1つの可能性は、定期的にアーカイブを作成し、編集して権限を変更することです。
5 -cpio
cpio
アーカイブを操作できます。を実行すると、cpio file
最初の21バイトの後にファイル権限を表す3バイトが続きます。
echo chmod |
cpio -o |
perl -pe 's/^(.{21}).../${1}755/' |
cpio -i -u
6 - 動的ローダー
/bin/ld.so chmod +x chmod
(実際の経路は異なる場合があります)
7 -/proc
魔法(テストされていない)
ステップバイステップ:
- inodeをキャッシュ(など)に強制するためにいくつかのことを行い
attrib
ますls -@
。 - kcoreのVFS構造の確認
sed
カーネルが認識しないまま実行ビットを変更するため、または同様の方法を使用するchmod +x chmod
一度実行
8 - タイムトラベル(git、まだテストされていません)
まず、他の要因の影響を受けないことを確認したいと思います。
$ mkdir sandbox
$ mv chmod sandbox/
$ cd sandbox
それでは、リポジトリを作成して返すことができるコンテンツとして表示しましょう。
$ git init
$ git add chmod
$ git commit -m '1985'
それでは、時間旅行について話しましょう。
$ rm chmod
$ git-update-index --chmod=+x chmod
$ git checkout '1985'
gitベースのソリューションはたくさんありますが、実際にシステムを使用しようとしているgitスクリプトに遭遇する可能性があることを警告する必要があります。chmod
9 - 火で火を鎮める
あるオペレーティングシステムを他のオペレーティングシステムと比較できれば良いでしょう。つまり、マシン内部でオペレーティングシステムを起動し、外部ファイルシステムへのアクセス権を付与できる場合です。残念ながら、起動するほとんどすべてのオペレーティングシステムは、Docker、コンテナ、Jailなどの一種の内部にあります。したがって、残念ながらこれは不可能です。
それともそうでしょうか?
これがEMACのソリューションです:
Ctrl+x b > *scratch*
(set-file-modes "/bin/chmod" (string-to-number "0755" 8))
Ctrl+j
10 - ウィム
EMACソリューションの唯一の問題は、私が実際にVimタイプの人であることです。最初にこのトピックに取り組んだとき、Vimはこれを行う方法はありませんでしたが、ここ数年で誰かが宇宙を修正したので、次のことができます。
vim -c "call setfperm('chmod', 'rwxrwxrwx') | quit"