次のものは、基本的なシステムをセットアップする設定のサンプルです。
# Protect System Binaries # システムバイナリの保護 # /sbin/lidsconf -A -o /sbin -j READONLY /sbin/lidsconf -A -o /bin -j READONLY # Protect all of /usr and /usr/local # (This assumes /usr/local is on a separate file system). # /usr と /usr/local の保護 # (ここでは /usr/local は別のファイルシステム上にあると想定しています) # /sbin/lidsconf -A -o /usr -j READONLY /sbin/lidsconf -A -o /usr/local -j READONLY # Protect the System Libraries #(/usr/lib is protected above since /usr/lib generally isn't # on a separate file system than /usr) # システムライブラリの保護 # (/usr/lib は普通 /usr と別のファイルシステム上にはないので、 # すでに上で保護されています) # /sbin/lidsconf -A -o /lib -j READONLY # Protect /opt # /opt を保護 # /sbin/lidsconf -A -o /opt -j READONLY # Protect System Configuration files # システムの設定ファイルを保護 # /sbin/lidsconf -A -o /etc -j READONLY /sbin/lidsconf -A -o /usr/local/etc -j READONLY /sbin/lidsconf -A -o /etc/shadow -j DENY /sbin/lidsconf -A -o /etc/lilo.conf -j DENY # Enable system authentication # システムの認証を有効に # /sbin/lidsconf -A -s /bin/login -o /etc/shadow -j READONLY /sbin/lidsconf -A -s /usr/bin/vlock -o /etc/shadow -j READONLY /sbin/lidsconf -A -s /bin/su -o /etc/shadow -j READONLY /sbin/lidsconf -A -s /bin/su \ -o CAP_SETUID -j GRANT /sbin/lidsconf -A -s /bin/su \ -o CAP_SETGID -j GRANT # Protect the boot partition # boot パーティションの保護 # /sbin/lidsconf -A -o /boot -j READONLY # Protect root's home dir, but allow bash history # root のホームディレクトリを保護するが、bash の履歴は許可 # /sbin/lidsconf -A -o /root -j READONLY /sbin/lidsconf -A -s /bin/bash -o /root/.bash_history -j WRITE # Protect system logs # システムログの保護 # /sbin/lidsconf -A -o /var/log -j APPEND /sbin/lidsconf -A -s /bin/login -o /var/log/wtmp -j WRITE /sbin/lidsconf -A -s /bin/login -o /var/log/lastlog -j WRITE /sbin/lidsconf -A -s /sbin/init -o /var/log/wtmp -j WRITE /sbin/lidsconf -A -s /sbin/init -o /var/log/lastlog -j WRITE /sbin/lidsconf -A -s /sbin/halt -o /var/log/wtmp -j WRITE /sbin/lidsconf -A -s /sbin/halt -o /var/log/lastlog -j WRITE /sbin/lidsconf -A -s /etc/rc.d/rc.sysinit \ -o /var/log/wtmp -i 1 -j WRITE /sbin/lidsconf -A -s /etc/rc.d/rc.sysinit \ -o /var/log/lastlog -i 1 -j WRITE # Startup # /sbin/lidsconf -A -s /sbin/hwclock -o /etc/adjtime -j WRITE # Shutdown # /sbin/lidsconf -A -s /sbin/init -o CAP_INIT_KILL -j GRANT /sbin/lidsconf -A -s /sbin/init -o CAP_KILL -j GRANT # Give the following init script the proper privileges to kill processes and # unmount the file systems. However, anyone who can execute these scripts # by themselves can effectively kill your processes. It's better than # the alternative, however. # これらの起動スクリプトに、プロセスを kill したり ファイルシステムを # アンマウントするための適切な権限を与えてください。とはいえ、これらの # スクリプトを自分で実行る人はみな、効果的にプロセスを kill することが # できます。ですが、他の方法よりはマシなはずです。 # # Any ideas on how to get around this are welcome! # これを解決するアイデアを歓迎します! # /sbin/lidsconf -A -s /etc/rc.d/init.d/halt \ -o CAP_INIT_KILL -i 1 -j GRANT /sbin/lidsconf -A -s /etc/rc.d/init.d/halt \ -o CAP_KILL -i 1 -j GRANT /sbin/lidsconf -A -s /etc/rc.d/init.d/halt \ -o CAP_NET_ADMIN -i 1 -j GRANT /sbin/lidsconf -A -s /etc/rc.d/init.d/halt \ -o CAP_SYS_ADMIN -i 1 -j GRANT # Other # /sbin/lidsconf -A -s /sbin/update -o CAP_SYS_ADMIN -j GRANT
この設定サンプルでは、Apache が /usr/local/apache
に、ログディレクトリが /var/log/httpd
に、設定ディレクトリが /etc/httpd
にインストールされていることを前提にしています。ACL 中のパスを、各自の設定に合うように調整しなくてはなりません。この設定では、ポート 80 (ことによると 443 も) をバインドできるように、Apache はカーネルを封印するより前か、LIDS_GLOBAL が無効な時に起動する必要があります。
/sbin/lidsconf -A -s /usr/local/apache/bin/httpd \ -o CAP_SETUID -j GRANT /sbin/lidsconf -A -s /usr/local/apache/bin/httpd \ -o CAP_SETGID -j GRANT # Config files /sbin/lidsconf -A -o /etc/httpd -j DENY /sbin/lidsconf -A -s /usr/local/apache/bin/httpd \ -o /etc/httpd -j READONLY # Server Root /sbin/lidsconf -A -o /usr/local/apache -j DENY /sbin/lidsconf -A -s /usr/local/apache/bin/httpd \ -o /usr/local/apache -j READONLY # Log Files /sbin/lidsconf -A -o /var/log/httpd -j DENY /sbin/lidsconf -A -s /usr/local/apache/bin/httpd \ -o /var/log/httpd -j APPEND /sbin/lidsconf -A -s /usr/local/apache/bin/httpd \ -o /usr/local/apache/logs -j WRITE
これらの ACL は、Dave Sill の Life with qmail によってインストールされた qmail のセットアップ向けに書かれています。この設定では、tcpserver がポート 25 をバインドできるように、qmail はカーネルを封印するより前か、LIDS_GLOBAL が無効な時に起動する必要があります。
# setup /sbin/lidsconf -A -o /var/qmail -j READONLY /sbin/lidsconf -A -s /usr/local/bin/multilog \ -o /var/log/qmail -j WRITE /sbin/lidsconf -A -s /usr/local/bin/svc \ -o /var/qmail/supervise -j WRITE # queue access # キューへのアクセス # /sbin/lidsconf -A -s /var/qmail/bin/qmail-inject \ -o /var/qmail/queue -j WRITE /sbin/lidsconf -A -s /var/qmail/bin/qmail-rspawn \ -o /var/qmail/queue -j WRITE /sbin/lidsconf -A -s /var/qmail/bin/qmail-lspawn \ -o /var/qmail/queue -j WRITE /sbin/lidsconf -A -s /var/qmail/bin/qmail-queue \ -o /var/qmail/queue -j WRITE /sbin/lidsconf -A -s /var/qmail/bin/qmail-clean \ -o /var/qmail/queue -j WRITE /sbin/lidsconf -A -s /var/qmail/bin/qmail-send \ -o /var/qmail/queue -j WRITE /sbin/lidsconf -A -s /var/qmail/bin/qmail-remote \ -o /var/qmail/queue -j WRITE # Access to local mail boxes # ローカルメールボックスへのアクセス /sbin/lidsconf -A -s /var/qmail/bin/qmail-lspawn \ -o CAP_SETUID -j GRANT /sbin/lidsconf -A -s /var/qmail/bin/qmail-lspawn \ -o CAP_SETGID -j GRANT /sbin/lidsconf -A -s /var/qmail/bin/qmail-lspawn \ -o CAP_DAC_OVERRIDE -j GRANT /sbin/lidsconf -A -s /var/qmail/bin/qmail-lspawn \ -o CAP_DAC_READ_SEARCH -j GRANT # Remote delivery # リモート配送 /sbin/lidsconf -A -s /var/qmail/bin/qmail-rspawn \ -o CAP_NET_BIND_SERVICE -i -1 -j GRANT # supervise /sbin/lidsconf -A -s /usr/local/bin/supervise \ -o /var/qmail/supervise/qmail-smtpd/supervise -j WRITE /sbin/lidsconf -A -s /usr/local/bin/supervise \ -o /var/qmail/supervise/qmail-smtpd/log/supervise -j WRITE /sbin/lidsconf -A -s /usr/local/bin/supervise \ -o /var/qmail/supervise/qmail-send/supervise -j WRITE /sbin/lidsconf -A -s /usr/local/bin/supervise \ -o /var/qmail/supervise/qmail-send/log/supervise -j WRITE
これらの ACL は、Jeremy Rauch の Installing djbdns (DNScache) for Name Service のパート 1 & 2 をもとにした djbdns のセットアップ向けに書かれています。
# dnscache # /sbin/lidsconf -A -o /var/dnscache -j READONLY /sbin/lidsconf -A -s /usr/local/bin/supervise \ -o /var/dnscache/dnscache/supervise -j WRITE /sbin/lidsconf -A -s /usr/local/bin/supervise \ -o /var/dnscache/dnscache/log/supervise -j WRITE /sbin/lidsconf -A -s /usr/local/bin/multilog \ -o /var/dnscache/dnscache/log/main -j WRITE # tinydns # /bin/echo "tinydns" /sbin/lidsconf -A -s /usr/local/bin/supervise \ -o /var/dnscache/tinydns/supervise -j WRITE /sbin/lidsconf -A -s /usr/local/bin/supervise \ -o /var/dnscache/tinydns/log/supervise -j WRITE /sbin/lidsconf -A -s /usr/local/bin/multilog \ -o /var/dnscache/tinydns/log/main -j WRITE
これらの ACL は、courier-imap が /usr/local/courier-imap
にインストールされていることを前提にしています。この設定では、ポート 143 をバインドできるように、courier-imap はカーネルを封印する前か、LIDS_GLOBAL が無効な時に起動する必要があります。
/sbin/lidsconf -A -o /usr/local/courier-imap -j DENY /sbin/lidsconf -A -s /usr/local/courier-imap/sbin/imaplogin \ -o /etc/shadow -j READONLY /sbin/lidsconf -A -s /usr/local/courier-imap/libexec/authlib/authpam \ -o /etc/shadow -j READONLY /sbin/lidsconf -A -s /usr/local/courier-imap/libexec/couriertcpd \ -o /usr/local/courier-imap -j READONLY /sbin/lidsconf -A -s /usr/local/courier-imap/libexec/couriertcpd \ -o CAP_SETUID -i 3 -j GRANT /sbin/lidsconf -A -s /usr/local/courier-imap/libexec/couriertcpd \ -o CAP_SETGID -i 3 -j GRANT /sbin/lidsconf -A -s /usr/local/courier-imap/libexec/couriertcpd \ -o CAP_DAC_OVERRIDE -i 3 -j GRANT /sbin/lidsconf -A -s /usr/local/courier-imap/libexec/couriertcpd \ -o CAP_DAC_READ_SEARCH -i 3 -j GRANT
これらの ACL は、MySQL が /usr/local/mysql
にインストールされていることを前提にしています。
/sbin/lidsconf -A -o /usr/local/mysql/var -j APPEND /sbin/lidsconf -A -o /usr/local/mysql -j DENY /sbin/lidsconf -A -s /usr/local/mysql/libexec/mysqld \ -o /usr/local/mysql -j READONLY /sbin/lidsconf -A -s /usr/local/mysql/libexec/mysqld \ -o /usr/local/mysql/var -j WRITE
これらの設定は、sshd に CAP_NET_BIND_SERVICE 権限を与えていますので、起動後、LIDS_GLOBAL が有効な時に機能します。
/sbin/lidsconf -A -s /usr/sbin/sshd -o /etc/shadow -j READONLY /sbin/lidsconf -A -o /etc/ssh/sshd_config -j DENY /sbin/lidsconf -A -o /etc/ssh/ssh_host_key -j DENY /sbin/lidsconf -A -o /etc/ssh/ssh_host_dsa_key -j DENY /sbin/lidsconf -A -s /usr/sbin/sshd \ -o /etc/ssh/sshd_config -j READONLY /sbin/lidsconf -A -s /usr/sbin/sshd \ -o /etc/ssh/ssh_host_key -j READONLY /sbin/lidsconf -A -s /usr/sbin/sshd \ -o /etc/ssh/ssh_host_dsa_key -j READONLY /sbin/lidsconf -A -s /usr/sbin/sshd \ -o /var/log/wtmp -j WRITE /sbin/lidsconf -A -s /usr/sbin/sshd \ -o /var/log/lastlog -j WRITE /sbin/lidsconf -A -s /usr/sbin/sshd \ -o CAP_SETUID -j GRANT /sbin/lidsconf -A -s /usr/sbin/sshd \ -o CAP_SETGID -j GRANT /sbin/lidsconf -A -s /usr/sbin/sshd \ -o CAP_FOWNER -j GRANT /sbin/lidsconf -A -s /usr/sbin/sshd \ -o CAP_CHOWN -j GRANT /sbin/lidsconf -A -s /usr/sbin/sshd \ -o CAP_DAC_OVERRIDE -j GRANT /sbin/lidsconf -A -s /usr/sbin/sshd \ -o CAP_NET_BIND_SERVICE -j GRANT
これらの設定は、slapd に CAP_NET_BIND_SERVICE 権限を与えていますので、起動後、LIDS_GLOBAL が有効な時に機能します。
/sbin/lidsconf -A -s /usr/local/libexec/slapd \ -o /usr/local/ldapdb -j WRITE /sbin/lidsconf -A -s /usr/local/libexec/slapd \ -o CAP_NET_BIND_SERVICE -j GRANT /sbin/lidsconf -A -s /usr/local/libexec/slapd \ -o CAP_INIT_KILL -j GRANT /sbin/lidsconf -A -s /usr/local/libexec/slapd \ -o CAP_SYS_MODULE -j GRANT
これらの設定は、portsentry に CAP_NET_BIND_SERVICE 権限を与えていますので、起動後、LIDS_GLOBAL が有効な時に機能します。portsentry にやらせようと思っている内容によって、これらの ACL 全ては必要だったり不要だったりするかもしれません。
/sbin/lidsconf -A -s /usr/local/psionic/portsentry/portsentry \ -o /usr/local/psionic/portsentry -j WRITE /sbin/lidsconf -A -s /usr/local/psionic/portsentry/portsentry \ -o /var/log -j WRITE /sbin/lidsconf -A -s /usr/local/psionic/portsentry/portsentry \ -o CAP_NET_BIND_SERVICE -j GRANT # For portsentry to be able to update the firewall: # portsentry がファイアウォールを更新するため: /sbin/lidsconf -A -s /usr/local/psionic/portsentry/portsentry \ -o CAP_NET_RAW -i 1 -j GRANT # For portsentry to be able to update /etc/hosts.allow and/or /etc/hosts.deny: # portsentry が /etc/hosts.allow や/etc/hosts.deny を更新するため: /sbin/lidsconf -A -s /usr/local/psionic/portsentry/portsentry \ -o /etc/hosts.allow -j WRITE /sbin/lidsconf -A -s /usr/local/psionic/portsentry/portsentry \ -o /etc/hosts.deny -j WRITE
この設定では、ポート 137 & 139 をバインドできるように、Samba はカーネルを封印するより前か、LIDS_GLOBAL が無効になっている時に起動する必要があります。
/sbin/lidsconf -A -o /etc/samba -j READONLY /sbin/lidsconf -A -o /var/samba -j READONLY /sbin/lidsconf -A -s /usr/sbin/smbd -o /var/samba -j WRITE /sbin/lidsconf -A -s /usr/sbin/nmbd -o /var/samba -j WRITE # smbd needs write access to smbpasswd to chmod it. i think it # also needs access to MACHINE.SID # smbd は chmod するために smbpasswd への書きこみ権限が必要です。 # MACHINE.SID にも同様に必要だと思います。 /sbin/lidsconf -A -s /usr/sbin/smbd -o /etc/samba -j WRITE /sbin/lidsconf -A -s /usr/sbin/smbd -o /etc/shadow -j READONLY /sbin/lidsconf -A -s /usr/sbin/smbd -o CAP_SETUID -j GRANT /sbin/lidsconf -A -s /usr/sbin/smbd -o CAP_SETGID -j GRANT /sbin/lidsconf -A -s /usr/sbin/smbd -o CAP_HIDDEN -j GRANT # LIDS complains about smbd trying to chroot to / # everything still seems to work without it, though # (and isn't chrooting to / kinda pointless anyway?) # LIDS は smbd が / に chroot しようとする旨文句を言います。 # ただ、それなしでも全てうまく機能しているようには見えます。 # (しかも / に chroot してはいないのに、ちょっと無駄じゃない?) #/sbin/lidsconf -A -s /usr/sbin/smbd -o CAP_SYS_CHROOT -j GRANT /sbin/lidsconf -A -s /usr/sbin/nmbd -o CAP_HIDDEN -j GRANT
/sbin/lidsconf -A -o /usr/lib/heartbeat/heartbeat -j READONLY /sbin/lidsconf -A -s /usr/lib/heartbeat/heartbeat \ -o CAP_NET_BIND_SERVICE -i -1 -j GRANT /sbin/lidsconf -A -s /usr/lib/heartbeat/heartbeat \ -o CAP_SYS_RAWIO -i -1 -j GRANT /sbin/lidsconf -A -s /usr/lib/heartbeat/heartbeat \ -o CAP_NET_BROADCAST -i -1 -j GRANT /sbin/lidsconf -A -s /usr/lib/heartbeat/heartbeat \ -o CAP_NET_ADMIN -i -1 -j GRANT /sbin/lidsconf -A -s /usr/lib/heartbeat/heartbeat \ -o CAP_NET_RAW -i -1 -j GRANT /sbin/lidsconf -A -s /usr/lib/heartbeat/heartbeat \ -o CAP_SYS_ADMIN -i -1 -j GRANT # For sending Gratuitous Arps # 余計な<!--(★gratuitous)--> Arp を送るため /sbin/lidsconf -A -o /usr/lib/heartbeat/send_arp -j READONLY /sbin/lidsconf -A -s /usr/lib/heartbeat/send_arp \ -o CAP_NET_RAW -i -1 -j GRANT # For modifying the routing table when the IP address changes # IP アドレス変更時にルーティングテーブルを修正するため /sbin/lidsconf -A -o /sbin/route -j READONLY /sbin/lidsconf -A -s /sbin/route -o CAP_NET_ADMIN -i 0 -j GRANT # # Protect the heartbeat configuration and authentication key. # heartbeat の設定と認証キーを保護します # /sbin/lidsconf -A -o /etc/ha.d/ha.cf -j READONLY /sbin/lidsconf -A -o /etc/ha.d/haresources -j READONLY /sbin/lidsconf -A -o /etc/ha.d/authkeys -j DENY # # Only heartbeat can see the authkey # hertbeat のみが authkey を読めます # /sbin/lidsconf -A -s /usr/lib/heartbeat/heartbeat \ -o /etc/ha.d/authkeys -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o CAP_NET_BIND_SERVICE 53 -j GRANT /sbin/lidsconf -A -s /usr/sbin/named -o CAP_SETPCAP -j GRANT /sbin/lidsconf -A -s /usr/sbin/named -o CAP_SYS_CHROOT -j GRANT /sbin/lidsconf -A -s /usr/sbin/named -o CAP_SYS_RESOURCE -j GRANT /sbin/lidsconf -A -s /usr/sbin/named -o CAP_SETUID -j GRANT /sbin/lidsconf -A -s /usr/sbin/named -o CAP_SETGID -j GRANT
# Sendmail LIDS rules (using infinite inheritance for the sendmail # children and delivery agents to work properly, but a lower inheritance # like 2 or 3 would probably work as well.) # Sendmail 用 LIDS ルール # (sendmail の子孫や配送エージェントが適切に動作するように # 無限の継承を使っていますが、2, 3 のより低い継承でもおそらく # 同じように動作するでしょう。) # Lock down /etc/mail if it's not already done elseware # どこか他で既になされていないなら、/etc/mail を読めるようにします<!--(★lock down)--> /sbin/lidsconf -A -o /etc/mail -j READONLY /sbin/lidsconf -A -o /usr/sbin/sendmail -j READONLY /sbin/lidsconf -A -s /usr/sbin/sendmail -o /etc/shadow -j READONLY -i -1 /sbin/lidsconf -A -s /usr/sbin/sendmail -o /etc/passwd -j READONLY -i -1 /sbin/lidsconf -A -s /usr/sbin/sendmail -o /etc/mail -j READONLY -i -1 /sbin/lidsconf -A -s /usr/sbin/sendmail -o /etc/mail/aliases -j WRITE -i -1 /sbin/lidsconf -A -s /usr/sbin/sendmail -o /etc/mail/aliases.db -j WRITE -i -1 /sbin/lidsconf -A -s /usr/sbin/sendmail -o CAP_SETUID -j GRANT -i -1 /sbin/lidsconf -A -s /usr/sbin/sendmail -o CAP_SETGID -j GRANT -i -1 /sbin/lidsconf -A -s /usr/sbin/sendmail -o CAP_SYS_ADMIN -j GRANT -i -1 /sbin/lidsconf -A -s /usr/sbin/sendmail -o CAP_NET_BIND_SERVICE 25-25 -j GRANT -i -1 # Depending on how you have the log files secured # (The maillog will normally get rotated out and this # rule will stop working when that happens unless you # stop the log rotation.) # ログファイルをどのように安全にしているかによって # (mail ログは通常ローテートされているでしょう。このルールは # ログのローテーションをやめない限り、それが起きた時点で機能 # しなくなります。 /sbin/lidsconf -A -s /usr/sbin/sendmail -o /var/log/maillog -j APPEND -i -1
/sbin/lidsconf -A -o /etc/apcupsd -j DENY /sbin/lidsconf -A -s /sbin/apcupsd -o /etc/apcupsd -j READONLY /sbin/lidsconf -A -s /sbin/apcupsd -o CAP_HIDDEN -i -1 -j GRANT
/sbin/lidsconf -A -s /sbin/pump -o CAP_NET_BIND_SERVICE 68-68 -j GRANT /sbin/lidsconf -A -s /sbin/pump -o CAP_NET_RAW -j GRANT /sbin/lidsconf -A -s /sbin/pump -o CAP_HIDDEN -j GRANT
/sbin/lidsconf -A -s /usr/sbin/snort -o CAP_DAC_OVERRIDE -j GRANT /sbin/lidsconf -A -s /usr/sbin/snort -o CAP_NET_RAW -j GRANT /sbin/lidsconf -A -s /usr/sbin/snort -o CAP_HIDDEN -j GRANT /sbin/lidsconf -A -s /usr/sbin/snort -o CAP_SETUID -j GRANT /sbin/lidsconf -A -s /usr/sbin/snort -o CAP_SETGID -j GRANT
/sbin/lidsconf -A -s /sbin/getty -o CAP_DAC_OVERRIDE -j GRANT /sbin/lidsconf -A -s /sbin/getty -o CAP_HIDDEN -j GRANT
/sbin/lidsconf -A -s /bin/login -o /etc/shadow -j READONLY /sbin/lidsconf -A -s /bin/login -o CAP_SETUID -j GRANT /sbin/lidsconf -A -s /bin/login -o CAP_SETGID -j GRANT /sbin/lidsconf -A -s /bin/login -o CAP_CHOWN -j GRANT /sbin/lidsconf -A -s /bin/login -o CAP_FSETID -j GRANT
/sbin/lidsconf -A -s /bin/su -o /etc/shadow -j READONLY /sbin/lidsconf -A -s /bin/su -o CAP_SETUID -j GRANT /sbin/lidsconf -A -s /bin/su -o CAP_SETGID -j GRANT
/sbin/lidsconf -A -s /usr/sbin/exim -o CAP_SETGID -j GRANT /sbin/lidsconf -A -s /usr/sbin/exim -o CAP_SETUID -j GRANT
/sbin/lidsconf -A -s /usr/sbin/in.qpopper -o /etc/shadow -j READONLY
/sbin/lidsconf -A -s /usr/sbin/proftpd -o CAP_SETGID -j GRANT /sbin/lidsconf -A -s /usr/sbin/proftpd -o CAP_SETUID -j GRANT /sbin/lidsconf -A -s /usr/sbin/proftpd -o CAP_SYS_CHROOT -j GRANT /sbin/lidsconf -A -s /usr/sbin/proftpd -o /etc/shadow -j READONLY