yumを使う。

前回サブスクリプションの登録を紹介いたしましたが、サブスクリプションが登録されるとyumが利用できるようになります。

 

yumは、パッケージのインストーラがどこにあるかをレポジトリと呼ばれるファイルに記載しておいて、インストールしたいときはそのファイルを参照して、インターネットやローカルファイルを検索して自動でインストールしてくれます。

 

yumのレポジトリを確認

 サブスクリプションがアタッチされているとこのようにRedhatがNet上に公開しているレポジトリが自動で追加されてきます。

[root@host1 ~]# yum repolist
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
repo id repo name status
rhel-7-server-rpms/7Server/x86_64 Red Hat Enterprise Linux 7 Server (RPMs) 17,474
rhel-7-server-rt-beta-rpms/x86_64 Red Hat Enterprise Linux for Real Time Beta (RHEL 7 Server) (RPMs) 15
rhel-7-server-rt-rpms/7Server/x86_64 Red Hat Enterprise Linux for Real Time (RHEL 7 Server) (RPMs) 240
repolist: 17,729
[root@host1 ~]#

 

サブスクリプションがない場合は。。。
とりあえずDVDからパッケージを探してrpmでちまちまインストールすることになるのですが、探すのが面倒ですし、せっかく見つけても依存関係がどうのこうのというのでかなりストレスフルな展開になるのが目に見えているので、DVDが持っていいるリポジトリyumに登録すると楽になります。

 

dvdを/mntにマウントしたとします。

[root@host1 ~]# mount -o ro /dev/cdrom /mnt

 

レポジトリの設定ファイルを作成します。

[root@host1 ~]# vi /etc/yum.repos.d/dvd.repo

f:id:linlinrh:20171113152407p:plain


[root@host1 ~]# yum -v repolist

Repo-id : dvd
Repo-name : dvd.repo
Repo-revision: 1476915491
Repo-updated : Thu Oct 20 07:18:13 2016
Repo-pkgs : 4,751
Repo-size : 3.1 G
Repo-baseurl : file:///mnt/
Repo-expire : 21,600 second(s) (last: Mon Nov 13 15:20:36 2017)
Filter : read-only:present
Repo-filename: /etc/yum.repos.d/dvd.repo

DVDのレポジトリを読み込んで、yumのリストに追加されました。
このように、yumはレポジトリを参照するためのconfigファイルを持っています。

 

[root@host1 ~]# ls -l /etc/yum.repos.d/
total 104
-rw-r--r--. 1 root root 62 Nov 13 15:20 dvd.repo
-rw-r--r--. 1 root root 101322 Nov 13 14:46 redhat.repo
[root@host1 ~]#

 

 

利用可能なパッケージの確認

yumで使用できるパッケージを参照するには、listオプションを使用します。

[root@host1 ~]# yum list
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-
: manager
Installed Packages
GConf2.x86_64 3.2.6-8.el7 @anaconda/7.3
GeoIP.x86_64 1.5.0-11.el7 @anaconda/7.3
ModemManager.x86_64 1.6.0-2.el7 @anaconda/7.3
ModemManager-glib.x86_64 1.6.0-2.el7 @anaconda/7.3
NetworkManager.x86_64 1:1.4.0-12.el7 @anaconda/7.3
NetworkManager-adsl.x86_64 1:1.4.0-12.el7 @anaconda/7.3

 

アップデートできるパケージをレポジトリから表示するには、list  updatesオプションを使用します。

[root@host1 ~]# yum list updates
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-
: manager
Updated Packages
NetworkManager.x86_64 1:1.8.0-11.el7_4 rhel-7-server-rpms
NetworkManager-adsl.x86_64 1:1.8.0-11.el7_4 rhel-7-server-rpms
NetworkManager-config-server.noarch 1:1.8.0-11.el7_4 rhel-7-server-rpms
NetworkManager-glib.x86_64 1:1.8.0-11.el7_4 rhel-7-server-rpms
NetworkManager-libnm.x86_64 1:1.8.0-11.el7_4 rhel-7-server-rpms
NetworkManager-libreswan.x86_64 1.2.4-2.el7 rhel-7-server-rpms
NetworkManager-libreswan-gnome.x86_64 1.2.4-2.el7 rhel-7-server-rpms
NetworkManager-team.x86_64 1:1.8.0-11.el7_4 rhel-7-server-rpms

 

