私はホームサーバーに目的を変更した古いDellコンピュータでCentOS7を実行しています。また、リモートの場所からSSHに接続し、すべてがスムーズに実行されていることを確認し、ラップトップをrsyncするなどのタスクを実行します。言い換えれば、問題が発生した場合、通常は家に機械をリセットする人はいません。
状態:
先週、いつか sudo、su、pkexec などのコマンドが動作することを許可する何かを破ったことは間違いありません。
Suは私のrootパスワードを受け入れず、sudoはエラーを表示します。
sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set
pkexec /bin/bashのようなものを実行しようとしてエラーが発生します。
pkexec must be setuid root
これを見て私は次のようにしました。
[crlsmdrn@server ~]$ ls -l /usr/bin/sudo
---x--x--x. 1 root root 143248 Jun 27 13:03 /usr/bin/sudo
それでは、コンピュータを再起動せずにリモートでルートシェルを取得できるように、sudoの権限を4755に戻す方法はありますか?
ありがとう
答え1
回復モードで再起動しなくてもsudo権限をリセットできました!これが私がしたことです:
ありがたいことに、systemdはpolkitを介して認証するので、デーモンを再起動できます。
だから私はホームディレクトリに以下を含むユニットファイルを作成しました。
/home/crlsmdrn/sudo-reset.service:
[Unit]
Description=reset sudo
[Service]
Type=oneshot
ExecStart=/home/crlsmdrn/sudo-reset.sh
[Install]
WantedBy=multi-user.target
次に sudo-reset.sh というファイルを作成しました。
/home/crlsmdrn/sudo-reset.sh:
#!/bin/sh
chmod 4755 /usr/bin/sudo
それから:
[crlsmdrn@server ~]$ chmod +x /home/crlsmdrn/sudo-reset.sh
次に、サービスを有効にして実行します。
[crlsmdrn@server ~]$ systemctl enable /home/crlsmdrn/sudo-reset.service
[crlsmdrn@server ~]$ systemctl start sudo-reset-service
[crlsmdrn@server ~]$ sudo
usage: sudo -h | -K | -k | -V
usage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
usage: sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command]
usage: sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-u user] [VAR=value] [-i|-s]
[<command>]
usage: sudo -e [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-u user] file ...
その後、sudo -sを実行してbashの履歴を見直して、どの権限が破損しているかを確認できました。 /usr/binだけを使うのが退屈だったので、rpm --setperms -aを実行したところ、権限が変更されたようです。 。
これを行った後は、サービスを無効にすることを忘れないでください。
ストーリーのレッスン:同じように機能するとは思わず、/usr/binでchown -R root:rootを実行しないでください。