computerの日記

Cisco,SHELL,C,Qt,C++,Linux,ネットワーク,Windows Scriptなどの発言です

SELinux を頑張る-その4

では、次に、ユーザーを作成した時に、staff_u をデフォルトにしましょう。

# semanage login -m -s staff_u __default__

設定を確認します。

# semanage login -l

(表示)
ログイン名 SELinux ユーザー MLS/MCS 範囲 サービス名
__default__ staff_u s0 *
root staff_u s0 *

次に、staff_u に、staff_r, system_r, sysadm_r の SELinux ロールを割当てます。
要すれば、SELinux ロールの unconfined_r を抜きます。

現在の設定を確認します。

# semanage user -l

(表示)

ラベリング MLS/ MLS/
SELinux ユーザー プレフィックス MCS レベル MCS 範囲 SELinux ロール

guest_u user s0 s0 guest_r
root user s0 s0-s0:c0.c1023 staff_r sysadm_r system_r unconfined_r
staff_u user s0 s0-s0:c0.c1023 staff_r sysadm_r system_r unconfined_r
sysadm_u user s0 s0-s0:c0.c1023 sysadm_r
system_u user s0 s0-s0:c0.c1023 system_r unconfined_r
unconfined_u user s0 s0-s0:c0.c1023 system_r unconfined_r
user_u user s0 s0 user_r
xguest_u user s0 s0 xguest_r

設定します。

# semanage user -m -R "staff_r system_r sysadm_r" staff_u

(表示)

ラベリング MLS/ MLS/
SELinux ユーザー プレフィックス MCS レベル MCS 範囲 SELinux ロール

guest_u user s0 s0 guest_r
root user s0 s0-s0:c0.c1023 staff_r sysadm_r system_r unconfined_r
staff_u user s0 s0-s0:c0.c1023 staff_r sysadm_r system_r
sysadm_u user s0 s0-s0:c0.c1023 sysadm_r
system_u user s0 s0-s0:c0.c1023 system_r unconfined_r
unconfined_u user s0 s0-s0:c0.c1023 system_r unconfined_r
user_u user s0 s0 user_r
xguest_u user s0 s0 xguest_r

マシン再起動

myuser ユーザーのセキュリティコンテキストを確認します。

$ id
uid=1000(myuser) gid=1000(myuser) groups=1000(myuser) context=staff_u:staff_r:staff_t:s0

su コマンドを発行して、正しいパスワードを入力しても、以下のようになり、root になれません。

$ su
パスワード :
su: 認証失敗

というのも、staff_u は、su コマンドが禁止されているためです。

ということは、root になれなくなってしまったということなのだ。。
単純に、unconfined_u を抜いてしまうと、root になれなくなってしまいます。
このような場合を考慮して、sudo を有効に使う必要がありました。

つづく。

SELinux を頑張る-その3

次は、ユーザーについてロックダウンしていくことを検討しましょう。

ユーザーについての現在の設定を確認する。

# semanage login -l
================
ログイン名 SELinux ユーザー MLS/MCS 範囲 サービス名
__default__ unconfined_u s0-s0:c0.c1023 *
root unconfined_u s0-s0:c0.c1023 *
================

root は、unconfined_u にマッピングされ、デフォルトユーザーも同様となります。

では、strict policy に近づけていく作業を始めましょう。

root が、unconfined_u という SELinux ユーザーにマッピングされています。
これを、staff_u という SELinux ユーザーにマッピングしなおします。

# semanage login -m -s staff_u root

設定を確認します。
# semanage login -l
================
ログイン名 SELinux ユーザー MLS/MCS 範囲 サービス名
__default__ unconfined_u s0-s0:c0.c1023 *
root staff_u s0-s0:c0.c1023 *
================

root が staff_u にマッピングされました。

ここで、/root のデータを ssh 経由でダウンロードしようとすると、多数のエラーが audit log に出力されました。

ちょっと解決策がすぐには分からないので、一般ユーザでデータのやり取りをするようにしましょう。
一般ユーザでの ssh には、何の問題もありませんでした。