レポジトリからインストールできるiptablesのパッケージを確認します。

[root@host1 ~]# yum list |grep iptables
iptables.x86_64 1.4.21-17.el7 @anaconda/7.3
iptables.i686 1.4.21-18.2.el7_4 rhel-7-server-rpms
iptables.x86_64 1.4.21-18.2.el7_4 rhel-7-server-rpms
iptables-devel.i686 1.4.21-18.2.el7_4 rhel-7-server-rpms
iptables-devel.x86_64 1.4.21-18.2.el7_4 rhel-7-server-rpms
iptables-services.x86_64 1.4.21-18.2.el7_4 rhel-7-server-rpms
[root@host1 ~]#

 

インストールされているパッケージからiptablesを検索します。

[root@host1 ~]# yum list installed |grep iptables
iptables.x86_64 1.4.21-17.el7 @anaconda/7.3
[root@host1 ~]#

 

パッケージのインストール

iptablesのサービスが入っていなかったので、インストールします。

[root@host1 ~]# yum install iptables-services.x86_64
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager

Dependencies Resolved

===================================================================
Package Arch Version Repository Size
===================================================================
Installing:
iptables-services x86_64 1.4.21-18.2.el7_4 rhel-7-server-rpms 51 k
Updating for dependencies:
iptables x86_64 1.4.21-18.2.el7_4 rhel-7-server-rpms 428 k

上記のようにyumはインストールの際に必要な依存関係を解消ながらインストールしてくれるので便利ですね。 

 

 以上でした。

yumを使いたいので無料のサブスクリプションを手に入れる。

yumを試したいときに利用するサブスクリプションの取得方法とその登録方法をご紹介します。開発者アカウントに登録すると無料で1つサブスクリプションを手に入れることができます。

 

まずは、開発者アカウントの登録します。

 

 

このとき、Redhatのユーザとパスワードを取得しますので、この情報使ってインターネットを経由してホストをアカウントに紐付けます。

[root@host1 ~]# subscription-manager register --username RHアカウント --password パスワード
The system has been registered with ID: cbf0aaf1-7zz4-4425-9898-yyyy636fxxxx
[root@host1 ~]#

 

ホストが登録されると下記のコマンドで使用できるサブスクリプションが確認できます。開発者アカウントに付与された無料で1つのサブスクリプションの情報が表示されます。また個別のサブスクリプションはPool-IDで識別されます。

 

[root@host1 ~]# subscription-manager list --available
+-------------------------------------------+
Available Subscriptions
+-------------------------------------------+
Subscription Name: Red Hat Enterprise Linux Developer Suite
Provides: Red Hat Software Collections (for RHEL Server)

SKU: RH1234567
Contract:
Pool ID: ff123456789abcdef123456789abcdef
Provides Management: Yes
Available: 100
Suggested: 1
:

 

また、サブスクリプションの利用状況やPool-IDは、次のカスタマーポータルでも確認できます。

Red Hat Customer Portal

 

f:id:linlinrh:20171113141323p:plain

 

f:id:linlinrh:20171113142621p:plain

 

 

最後は、付与されているサブスクリプションをアタッチしてyumが使用できる状態にします。

[root@host1 ~]# subscription-manager subscribe --auto

Installed Product Current Status:
Product Name: Red Hat Enterprise Linux Server
Status: Subscribed

[root@host1 ~]#

 

開発者アカウントでのサブスクリプションは基本1つなので、--autoオプションで問題無いですが、正規のライセンスによって、複数個サブスクリプションを使い分けるときには、プールIDを指定してアタッチすることができます。

