興味深いディスカッションスレッドに出くわしました Twitter上で。面接の質問です。問題は-Chmodコマンドの実行可能権限が誤って削除された場合はどうしますか? ご存知かもしれませんが、chmod( Ch の略) アンジュmod e)コマンドは、Unixライクなシステムでファイルまたはディレクトリのアクセス許可を設定または変更するために使用されます。したがって、chmodの実行可能パーミッションが削除された場合、chmodコマンド自体を含むプログラムにパーミッションを割り当てることはできません。あなたはインタビューパネルに座っていて、インタビュアーがこの質問をしました。では、Linuxでchmodコマンドの実行可能権限をどのように復元しますか?
「他のシステムからchmodバイナリをコピーしますか?」と返信する場合があります。ええと、あなたはただ一つのシステムを与えられています。したがって、chmodバイナリを他のシステムからコピーすることはできません。 「perlから実行ビットを設定します」と再度返信することができます。インタビュアーは「あなたのマシンには通訳がいません」と言っています。また、インターネット/電話接続がないため、誰にも助けを求めることはできません。このような悲惨な状況で、Chmodコマンドの実行可能権限をどのように復元しますか?あなたがすでに答えを知っているなら、あなたの知性に大きな親指を立ててください。あなたが批判的思考者ではない場合(私のように!)、読んでください。
警告:
本番システムでchmodコマンドの実行権限を削除しないでください。 VMまたはテストマシンでこれを試してください。教育目的のためだけです。
Chmodコマンドの実行可能権限を誤って削除した場合はどうしますか?
次のコマンドを誤って実行したとしましょう:
# chmod -x $(which chmod)
ここでは、 -x フラグは、指定されたプログラムの実行可能権限を削除します。私たちの場合はchmodです。
あなたは非常に好奇心が強く、このコマンドが何をするのか本当にわかりません。これで、chmodコマンドの実行権限が失われました。 chmod実行可能権限を再度復元する方法はありません。権限を設定しようとすると、次のコマンドが実行されます。
# chmod +x $(which chmod)
次のエラーメッセージが表示されます:
bash: /usr/bin/chmod: Permission denied
ログアウトして他のsudoユーザーから試してみても、chmodコマンドを使用して権限を割り当てることはできません:
$ sudo chmod +x $(which chmod) sudo: chmod: command not found
chmodのアクセス許可を元に戻すにはどうすればよいですか?ええと、思ったより簡単です。
LinuxでChmodコマンドの実行可能権限を復元する
chmodの実行権限を復元する方法はいくつかあります。ここでは、7つの方法を示しました。
方法1-chmodバイナリの内容を他の動作中のバイナリにコピーします
chmodコマンドの実行可能権限のみを削除し、他のコマンドの権限は削除しなかったことを覚えておいてください。右?はい!他のコマンドには、実行可能権限があります。したがって、chmodコマンドの内容を他の実行可能コマンド(「mkdir」など)にコピーしてこの問題を修正し、chmod実行可能ファイルのアクセス許可を元に戻すことができます。
コピーする前に、次のコマンドを使用してmkdirコマンドのバックアップを取りましょう:
# cp /usr/bin/mkdir /usr/bin/mkdir.bak
次に、「cat」コマンドを使用して、/ usr / bin/chmodの内容を/usr/ chmod/mkdirにコピーします。
# cat /usr/bin/chmod > /usr/bin/mkdir
これで、mkdirコマンドはchmodコマンドになりました(chmodの内容をmkdirバイナリにコピーしたため)。
次に、次のコマンドを使用して、実際のchmodバイナリの実行可能ファイルを復元します。
# mkdir +x /usr/bin/chmod
または、mkdirの内容をchmodバイナリにコピーして戻すこともできます。
# mv /usr/bin/mkdir /usr/bin/chmod
最後に、バックアップから元のmkdirコマンドを復元します。
# mv /usr/bin/mkdir.bak /usr/bin/mkdir
終わり! chmodコマンドの実行権限が正常に復元されました。
「ls」コマンドを使用して実行可能ファイルのアクセス許可が復元されているかどうかを確認します。
# ls -l /usr/bin/chmod
または、
# ls -l $(which chmod) -r-xr-xr-x 1 root root 63864 May 27 07:16 /usr/bin/chmod
上記の出力の文字「x」に注意してください。実行許可を示します。
以下のように、chmodを使用して他のプログラムに実行可能アクセス許可を割り当てることによっても確認できます。
# chmod +x ostechnix.sh
# ls -l total 0 -rwxr-xr-x 1 root root 0 May 27 07:43 ostechnix.sh
何も覚える必要がないので、これが最も簡単な方法です。 catコマンドを使用してchmodの内容を他のコマンドにコピーし、実行権限を復元しただけです。
Ubuntu20.04サーバーエディションでテストしました。他のLinuxディストリビューションでは、chmodバイナリファイルが / bin /で利用できる場合があります。 ディレクトリ。次のコマンドを使用して、chmodバイナリの場所を見つけることができます:
$ which chmod
ただし、これは方法だけではありません。私はグーグルで簡単に検索し、さらにいくつかの方法を見つけました。次のコマンドを覚える必要があるかもしれません。
方法2-cpコマンドを使用する
chmodへの実行可能権限を復元するこの別の方法。
この方法では、「cp」コマンドを使用して属性をコピーします。
# cp --attributes-only --preserve=mode /proc/self/exe /usr/bin/chmod
方法3-GNUリンカー/ローダー(ld)を使用
この方法では、「ld」ローダーを直接実行し、以下のように実行するコマンドを渡すことができます。
# /lib64/ld-linux-x86-64.so.2 /usr/bin/chmod +x /usr/bin/chmod
32ビットシステムを使用する場合、コマンドは次のようになります。
$ /lib/ld-linux.so /usr/bin/chmod +x /usr/bin/chmod
ローダーへのパスは、使用するLinuxディストリビューションによって大きく異なる場合があります。上記のコマンドはUbuntuとその派生物用です。他のディストリビューションでは、パスが異なる場合があります:
# /lib/libc.musl-x86_64.so.1 /bin/chmod +x /bin/chmod
方法4-setfaclを使用する
「setfacl」コマンドを使用して、chmodの実行可能権限を復元できます。
まず、読み取りおよび実行権限を持つユーザーのchmodバイナリファイルのACLを変更します。
# setfacl -m u::rx /usr/bin/chmod
次に、chmodのアクセス許可を元のアクセス許可に戻します。
# chmod +x $(which chmod)
最後に、chmodのすべてのACLエントリを削除します。これはオプションです。
# setfacl -b /usr/bin/chmod
setfaclコマンドが使用できない場合は、「acl」パッケージをインストールします。たとえば、次のコマンドを実行して、Debian、Ubuntu、およびその派生物にaclをインストールします。
# apt install acl
方法5-rsyncを使用する
Rsyncは、システム間でファイルやディレクトリをコピーまたはバックアップするためだけのものではありません。また、ファイルに権限を割り当てるためにも使用できます。
まず、ユーザー、グループなどすべてに実行可能権限を割り当てながら、chmodバイナリファイルを/tmpの場所にコピーしましょう。
# rsync /usr/bin/chmod /tmp/chmod --chmod=ugo+x
次に、実行権限がchmodに割り当てられているかどうかを確認します:
$ ls -l /tmp/chmod
出力例:
-r-xr-xr-x 1 root root 63864 May 27 10:01 /tmp/chmod
権限に問題がない場合は、元のファイルを/ tmp/chmodファイルで上書きするだけです。
# mv /tmp/chmod /usr/bin
方法6-Busyboxの使用
最近の一部のLinuxディストリビューションには、「Busybox」があります。 デフォルトでインストールされます。 Busyboxのmanページから
BusyBoxは、多くの一般的なUNIXユーティリティの小さなバージョンを1つの小さな実行可能ファイルに結合します。これは、GNU coreutils、util-linuxなどで通常見られるほとんどのユーティリティの最小限の代替品を提供します。BusyBoxのユーティリティは、通常、フル機能のGNUいとこよりもオプションが少なくなっています。ただし、含まれているオプションは期待される機能を提供し、GNUの対応するものと非常によく似た動作をします。
busyboxでChmod実行権限を復元するには、次のコマンドを実行します:
# busybox chmod +x /usr/bin/chmod
方法7-Perlの使用
システムでPerlが利用できる場合に備えて、次のコマンドを使用してChmodの実行権限を修正できます。
# perl -e 'chmod 0755, "/usr/bin/chmod"'
ご覧のとおり、これは些細な問題であり、スマートLinuxユーザーは簡単に解決できます。あなたが新進のまたは中級のLinuxユーザーなら、おそらくそれを理解することは決してないでしょう。この種の質問は、インタビュイーの心の存在と彼が箱から出してどのように考えているかを確認するために尋ねられるかもしれません。前述のツイッタースレッドのおかげで、今日は何か役に立つことを学びました。それがあなたにも役立つことを願っています。
関連記事:
- Linuxでのアクセス許可に基づいてファイルを検索する方法
- ファイルをコピーし、所有権と権限を同時に変更する方法