MAGAZINE

キャリテク!マガジン

コラム

Linuxのユーザー管理とアクセス権の設定方法

こんにちは、吉政創成 アシスタントの菱沼です。
今回はテキストの4章に当たる部分、ユーザーの管理やファイルのアクセス権について学んでいきます。

では、今回も「さわって学ぶLinux入門テキスト/赤星リナ氏著(マイナビ出版)」を片手に勉強していきます。どうぞ超初心者の方、お付き合いいただければ幸いです。 なお、テキストはCentOSを使用しています。CentOSサポート終了に伴い、次世代への移行の話があるため、詳細はそこまで掘り下げず、コマンドの確認が中心となります。

Linuxとユーザーの役割と管理

まずはユーザーとは何かという部分からです。

引用:P.134

ユーザー管理はセキュリティ面から見てもとても大切です。
(中略)
人が管理するユーザーには「一般ユーザー」と「管理者ユーザー」があります。
一般ユーザーはLinuxの機能を使うことはできますが、ユーザーやプログラムを追加したり、システムの設定を変更するようなことはできません。
それに対して管理者ユーザーはスーパーユーザー(root)とも呼ばれ、システム全体の設定や管理など、何でも実行できてしまいます。プログラムやユーザーの追加や削除、変更も思いのままにできるので、まさにシステムでは全能の神さまのような存在です。ですから、root(ルート)ユーザーのアカウントは1つしかなく、普段は使いません。

rootユーザーはやろうと思えばファイルの全消しもできてしまうそうです。そのため、大切なファイルをうっかり削除してしまったり、設定をうっかり変えてしまったりしないよう、普段の作業は一般ユーザーを使うそうです。

また、Linuxにおけるユーザーの種類は3つに分類されます。

①管理者ユーザー(root/スーパーバイザー):システム管理にまつわるあらゆるコマンドを実行できる
②一般ユーザー:システム管理ができない、自ディレクトリ内でのファイルの追加・閲覧・変更が可能
③システムユーザー:システム内で特定のプログラムを実行するために使用(ログインは絶対しない)

③がある理由についてですが、セキュリティ面を考慮した結果のようです。
例えば、一つのサーバにメールサーバやWebサーバなど、複数の役割を持たせることがあります。root権限ですべてのプログラムを動かすことはできるそうですが、どれかに脆弱性があって乗っ取られてしまった場合、root権限で動かしているとシステム全体が乗っ取られてしまいます。そのため、特定のプログラムを動かす場合、それ専用にシステムユーザーを作り管理すれば避けられる、ということからきているようです。

参考サイト:
https://www.infraeye.com/study/linuxz0.html
システムユーザは何故必要なのでしょう|teratail
システムユーザーとしてサービスを実行する理由|it-swarm-ja.com

アカウントの切り替え方

rootユーザーへの切り替えは、Exitを実行すればアカウントからログアウトできるので入りなおせばいいのですが、それ以外にも方法があるようです。

引用:P.136

ユーザーアカウントの作成や削除などは一般ユーザーのアカウントではできません。こうしたシステムに関する変更を行うにはrootユーザーに切り替える必要があります。 切り替える方法には次のものがあります。

①今のユーザーを[exit]でログアウトし、rootユーザーでログインしなおす
②[su]コマンドでrootユーザーに切り替える
③[sudo]コマンドで一時的に権限を切り替えて実行

(中略)

[sudo]コマンドを使えるようにするには、事前に管理者権限でvisudoコマンドを実行し、/etc/sudoersファイルにユーザーと実行可能なコマンドを登録するか、wheelグループに追加するなどの準備が必要です。

(中略)

また、sudo実行時に入力するパスワードはrootユーザーではなく今のユーザーのパスワードなので、セキュリティ面からも使われることが増えています。
sudo:今利用している一般ユーザーのパスワード
su :rootユーザーのパスワード

というわけで、[su]と[su -]を実行してみました。前者はログインしていた一般ユーザーのままの環境でいる場所もそのまま、後者は環境ごとrootに移動しました。

※[sudo]は割愛しますが基本的な使い方はこちらをご参照ください。ちなみにsudoを悪用した権限昇格が行われることもあるようです。ご興味のある方はこちらのリンクもご参照ください。

ユーザーの追加、パスワードの設定

では、次にユーザー管理でできることをまとめていきます。
ユーザー作成とパスワードの設定はすでに学習済みなため、ここではコマンドのみ記載します(ユーザーの削除だけ画像有)。作成した時の記事にご興味のある方はこちらの記事をご参照ください。

  • root権限:ユーザーの作成 < useradd (ユーザー名) >
  • root権限:ユーザーのパスワードの設定・変更 < passwd (ユーザー名) >
  • root権限:ユーザーの削除 < userdel (ユーザー名) >

グループについて

次にグループという概念です。

引用:P.146

「グループ」で複数のユーザーをまとめて管理することができます。この仕組みを使えば「社員名簿ファイルにアクセス権があるのは人事課グループに属する人だけ」といった設定ができます。

(中略)

