読者です 読者をやめる 読者になる 読者になる

CentOSをSELinuxのstrictモードで動かしてみよう(その2)

Linux SELinux

だいぶ経ちましたが、前回からの続きです。

再びログイン

まずは

とりあえずターミナルからsshでログインしてrootにsuしたら

 $ su -
 パスワード:
 -bash: /root/.bash_profile: 許可がありません
 -bash-3.2#

と言われてしまいました。

気になったのでログをみてみる

 /var/log/audit/audit.log をみようとしたら

 -bash-3.2# cd /var/log/audit
 -bash: cd: /var/log/audit: 許可がありません

許可が無いらしい。。

切り分け目的でSELinuxを無効にしようとしてみる

 SELinuxを無効にしようとsetenforceコマンドを発行

 -bash-3.2# setenforce 0
 setenforce:  setenforce() failed

…撃沈。

では現状確認

今のロールを確認してみる
 -bash-3.2# id -Z
 user_u:user_r:user_t

…だから多分無理なのかなと。。
#元のユーザも同じロールだし。

次は

 それではとコンソールからrootでログインしてロールを確認

 # id -Z
 root:sysadm_r:sysadm_t:SystemLow-SystemHigh

…こっちは普通によさそう
(よく理解できてませんが)どうやらこの辺の違いが挙動に表れていると思われます。

今回の目標

ということで、一旦下が出来るようにすることを目標とします。
SSHでのリモートログインで、suしたときにコンソールと同じ権限が割り当てられるようにしたい

調べる

権限がどう違うのか、ということ。

まずは条件で比較

  • SSHで一般ユーザーログイン後su
 $ id -Z
 user_u:user_r:user_t
 $ su -
 パスワード:
 -bash: /root/.bash_profile: 許可がありません
 -bash-3.2# id -Z
 user_u:user_r:user_t
  • SSHでrootユーザーログイン
 -bash: /root/.bash_profile: 許可がありません
 -bash-3.2# id -Z
 root:staff_r:staff_t:SystemLow-SystemHigh

#普段はやりませんが、/etc/ssh/sshd_config のPermitRootLogin を一時的に「yes」にして確認

  • コンソールで一般ユーザーログイン後su
 $ id -Z
 user_u:user_r:user_t
 $ su -
 パスワード:
 -bash: /root/.bash_profile: Permission denied
 -bash-3.2# id -Z
 user_u:user_r:user_t
  • コンソールでrootユーザーログイン
 # id -Z
 root:sysadm_r:sysadm_t:SystemLow-SystemHigh
整理する
  • rootの場合
    • コンソール:root:sysadm_r:sysadm_t:SystemLow-SystemHigh
    • SSHでのログイン:root:staff_r:staff_t:SystemLow-SystemHigh
  • 一般ユーザーの場合
    • コンソールログイン+su: user_u:user_r:user_t
    • SSHでのログイン+su: user_u:user_r:user_t

となりました。

ということで

今回はlogin時の特定の一般ユーザー権限が「staff_r」となるように設定することにします。

作業開始

ユーザーの確認

semanageコマンドを使ってみます。

 # semanage login -l
 Login Name                SELinux User              MLS/MCS Range
 
 __default__               user_u                    s0
 root                      root                      SystemLow-SystemHigh
 system_u                  system_u                  SystemLow-SystemHigh

どうやら一般ユーザーは全てSELinux上では「user_u」になるらしいです。…よくわかってませんが。

SELinuxユーザーの作成

今回は、rootユーザーがSSHでのログイン時に割り当てられる権限を、自分のユーザーに設定することにしました。

 # semanage login -a -s staff_u -r SystemLow-SystemHigh myuser

結果こんな感じに。

 # semanage login -l
 Login Name                SELinux User              MLS/MCS Range
 
 __default__               user_u                    s0
 root                      root                      SystemLow-SystemHigh
 system_u                  system_u                  SystemLow-SystemHigh
 myuser                    staff_u                   SystemLow-SystemHigh
ログインしてみる

さっそくログイン

 -bash: /home/myuser/.bash_profile: 許可がありません
 -bash-3.2$ id -Z
 staff_u:staff_r:staff_t:SystemLow-SystemHigh

.bash_profileは置いといて、とりあえず権限が変わった模様。

「sysadm_r」になれるか確認
 -bash-3.2$ newrole -r sysadm_r
 パスワード:
 $ id -Z
 staff_u:sysadm_r:sysadm_t:SystemLow-SystemHigh

成功!

でsuしてみる
 $ su -
 パスワード:
 # id -Z
 staff_u:sysadm_r:sysadm_t:SystemLow-SystemHigh

成功!

こんな感じでいいんでしょうかね?
とりあえず良しとしよう。

#自分が使っているユーザー名でログインした 「.bash_profile」の権限が無い件は後日調査。

一旦今日はここまで。