[root@host1 ~]# subscription-manager subscribe --pool=XYZ01234567

 

以上です。

今さら聞けない検索

Linuxはファイル名を探すのが大変という印象がありますが、いくつかのコマンドを抑えておけば、そんなに面倒でもないです。

 

ファイルの中の文字列を検索

馴染みのないファイルを検索するのも何なんで、前にも何度となく取り上げているネットワークのconfigファイルからIPを確認したりするときなんかはgrepが便利だったりします。

 

構文:grep 検索文字列 ファイル名

[root@host1 ~]# grep IPAD /etc/sysconfig/network-scripts/ifcfg-eth1
IPADDR=192.168.0.251
[root@host1 ~]#

 

小文字も大文字も関係なしに検出したいときは、-iオプションを付けます。

[root@host1 ~]# grep -i ipad /etc/sysconfig/network-scripts/ifcfg-eth1
IPADDR=192.168.0.251
[root@host1 ~]#

 

ディレクトリ内のすべてのファイルのIPを確認したいときは、ファイル名のところに*(ワイルドカード)を入れます。


[root@host1 ~]# grep IPAD /etc/sysconfig/network-scripts/*
/etc/sysconfig/network-scripts/ifcfg-eth1:IPADDR=192.168.0.251
/etc/sysconfig/network-scripts/ifcfg-lo:IPADDR=127.0.0.1
:

また出力結果から行を抽出することもできますので、コマンドのあとに|(パイプ)でgrepをつなぐことで、同じ出力結果を表示できます。

