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ユーザーが少ない複数のサイトをホストします。
何を変更する必要がありますか?また、どのようにテストすればよいですか?
あなたがリストしたプログラムは通常安全で安全であると考えられているので、私は個人的に気にしません。たとえば、suidビットが設定されていないSudo
は意味がありません。同じことがchsh
chfn
などにも当てはまります。本当にサーバーを保護したい場合は、次の実行可能ファイルにsuid権限を付与します。
ping
/ping6
。suexec
異なるユーザーでcgiスクリプトを実行するsu
またはSudo
pt_chown
devpts
がない場合ssh-keysign
からsuidビットを削除できます。これは、ホストベースの認証にのみ使用されるため、 http://lists.freebsd.org/pipermail/freebsd-stable/2006-October/029737.html
また、ユーザーがシェルアクセスを取得せず、ディレクトリがchrootされていないことを確認する必要があります。
サーバーを本当に保護したい場合は、 SELinux を調べることを検討する必要があります。
自分が何をしているかを確実に理解していない限り、ディストリビューションにやりたいことをさせましょう。この質問をする必要があるという事実は、あなたが十分に知らないことを示しています。だから、よく放っておいてください。
どのプログラムを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ポリシーで許可される以上のアクセス許可を持つべきではありません。