お疲れさまです。

SELinux を頑張る-その2

では、strict ポリシに近づけていきます。

ところで、<user> ユーザーが、wheel グループに入ったままなので、抜きます。
以下のコマンドにより可能です。

# gpasswd -d <user> group

では、実行します。

# gpasswd -d <user> wheel

まずは、unconfined モジュールを削除します。

uncnofined モジュール削除の前に、unconfined_domain_type が幾つあるか確認して
おきます。

# seinfo -a unconfined_domain_type -x | wc -l
88

では、削除します。

# semodule -d unconfined

もう一度確認します。

# seinfo -a unconfined_domain_type -x | wc -l
18

かなり減っています。
何が削除されたのかを確認します。

$ diff -ruNp seinfo_-a_unconfined_domain_type_-x seinfo_-a_unconfined_domain_type_-x__after_semodule_-d_unconfined
--- seinfo_-a_unconfined_domain_type_-x 2018-09-24 12:16:34.268464049 +0900
+++ seinfo_-a_unconfined_domain_type_-x__after_semodule_-d_unconfined 2018-09-24 12:16:34.269464030 +0900
@@ -1,88 +1,18 @@

Type Attributes: 1
attribute unconfined_domain_type;
- abrt_handle_event_t
anaconda_t
authconfig_t
- bacula_unconfined_script_t
- boinc_project_t
- bootloader_t
- certmonger_unconfined_t
- cinder_api_t
- cinder_backup_t
- cinder_scheduler_t
- cinder_volume_t
- cloud_init_t
- cluster_t
- clvmd_t
- condor_startd_t
- conman_unconfined_script_t
- crond_t
- depmod_t
- devicekit_disk_t
- devicekit_power_t
- devicekit_t
- dirsrvadmin_unconfined_script_t
firstboot_t
- fsadm_t
- fwupd_t
- httpd_unconfined_script_t
- inetd_child_t
- inetd_t
- initrc_t
- insmod_t
install_t
- kdumpctl_t
- keepalived_unconfined_script_t
kernel_t
livecd_t
- lvm_t
- mount_t
- nagios_eventhandler_plugin_t
- nagios_unconfined_plugin_t
openshift_initrc_t
- openvpn_unconfined_script_t
- openwsman_t
- pegasus_openlmi_logicalfile_t
- pegasus_openlmi_unconfined_t
- pki_tomcat_script_t
- prelink_t
preupgrade_t
puppetagent_t
realmd_consolehelper_t
- realmd_t
rolekit_t
rpm_script_t
rpm_t
- rtas_errd_t
- samba_unconfined_net_t
- samba_unconfined_script_t
- semanage_t
- setfiles_mac_t
- sge_job_t
- sge_shepherd_t
- sosreport_t
- system_cronjob_t
- systemd_coredump_t
- tomcat_t
- tuned_t
- udev_t
- unconfined_cronjob_t
unconfined_dbusd_t
- unconfined_mount_t
- unconfined_munin_plugin_t
- unconfined_sendmail_t
- unconfined_service_t
unconfined_t
- virt_qemu_ga_unconfined_t
- virtd_lxc_t
- virtd_t
- vmtools_helper_t
- vmtools_t
- vmtools_unconfined_t
- vmware_host_t
- watchdog_unconfined_t
- wine_t
- xdm_unconfined_t
- xserver_t
- zabbix_script_t

 お疲れさまです。

SELinux を頑張る-その1

Fedora28 で initrc_t からドメイン遷移するドメインがどれくらいのあるかを調べます。

# sesearch -T -s initrc_t | wc -l
3125

カウントするのをやめると、以下のように出力されます。