すべてのユーザーは何らかのグループに所属しなければならないため、ユーザーを作成すると同時にユーザー名と同じグループが作成されます。ユーザーは、このグループ以外にも複数のグループのメンバーになれます。ユーザーのベースになる1つ目のグループを「プライマリグループ」、2つ目以降は「セカンダリーグループ」(サブグループ)といいます。

某国民的有名ご一家の家系図で考えてみました。
誰しも生まれた時点でどこかのお家に所属しています。サザエさんは今ふぐたさんなのでプライマリはふぐたさん、セカンダリは磯野さんとします。こうすると双方の情報を得ることができます。ノリスケさんは親戚ですが磯野さんではないので磯野家の情報にアクセスできないようグループには所属させません。 ちなみにrootユーザーはすべての家の情報にアクセスできます。神様ですから!

グループのイメージがわかったところで、ここからはグループの管理方法です。

ユーザーが所属しているグループを確認する <[groups] or [id]  (ユーザー名) >

※uid:ユーザーID、gid:グループID

グループの作成<groupadd (グループ名)>と、所属ユーザーの確認<cat/etc/group>

2つ追加してみた後、追加できているか確認してみました。

Xは以前ならパスワードが入っていたそうですが、現在は別の方法で確認されます(後述)。

グループの削除 <groupdel (グループ名)>

プライマリグループに設定されていると削除できないので、あらかじめ確認が必要だそうです。 グループに所属しているユーザーを確認した後、該当者がそのグループをプライマリとセカンダリのどちらに設定しているのかを確認します。その流れが次の画像です。

セカンダリなのでそのままグループが削除できましたが、プライマリだった場合はエラーメッセージが表示されて削除できないそうです。そのため、変更する作業が必要になると思います(次の項目)。

ユーザーの設定を変える方法

ここからはユーザーにグループやコメントをつける方法、ホームディレクトリなどの情報を変更する方法を確認します。

引用:P.150

ユーザーのグループやコメント、ホームディレクトリなどの情報を変更するには[usermod]を使います。[usermod]には次のようなオプションが用意されています。

-G セカンダリーグループを変更する
-c コメントを入れる(ユーザーの所属組織など、メモ的な情報を入れられる)

(中略)

◎その他のオプション

-g プライマリグループを変更
-d ユーザーのホームディレクトリを変える

これ以外に、ユーザーの使用をロック、パスワードの有効期限変更など、さまざまな変更を行うことができるユーザー管理業務には欠かせないコマンドです。

早速やってみます。

セカンダリーグループを設定 <usermod -G (グループ名) (ユーザー名)>

プライマリの設定を変えるのは-Gを-gに変えればできますね。

コメントの設定   <usermod -c (“コメント”) (ユーザー名)>

コメントを設定する際は「”(ダブルクォーテーション)」で囲う必要があります。

※上記以外のオプションについてはヘルプオプション(-helpをつける)で見ることができましたので、必要に応じてご確認ください。

ユーザーに対する各種設定を確認する方法

[groups]や[id]でユーザーの簡単な内容は確認できますが、より詳細に確認するには以下で行えるようです。

それぞれの項目の意味は以下の通り。

①ユーザー名
②パスワード(現在はここに表記されず、別のコマンドで暗号化されたパスワードを確認)
③ユーザーID
④グループID
⑤ホームディレクトリ
⑥ログインシェル

※暗号化されたパスワードを確認する方法は次の通りです。

ファイルやディレクトリのアクセス権を設定する方法

グループのところで、所属していないグループの情報を閲覧できないという設定という話がありましたが、アクセス権を設定してあげれば読み書き実行ができるようになります。

引用:P.158

ファイルやディレクトリには、それを使う人(所有者)や利用するグループに対してアクセス権を設定することができます。アクセス権のことを「パーミッション」ともいいます。
たとえば、ファイルの所有者は読み書きが自由にできますが、グループのメンバーはファイルを表示するだけで書き換えられない、といった設定も可能です。

というわけで、いろいろ実験してみます。まずは所有者の変更に必要なコマンドから。

内容書き方オプション
所有者の変更chown (変更した後の所有者名) (ファイル名またはディレクトリ名)-R:指定したディレクトリ配下すべてのファイルを一括で変更できる
所有グループの変更chgrp (変更した後の所有グループ名) (ファイル名またはディレクトリ名)-R:指定したディレクトリ配下すべてのファイルを一括で変更できる
所有者、所有グループを同時変更chown(変更した後の所有者: 変更した後の所有グループ名) (ファイルまたはディレクトリ名) 

まず、所有者名の変更だけを実行してみたのがこちら。

次に所有者名と所有グループ名を一括で変えてみました。

ところで、この画像を見ていただくと分かる通り、一番左にrとかwの羅列がありますよね。これが各ファイルやディレクトリに設定されているアクセス権(パーミッション)の情報になります。
ということで、次はパーミッションについてです。

アクセス権(パーミッション)の設定方法

引用:P.166

ファイルの所有者やグループなどに対してさまざまなアクセス権を設定してみましょう。ファイルやディレクトリのアクセス権と所有者や所有グループ、そのほかのユーザーとの組み合わせをパーミッションといいます