[root@host1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1 |grep IPAD
IPADDR=192.168.0.251

どこにConfigファイルが有るかわからない場合でも、-rオプションを付けると、ディレクトリを掘り下げて(再帰的に)検索してくれたりします。(力技ですが。)


[root@host1 ~]# grep -r IPADDR /etc
/etc/ppp/ip-up.ipv6to4: ipv4addr="$IPADDR"
/etc/sysconfig/network-scripts/ifcfg-lo:IPADDR=127.0.0.1
/etc/sysconfig/network-scripts/ifdown-ipv6: ipv4addrlocal="$IPADDR"
/etc/sysconfig/network-scripts/ifdown-ipv6: ipv4addr="$IPADDR"

 

 

2つの文字列を組み合わせて検索

2つの文字列を組み合わせて検索するときは、egrepコマンドを使います。

まず、ORで検索するときは、’(クォーテーション)で囲んで、文字列の区切りに|(パイプ)を入れます。

[root@host1 ~]# egrep 'IPAD|DNS' /etc/sysconfig/network-scripts/ifcfg-eth1
DNS1=192.168.0.1
IPADDR=192.168.0.251
IPV6_PEERDNS=yes
[root@host1 ~]#

 

grepでも-Eオプションで同じ結果を出力できます。

[root@host1 ~]# grep -E 'IPAD|DNS' /etc/sysconfig/network-scripts/ifcfg-eth1
DNS1=192.168.0.1
IPADDR=192.168.0.251
IPV6_PEERDNS=yes
[root@host1 ~]#

 

ANDで検索するときは、’(クォーテーション)で囲んで、文字列の区切りに.*(ドットとアスター)を入れます。

 
[root@host1 ~]# egrep '192.*168' /etc/sysconfig/network-scripts/*
/etc/sysconfig/network-scripts/ifcfg-eth1:DNS1=192.168.0.1
/etc/sysconfig/network-scripts/ifcfg-eth1:IPADDR=192.168.0.251
/etc/sysconfig/network-scripts/ifcfg-eth1:GATEWAY=192.168.0.1
:

 

ファイル名に含まれる文字列で検索したいとき

王道としてはfindコマンドですが、一番シンプルな使い方は、find コマンドのあとにディレクトリを指定すれば、配下のファイルとディレクトリを全部表示してくれます。


[root@host1 ~]# find ./
./
./.bash_logout
./.bash_profile
./.bashrc
./.cshrc
./.tcshrc
:

ただ、findはいろいろとできるので、オプションをつけないとなんでも出てきてしまうというのと、対象のファイル名をきっちり覚えていないと行けないのが面倒です。もちろん*(ワイルドカード)をつけて検索も可能ですが、なにかとお作法にうるさい印象があります。

 

例えば、このようにキーワードの指定だけだと拾ってくれませんので、

[root@host1 ~]# find /etc/sysconfig/network-scripts/ -name ifcfg
[root@host1 ~]#

きっちり*(ワイルドカード)をつけてあげます。

[root@host1 ~]# find /etc/sysconfig/network-scripts/ -name ifcfg-*
/etc/sysconfig/network-scripts/ifcfg-lo
/etc/sysconfig/network-scripts/ifcfg-ens192
/etc/sysconfig/network-scripts/ifcfg-eth1
[root@host1 ~]#

 

ただ、ファイル名をウル覚えの場合でも、grepとの合わせ技だとキーワードの指定だけでも拾ってくれるので便利です。

 

[root@host1 ~]# find /etc/sysconfig/network-scripts/ |grep ifcfg
/etc/sysconfig/network-scripts/ifcfg-lo
/etc/sysconfig/network-scripts/ifcfg-ens192
/etc/sysconfig/network-scripts/ifcfg-eth1
[root@host1 ~]#

:

 

 おわり。。

 

 

SELinuxの管理方法

SELinuxについてもうちょっと書きたいと思います。

ここでは、SELinuxのユーザとプロセスやファイルに設定されるアクセス権であるコンテクストの管理について話してみます。

SELinuxのユーザについて

前回お伝えしたようにSELinuxでは独自のユーザが存在しますので、通常のLoginユーザとの関係性について例を交えて説明します。

 

まず、Loginユーザ(userSE)を新規作成して、SELinuxのユーザ(staff_u)マッピングします。

SELinuxのユーザの種類についてはこちらを参照ください。

3.3. 制限のあるユーザーおよび制限のないユーザー - Red Hat Customer Portal

 

[root@host1 ~]# useradd -Z staff_u userSE
[root@host1 ~]#

 

ついでにパスワードも変更
[root@host1 ~]# echo pass123 |passwd --stdin userSE
Changing password for user userSE.
passwd: all authentication tokens updated successfully.

passwdコマンドで--stdin(標準入力)をつけると、echoで出力したpass123の文字列を読み取って設定することができます。

 

作成したユーザとSELinuxのユーザのマッピングを確認します。


[root@host1 ~]# semanage login -l

Login Name   SELinux User    MLS/MCS Range Service

__default__   unconfined_u    s0-s0:c0.c1023      *
root               unconfined_u    s0-s0:c0.c1023       *
system_u      system_u          s0-s0:c0.c1023       *
userSE         staff_u               s0-s0:c0.c1023       *
[root@host1 ~]#

 

一旦、userSEでログインして、idコマンドで表示するとこんな感じです。
SELinuxのユーザはPAM モジュールによって割り当てられるのでSSHでログインしています。


[root@host1 ~]# ssh userSE@localhost

[userSE@host1 ~]$ id -Z
staff_u:staff_r:staff_t:s0-s0:c0.c1023

 

ちなみに、 ユーザに特定のSELinuxユーザをマッピングしない場合は、__default__ の値が設定されます。

例)マッピングされていない既存のユーザ(userSE3)での表示

[root@host1 ~]# ssh userSE3@localhost

[userSE3@host1 ~]$ id -Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

 

次に、すでに存在するユーザ(userSE2)に、SELinuxのユーザ(user_u)を割り当ててみます。

[root@host1 ~]# semanage login -a -s user_u userSE2
[root@host1 ~]# semanage login -l

Login Name   SELinux User    MLS/MCS Range   Service

