etcディレクトリからchmod -R +xを復元する方法は?

etcディレクトリからchmod -R +xを復元する方法は?

Ubuntu 20.04.5 LTSを実行していますが、chmod -Rコマンドがめちゃくちゃになりました!

.chmodchmod -R +x ./etcを作成するのではなく、chmodを実行したときに間違ったディレクトリを入力しました。chmod -R +x /etc

これで、/ etc のすべてのエントリとすべてのサブフォルダとファイルには+x権限があります。

/etc/sshからx権限を削除してサーバーへのSSH接続を変更することができましたが、これまでは他のサービスが正常に動作しているように見えますが、遅かれ早かれこれによって他のサービスが失敗する可能性があるため、回避したいと思います。それ。できるだけ早く問題を解決するにはどうすればよいですか?

ベストアンサー1

私の経験によると、最高権限の問題を処理する方法は、バックアップから再インストールすることです。

少なくともバックアップがない場合は、どのファイルにどの権限が必要かを最善の推測しかできません。

つまり、私のシステムを探索した後、始点として使用できる非常に良い最高の推測を見つけたようです。

問題が発生した場合に備えて、現在の権限で現在の/ etcをバックアップすることを検討してください。

sudo cp -R /etc /etc.bak

まず、/ etcの下のすべてのファイルのリストを取得します。

sudo find /etc -type f > allfiles.txt

私の推測では、「shebang」を持つすべてのエントリは実行可能なスクリプトなので、実行可能なままにする必要があります。

sudo find /etc -type f -exec grep --files-with-matches --binary-files=without-match '#!' {} + > shebang.txt

/etcでshebangが含まれていないファイルのリストを見つける必要があります。以下を実行してこれを行うことができます。

cat allfiles.txt shebang.txt | sort | uniq -u > nonexecutable.txt

この時点でヘルスチェックを実行し、各ファイルに数行があることを確認します。

wc -l *.txt

私の場合、etcには約4000個のファイルのリストがあり、約125個にshebangsが含まれており、約3900個のファイルがnonexecutable.txtにあります。

カウントに満足している場合(比較するバックアップなしでは話すことは困難です)、最終的にすべての非実行ファイルを変更して実行ビットを削除できます。

cat allfiles.txt shebang.txt | sort | uniq -u | xargs -n1 chmod -x

xargsは実行できないファイルのリストを取得し、1つずつ分割し(flagsを使用-n1)、各ファイルをコマンドに渡します。chmod -x


既知の問題:

1. この方法でキャプチャされなかった実行可能ファイルは /etc にあります。何らかの理由で/ etcにshebangなしで返された実行可能ファイルがあります。

他のすべてのコマンドを実行した後、この問題を解決したコマンドは次のとおりです。

find /etc -iname 'resolved' -exec chmod +x {} +

しかし、権限が変更される前に他のどの実行可能ファイルがあったかはわかりません。

2. ディレクトリ権限を変更する方法がわかりません。一部のディレクトリは誰でも読み取れず、実行可能なビットがあってはなりません。希望これらのディレクトリの機密ファイルには読み取り権限が無効になっています。

3. Shebang検索はバイナリ実行可能ファイルをキャプチャしません。 / etcディレクトリにバイナリ実行可能ファイルがないため、リスクが低い可能性があります。

4. 自分のシステムで実行できない shebang を含むファイルが複数あります。これには複数のufw .initスクリプトが含まれています。


以下は、私が見つけたいくつかの実行可能ファイルの概要です。シェバン検索して発見したと思います。

  • /etc/init.dの下のすべてのファイル
  • /etc/kernel の下のすべてのファイル
  • /etc/update-motd.dの下のすべてのファイル
  • /etc/pm/sleep.dの下のすべてのファイル
  • /etc/grub.dの下のほとんどのファイル(READMEを除く)
  • /etc/cron.* 以下のほとんどのファイル(cron.d ディレクトリを除く)
  • /etc/console-setup/*.sh
  • /etc/X11/Xsession
  • /etc/X11/Xreset

おすすめ記事