ぽれいんのブログ

エンジニアになるために覚えたことを日記に付けます。

Apache

0.はじめに

4月からプログラミングを学んでおります。ポレインと申します。

私事ではございますが、7月からインフラエンジニアとして働くことになりました。

転職する前はプログラミングスクールにて主にHTML、CSSRubyMySQL等について学びました。

※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。

 ↓↓前回の記事↓↓

porain.hatenablog.com

1.Apache

Apacheとは

Apache HTTP Serverは、Apache Software Foundationで開発された強力な商用オープンソースWebサーバです。

現在のネットワーク環境の確認

 

想定環境

想定環境

Apacheのセットアップ

 〇パッケージの入手とインストール

LinuxhttpdRPMパッケージがインストールされているかどうかを確認し、インストールされていない場合、”httpd”をインストールします。

yum list installed httpd
yum install httpd

Apacheの起動

Apacheの起動
systemctl start httpd
〇動作確認

Apacheのサーバプロセスが動作しているか確認します。

ps -efH | grep httpd

以下のコマンドでTCPポート80番Apacheが受付しているかどうか確認します。

netstat -anp | grep httpd
Apacheテストページの表示確認

Windowsのブラウザ(chrome,safari等)を起動して、以下URLを入力します。

http://グローバルIPアドレス//
〇ログの確認

tailコマンドを実行しログの内容を確認します。

tail /var/log/httpd/access_log
tail /var/log/httpd/error_log

自動起動設定

linux起動時に自動的にApacheが起動するようになっているか以下コマンドで確認します。

chkconfig --list httpd

以下コマンドで自動起動をオンにします。

systemctl enable httpd

2.Apacheの基本設定

メイン設定ファイルの書式

Apacheのメイン設定ファイルは、/etc/httod/conf/httpd.confとなります。このファイルを編集することで、Apacheの動作を様々に変更することができます。

Apacheの基本ディレクティブ

〇wwwサーバ管理者のメールアドレス設定(ServerAdmin)

Apacheの設定ファイル/etc/httpd/conf/httod.confをviで開き、以下のServerAdminディレクティブの設定行に移動します。

vi /etc/httpd/conf/httpd.conf
〇ServerAdminディレクティブの書式
ServerAdmin 管理者のメールアドレス
〇DocumentRootディレクティブの書式
DocumentRoot ディレクトリパス

デフォルトの設定では、ドキュメントルートは、”var/www/htmlディレクトリになっています。ブラウザから以下のような」要求を送信した場合、wwwサーバは ”/var/www/html/index.html"ファイルをブラウザが要求してきたものとして処理します。

〇テストファイルによる確認

ドキュメントルート直下にtest.htmlファイルを作成して、ブラウザから以下URLで作成したページの内容が表示されるかどうか確認します。

まず、"vi"コマンドを用いて、test.htmlファイルの新規作成を行います。

vi /var/www/html/test.html
-----------------------------------------------------------------
This is test page.
-----------------------------------------------------------------

テスト用のURLが完了したら、ブラウザのアドレス欄に以下のURLを入力し、テストページが表示されるかどうか確認します。

http://グローバルIPアドレス/test.html

 

AWS ~仮想サーバー/インスタンス編~

 

0.はじめに

4月からプログラミングを学んでおります。ポレインと申します。

私事ではございますが、7月からインフラエンジニアとして働くことになりました。

転職する前はプログラミングスクールにて主にHTML、CSSRubyMySQL等について学びました。

※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。

7月からインフラエンジニアとしての人生をスタートさせた私ですが、自己学習環境が欲しい!!となりましたので、Amazon EC2を使用することにしました。

インフラの学習環境を整えるには、サーバ本体を買って......ネットワークを構築して.......その他もろもろ設定してうわあああ大変だあ.......ってイメージだったんですが、インターネットで手順を覚えれば簡単にしかも無料でできる(AWSアカウント登録から1年間)と知って驚きました。

そんなAWSを利用したインフラの学習環境の整え方について紹介していきたいと思います。

1.Amazon EC2とは

Amazon EC2Amazon Elastic Cloud)はLinuxWindows等の仮想サーバを作成できるサービスです。利用者は数分でサーバを作成でき、作成後のマシンスペック変更や削除も簡単に実行できます。サービスの利用方法は課金制であり、サーバ上で稼働しているアプリケーションが高負荷となりCPUやメモリが不足した場合は、インスタンスタイプを変更することでスペックの増強が可能です。またデータ量が多くなってディスク容量が不足になった場合もすぐに拡張が可能です。

個人的には手軽にすぐ使えることが一番のメリットかなと思います。(使い始めて3日目で何言うてるねん)orz

3.使用方法

前提条件:AWSのユーザ登録をしている

(1) AWSのホームページにログインする

【公式】クラウドならアマゾン ウェブ サービス (AWS)

※上のリンクからログインできます。

(2) 仮想マシンの起動

左上のサービスを選択

f:id:porain:20210727183407j:plain

aws1

すべてのサービス→コンピューティング→EC2をクリック

(☆をクリックするとお気に入りにすることができて便利です。)

f:id:porain:20210727183522j:plain

aws2

(3) インスタンス起動 → インスタンス起動

ステップ1:Amazonマシンイメージ(AMI)

無料利用枠はWindowsRedHat,SUSE Linux,Ubuntuなど様々ありますが今回はAmazon Linux 2 AMI (HVM), SSD Volume Type を選択します。

 

f:id:porain:20210727200704j:plain

ステップ2:インスタンスタイプを選択

ここでは使用するアプリケーションに合わせて適切なリソースの組み合わせを選ぶことができます。インスタンスタイプによってさまざまなCPU、メモリ、ストレージ、ネットワークパフォーマンスの組み合わせがあります。

今回は無料で利用できるインスタンスタイプ:t2.microを選択します。

 

f:id:porain:20210727200722j:plain

ステップ3:インスタンスの詳細設定

要件に合わせてインスタンスを設定します。

今回は学習環境を整えるのみなので何も変更せずに次のステップへ進みます。

 

f:id:porain:20210727200731j:plain

ステップ4:ストレージの追加

インスタンスに追加の EBS ボリュームやインスタンスストアボリュームをアタッチするか、ルートボリュームの設定を編集することができます。

こちらも何も変更せずに次のステップへ進みます。

 

f:id:porain:20210727200746j:plain

ステップ5:タグの追加