__default__    unconfined_u    s0-s0:c0.c1023       *
root                unconfined_u    s0-s0:c0.c1023       *
system_u       system_u          s0-s0:c0.c1023       *
userSE          staff_u               s0-s0:c0.c1023       *
userSE2        user_u               s0                           *
[root@host1 ~]#

 

ファイルのコンテキスト(ラベルの組み合わせ)について

rootユーザでテストファイル(testfile1)を作成して、ラベル(コンテキスト)を確認します。コンテクストに含まれるラベルは、ユーザ(_u)、ロール(_r)、タイプ(_t)、機密レベル(Sx)になります。

[root@host1 ~]# touch /root/testfile1
[root@host1 ~]#
[root@host1 ~]# ls -Z /root/testfile1
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 /root/testfile1
[root@host1 ~]#

SELinuxユーザ(unconfined_u)とファイルのラベルであるタイプ(admin_home_t)のコンテキストが確認できます。

 

ここで、コンテキストを別のユーザ(user_u)とタイプ(public_content_t)へ変更してみます。


[root@host1 ~]# chcon -u user_u -t public_content_t /root/testfile1
[root@host1 ~]#
[root@host1 ~]# ls -Z /root/testfile1
-rw-r--r--. root root user_u:object_r:public_content_t:s0 /root/testfile1
[root@host1 ~]#

 

chconは一時的なコンテキストの変更なので、restoreconを実行すると戻ってしまいます。restoreconコマンドは、Configファイルで予め設定している内容でコンテキストを設定し直します。
※Configファイルはこちら:/etc/selinux/targeted/contexts/files/file_contexts.local

 

[root@host1 ~]# restorecon -vF /root/testfile1
restorecon reset /root/testfile1 context user_u:object_r:public_content_t:s0->system_u:object_r:admin_home_t:s0
[root@host1 ~]#

 

-vオプションを付けるとどこをどのように復元したのかも表示してくれます。
->以前の内容が、chconで一時的に変更された内容で、->以降に表示されているコンテキストがConfigファイルの設定になります。-Fは強制的なrestoreになります。

 

永続的に変更するには、fcontecstのサブコマンドを使用します。

fcontestは、-a(add),-d(delete),-l(list)のオプションがあり、永続的な変更では-aを使用します。前出のConfigファイルに書き込まれます。

 

[root@host1 ~]# semanage fcontext -a -s user_u -t public_content_t /root/testfile1

 

実際は、コンテキストを管理しているファイルにエントリーが追加されますので、追加状況は、-lオプションや直接そのファイルを参照することで確認できます。

[root@host1 ~]# semanage fcontext -l |grep testfile1
/root/testfile1 all files user_u:object_r:public_content_t:s0
[root@host1 ~]#
[root@host1 ~]# grep testfile1 /etc/selinux/targeted/contexts/files/file_contexts.local
/root/testfile1 user_u:object_r:public_content_t:s0
[root@host1 ~]#

 そのままで開くと大量に表示されますので、grepで絞り込むことをおすすめします。

なお、この状態ではまだ、実際に有効になっているコンテキストは変更されていないので、いったんrestoreconを実行してコンテキストを反映させます。

[root@host1 ~]# restorecon -vF /root/testfile1
restorecon reset /root/testfile1 context system_u:object_r:admin_home_t:s0->user_u:object_r:public_content_t:s0
[root@host1 ~]#
[root@host1 ~]# ls -Z /root/testfile1
-rw-r--r--. root root user_u:object_r:public_content_t:s0 /root/testfile1
[root@host1 ~]#

 

 

SELinuxてなに?

今回はSELinuxについてです。

SELinuxはファイルやプロセスにラベルを付けることでアクセス制御を行います。ラベルはプロセスとファイルにふることができます。ラベルの種類には次のようなものがあり、

  1. ユーザ(_u):誰(SELinux独自のユーザ)
  2. ロール(_r):役割、グループ
  3. タイプ(_t):アクセス先
    (対象はプロセスかファイルで、プロセスの場合はドメインということもある。)
  4. セキュリティレベル(sX,cX):機密のレベル