# sesearch -T -s initrc_t
type_transition initrc_t NetworkManager_exec_t:process NetworkManager_t;
type_transition initrc_t NetworkManager_initrc_exec_t:process initrc_t;
type_transition initrc_t NetworkManager_var_run_t:file net_conf_t "resolv.conf";
type_transition initrc_t NetworkManager_var_run_t:file net_conf_t "resolv.conf.tmp";
type_transition initrc_t abrt_dump_oops_exec_t:process abrt_dump_oops_t;
type_transition initrc_t abrt_exec_t:process abrt_t;
type_transition initrc_t abrt_helper_exec_t:process abrt_helper_t;
type_transition initrc_t abrt_initrc_exec_t:process initrc_t;
type_transition initrc_t abrt_upload_watch_exec_t:process abrt_upload_watch_t;
type_transition initrc_t abrt_watch_log_exec_t:process abrt_watch_log_t;
type_transition initrc_t accountsd_exec_t:process accountsd_t;
type_transition initrc_t acct_exec_t:process acct_t;
type_transition initrc_t acct_initrc_exec_t:process initrc_t;
type_transition initrc_t admin_home_t:dir auth_home_t ".yubico";
type_transition initrc_t admin_home_t:dir cache_home_t ".cache";
type_transition initrc_t admin_home_t:dir config_home_t ".config";
type_transition initrc_t admin_home_t:dir config_home_t ".kde";
...(snip)...
type_transition initrc_t xserver_exec_t:process xserver_t;
type_transition initrc_t ypbind_exec_t:process ypbind_t;
type_transition initrc_t ypbind_initrc_exec_t:process initrc_t;
type_transition initrc_t yppasswdd_exec_t:process yppasswdd_t;
type_transition initrc_t ypserv_exec_t:process ypserv_t;
type_transition initrc_t ypxfr_exec_t:process ypxfr_t;
type_transition initrc_t zabbix_agent_exec_t:process zabbix_agent_t;
type_transition initrc_t zabbix_agent_initrc_exec_t:process initrc_t;
type_transition initrc_t zabbix_exec_t:process zabbix_t;
type_transition initrc_t zabbix_initrc_exec_t:process initrc_t;
type_transition initrc_t zarafa_deliver_exec_t:process zarafa_deliver_t;
type_transition initrc_t zarafa_gateway_exec_t:process zarafa_gateway_t;
type_transition initrc_t zarafa_ical_exec_t:process zarafa_ical_t;
type_transition initrc_t zarafa_indexer_exec_t:process zarafa_indexer_t;
type_transition initrc_t zarafa_monitor_exec_t:process zarafa_monitor_t;
type_transition initrc_t zarafa_server_exec_t:process zarafa_server_t;
type_transition initrc_t zarafa_spooler_exec_t:process zarafa_spooler_t;
type_transition initrc_t zebra_exec_t:process zebra_t;
type_transition initrc_t zebra_initrc_exec_t:process initrc_t;
type_transition initrc_t zoneminder_exec_t:process zoneminder_t;
type_transition initrc_t zoneminder_initrc_exec_t:process initrc_t;
type_transition initrc_t zos_remote_exec_t:process zos_remote_t;

結構ありますね。私のマシンですので、結構インストールされているパッケージがあるので、ドメインの数も多いかもしれませんが。

sesearch コマンドは、setools-console パッケージに入っていますよ。

(参考)
https://danwalsh.livejournal.com/42394.html

sar-analyzer の開発状況(20180918)

sar-analyzer のグラフ機能ができました。

CPU all と、paging を一つのファイルに、sar ファイル毎に作成します。

文字で確認する場合は、.txt ファイルを、グラフで確認する場合は、.ps ファイル達を

見ていくと、マシンの息づかいが聞こえてくると思います。

github.com

sar-analyzer の開発状況(20180917)

sar-analyzer ですが、グラフ機能を作成中です。今、CPU とページングの基本のところが完成したので、dev ブランチにアップしています。

最初のファイルのみのグラフ化となりますが、全てのファイルをグラフ化したら、master に取り込む予定です。

github.com

sar-analyzer の開発状況(20180915)

sar-analyzer ですが、コンパイルした時にサイズがとても大きくなっていたのを、小さくしました。98 Mbytes になっていたのが、8 Mbytes 程度にしました。

