Linux

ユーザーと権限

「誰が、何をできるか」を読み、必要最小限の権限を設定しましょう。

01

ユーザーとグループを確認する

現在の情報COMMAND
whoami
id
groups
表示例OUTPUT
mity
uid=1000(mity) gid=1000(mity) groups=1000(mity),27(sudo)
mity sudo

LinuxはユーザーID(UID)とグループID(GID)で主体を識別します。名前は人が読みやすくする表示です。rootのUIDは0で、システム全体を操作できます。

02

権限表示を読む

練習ファイルCOMMAND
cd ~/linux-practice
printf '#!/bin/sh\necho hello\n' > hello.sh
ls -l hello.sh
表示例OUTPUT
-rw-r--r-- 1 mity mity 21 Aug 29 12:00 hello.sh
部分意味
-通常ファイル。ディレクトリはd、リンクはl
rw-所有者は読み取り・書き込み可能
r--グループは読み取りのみ
r--その他も読み取りのみ
mity mity所有ユーザーと所有グループ
03

chmodで必要な権限を変更する

所有者へ実行権限を追加COMMAND
chmod u+x hello.sh
ls -l hello.sh
./hello.sh
実行結果OUTPUT
-rwxr--r-- 1 mity mity 21 Aug 29 12:00 hello.sh
hello

uは所有者、gはグループ、oはその他、aは全員です。+で追加、-で削除、=で指定どおりにします。

数値表記

r=4w=2x=1を足します。chmod 640 secret.txtは所有者rw-、グループr--、その他---です。

数値で設定COMMAND
touch secret.txt
chmod 640 secret.txt
stat -c '%A %a %n' secret.txt
実行結果OUTPUT
-rw-r----- 640 secret.txt
777を避ける 777は全員へ読み書き実行を許可します。原因を調べず設定すると改ざんにつながります。必要な主体へ必要な権限だけを与えます。
04

ディレクトリのr・w・x

ディレクトリでは意味が変わります。rは名前一覧、wは項目の作成・削除、xは内部へ移動して項目へアクセスする権限です。ファイルが書き込み禁止でも、親ディレクトリにwとxがあれば削除できる場合があります。

非公開ディレクトリCOMMAND
mkdir -p private
chmod 700 private
stat -c '%A %a %n' private
実行結果OUTPUT
drwx------ 700 private
05

所有者とグループ

chownは所有者、chgrpは所有グループを変更します。通常、別ユーザーへの変更には管理者権限が必要です。

管理者が所有者を変更する例COMMAND
sudo chown alice:developers /srv/shared/report.txt
ls -l /srv/shared/report.txt
表示例OUTPUT
-rw-r----- 1 alice developers 120 Aug 29 12:10 /srv/shared/report.txt
例をそのまま実行しない ユーザー、グループ、パスが実在し、変更が必要だと確認できた管理対象でのみ実行します。chown -Rは配下すべてを変えるため特に注意します。
06

sudoを安全に使う

sudo commandは許可されたユーザーがその1コマンドを別ユーザー(通常root)として実行します。

許可の確認COMMAND
sudo -l
表示例OUTPUT
User mity may run the following commands on host:
    (ALL : ALL) ALL
実行前の確認
  • 一般ユーザーでは本当に実行できないか
  • コマンド、オプション、対象パスを理解しているか
  • ワイルドカードや変数が予想どおり展開されるか
  • 設定ファイルならバックアップと復旧方法があるか
PRACTICE

ミニ課題:共有しないメモ

personal.txtを作り、所有者だけが読み書きできるようにしてください。

解答例COMMAND
printf 'private memo\n' > personal.txt
chmod 600 personal.txt
stat -c '%A %a %n' personal.txt
実行結果OUTPUT
-rw------- 600 personal.txt