これらを組み合わせて

 

誰(SElinuxUser/role)何(type)に対してどんな制限をする”

 

という文脈をコンテキストlとして記述しておいて、SELinuxのサービスがセキュリティのポリシーとして適用します。

 

SElinuxの状態は、sestatus (-vは詳細表示)コマンドで確認できます。

[root@host1 ~]# sestatus -v
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28

Process contexts: ...プロセスのコンテキスト
Current context: unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
Init context: system_u:system_r:init_t:s0
/usr/sbin/sshd system_u:system_r:sshd_t:s0-s0:c0.c1023

File contexts: ...ファイルのコンテキスト
Controlling terminal: unconfined_u:object_r:user_devpts_t:s0
/etc/passwd system_u:object_r:passwd_file_t:s0
/etc/shadow system_u:object_r:shadow_t:s0
/bin/bash system_u:object_r:shell_exec_t:s0
/bin/login system_u:object_r:login_exec_t:s0
/bin/sh system_u:object_r:bin_t:s0 -> system_u:object_r:shell_exec_t:s0
/sbin/agetty system_u:object_r:getty_exec_t:s0
/sbin/init system_u:object_r:bin_t:s0 -> system_u:object_r:init_exec_t:s0
/usr/sbin/sshd system_u:object_r:sshd_exec_t:s0
[root@host1 ~]#

 

また通常のユーザとは別にSELinuxのユーザが存在しまして、次のコマンドでそれらのマッピング状態を書くにできます。

[root@host1bynmtui ~]# semanage login -l
Login Name  SELinux User  MLS/MCS Range Service
__default__  unconfined_u  s0-s0:c0.c1023 *
root                 unconfined_u  s0-s0:c0.c1023 *
system_u     system_u        s0-s0:c0.c1023 *

 

 

 

ここで、SELnuxの動き方を、rootユーザでpasswdコマンドを実行している状況を例に説明してみたいと思います。


idコマンドから現在のユーザ(root)のSELinuxのUserは、unconfined_uとになっていることが確認できます。
※ちなみに、隣のunconfined_rはロールで、通常のユーザで言うとGroupみたいな感じです。

[root@host1 ~]# id -Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@host1 ~]#

 

 

 

passwdコマンドを実行するプロセスのラベル(ドメイン)は、psコマンドで確認できます。ここではpasswd_tドメインとなります。

[root@host1 ~]# ps -eZ | grep passwd
unconfined_u:unconfined_r:passwd_t:s0-s0:c0.c1023 14894 pts/1 00:00:00 passwd
[root@host1 ~]#

 

passwdコマンドが実行されたときにアクセスするファイルのラベル(タイプ)は、lsコマンドから、それぞれ以下の通りになっています。
[root@host1 ~]# ls -Z /usr/bin/passwd
-rwsr-xr-x. root root system_u:object_r:passwd_exec_t:s0 /usr/bin/passwd
[root@host1 ~]#
[root@host1 ~]# ls -Z /etc/shadow
----------. root root system_u:object_r:shadow_t:s0 /etc/shadow
[root@host1 ~]#

 

上記の例はこちらを参考にいたしました。

第2章 SELinux コンテキスト - Red Hat Customer Portal

 

図にするとこんな感じになりますが、SELinuxが有効なときはこのようなラベル付がバックグラウンドで行われています。

f:id:linlinrh:20171101120837p:plain

  1. ユーザ(unconfined_u)はpasswdを実行するときに、プロセスのコンテキストの影響を受けて、
  2. passwardコマンドも(system_uのユーザで)ファイルにアクセスしに行く際はファイルのコンテキストの制限を受けます。

 

 

