web-dev-qa-db-ja.com

pkexecによるsudo制限の回避策:ルートシェル

Sudoの設定が壊れていました。 root(ロックされたrootアカウント、壊れたSudo)としてログインする可能性がないため、検索によりpkexecを使用することが明らかになりました。出来た。ここまでは順調ですね。

しかし、それは大きなセキュリティホールであることが判明しました。「Sudo」グループの一部であるユーザーは、常にrootアクセスを取得し、rootユーザーとしてシェルを開始できます。つまり、少なくともSudoを使用するデフォルトのUbuntuサーバーのインストールでは。

これにより、Sudoは、選択したユーザーの特定のコマンドに昇格された特権を制限する手段として役に立たなくなります。一部のpolicykitポリシーが変更されない限り、どうやら。これは、「visudo」または「Sudo」のマニュアルページには記載されていません。また、sudoersファイルの設定方法についてのチュートリアルでそれが言及されたことはありません(おそらく、間違ったチュートリアルを読んでいた可能性があります)。

誰かが私を正しい方向に向けることができますか? 1人の特定のユーザーに対して1つの特定のコマンドの特権昇格に対応するために、どのポリシーキット(Sudo)構成ファイルを変更する必要がありますか(およびその方法)。

例として、「sudotest」ユーザーがコマンド「cat/proc/tty/driver/serial」のみを実行できるようにして、非特権ユーザーに対して「権限が拒否されました」というエラーが発生するようにします。

セットアップ:

  • Ubuntuバイオニック
  • ユーザー「sudotest」、「Sudo」グループの一部
  • いずれか:「sudotest」用の単一のSudoコマンド、またはなし
me@some-server:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.2 LTS
Release:    18.04
Codename:   bionic

me@some-server:~$ ls -l /home
total 20
drwx------ 6 me  me   4096 May 17 15:17 me
drwx------ 2 root root 16384 Nov 26 17:20 lost+found

me@some-server:~$ Sudo cat /etc/sudoers | grep -v "^#\|^$"
Defaults    env_reset
Defaults    mail_badpass
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
root    ALL=(ALL:ALL) ALL
me  ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL

me@some-server:~$ Sudo useradd -m -d /home/sudotest -s /bin/bash sudotest

me@some-server:~$ Sudo gpasswd -a sudotest Sudo
Adding user sudotest to group Sudo

me@some-server:~$ Sudo passwd sudotest
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully

me@some-server:~$ su - sudotest
su - sudotest
Password:

me@some-server:~$ $ groups
sudotest Sudo

sudotest@some-server:~$ Sudo -l
[Sudo] password for sudotest: 
Sorry, user sudotest may not run Sudo on some-server.

ねえ、このユーザーはSudoでさえ何もできません。権限のないユーザーのようです。それでも、このユーザーはpkexecを使用してルートシェルを完全に取得できます。

どうすればこれを防ぐことができますか?このユーザーが管理者特権で自分が選択した単一のコマンドを実行できるようにするには、どの構成オプションが必要ですか?


更新:これはリンクされた質問とは異なり、デフォルトでpolkitがインストールされているシステムで、Sudoを使用して特定のユーザーが特定のコマンドを昇格された特権で実行できるように(安全に)制限する方法を知りたいです。どうやら、すべてのSudoユーザーがルートシェルを取得できるようにします。

2
JeliJami

大きなセキュリティホール:「Sudo」グループの一部であるユーザーは、常にrootアクセスを取得し、rootユーザーとしてシェルを開始できます。つまり、少なくとも、Sudoを使用したデフォルトのUbuntuサーバーのインストール時です。

これにより、選択したユーザーの特定のコマンドに昇格された特権を制限する手段としてSudoが役に立たなくなります。

私の知る限り、おそらくあなたの期待を除いて、それは実際のセキュリティ問題ではありません。あなたの結論は完全に不当です。

  1. buntu 12.04以降、管理者アクセス権は「Sudo」グループを介して付与されます。

  2. 管理者がタスクを実行するには、制限のない完全なスーパーユーザーアクセスが必要です。

  3. このポリシーは、Sudoとpolkitの両方に対してUbuntuから出荷されたデフォルトポリシーに一貫して実装されています。これにより、すべてのSudoグループメンバーがコマンドラインアプリケーションとグラフィカルアプリケーションの両方をrootとして実行できます。

(次に/etc/sudoers Sudoグループメンバーのデフォルトポリシーを削除しますが、polkitポリシーは変更しませんでした。そのため、Sudoグループのメンバーは、他の認証システムに関して(まだ)管理者である場合、非特権ユーザーのように見えるという誤った結論に導きました。 )

もちろん、解決策も明白です。

  1. ユーザーに完全なスーパーユーザーアクセスを許可したくない場合は、ユーザーをSudoグループのメンバーにしないでください。

  2. スーパーユーザーアクセスを制限するには、Sudo、polkit、またはその両方で独自のポリシーを作成する必要があります。特定のユーザーに対して特定のポリシーを作成するか、グループベースのアクセス制御のために独自の新しいグループを作成する必要があります。

3
HBruijn