まあ、配列の数を減らしたのですが。通常のシステムであれば問題なく解析できると思います。

github.com

sar-analyzer の開発状況(20180914)

sar-analyzer ですが、network down を検出する機能を追加しました。

パケットのやりとりが 0 になった時間帯を検出します。

例えば、急に NIC が死んだ事がわかるようになりました。

もちろん、本当に死んだのかどうかは、きちんと調べてくださいね。

次は、ちょっと無駄にコマンドを発行しているところがあったら整理したいなぁ。

では、

 

github.com

 

sar-analyzer の開発状況(20180912)

お疲れさまです。

時の流れを感じる今日の日です。

さて、sar-analyzer ですが、バージョン 10.12 においては、thrashing 検出機能を追加しました。 早速自分のマシンを解析したところ、マシンが止まって大変な思いをした日時が、正しく thrashing と判定された時間帯でした。

次は、ネットワークカードが急に死んだような事があったら、表示させたいと思います。

酒でも飲むかなーー。

github.com

sar-analyzer の開発状況(20180911の2)

sar-analyzer の開発ですが、スラッシング検出機能をつけました。

「おそらくスラッシングが発生しているかもよ」という表示をするようにしました。

完璧ではないですが、判定のよすがにはなると考えています。

github.com

sar-analyzer の開発状況(20180911)

こんにちは、秋の香りがしてきましたね。

さて、sar-analyzer ですが、総合判定的なレポートを作りたいな、と考えています。

今は、それぞれのファイルにおける、最高値、スパイク値、全体の最高値、最低値、スパイク値、平均値 となっています。

これだけでは、いつ何が悪くなったのかを判定するには、やはり熟練の技が必要かもしれません。

なので、とりあえずわかりやすい項目から取り組んでいきたいと思っています。

スラッシングなどから始めます。

涼しいなぁ。

github.com

 

sar-analyzer の開発状況(20180908)

それぞれのファイルの最高値も表示するようにしました。

最高 spike 値と最高値で、何日の何時頃に負荷が高かったかがある程度わかると思います。また、最初に、リスタートされていればその時刻も表示されますので、問題があって再起動したとかの情報も最初にわかるようにしました。

ZM オプションを使うといいですよ。

$sar-analyzer -D <directory> -ZM

ファイルを並べ替えるときは、例えば、

$sar-analyzer -D <directory> -ZMO<数字>

ちなみに、make すると、70 Mbytes の大きさになります。

外部ライブラリを一切使っていません。メモリ領域を予めとって、そこで作業しているためとなります。

美味しいラーメンを食べたよ。

github.com

sar-analyzer の開発状況(20180907)

sar の解析で、最大 spike 値をそれぞれのファイルで採れるようになり、日にちのソートもできるようになりましたが、やはり最高値は欲しいかな、と考えています。

最高 spike 値は確かに知りたいですが、もともとのデータが高かったら、 spike も

上がらないですし。あー、そうなると、平均値も欲しいのか。。というか、平均値だけを取り出す機能が要らなくなっちゃう?ともかく、ファイル毎の最高値がでるようにするのは、この週末の作業になりますね。

github.com

sar-analyzer の開発状況(20180901)

spike 値が出力される機能を、最近付けていたのですが、-O オプションを付加しても、正しく order できていませんでした。今回の改修では、それを可能にしました。

sa ディレクトリには、デフォルトで 1ヵ月分のファイルが入っていますが、月の半ば等になると、分析されるファイルが、まず、今月、そして、先月、となってしまい、読みにくい(そのマシンの状態を連続的な流れで)ので、それを動かす事ができるのが、-O オプションです。

sar-analyzer の使い方ですが、以下のように使います。

$ sar-analyzer -D <sar_data directory> -ZMO12

ここで、O12 が、先頭の 12 オブジェクトを後ろに回す、というオプションです。

この 12 を変えていくと、連続して読みたい状態にする事ができます。

さぁ、ビール飲むぞー。

github.com