そんなSELinuxですが、基本パッケージでインストールしたRHEL7.xではOSの起動とともに有効になり、2つのモードで切り替えることができます。

  • Enforcing モード:
    デフォルトのモードで、SElinuxのポリシーが強制されてアクセス制御が行われます。ポリシー違反の場合はアクセスの拒否が行われます。
  • Permissive モード:
    ポリシーは読み込まれてラベルの作成も行われますが、ポリシー違反によるアクセス拒否は行わません。ただログには記録されるのでトラシューやデバッグで使用できます。

SELinuxのモードを確認するにはgetenforceコマンドを使用します。デフォルトではEnforcingになります。


[root@host1 ~]# getenforce
Enforcing
[root@host1 ~]#

 

続いて、permissiveモードに切り替えてみます。

 
[root@host1 ~]# setenforce 0

もう一度getenforceを実行するとpermissiveと表示されます。
[root@host1 ~]# getenforce
Permissive
[root@host1 ~]#

 

enforcingモードに戻すには、パラメータに1を指定します。

[root@host1 ~]# setenforce 1

 

上記の手順は一時的にモードを切り替えるだけなので、SELinuxがrestartするとデフォルトのenforcingに戻ってしまいます。なので起動時のモードを永続的に変更したい場合は、SELinuxのConfigファイルを編集する必要があります。

 

[root@host1 ~]# vim /etc/selinux/config

f:id:linlinrh:20171101135752p:plain

ファイルの更新を適用させるためには、OSを再起動します。

[root@host1 ~]# reboot

 

上記のSELINUX=の項目に設定できる値としては、

enforcing - SELinux security policy is enforced.

permissive - SELinux prints warnings instead of enforcing.

の他に

disabled - No SELinux policy is loaded.

もありまして、こちらを選ぶとSELinux自体を無効にできますが、無効になっている間に作成したファイルにはラベルが付きませんので注意が必要です。RHELではpermissiveやenforcingに変更した際に、自動で再ラベルが行われるみたいですが、/etc/selinux/configを編集してSELinuxを有効にしたあとは、

# touch /.autorelabel

を実行して、明示的に再ラベルしておくようにしたほうが安心かと思います。

 

<参考資料> 

1.4. SELinux の状態とモード - Red Hat Customer Portal

4.4. SELinux の状態とモードの永続的変更 - Red Hat Customer Portal

 

 

Default Boot targetの設定

RHEL7をインストールするときに、Install with GUIのオプションを選択した場合、OSが起動してきたときはGUIのログイン画面が表示されてきますが、使っていくうちに慣れてきて最近CUIしか使わないなぁと言うときに、デフォルトで起動するモードをCUIに変更する方法をご紹介します。

 

RHEL6のときはrunlevelといっていましたが、RHEL7では.targetという形に変更されてしまいました。やりたいことは一緒なんですけどね。

 

内容 RHEL 6/
RunLevel
RHEL 7/
.target
システム停止 0 poweroff.target
シングルユーザモード 1 rescue.target
マルチユーザモード
CUI
3 multi-user.target
グラフィカルモード
GUI
5 graphical.target
再起動 6 reboot.target
緊急モード - emergency.target

 

でもって、boot modeの変更の仕方も変わりました。

変更内容 RHEL 6 RHEL 7
一時的なBoot Modeの変更 telinit runlevel systemctl isolate target_name
デフォルトのBoot Modeの変更 /etc/inittabを更新

systemctl set-default 
target_name

 

というので、デフォルトのBoot MoodをGUI(graphical.target)から、CUI(multi-user.target)に変えてみたいと思います。

 

まずは、今のDefault Boot Modeを確認から。


[root@host1 ~]# systemctl get-default
graphical.target
[root@host1 ~]#

 

CUI(multi-user.target)へ変更します。


[root@host1 ~]# systemctl set-default multi-user.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
[root@host1 ~]#

 

上の出力結果から、/usr/lib/systemd/system/配下のtarget指定のファイルを/etc/systemd/system/default.targetのシンボリックリンクとして貼り付けていることがわかります。timezoneと同様に手動でやってもいいんでしょうけどね。

 

変更後のDefault Boot Modeを確認すると、multi-user.targetに変更されています。