(中略)

ファイルやディレクトリのパーミッションは、ファイルの詳細を一覧表示する[ls -l]で確認できます。
ファイルやディレクトリ名に次の文字があればアクセス可能、[-]は不可を表します。

r  読み取り(Read)
w  書き込み(Write)
x  実行(eXecute)
-  なし

ではここで、先ほど出したファイルの一覧を持ってきます。

①~④(dとかrのあたり)がパーミッションです。
①ファイルの種類(-:通常のファイル、d:ディレクトリ、l:リンク)
 →画像では1行目はディレクトリなのでd、2行目はファイルなので、-です。

②所有者のアクセス権
③所有グループのアクセス権
 →1行目はrwxなので、このファイルを所有している人は読み書き実行の全てができます。
  2行目はrw-なので、読み書きが可能です。

④その他のユーザーのアクセス権(所有者と所有グループ以外のユーザー)
 →1行目は読みと実行が可能で、2行目は読みのみが可能です。

⑤以降はファイルの情報です。
⑤リンク数、⑥所有者名、⑦所有グループ名、⑧ファイルサイズ、⑨最終更新日時、⑩ファイル名

パーミッションの変更についてはコマンドのみ確認とさせていただきます。

パーミッションの変更方法<chmod (アクセス権) (ファイル名またはディレクトリ名)>

※-Rオプションをつけると指定したディレクトリ以下のすべてのディレクトリとファイルを一括で変更できます。

[アクセス権]の部分は、設定したいアクセス権に対応した数字を指定してあげるようです。

0---アクセス権なし
1--x実行
2-w-書き込み
3-wx書き込み、実行
4r--読み込み
5r-x読み込み、実行
6rw-読み込み、書き込み
7rwx読み込み、書き込み、実行

この数字を指定する際、所有者→グループ→その他の順番に書いてあげるそうです。
例えば、所有者とグループは全てできて、その他のユーザーには何もさせたくない場合は770なので、「chmod 770 hinamatsuri」と書いてあげれば良いということになります。

※パーミッションを変更した後、ちゃんと変更されているかを確認するのを忘れないようにしましょう、とのことです。

シェルスクリプトについて

引用:P.176

シェルスクリプトとはコマンドや変数をテキストファイルに保存し、まとめて実行できるようにしたプログラムの一種です。シェルスクリプトを作っておけば、条件分岐や繰り返し処理など、作業を効率よく行うためのプログラムを必要なときに実行できます。
カレントディレクトリを表示する簡単なスクリプトを作成しましょう。

ということで、テキストに書かれていたことをそのまま書いて実行してみます。 まず、「vi test.sh」と書いて実行すると、テキストエディタが立ち上がり、test.shというファイルが作成されます。そこに次のように書きます。

<シェルスクリプトに書いた内容>

シェルスクリプトの1行目にはこういうコメントを書くそうです。意味を調べてみるとShebangと呼ばれるものだそうで、実行ファイルとして動かすためにはこの記述が必要なのだそうです。「#!/bin/sh」と書くこともあるということでした。違いや意味について知りたい方は以下参考リンクをご参照ください。

参考:
/bin/shと/bin/bashの違い(とcronでのシェル)|rcmdnk's blog
/bin/sh と /bin/bash の違い|双六工場日誌
#!/bin/sh は ただのコメントじゃないよ! Shebangだよ!|Qiita @mohira

さて画像のように書いて保存した後、ファイルを作成しただけでは実行の権限がないので、パーミッションを変更するそうです。変更後、ファイルを指定して実行した結果が下の画像です。

ファイル名を実行しただけで、カレントディレクトリが表示されました。

サーバ管理上の用途としてどういうことができるのか調べてみましたら、ファイルの移動やコピペ、ログの抽出、文書から特定の文字列を抽出といったことができるのだそうです。サーバ管理にログはつきものなので、ログ関連の使い方ができるようになると便利そうですよね。

文法などは以下リンクをご参考に。

参考サイト:
【初心者でもわかる】Linuxシェルスクリプト入門 まとめました|エンジニアの入り口
シェルスクリプト(Bash)入門。できること、基礎文法、業務自動化の方法を解説【事例あり】|Workship
プログラマーの君! 騙されるな! シェルスクリプトはそう書いちゃ駄目だ!! という話|Qiita @piroor

ここで私からちょっとお知らせです🙋
お蔭様でこのコラムが大変好評です。毎月、数千人の方にお読みいただき、本当にありがとうございます。
そこでバズった記念でご案内をさせてください。

このコラムを掲載いただいているAltXではIT未経験のエンジニア志望者を積極採用しています。
どのような仕事があるのか、未経験でも大丈夫なのかを簡単に説明するオリエンテーションを常時開催しています。
興味がある方は是非、以下をご覧の上、ご参加ください。

https://www.kcct.co.jp/careetec/seminar/tokyo/

※私はいませんが、優しいお兄さんかお姉さんが説明してくれますよ(笑)

それでは今回はこちらで終了です。お付き合いいただきありがとうございました。

facebook シェアシェア
LINE シェアシェア