web-dev-qa-db-ja.com

SUID権限-どちらが正しいですか?

Linuxサーバーを保護しようとしていて、SUIDの経験がほとんどありません。実行後

find / -perm +4000

多くのプログラムが発見されました。何を有効にするか、何を有効にしないかについて、矛盾するアドバイス ここここ を見てきました。

SUIDが有効
/bin/su
/usr/bin/passwd
/usr/bin/gpasswd
/sbin/unix_chkpwd

SUID無効
/usr/bin/crontab
/usr/bin/newgrp
/bin/ping
/bin/ping6
/bin/umount
/bin/mount
/usr/bin/chsh
/usr/bin/chfn
/usr/libexec/pt_chown
/usr/bin/Sudo
/usr/bin/sudoedit
/usr/bin/chage
/usr/sbin/userhelper
/usr/sbin/usernetctl
/usr/sbin/suexec

わからない
/usr/libexec/openssh/ssh-keysign
/sbin/pam_timestamp_check

サーバーは、Linux/SFTPユーザーが少ない複数のサイトをホストします。
何を変更する必要がありますか?また、どのようにテストすればよいですか?

3
csi

あなたがリストしたプログラムは通常安全で安全であると考えられているので、私は個人的に気にしません。たとえば、suidビットが設定されていないSudoは意味がありません。同じことがchshchfnなどにも当てはまります。本当にサーバーを保護したい場合は、次の実行可能ファイルにsuid権限を付与します。

  • 診断上の理由からping/ping6
  • suexec異なるユーザーでcgiスクリプトを実行する
  • suまたはSudo
  • pt_chowndevptsがない場合

ssh-keysignからsuidビットを削除できます。これは、ホストベースの認証にのみ使用されるため、 http://lists.freebsd.org/pipermail/freebsd-stable/2006-October/029737.html

また、ユーザーがシェルアクセスを取得せず、ディレクトリがchrootされていないことを確認する必要があります。

サーバーを本当に保護したい場合は、 SELinux を調べることを検討する必要があります。

5
Ulrich Dangel

自分が何をしているかを確実に理解していない限り、ディストリビューションにやりたいことをさせましょう。この質問をする必要があるという事実は、あなたが十分に知らないことを示しています。だから、よく放っておいてください。

どのプログラムをsetuidにする必要があるかは、ディストリビューションでの設定方法によって異なります。たとえば、Fedora setuidのほとんどの使用をsetcapに置き換えました 。たとえば、pingを実行するには、rawソケットを開くことができるCAP_NET_RAWIO機能が必要です。 setcap CAP_NET_RAWIO(より良い特権分離)であるか、setuid root(setcap実行可能ファイルを必要としない従来の方法)であることがそれを取得できます。

リストするプログラムは、通常のユーザーが実行するように設計されていますが、機能するには追加の特権が必要です。それらのsetuidビットを削除すると、システムが破損します。たとえば、pingは機能を停止します(rootとしてログインしている場合を除く)。 suでルートになることはできますが、Sudoでルートになることはできません。これにより、Sudoのポイント全体が無効になります。ユーザーはcrontabを設定できなくなります。等々。

専用サーバーでは、壊れたもののいくつかは重要ではないかもしれません。ただし、ディストリビューションのデフォルトを変更する必要があるのは、正しいことをしていることがわかっている場合のみであり、その逆ではありません。可用性はセキュリティの一部であることを忘れないでください。サーバーから自分を締め出したり、問題を診断して修復できなくなったりすると、自分のセキュリティが破られてしまいます。

selinuxはそれをたくさん処理します(それを持っているシステムでは)。したがって、selinuxを使用している場合は、setuidのものをすべてそのままにしておきます。これは、selinuxポリシーで許可される以上のアクセス許可を持つべきではありません。

1
lsd