タグを定義することでルールを追加することができます。

今回はキー:Name と 値:test というタグを追加します。

f:id:porain:20210727200805j:plain

タグについてはこちらのサイトで詳しく書かれていたので是非ご覧ください。

(丸投げ)

dev.classmethod.jp

ステップ6:セキュリティグループの設定

AWSにおけるファイアウォール環境の設定です。学習環境のため、SSH、HTTP、HTTPSの通信のみ許可します。

f:id:porain:20210727200854j:plain

以下のように設定

タイプ プロトコル ポート範囲 ソース
SSH TCP 22 マイIP
HTTP TCP 80 任意の場所
HTTPS TCP 443 任意の場所

 

セキュリティグループについてはこちらのサイトで詳しく書かれていたので是非ご覧ください。(丸投げ)

avinton.com

※ちなみに説明に日本語が入っている場合、以下のエラーが発生。

Invalid rule description. Valid descriptions are strings less than 256 characters from the following set: a-zA-Z0-9. _-:/()#,@[]+=&;{}!$*

 

ステップ7:インスタンス作成の確認

内容に間違いがないことを確認し、起動をクリック。

 

f:id:porain:20210727200816j:plain

すると以下の画面が出てきます。

f:id:porain:20210727200828j:plain

これはSSH接続をするためのキー(鍵)です。こちらを使ってTera Termにて接続を行うため、ダウンロードした場所が分からないってことがないように気を付けてください。

キーペア名の下に好きな名前を入力し、キーペアのダウンロードをクリック。

そして、インスタンスの作成をクリック。

f:id:porain:20210727200839j:plain

                                   以上

↓↓参考↓↓

AmazonのAWS EC2とは?はじめての人向けに解説|TECH PLAY Magazine [テックプレイマガジン]

Amazon EC2とは何か?「インスタンス」など関連用語もまとめて解説【保存版】 連載:やさしく学ぶAWS入門|ビジネス+IT

システム管理2

0.はじめに

4月からプログラミングを学んでおります。ポレインと申します。

私事ではございますが、7月からインフラエンジニアとして働くことになりました。

転職する前はプログラミングスクールにて主にHTML、CSSRubyMySQL等について学びました。

※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。

1.LVM

 論理ボリュームマネージャ(logical volume manager, LVM)は、「物理ボリューム」を提供するハードディスクなどのデバイスに直接ファイルシステムを作成するのではなく、一旦「論理ボリューム」と呼ばれる仮想化されたボリュームに束ねて利用するためのシステムです。これにより、動的かつ自在にディスクのパーミッションを変更できるようになります。

LVMイメージ

LVMイメージ
LVMを利用する流れ
  1. ハードディスクに物理ボリューム(PV)を作成する
  2. PVを束ねてボリュームグループ(VG)を作成する
  3. VGから論理ボリューム(LV)を好きな容量だけ切り出す
  4. LVにファイルシステムを作成して、マウントして使う

2.logrotate

logrotateとは

ログファイルの扱いはシステム管理の中でも重要な1つです。「ログファイル」とは、システムログ、Apacheアクセスログ、Cronのログ、ログイン情報(secure)などがあります。日ごろからそれぞれのログファイル容量が肥大化しすぎないように管理が必要です。Linuxディストリビューションのほとんどには「logrotate」と呼ばれるログを自動化に回すツールがインストールされています。logrotateのメリットとしては容量の肥大化を回避させることにあります。

logrotateの仕組み

logrotate自体の実行スケジュールはCronで設定されています。どのようにログのローテーションが行われるのかは、cronデーモン設定を確認すれば分かります。

cat /etc/cron.daily/logrotate

ファイル内容より「usr/sbin/logrotate」バイナリが「etc/logrotate.conf」設定ファイルに沿って実行されることを意味しています。

cat /etc/logrotate.conf

-----------------------------------------------------------------
# see "man logrotate" for details
# rotate log files weeklf
weekly

# keep 4 weeks worth of backlogs
rotate 50
mail root

# send errors to root
erroors root

# create new(empty)log filef after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own lastlog or wtmp -- we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}
-----------------------------------------------------------------

「etc/logrotate.conf」ファイル内にそれぞれのログファイルの設定を記述することもできますが、サービスごとに設定ファイルを分けた方が分かりやすいとの判断から、標準設定ではetc/logrotate.dディレクトリ下を参照するようになっています。

例えば、Apacheyumでインストールすると、自動的にこのディレクトリの配下にログローテーションの設定が記載されたファイルが作成されます。では、システムログ(syslog)の設定内容をみてみましょう。

cat /etc/logrotate.d/syslog

/var/log/messages {
rotate 50
weekly
postrotate
/usr/bin/killall -HUP syslogd
endscript
}

各サービスで個別にセットした設定の方が、logrotate.conf内の全体設定よりも優先されます。

3.時刻合わせ
 時計合わせとは

linuxシステムの時刻がズレている場合、アクセスログやシステムログの時刻もずれてしまう事になりトラブルシューティングなどの際に困ることになります。そこでlinuxにはntpdやchronydというNTPを利用した時刻合わせ専用のデーモンがインストールされます。

NTP

NTPとは「Network Time Protocol」の略で、簡単に言えば、ネットワーク上で時間を同期するプロトコルのことです。NTPにはNTPサーバから取得した時刻値、そのNTPサーバからLinuxに時刻値が到達するまでの通信時間の補正も含まれており、最も妥当だと思われる時刻同期ができるようになっています。

  • クライアントがクエリを発信した時刻
  • サーバがクエリを受信した時刻
  • サーバが応答を発信した時刻
  • クライアントが応答を受信した時刻
NTPの仕組み

NTPサーバは階層構造で管理され、NTP自体の階層はストラタムと呼ばれ、ストラタムは1から16まで存在する。数字が小さいほど、正確な時刻を刻んでおり、また存在するサーバ数も少なくなります。

NTPの仕組み

Linuxではntpdateコマンドを使って、NTPサーバから正確な時刻を取得できます

ntpdate NTP サーバ名

現在時刻を確認するにはdateコマンドを利用します。

date
時刻修正について

サーバを運用する段階で、そのサーバの時刻が大きく狂ってしまったとして、その場合にいきなり、NTPサーバとの正確な時間に同期させていけません。時刻を即座に正しい時刻に合わせるモードを「stepモード」、徐々に時刻を合わせるモードを「slewモード」と言います。

