Linuxの基本コマンド – ファイルの権限設定

この記事ではLinuxでのファイルの権限設定について触れたいと思います。

アプリをインストールして使う場合、権限設定不要で動くことも多いです。

しかし、設定ファイルを自分で作ったときなどにそのファイルの権限設定が合わないためにアプリが動かないといったことが起きます。

このような際に対応するためにも権限設定については知っておいて損はありません。

この記事で行うこと

  1. Linuxの権限について
    1. ユーザ
    2. グループ
    3. ファイルのパーミッション
  2. 権限設定コマンドの解説
    1. chown
    2. chmod

1. Linuxnお権限について

Linuxではユーザーとグループという概念があります。

1-1. ユーザ

ユーザは特定の個人を指します。

とはいえ実際の人でなくても、例えばアプリケーションなんかもユーザを持っていたりします(システムアカウントといいます)。

ユーザはコマンドを実行できる主体と考えることができます。

つまり、ユーザでなければコマンドを実行できません。

これだとアプリケーションが何かしらのコマンドを実行したいときに困ってしまいます。

なので、アプリケーションもシステムアカウントを持っているのです。

1-2. グループ

グループはユーザをひとまとめにした物を指します。

代表的な例だと、rootになれる管理者ユーザを集めたwheelグループがあります。

またユーザを作ると、同時にユーザ名と同じ名前のグループができます。(例えばyutoといユーザを作ると、同時にyutoというグループができます)

グループは複数のユーザを一纏めにしますし、ユーザは複数のグループに属せます。

グループとユーザはいわゆる多対多の関係です。

1-3. ファイルのパーミッション

各ファイルは「所有者」と「グループ」と「パーミッション」を持っています。

「所有者」と「グループ」はそれぞれファイルを所有するユーザ、グループを表しています。

「パーミッション」はそのファイルへのアクセスをどこまで許すかという物を「所有者」「グループ」「その他ユーザ」毎に設定することになります。

どこまで許すかという部分は以下の組み合わせで設定できます。

1実行権限 (eXecute)x
2書き込み権限 (Write)w
4読み取り権限 (Read)r
設定できるパーミッション

例えば、このファイルは誰でも読み取れるけど、書き込むのはグループに所属している人だけで、実行は自分だけといった設定ができます。

さて、こうやって毎回「このファイルは誰でも読み取れるけど、書き込むのはグループに所属している人だけで、実行は自分だけ」と書くのは面倒です。

なので、左から順に所有者に許可されたこと、グループに許可されたこと、その他ユーザに許可されたことを並べてみましょう。

また、より短縮するために許可されたことの内容をアルファベット一文字で表してみましょう。(上表の右にあるアルファベット)

rwxrw-r--

ファイルのあるディレクトリで ls -l を実行すると、各ファイル名の左側に同じような表記があると思います。

これはそのファイルのパーミッションを表していたのです。

また、もっと短縮することができます。

上記の表の左側にある数字を足し合わせて権限を表すのです。

実行、書き込み、読み取りが全てできる場合は1+2+4=7、書き込みと読み取りができる場合は2+4=6、実行と書き込みのみできる場合は1+2=3といった具合です。

これで表すと、上記の表示は764と表せます。

これはパーミッションの設定時に使うので覚えておいてください。

2. 権限設定コマンドの解説

権限設定は以下の2つのコマンドで行うことができます。

2つだけなので、ぜひ覚えてください。

2-1. chown

ファイルの所有者とグループを変えられます。(本来はグループを変えるための chgrp というコマンドがありますが chown で両方変えられるのでこっちだけ覚えていれば大丈夫です)

CHange OWNerの略です。

使い方は以下となります。

# chown [オプション] [変更後の所有者]:[変更後のグループ] [ファイル名]

またよく使われるオプションは -R があります。

これはディレクトリを chown で指定したときに、中身も全て同じように所有者変更を行うという物です。

なお、小文字の -r ではオプションとして扱われずにエラーになるので必ず大文字で入力してください。

2-2. chmod

ファイルのパーミッション設定を変えられます。

CHange MODeの略です。

使い方は以下となります。

# chmod [オプション] [変更後のパーミッション] [ファイル名]

変更後のパーミッションは3桁の数字で表すようにしてください。(1-3の最後で扱ったアレです)

またよく使われるオプションは -R があります。

これはディレクトリを chmod で指定したときに、中身も全て同じように所有者変更を行うという物です。

なお、小文字の -r ではオプションとして扱われずにエラーになるので必ず大文字で入力してください。

chmodを使った権限設定方法には「○○の権限を外す」「○○の権限を付ける」のように設定できる他の書き方もあるのですが、ここでは触れません。気になる方は調べてみてください。

まとめ

今回はLinuxの権限の基本とファイルへの権限設定について説明しました。

他にも権限設定だと「新たにグループを作成する」「ユーザをグループに追加する」などグループ周りのことがあるのですが、基本的に全てを一人で管理する自宅サーバではあまり必要とならないので割愛します。

興味のある方はぜひ調べてみてください。

アプリが動かないとなった時、設定ファイルの中身が間違っていなければ次に疑うべきは権限設定です。お気を付けを。

Linuxで設定ファイルを編集するときの基本

Linuxではアプリケーションの設定を変える際には設定ファイルを直接編集することが多いです。

ここでは設定ファイルの編集の方法を記載します。

今回はCentOS8のSSH設定で触れられている「rootへの直接アクセス禁止」の設定で /etc/ssh/sshd_config を編集する場合の例を取ります。