[root@host1 ~]# systemctl get-default
multi-user.target
[root@host1 ~]#

 

以上でした。

hostname変更のあれこれ

一般的にホスト名を変更するときは、/etc/hostnameを編集しますが、

nmtuiとかnmcliでも変更できたりします。。

 

まずは、現状のhostnameを確認するコマンドのご紹介から。。

 

[root@host1 ~]# cat /etc/hostname
host1.example.com

※このファイルの値はhostnamedのサービスが読み込んで初めてOSに適用されるので、必ずしもOSで使われているとは言えないですが。。


[root@host1 ~]# hostname
host1.example.com
[root@host1 ~]#
[root@host1 ~]# hostnamectl |grep hostname
Static hostname: host1.example.com
[root@host1 ~]#
[root@host1 ~]# uname -n
host1.example.com
[root@host1 ~]#
[root@host1 ~]# nmcli gen hostname
host1.example.com
[root@host1 ~]#

 

 

続いて、hostnameの変更方法です。

 

## /etc/hostnameファイルを書き換えるパターン

[root@host1 ~]# vi /etc/hostname

f:id:linlinrh:20171031165034p:plain

書き換えたあと、catで見ると変更されていますが

[root@host1 ~]# cat /etc/hostname
host1updatedFile.example.com

OSのキャッシュ上はまだ反映されないので、
[root@host1 ~]# hostname
host1.example.com

hostnamedのサービスを再起動する必要があります。

[root@host1 ~]# systemctl restart systemd-hostnamed
[root@host1 ~]#
[root@host1 ~]# hostname
host1updatedFile.example.com

 

 

## hostnameコマンドでの変更

 

hostnameコマンドを使用するとOSのキャッシュ上は変更されますが。。。

[root@host1 ~]# hostname host1byHostname.example.com
[root@host1 ~]# hostname
host1byHostname.example.com
[root@host1 ~]#

/etc/hostnameの内容は更新されないため、rebootすると元の名前に戻ってしまいます。

[root@host1 ~]# cat /etc/hostname
host1updatedFile.example.com
[root@host1 ~]#

 

## hostnamectlでの変更

こちらは、OSのキャッシュもファイルも両方変更されます。^^

[root@host1 ~]# hostnamectl set-hostname host1byHstnctl.example.com
[root@host1 ~]#
[root@host1 ~]# hostname
host1byhstnctl.example.com
[root@host1 ~]# cat /etc/hostname
host1byhstnctl.example.com
[root@host1 ~]#

 

## nmcliでの変更

nmcliでのhostnameの変更もOSキャッシュ、ファイルともに変更されます。

 [root@host1 ~]# nmcli gen hostname host1bynmcli.example.com
[root@host1 ~]#
[root@host1 ~]# hostname
host1bynmcli.example.com
[root@host1 ~]# cat /etc/hostname
host1bynmcli.example.com
[root@host1 ~]#

ただ、今回はRHEL7.3を使用していますが、リファレンスを見るところによるとRHEL7でもVersion次第ではhostnamedの再起動が必要かもしれません。

3.4. nmcli を使ったホスト名の設定 - Red Hat Customer Portal

 

## nmtuiでの変更

ラスト、nmtuiです。

[root@host1 ~]# nmtui

Set system hostnameを選択して

 f:id:linlinrh:20171031171701p:plain

hostnameのダイヤログで入力します。

f:id:linlinrh:20171031171804p:plain

丁寧に確認画面も表示。

f:id:linlinrh:20171031171944p:plain

Main MenuでQuitして完了です。

OSキャッシュもファイルも更新されていましたが、nmcliベースなのでバージョン次第では、hostnamedの再起動が必要か?というところです。


[root@host1 ~]# hostname
host1bynmtui.example.com
[root@host1 ~]# cat /etc/hostname
host1bynmtui.example.com
[root@host1 ~]#

 

 

いろいろと選択肢はありますが、お好きなものをSelectしていただければと思います。