NTPサーバ負荷

NTPクライアントから時刻同期をおこなう場合は、なるべくストラタムの番号の大きなサーバを指定して同期しましょう。もし、NTPクライアント全てがストラタム1サーバと同期した場合、その時刻サーバはトラフィック負荷に耐え切れず、時刻が狂ってしまう可能性すらあります。NTPクライアントが多いようであれば、組織内に自前でNTPサーバを用意してもいいです!

4.syslog

syslogとは

syslogとはlinuxシステムやプロセスから出てくるアラートなどの情報を、ネットワークで転送したり、ログとしてファイルに保存していくクライアント/サーバ型の仕組みのことです。syslogメッセージはUDPまたはTCPポート番号の514を使用してsyslogサーバに送信されます。ApacheMySQLなど、独自のログディレクトリを持つアプリケーションの多くは、独自の方法でログを記録しています。一方、syslogは独自のログ出力方法を持たない、非常に多くのアプリケーションが利用しています。syslogを利用して出力されたログメッセージが記録されるログファイルは、”/var/log/boot.log”,"/var/log/cron","/var/log/messages","/var/log/secure","var/log/spool"などですが、特定のアプリケーションを除き、多くのアプリケーションのログメッセージはデフォルトで"/var/log/messages"に記録されます。

ファシリティ

ファシリティは「ログ種別」のことです。ファシリティのは様々な種類がありますが、Linuxでは「*」を使用することで全ファシリティを選択できます。

プライオリティ

プライオリティはメッセージの優先度を表します。

アクション

アクションではメッセージの出力先を指定します。ログファイルに保存したい場合、ファイル名をフルパスで指定します。ユーザ名を指定した場合はそのユーザの端末にメッセージが出力されることになります。

syslogの設定

syslogは、/etc/syslog.confファイルで設定をします。

・crit,alert,emergレベルのメール関連ログを、/var/log/mailファイルに記録

mail.crit /var/log/mail

・メールのログを出力しない

mail.none

カーネルに関する全てのメッセージを、/var/log/kernelに出力

kern.* /var/log/kernel

・緊急メッセージは全てのユーザが受け取る

*.emerg *

loggerコマンドを使って、任意のファシリティ、プライオリティに対して任意のメッセージを出力することができますので、設定の確認に便利です。

logger -t test -p local0.info "syslog messages"
tオプション: タグを付与する
pオプション: ファシリティとプライオリティを定義する

                                                                                                                         以上

システム管理

0.はじめに

4月からプログラミングを学んでおります。ポレインと申します。

私事ではございますが、7月からインフラエンジニアとして働くことになりました。

転職する前はプログラミングスクールにて主にHTML、CSSRubyMySQL等について学びました。

※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。

 

1.ブートシーケンス

 サーバの電源投入から起動までの流れをブートシーケンスと呼び、CentOS6とCentOS7ではブートシーケンスに若干の違いがあります。

 

ブートシーケンス

BIOSUEFI

PCの電源ボタンが押されると、CPUはマザーボード上に実装された「BIOS」もしくはUEFIというソフトウェアを実行して周辺機器の初期化を行います。その後、起動ドライブを探し、その条件に従い起動ドライブのブートローダを起動します。

※現在の主流はUEFI

ブートローダ

ブートローダにはいくつか種類がありますがlinuxではGRUBが主流となっています。役割はLinuxカーネルをメモリ上にコピーすることです。

Linuxカーネル

Linuxカーネルが立ち上がると、sysvinit/Upstart/systemd システムが起動されます。

systemd

systemdは従来のinit/Upstartの代替であり、非常に高速なシステム起動・終了や様々なシステム管理機能の提供してくれます。

sysvinitとsystemdの対応表

CentOS 6系のserviceコマンドやchkconfigコマンドとCentOS 7のsystemdの対応関係

CentOS 6系のserviceコマンドやchkconfigコマンドとCentOS 7のsystemdの対応関係

 

2.ディスク管理

 パーティション

パーティションとは、1つのハードディスクを複数の領域に分割して使用することを言います。分割して利用することでハードディスクの一部が物理的に壊れても影響を受けるのは1つのパーティーションになるのでリスクの分散を図ることができます。

マウント