この記事で行うこと

  1. 編集したいファイルのバックアップ
  2. viでファイルを編集する

1. 編集したいファイルのバックアップ

ファイルのバックアップといっても大層なことではありません。

編集したいファイルを別の名前でコピーしておくだけです。

大体の場合はファイルの拡張子を変えます。(拡張子が無い場合は拡張子を付け加えます)

また、ファイルのコピー先は元のファイルと同じ場所で大丈夫です。

今回の例の場合以下のようになります。

# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup

cpコマンドについては当サイトの「Linuxの基本コマンド – ファイル操作」内に解説がありますので、参考にしてください。

私は「.backup」という拡張子にしましたがこれは何でも構いません。ただし、実際によく使われる拡張子は避けた方が良いでしょう。

2. viでファイルを編集する

viというのはLinuxであればほぼ必ずと言って良いほど入っているテキストエディタです。(実際は最近のOSだと上位互換のvimが入っていますが)

viでファイルを編集するときは以下です。

vi [開きたいファイル]

今回は以下のようになります。

# vi /etc/ssh/sshd_config

するとファイルの中身が表示されるはずです。

viは取っつきづらいことで有名ですが、vimはカーソルキーが使えるのでなんとかなります。

キーボードの「i」キーを押すと編集モードなります。

編集モードでないと、入力できないので注意してください。

「Esc」キーを押すとコマンドモードになります。

このモードではコピー&ペーストや文字列の検索・置換などができます。この辺りは興味がある方は「vim 使い方」などで調べてみてください。(コピー&ペーストはSSHクライアント側の機能で割となんとかなります)

ここで覚えておきたいのは編集モードでないときに入力しようとすると、コマンドモードであらぬコマンドが実行されてしまい大変なことになるということです。

編集モードの時は下の方に「–INSERT–」と表示されるので、必ず入力前に確認してください。

また、ファイルの保存やファイルを閉じるのはコマンドモードで行います。

「:」キーを押すとコマンドを入力できますので、ここで以下のコマンドを入力することで操作可能です

:w保存
:qファイルを閉じる
:wq保存してファイルを閉じる
:q!保存せずにファイルを閉じる(ファイルを編集した場合「:q」では閉じれません)

まとめ

今回は設定ファイルの編集方法を扱いました。

Linuxを触る際には様々な設定ファイルを編集することになりますが、必ずバックアップは取るようにしましょう。

あとから「なぜか動かない。変えたはずの所を直しても戻らない」ということになった私との約束です。

CentOS8で自身のプライベートIPアドレスを調べる

サーバを確認したり変更を加える度にいちいちサーバにキーボードやディスプレイを取り付けて調べるというのは面倒です。

だからといってサーバに常にキーボードやディスプレイを付けっぱなしにするのもキーボードやディスプレイが有り余ってなければ現実的ではありません。(仮に有り余っていたとしても場所を取ってしまうのであまりやりたくありませんね)

そのため多くの場合は自分が普段使っているPCから操作できるようにします。

これを実現するためにはそのサーバの在処、IPアドレスを調べます。

この記事で行うこと

  1. ネットワークに接続しているデバイス名を調べる
  2. ネットワークに接続しているデバイスの詳細情報を得る

1. ネットワークに接続しているデバイス名を調べる

以下のコマンドを実行します。

# nmcli d status
DEVICE		TYPE	 STATE		CONNECTION
[デバイス名]	ethernet 接続済み	enp3s0
  • nmcli : NetworkManagerに含まれるツール名。(NetworkManagerCLIentの略?)
  • d : 操作対象がデバイスであるという意味。(”device”でも動きます)
  • status : 状態の概要を確認するコマンド。(操作対象がデバイスの時に何のコマンドも入力しないとこれが実行されます。)

ここでSTATEが接続済みとなっているデバイスの名称を覚えておきます。

2. ネットワークに接続しているデバイスの詳細情報を得る

以下のコマンドを実行します。

[デバイス名]の部分は先ほど調べた接続済みのデバイスの名称です。

# nmcli d show [デバイス名]
GENERAL.DEVICE: [デバイス名]
GENERAL.TYPE: ethernet
GENERAL.HWADDR: XX:XX:XX:XX:XX:XX
GENERAL.MTU: 1500
GENERAL.STATE: 100 (接続済み)
GENERAL.CONNECTION: enp3s0
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/1
WIRED-PROPERTIES.CARRIER: オン
IP4.ADDRESS[1]: 192.168.10.7/24
  • show : 特定のデバイスの詳細を表示するコマンド

ここで重要な情報は「GENERAL.HWADDR」と「IP4.ADDRESS」の二つです。

「GENERAL.HWADDR」はMACアドレスと呼ばれる物で、ルータからIPアドレスを固定させるときなどに使います。(実施方法や可否はルータによって異なるので各自で調べてみてください)

「IP4.ADDRESS」はその名の通り、そのサーバのIPアドレスとなります。

似たような物に「IP6.ADDRESS」というのもありますが、これの違いは「IPv4 IPv6」で調べると分かるかと思います。現時点において自宅サーバでこれを使うことはほぼ無いですね。

まとめ

今回の記事ではサーバのIPアドレスを調べる方法を扱いました。

CentOSでは初期設定でSSHが許可されているので、これでSSHクライアントなどを使ってSSH接続を行うことができます。

SSH接続のやり方は利用するクライアントなどによっても異なるので各自で調べてみてください。

もし機会があれば当サイトでもPowerShellを使ったSSH接続方法を扱いたいと思います。(予定は未定)