0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Linux】chmodとsudoの関係について

0
Posted at

はじめに

Permission denied !!

コマンド実行時にこんなメッセージが出ると、とりあえずコマンドの前にsudo(管理者実行コマンド)を追加する私でしたが、どうやら違う解決策もあるとのことで、今回はその一つであるchmodコマンドについて少しまとめてみようと思います。

この記事がおすすめな人

・Linux初心者の方
・「Permission denied」にはとりあえずsudoコマンドを使っている方
・chmod sudoどちらも"権限変更"用のコマンドというのは知っているけど、何が違うのだろう」と思っている方

この記事でお話すること

sudoとchmodどちらも権限の変更に関するコマンドとなりますが、違いを簡単にすると下記の通りとなります。

chmod sudo
説明 ファイル自体の権限を各ユーザー(所有者、グループ、その他)に対して変更 コマンドを"管理者権限"で実行
使い方 メインのコマンドの前に事前に実行 メインのコマンドの書き出しにsudoを付けて同時に実行
効力 永続的(1回やればOK) その1回の実行のみ
タイミング 「Permission denied」と出たとき 「Permission denied」と出たとき

1. chmodとは?

『CHange MODe』の略で、ファイル権限の変更を行うLinuxコマンドです。下記の方が分かりやすくまとめてくださっていたので、こちらをご参照ください。

使い方としては、下記のようにメインのコマンドを実行する前に「ファイル権限」の変更を行います。

chmod +x build.sh #ファイルに「実行権限(Executable)」を追加する
./build.sh #正常に実行される

2. 「ファイル権限」とchmodの関係について

本題である「chmodとsudoの関係について」を触れる前に、前提知識で必要になる『ファイル権限』について少し説明しようと思います。

Linuxでは、Windows等と同じように"ファイルにアクセスできる人を制限する機能"となる『ファイル権限』が存在します。各ファイルに設定されたファイル権限は、下記のコマンドで確認できます。

ls -l <ファイル名>
# 「-rwxr--r-- 1 所有者 グループ 865 日付 ファイル名」のように出力される

出力された情報の「-rwxr--r--」が"指定したファイルの権限"になります。もう少し詳しく見てみましょう。

image.png

上記のように、実は区分分けすることができます。左から順番に説明した表を作成してみました。

パーツ       説明
- ls -lコマンドで指定した種類を表します。今回は「ファイル」を指定したので-と表示されており、他にも「ディレクトリ」を指定した場合はdと表示されます。
rwx(所有者) 「所有者」用のファイル権限を表します。左から順にr(read) w(write) x(execute)から持っている権限が記入されます。権限がない部分は-と表示されます。rwxと表示されているので、今回はすべての権限を持っていることを意味しています。
r--(グループ) 「グループ」用のファイル権限を表します。「所有者」と同様に左から順にr(read) w(write) x(execute)から持っている権限が記入されます。権限がない部分は-と表示されます。r--と表示されているので、今回はr(read)のみ権限を持っていることを意味しています。
r--(その他) 「その他(ユーザー)」用のファイル権限を表します。「所有者」「グループ」と同様に左から順にr(read) w(write) x(execute)から持っている権限が記入されます。権限がない部分は-と表示されます。r--と表示されているので、今回はr(read)のみ権限を持っていることを意味しています。

「所有者」「グループ」「その他(ユーザー)」に関する説明は今回は割愛しますが、『ユーザーの種類によってファイル権限が分かれる』ということを覚えておいてください。

3. chmodとsudoの関係について

「sudo」について少し説明

sudoとは:『SuperUser Do』の略で、その後に続くコマンドを「管理者(root)権限」での実行に変更するコマンドです。『管理者』は『一般ユーザー』よりも高い権限を持つことが一般的です。

例)
apt-get update  #『Permission denied』(管理者権限が必要)と表示される
sudo apt-get update #正常に実行される

さて、本題です。まずはsudoが必要なファイルであるetc/hostsのファイル権限を確認してみましょう。

ls -l /etc/hosts
# 「-rw-r--r-- 1 root root 427 日付 /etc/hosts」のように出力される

出力されたファイル権限と所有者を図に表すと、下記の通りとなります。 ※同名(root)グループは権限が少ないためひとまず除きます

image.png

「root」は管理者を示すため、sudoでコマンドを実行すると、etc/hostsに対して「読み込みr・書き込みw」の操作ができます。

image.png

逆にsudoを付けずにコマンドを実行すると、その他ユーザー(一般ユーザー)はetc/hostsに対して「読み込みr」しかできません。

image.png

次にchmodコマンドを使って、その他ユーザー(一般ユーザー)でも書き込みができるように権限を追加してみましょう。下記のコマンドで権限の追加を行います。

sudo chmod o+w /etc/hosts
ls -l /etc/hosts
# 「-rw-r--rw- 1 root root 427 日付 /etc/hosts」のように出力される

image.png

その他ユーザー(一般ユーザー)にwが追加されたことで、sudoを使わずとも「読み込みr・書き込みw」の操作ができるようになりました。

つまり『chmodで、管理者や一般ユーザーを含む"権限"を設定』した後、『必要に応じてsudoで"管理者権限"を扱う』というのが「chmodとsudoの関係」になります。

4. まとめ

冒頭でも少し説明しましたが、改めてsudoとchmodの違いを表にすると下記の通りとなります。

chmod sudo
説明 ファイル自体の権限を各ユーザー(所有者、グループ、その他)に対して変更 コマンドを"管理者権限"で実行
使い方 メインのコマンドの前に事前に実行 メインのコマンドの書き出しにsudoを付けて同時に実行
効力 永続的(1回やればOK) その1回の実行のみ
タイミング 「Permission denied」と出たとき 「Permission denied」と出たとき

もしコマンドを実行して、「Permission denied」と表示された場合、sudoコマンドを用いて管理者権限で実行し、それでも「Permission denied(もしくはcommand not found)」と表示される場合はchmodコマンドで「ファイルの権限」を確認すると解決に繋がるかもしれません。

また、sudoはコマンド毎に一時的に管理者権限を利用するのに対し、chmodは永続的に権限を付与するため、運用の際はしっかりと検討する必要があるかと思われます。

参考URL

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?