ルートディレクトリから始まる階層構造のディレクトリに対して、枝を追加する工程のことをマウントと呼びます。言い換えるとパーティションディレクトリを結びつけるものですね!マウントするにはmountコマンドを使います、システムに関わるコマンドなので基本的にroot権限で実行します。「/etc/fstab」ファイルに記述すればOS起動時に自動的にマウントさせることも可能です。(マウントした枝を取り外すときは「unmount」コマンドを使用します。

 

3.ファイルシステムの種類

ファイルシステム

ファイルシステム記憶装置(ディスク)に記録されているデータを管理する方法を提供する機能です。

FAT/exFAT

FATは歴史が古く、Windowsの前身であるMS-DOSでも使用されていたファイルシステムです。exFATでは実質的に容量の制限がないため、FAT32よりも大きなデータを扱えるようになりました。(FAT32は2TBまでの領域しか扱えず1ファイルあたりの容量も4GB)

NTFS

NTFSWindowsで用いられるファイルシステムです。FATにはないアクセス制限や暗号化などの機能が追加されています。容量の制限が少なく、データ領域も破損しづらいと言われています。FATと異なり基本的にWindows専用ファイルシステムとなっておりほかのOSとデータのやり取りができません。

HFS/HFS+

HFSはMacOSで用いられるファイルシステムです。MacOS X 以降では機能が拡張されて、HFS+になりました。基本的にMacOS専用ファイルシステムのため、Windowsとの互換性がなくHFS+でフォーマットしたハードディスクをWindowsで読むことはできません。

ISO 9660

ISO 9660はCDやDVDなどの光学メディアで使用されるファイルシステムです。

ext/XFS

Linuxでは様々なファイルシステムが使用されていますが、その中でもextとXFSが有名です。extはext1/ext2/ext3/ext4などのバージョンがあり様々な機能追加が行われています。現在はext4が主流です。XFSも同様にLinuxで使用されてます。XFSはextより大規模データの扱いに適していると言われます。WindowsMacOSでは使用できません。そのため、LinuxベースのNASのハードディスクをパソコンに接続しても中身を読むことはできません。

 

---------------------------------------------------------------------------------------------

 ↓↓参考↓↓

ブートの仕組み

systemdによるCentOS 7の管理 | Think IT(シンクイット)

---------------------------------------------------------------------------------------------

Linux基本コマンド④

1.はじめに

4月からプログラミングを学んでおります。ポレインと申します。

私事ではございますが、7月からインフラエンジニアとして働くことになりました。

転職する前はプログラミングスクールにて主にHTML、CSSRubyMySQL等について学びました。

※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。

<前回の記事>

Linuxの基本操作  - エンジニアへの道

Linuxの基本操作② - エンジニアへの道

Linuxの基本操作③ - エンジニアへの道

↑↑まだ見ていない方はこちらから↑↑ 

 

2.ジョブの制御

ジョブとはコマンドラインで実行したプロセスのことを指します。Linuxで生成されたプロセスには、プロセスIDが割り当てられますが、シェルから呼び出されたコマンドラインにはプロセスIDとは別にシェルによってジョブ番号が割り当てられます。

フォアグラウンドジョブとバックグラウンドジョブ

 通常、コマンドを実行した場合、フォアグラウンドで実行され、そのジョブが終了するまで次の操作はできません。しかし、プロセス上にはユーザが実行している以外のプロセスも存在しています。このようなプロセスはバックグラウンドジョブで実行されています。キーボードから入浴して実行するプロセスもバックグラウンドで起動することができます。コマンドの最後に”&”(アンパサンド)を付加することで、バックグラウンドでそのジョブを実行することができます。バックグラウンドジョブが実行されているかどうかは、”jobs”コマンドで確認できます。

less /etc/resolv.conf &
[1]12345
[1]+ 停止         less/etc/resolv.conf
jobs
[1]+ 停止 less/etc/resolv.conf

ジョブの制御

フォアグラウンドで実行したジョブをバックグラウンドに移動させることもできます。

fg %1             「%1」はジョブ番号の指定
bg %1       

※実行したコマンドが思ったより時間がかかっている場合などはフォアグラウンドジョブを【Ctrl】+【z】で一時停止させ”bg”コマンドでバックグラウンド移動させることができます。(【Ctrl】+【c】で強制で終了)

3.Linuxファイルシステム構造

 CentOSをはじめ最近のLinuxディストリビューションは多数のファイルおよびディレクトリの名前を定義したFHSに基本従っています。

ファイルのシステム構造

ディレクトリ名 用途
/ ルートディレクト
/bin

基本コマンド(cat,cp,ls等)

/boot 起動に必要なファイル(カーネル、初期RAM)
/dev バイスファイル(usb,cdrom,disk等)
/etc

設定ファイル。/etcにはバイナリファイルを配置しない

/home ユーザのホームディレクト
/lib 32bit 版のライブラリー(基本コマンドの実行に必要なライブラリ群)
lib64 64bit 版のライブラリー(64bit版はこっち)
/lost+found 破損ファイルの断片が格納される
/media リムーバブルメディア用マウントポイント(cdrom等のマウントポイント)
/mnt ハードディスク等の一時的なマウントポイント
/opt アプリケーションソフトウェアパッケージのインストール先
/proc カーネルやプロセス情報
/root root用ホームディレクト
/run 実行時の可変データ群。再起動時に消去される
/sbin システム管理用コマンドなど(ip, shutdown, reboot など)
/srv HTTP、FTP 用データが置かれている。
/sys バイスやドライバーの設定ファイルなど
/tmp 一時的なファイル(再起動時に消去される)
/usr ユーザーが使用する各種プログラムなど
/var 変更されるデータ(内容が常に変化するファイル群が格納)

 

4.特殊なビット

 パーミッションは3桁だけを使用する場合がほとんどですが実は4桁目のパーミッションが存在します。

8進数表記 記号 許可属性
4000 suid
2000 sgid
1000 sticky

suidとsgid

これらのビットは実行権限に対して付加することができます。suidとsgidが設定されたファイルを実行すると誰が実行しても実行ファイルの所有ユーザ/所有グループの権限で動作します。これにより特定のプログラムの制御化で特定のユーザ/グループ権限を与えることが可能になります。例えば所有ユーザがrootの実行ファイルにsuidビットを設定すると誰が実行してもそのプログラムは所有ユーザであるrootの権限で実行されます。そのため、不必要に実行ファイルにsuidビットを設定するとセキュリティホールになることが多くあります。

ls -l /bin/cat
-rwxr-xr-x ...
chmod 4755 /bin/cat ....元々の755に4000(suid)を設定
ls -l /bin/cat
-rwsr-xr-x ...

または

chmod u+s /bin/cat

これで一般ユーザでもrootユーザの権でcatコマンドを実行でき、/etc/shadowファイルが閲覧できるようになります。

/bin/catにsuidビットを立てたままでは、パーミッションの設定に意味がなくなりますので、元に戻しておきます。
exit
chmod u-s /bin/cat
ls -l /bin/cat
-rwxr-xr-x ...

システム中にはすでに多くの実行ファイルにsuidやsgidビットがデフォルトで設定されています。

ディレクトリに対するsgid

sgidビットは、実行ファイルだけでなく、ディレクトリに対しても設定することができます。ディレクトリに設定するとそのディレクトリ直下で作成するファイルの所有グループは全て、そのディレクトリの所有グループになります。

このビットはあるグループで共同作業したい場合、そのグループが所有グループのディレクトリを作成しそれにsgidビットを設定させておけばそこで作成したファイルは誰が作成したものであってもグループのに所属していれば編集することが可能になるため便利です。

useradd sasaki   →ユーザ佐々木を追加
useradd matsuda   →ユーザ松田を追加
passwd sasaki   →佐々木のパスワードを設定
passwd matsuda   →松田のパスワードを設定
groupadd project   →グループプロジェクトを追加
usermod -G project sasaki   →佐々木(松田)をprojectグループに
usermod -G project matsuda    所属させる(セカンダリグループ)
mkdir /tmp/project  →プロジェクトグループ共有のディレクトリを作成
chown .project /tmp/project →所有グループをrootからprojectに変更
chmod g+s /tmp/project   →projectにsgidビットを設定
ls -ld /tmp/project   →projectディレクトリの表示
drwxr-sr-x ...

sticky

ディレクトリの「その他のカテゴリ」に書込権限がある場合、そこにあるファイルは所有者以外のユーザでも削除することができます。しかし、stickyビットをそのディレクトリに設定しておくと自分にファイルは作成/削除せきても、他人の作成したファイルは削除できなくなります。(rootユーザは制限を受けません)

普通、/tmpはstickyビットが初めから設定されています。

ls -ld /tmp
drwxrwxrwt ...

5.ジョブの定期実行(cron)

 cron(クーロンとは)

定期実行を行う場合は、cronを使います。cronとは、予め指定した時間サイクルでサーバ上のプログラムを自動実行させるために機能です。時計合わせや定期的なバックアップ、暇な時間を見計らってのコンパイル作業などをcronでスケジューリングさせておくと便利です。RPMパッケージファイルでインストールしたサービスが、定期的に実行して使うサービスだと/etc/crontabファイルによって定期実行されます

vi /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

#run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * * root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

上4行によって、『使用するシェル』『PATH』『出力内容を送るユーザのmailアドレス』『ホームディレクトリ』の設定をし、下4行では『周期』『実行ユーザ』『実行コマンド』を設定しています。

↓↓以下書式↓↓

分 時 日 月 曜   実行ユーザ   コマンド

曜日に関しては日曜日~土曜日が0~6に対応します。

”は全てマッチします。

, ”で区切ってリストできます。

システムのcron

cron.hourly   1時間に1回実行   毎時1分

cron.daily    1日に1回実行   毎日A.M.4:02

cron.weekly   1週間に1回実行   毎週日曜日A.M4:22

 cron.monthly  1か月に1回実行   毎月A.M4:42

crontabコマンド

ユーザ毎にスケジュールしたい場合は”crontab”コマンドを使用します。

crontabオプション

-e     環境変数EDITORで設定されるエディタでユーザのcronの設定を行います。

-l      現在設定されているユーザのcronをリスト表示します。

-r       ユーザのcronを策k所します。

crontab -e

anacron

anacronはcronによって更新されていないジョブを探してきて実行します。具体的には/var/spool/anacron/cron.dailyに前回更新したタイムスタンプがあり、これをもとに動作します。anacronが起動されるのは以下の2通りの場合です。

  • 起動時に/etc/rc.d/init.d/anacronによって
  • /etc/cron.daily/0anacronによって

anacronの設定ファイル(/etc/anacrontab)

1    65    cron.daily         run-parts/etc/cron.daily

この設定ファイルはシステムが停止していた場合、システム起動後、65分後に/etc/cron.dailyにあるファイルのうち更新されていないものが実行されます。

いつ使うんだよってなる方もいたかもしれませんが、crontabがシステムの不具合により起動しなかった場合等のもしもの事態に役立ちます

6.アカウントの切り替え(sudo)

 rootユーザの制限

システム運用の場面では、特権ユーザであるrootユーザの使用に制約を設けるのが一般的です。そのため、rootユーザのパスワードを知っている人を制限することが必要になりますが、パッケージのインストール等rootの権限が必要なケースはちょくちょく出てきます。その際、一般ユーザからrootユーザへのアカウント切り替え時にセキュリティを手軽に向上させられ、運用管理に役立つ情報を出力できる”sudo”の仕組みをご紹介します。

ユーザアカウントの切り替え

一般ユーザからrootユーザの切り替え方法の代表は”su”コマンドです。

su - ユーザ名

su”コマンドを使用してrootユーザに切り替えた場合はログファイルに切り替え情報がタイムスタンプを含め出力されるので、rootユーザで直接コンソールにログインするよりも管理されていると言えます。

sudo コマンド

”su”コマンドと同様にユーザアカウントを切り替えるコマンドに、”sudo”コマンドがあります。”su”コマンドと比較して"sudo"コマンドの一番のメリットは、一般ユーザはrootユーザのパスワードを知らなくても良いということです。

sudo 何かしらのコマンド

※”sudo”コマンドでシェルを実行した場合、そのシェル上で実行したコマンドの履歴はログに残らないので注意が必要です。

※”sudo”コマンドの実行に失敗すると、SECURITY infomation… という件名のメールがローカルのroot宛に送信されます。

その他の設定

”sudo”コマンドでは入力されたパスワードは一定期間キャッシュされるようになっています。つまり、連続して"sudo"コマンドを実行する際は1度入力した後、パスワードは問われないようになっております。これは便利ではありますが、セキュリティ上のリスクでもあります。

以下を/etc/sudoersファイルに追記すればOK!

visudo
--------------以下を追記-------------
Defaults timestamp_timeout = 0
---------------ここまで--------------

 

7.システムの終了と再起動

システムを終了し電源をきるには”shutsown”コマンドに”-h”オプションを付けて実行します。(rootユーザでしか実行できません)

shutdown -h now

再起動の場合は”-r”オプションを使用します。

shutdown -r now
もしくは
reboot

 

↓↓参考↓↓

【Linuxの基礎知識】ディレクトリ構造とファイルシステムについて! | Beエンジニア

                                   以上

Linuxの基本操作③

1.はじめに

4月からプログラミングを学んでおります。ポレインと申します。

私事ではございますが、7月からインフラエンジニアとして働くことになりました。

転職する前はプログラミングスクールにて主にHTML、CSSRubyMySQL等について学びました。

※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。

<前回の記事>

Linuxの基本操作  - エンジニアへの道

Linuxの基本操作② - エンジニアへの道

↑↑まだ見ていない方はこちらから↑↑

2.出力の操作

通常、コマンドの出力先は端末画面になりますが、コマンドの出力先を変更することが可能です。このコマンドの出力先、入力先を変更することを”リダイレクト”、出力を他のコマンドの入力に換えることを”パイプ”といいます。

標準入力と標準出力

”の記号(リダイレクション演算子)を使うことでリダイレクト可能です。”echo”コマンドの際にしれっと使いましたが、”echo”コマンドに限らず、どのコマンドでもリダイレクト可能です。

dmesg > bootfile      
less bootfile

上記の例では、"dmesg”コマンドの出力先をbootfileに変更しています。これにより、非常に長い出力内容である"dmesg”コマンドをlessを使い閲覧することが可能になります。

また、”>”は上書きで出力します。 ”>>”は末尾に追記して出力します。

標準エラー出力

標準エラー出力とはエラーが出た場合の出力先の通り道のことです。エラーが出た場合は標準出力とは違う道を通って画面に出力されます。しかし画面を見ただけではエラーかどうかを見分けることができません。(通り道が違うだけで出力先は同じなため

エラー出力をリダイレクトしすることで確認することができます。

エラー出力リダイレクトする場合、ファイルディスクリプタを指定します。

<ファイルディスクリプタ

標準入力        標準出力    1    エラー出力   

(A)   cat /etc/shadow etc/resolv.conf
(B) cat /etc/shadow etc/resolv.conf 2> errorfile

(A)でcatを使ってファイルを2つ同時に開きました。当然、エラーが出ます。

そこで(B)により、エラー出力のファイルディスクリプタ ”2” を指定して、エラーファイルのみをerrorfileというファイルにリダイレクトしています。

標準出力、エラー出力ともに1つのファイルにまとめて出力する場合、以下のように実行します。

cat /etc/shadow etc/resolv.conf  &> errorfile

ファイルディスクリプタを指定する代わりに"&"(アンバサンド)を記入します。

パイプ

パイプはコマンドとコマンドをつなぐ役割を担います。例えば、”ls”コマンドを実行したときにその出力結果が画面の範囲を超えるくらいに膨大な量であるとき、最初の方で出力された内容を見ることができません。しかし、パイプを使い出力結果を”less”コマンドの入力データとして取り込ませることができます。

ls -l /etc/ | less       /etcディレクトリ直下の詳細をlessで表示

検索して表示する機能(grep

ある文字列を含む行だけを抜き出して表示したいとき、”grep”コマンドを使用します。

grep ftp /etc/passwd  /etc/passwdファイルからftpを含む行を表示

この"grep”もよくパイプと共に使用されます。例えば以下のように実行すれば/etcディレクトリ直下のconfという文字列を抜粋することができます。

ls -l /etc/ | grep conf 

3.プロセス

プロセスとは実行中のプログラムのことを指します。

プロセス確認(ps)

シェルを含むプロセスを表示するために"ps"コマンドを使用します。"ps"コマンドではオプションとして-a -u -xをつけますが、ハイフンは省略できます。

また、画面がスクロールアウトしますのでパイプを使い”less”コマンドにつなぎます

ps aux | less

"ps aux"を実行すると、以下を知ることができます。

PID                     プロセスID。プロセスを操作する際に使用。

%CPU       CPUの占有時間率。

%MEM     実メモリ使用率。
VSZ       仮想メモリ使用量。

RSS                     実メモリ使用量。

START                プロセスの状態を示す。

 (MEMとRSSは%で表示するかどうかの違いと認識。)

プロセスの親子関係

プロセスは例外を除いて何か別のプロセスから生み出されます。
親となるプロセスから、子となるプロセスが生み出されます。(子供のプロセスは親のプロセス環境を受け継ぎます。)プロセスの親子関係を表示するには”pstree”コマンドを使います。

pstree | less

また、psコマンドとpstreeを合わせたような表示方法もあります。

(A) ps -efH
(B) ps afx | less

(A)の-efHオプションを追加するとPIDに加えてPPID(親プロセスID)を知ることができます。

(B)の-afxオプションでもツリー型でプロセスを表示してくれます。

すべてのプロセスはinitプロセスから実行されていることがpsツリーより分かります。そのため、initプロセスは必ず実行されるプロセスということでPID:1が割り当てられます。

環境変数

変数はシェル変数環境変数の2種類に分けることができます。シェル変数はシェル内のみで有効な変数、環境変数はそのプロセスの子プロセスにも有効な、すなわち引き継がれていく変数です。大きな違いとしては有効範囲の大きさですね。

環境変数の設定の手順としては①シェル変数を設定し、2シェル変数から環境変数を指定します。

(A) Porain=HUMAN
(B) export Porain
上記(A)(B)をまとめて実行することも可能
export Porain=HUMAN

現在の環境変数の一覧は”export”または”env”コマンドで確認できます。

シグナル

シグナルはプロセス間通信の一つです。プロセスが別のプロセスにシグナル(信号)を送ることによってプロセスを停止したり設定ファイルを読みこませたりできます。そのコマンドとして”kill/killall”コマンドを使用します。

kill -TERM 15370         プロセスID15370のプロセスを停止
killall TERM process   processという名前のプロセスをすべて停止
kill -KILL 15370 プロセスID15370のプロセスを強制停止

killallコマンドは同じプロセス名のものが複数あった場合すべてを一度に終了させることができるので、意図しないものも終了させてしまう危険性があります。

-KILLオプションは最終手段です。kill -TERMで終了できず、どうしようもない場合に使用します。

実際の作業ではpsコマンドとセットで使用します。

4.RPM

 RPMファイル

アーカイブファイルになっており1つのファイルに複数のファイルがまとめられています。RPMコマンドでインストールをおこなうことでそれぞれのファイルを適切なディレクトリに配置しています。

インストール

RPMをインストールには”rpm”コマンドに”-i”オプションを付けて実行します。

rpm -ivh <rpm ファイル>

アンインストール

rpm”コマンドに”-e”オプションを付けます。

rpm -e <パッケージ名>  引数にはインストールしたパッケージ名を指定

アップグレード

rpm”コマンドに”-U”または”-F”オプションを付けます。

パッケージがインストールされていない場合

-U   なりふり構わずインストール

-F   余計なパッケージをインストールしない

rpm -Fvh <rpmファイル>
rpm -Uvh <rpmファイル>

すでにインストール済みのパッケージをアップグレードする際は”-F”オプションを使うといいですね!!

RPMの依存関係

A → B → D → F

          C   E   J
上図のようなことを表します。

AをインストールするにはB,Cが必要、BをインストールするにはD,Eが必要、DをインストールするにはF,Jが必要といったようにいつまでたってもインストールできない!といった状態になることです。イライラしちゃいそうですね…笑

これを解決するものとしてyumがあります。(後ほど登場致します。)        インストールされたパッケージの表示

rpm”コマンドに"-q"オプションを使うことでRPMデータベースに問い合わせをすることができます。

rpm -q <パッケージ名>  パッケージのバージョン表示
rpm -qa インストールされているパッケージの全表示

パッケージのファイル群の表示

rpm -qpl <rpmファイル名>     インストールする前のrpmファイルを指定
rpm -ql<パッケージ名> インストールされたパッケージを指定

パッケージの詳細情報の表示

rpm -qpi <rpmファイル名> インストールする前のrpmファイルを指定
rpm -qi<パッケージ名> インストールされたパッケージを指定

ファイル群は"-l"オプション、詳細情報は"-i"オプションですね!!

5.yum

yumRPMパッケージを統合管理するものです。

リポジトリ

リポジトリとはパッケージの提供元(配布場所)のことです。iPhoneでいうアップルストアです!リポジトリは世界中にあり配っているパッケージが違います。yumリポジトリを追加することでパッケージのバリエーションを増やすことができるようになります。

yum

 コマンド一覧

パッケージのインストールおよび、リポジトリを指定してのインストール
yum install           
yum install -enablerepo=レポジトリ名 <パッケージ名>
アップデート
yum update
検索
yum search <パッケージ名>
削除
yum remove <パッケージ名>
詳細
yum info <パッケージ名>
インストールされているパッケージの表示
yum list installed

オプション一覧(抜粋)

-y                   全ての問い合わせにyesで答えたものとして実行する
installroot = 場所  インストール先を指定
downloaddir = 場所  ダウンロード先を指定
-v           詳しいメッセージを出力

また、cat /etc/yum.confでyumコマンドの設定ファイルをみることができます。

6.サービスの自動化

サービスを手動で即時に制御する方法とシステム起動時に自動的に制御する方法があります。サービスを制御する方法は様々ですがRPMYUMを利用する場合は統一されています。

システム起動時

システムの起動順番は以下のようになっております。

  1. マシンの電源
  2. BIOSプログラムの起動
  3. ブートローダ起動
  4. カーネルロード
  5. initプロセス
  6. ログイン画面

 この中でシステム起動時のサービスの自動起動に関係があるのがinitプロセスです。

initプロセス

initプロセスとはLinuxの起動時最初に実行されるプロセスです。このプロセスは設定ファイルに従って実行されます。この設定ファイルで最初に設定されるのがデフォルトランレベルです。(設定ファイル/etc/initab)

ランレベル(runlevel)

ランレベルとはLinuxシステムの動作モードを指します。

ランレベル    説明
  0 終了に移行する状態
  1 シングルユーザモード
  2 NFS関連以外のネットワーク機能が使える
  3 ネットワーク機能がフルで使える
  4 使用されていません
  5 X Window System GUI ログイン
  6 再起動に移行する状態

 現状のランレベルを変更したい場合は以下コマンドを使用する。

run level
N 3

 この出力結果は最初のNが前の状態がないこと(システム起動後にランレベルを変更していないこと)を示しています。

シングルユーザモード

シングルユーザモードは非常に重要です。

システム管理者がrootのパスワードを忘れてログインができなくなった場合等の非常時に使用することができます。

ランレベルに応じたサービスの制御

あるランレベルでシステムを起動させるとき、initプロセスの処理の一部で各種サービスを起動させたり停止させたりすることができます。

具体的にはinitプロセスはランレベル3で起動するとき『/etc/rc.d/rc3.d ディレクトリ』下にあるシンボリックリンクファイルの名前を参照してRPMYUMでインストールされた各種サービスを起動するのか停止するのか判断し実行します。

サービス制御スクリプト

『/etc/rc.d/init.d ディレクトリ』にあるファイルのことをサービス制御スクリプトといい様々なサービスを制御するために使用される実行ファイルです。

リストを表示する際は以下のコマンドに加えて

ls /etc/rc.d/init.d

以下のコマンドも使用できます。

ls service

サービス制御スクリプトは以下の引数を使用して各サービスをコントロールすることができます。

start サービスを起動
stop サービスを停止
restart stop → start
reload 設定ファイルを読み込み直す
status サービスの状態を確認

chkconfigコマンド

RPMでインストールした各サービスを起動したり止めたりするには各サービス用のサービス制御スクリプトを使えばいいことがわかったと思います。ですが、毎回システム起動時にサービスを立ち上げたり止めたりするのは大変です。その場合"chkconfig"コマンドを使用すればシステム起動時にランレベルに応じて各種サービスを起動させたりさせなかったりができます

現状どのサービスがどのランレベルで起動するか確認するときは以下コマンドを使用します。

chkconfig --list | less

特定のサービス(今回はsshd)だけを確認したい場合は以下コマンドを実行します。

chkconfig --list sshd

これをランレベル3と5で起動しない(する)ように変更したい場合

chkconfig --level 35 sshd off(on)

/etc/rc.d/rc.rocal スクリプト

initプロセスによって起動されるサービス制御スクリプトのうち最後に実行されるスクリプトになります。起動時に自動的にシステムに実行させたい設定などはこのファイルに記述を行います。ソースファイルからプログラムをインストールした場合はこのrc.localファイルにデーモン起動の処理を記述します。そうすることでシステム起動時にそのサービスを実行することが可能になります。

                                                                                                 以上

↓参考↓

CodeZine(コードジン)

 

Linuxの基本操作②

1.はじめに

4月からプログラミングを学んでおります。ポレインと申します。

私事ではございますが、7月からインフラエンジニアとして働くことになりました。

転職する前はプログラミングスクールにて主にHTML、CSSRubyMySQL等について学びました。

※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。

<前回の記事>

Linuxの基本操作 - プログラマーへの道

↑↑まだ見ていない方はこちらから↑↑

2.エディタ(vi)

テキストファイルを編集するためのソフトウェアにテキストエディタがあります。

Linuxで標準的に使用されているエディタに、”vi” があります。

モード

”vi”には2つのモードがあります。

「挿入モード」「コマンドモード」です。

挿入モード ... 実際に文字を入力/削除するモード。

コマンドモード ... ファイルの保存、viの終了ができるモード。

vi Porain

↑のように起動にはファイル名を引数として実行します。(今回はPorainがファイル名)

また、ファイルが存在しない場合は勝手に新規作成してくれます。

実行すると以下のメッセージが現れます。

"Porain" [New File]

この部分に"vi"からのメッセージが表示されます。

(Porainは今"vi"で編集中のファイル名をその隣の[New File]はこのファイルが新規作成であることを表しています)

文字の入力

コマンドモードから挿入モードに切り替えるには"a"あるいは"i"あるいは"o"を入力します。以下が表示されれば挿入モードに切り替わっています。

--INSERT--

挿入モード

以下挿入モードで使用するキーです。(頻繁に使用するものを抜粋)

a,i,o = モード切替え 
u = 元に戻す
:wq = ファイルを保存して終了
:q! = 強制終了
h = 左に移動
j = 下に移動
k = 上に移動
l = 右に移動

 vimtutorコマンドを使って練習できます。

挿入モードからコマンドモードに切り替える際は、【Esc】キーを入力します。

エディタでの流れ

--------------------------------------

vi ファイル名でエディタ開始

  ↓

    コマンドモード 

  ↓  aioなど 

    挿入モード

  ↓ 【ESC】キー

    コマンドモード

  ↓ :wq 入力

 エディタ(vi)終了

---------------------------------------

3.ファイルの属性

Linuxマルチユーザシステムです。1代のシステムを複数のユーザで共有するため、システム内にあるデータ(ファイルやディレクトリ)をどのユーザでも操作することができます。そのため、各ユーザ毎にアクセス権限が与えられます。(勝手に操作されることによるトラブルを防ぐため)この権限をパーミッションと呼びます。

パーミッション

lsコマンドに-laオプションを利用してカレントディレクトリ内の一覧表示を行います。

ls -la     カレントディレクトリ内の一覧表示  
合計 15
drwx------  3 porain porain   1024 7月 08 11:23 aaaaaa
drw-------  1 root  root    1024 7月 18 11:30 xxxxx
-rwxrwxr--  1 porain porain    0  7月 18 08:23 aaavvv
-r-xr-x--x  1 porain porain   119 7月 18 16:23 qqqqqq
-rwxr--r--  1 porain porain   377 7月 18 09:23 wwwwwww
-r--r--r--  1 porain porain   304 7月 18 14:23 ooopopop

出力結果の一番左のフィールドをご覧ください。

こちらの[drwx-]の羅列がパーミッションになります。

一番左から

ファイルタイプ -: 普通のファイル d: ディレクトリ l: シンボリックリンク

所有ユーザ           r:  読取権限 w: 書込権限 x: 実行権限

所有グループ  r:  読取権限 w: 書込権限 x: 実行権限

その他ユーザ  r:  読取権限 w: 書込権限 x: 実行権限

を表しています。(-がある場合はその部分の権限がないことを示します。)

では、この読取権限、書込権限、実行権限はどういうことかってことですね!

読取 ファイル     catやlessで閲覧できるか 

   ディレクトリ   ls などでディレクトリ内ファイルを一覧表示できるかどうか

書込 ファイル    ファイルを編集できるかどうか(ファイル自体の削除とは無関係)

   ディレクトリ  ディレクトリ内のファイルを削除できるかどうか

実行 ファイル    コマンドとして実行できるかどうか

   ディレクトリ  ディレクトリ内のファイルへアクセスできるかどうか

パーミッションの変更(chmod)

設定されているパーミッションを変更する際に使用します。

方法は2つあります。

①計算で変更

 ユーザ定義 = u:所有者, g:所有グループ, o:その他ユーザ, a:全てのユーザ)

 追加等 = +:追加 -:削除 =:付加

パーミッション = r:読取権限 w:書込権限 x:実行権限

chmod a+x testfile1        全てのユーザに対して実行権限を与える
chmod ug=rw testfile02 所有者、所有グループをrw-/rw-という権限にする

 ※ =は現状のパーミッションに関係なし。

②数字で変更

3桁の8進数で表現します。

所有者 = 400:読取権限 200:書込権限 100:実行権限

所有グループ = 40:読取権限 20:書込権限 10:実行権限

その他ユーザ = 4:読取権限 2:書込権限 1:実行権限

chmod 750 testfile001      rwxr-x---の権限にする
実行ファイルスクリプト

複数の処理を1つのファイルにまとめて簡単な実行ファイルを作成することができます。簡単に言うと実行したいファイル(複数可)を書き連ねたファイルのことです。
定期的に同じコマンドを実行するなら、いちいち手作業でコマンド入力しなくても実行ファイルスクリプトに書いておけば、手軽で間違いもないですね!
→中のコマンドを実行する場合、そのファイルに対する実行権限(x)が必要です。

4.ユーザとグループ

※ この章のコマンドはrootユーザにのみ権限があります。

ユーザの追加/削j除(useradd/userdel)

ユーザの追加を行うことでLinux上のユーザ情報が格納された/etc/passwdファイルにユーザ情報が追加エントリされます。

useradd porain                     porainユーザの追加
userdel -r porain porainユーザの削除

-rオプションを使用することでユーザのホームディレクトリも一緒に削除できます。

グループの追加/削除(groupadd/groupdel)

複数のユーザに個別に権限を与えるのではなく、まとめて管理したい場合はグループを使用します。

groupadd study           studyグループの追加
groupadd -g 1000 study グループIDを指定してstudyグループを作成
groupdel study           studyグループの削除 
ファイルの変更 (vipw)

ファイルを編集したい場合は”vipw”コマンドを使用します。

このコマンドによって、/etc/passwd ファイルをロックし他のユーザが手を出せない状態で/etc/passwdファイルを編集できます。

vipw
プライマリグループとセカンダリグループ

グループにはプライマリグループセカンダリグループがあり、ユーザは絶対に1つのプライマリグループに所属しており、複数のセカンダリグループに参加することが可能です。簡単に言えば、メインサブという感じですね。

idコマンドを利用すればログインしているユーザがどのグループに所属しているかを確認することができます。(ユーザID,グループIDも分かります!)

id
uid=0(root) gid=0(root)所属グループ
=0(root),1(bin),2(daemmon),3(sys),4(adm),6(disk),10(wheel)

gid=0(root)がプライマリグループ

所属グループ以降の表示がrootユーザが所属しているプライマリグループで、所属グループ以降の表示がrootユーザが所属しているプライマリグループとセカンダリグループになります。

所属グループの変更

ユーザ新規作成時にオプションを指定しない場合、ユーザと同じ名前のグループに所属されることになる。

useradd -g study porain
useradd -g study -G cloud porain

以上のように

-g オプションを指定することでプライマリグループを変更でき、

-G オプションを指定することでセカンダリグループを指定することができます。

所有者/所有グループの変更

ファイル/ディレクトリの所有者/所有グループはそのファイル/ディレクトリを作成したユーザになりますが、その後変更することも可能です。所有者/所有グループを変更する場合は"chown"コマンドを実行します。

chown root.root /home/porain/copyfile
chown -R root:root /home/porain/dir1

所有者と所有グループの間には、”.””:” "ドット""コロン"を使います。                 

 

   以上