2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Linux]権限まわりの基礎を押さえる

Last updated at Posted at 2023-06-11

はじめに

実務でcron周りを触ることがあったので、ついでに権限まわりの基礎の復習としてまとめてみました。

環境

  • Docker version: 4.17.0
  • 使用イメージ: centos:centos7

パーミッション

上記の記事がとてもわかりやすいです。

ユーザとグループ

ユーザの作成

useradd username

グループを指定しない場合は、ユーザ名と同じ名前のグループが作成され、そのグループに所属することになります。
また、ユーザを追加した後はパスワードを設定しましょう。

passwd username

ユーザ一覧

cat /etc/passwd

グループの作成

gropuadd グループ名

グループ一覧

cat /etc/group

ユーザの所属するグループの確認

groups username
username: プライマリーグループ名 セカンダリグループ名 ※セカンダリグループに所属している場合
  • プライマリーグループとは
    • ユーザーが作成されたときに自動的に設定されるグループ
  • セカンダリグループとは
    • ユーザーが任意に追加できる他のグループ

プライマリーグループの確認

id -gn username

セカンダリグループの確認

id -Gn username

グループに所属するユーザの確認

getent group groupname

ユーザのグループを変更

# プライマリーグループの場合
usermod -g 変更後のグループ名 username
# セカンダリグループの場合
usermod -G 変更後のグループ名 username

cron周り

crontabコマンドを使用することでcronの設定を操作することができる。
そして、crontabはユーザーごとに設定されています。

ログインユーザのcrontabを確認する

crontab -l

ログインユーザのcrontabを編集する

crontab -e

本当にある怖い話はこちら...

cronを設定しているユーザを確認する

cd /var/spool/cron && ls -l

設定しているユーザのユーザ名がディレクトリ名になっています。
「ユーザは存在するが、そのユーザ名であるディレクトリがない」場合は、cronを設定していないということです。

rootにsuできるユーザを限定する

rootにsuできるユーザを限定するためには、設定ファイルである

/etc/pam.d/su

を編集します。
編集前を見てみると

# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth           sufficient      pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
#auth           required        pam_wheel.so use_uid

コメントで「suできるユーザをwheelグループに限定する方法」が書かれています。
それぞれ見てみましょう。まず、1つ目の場合は、

# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth           sufficient   pam_wheel.so trust use_uid

「implicitly trust」と書いてある通り、suする際にパスワードを要求しません。
反対に2つ目の場合は、

# Uncomment the following line to require a user to be in the "wheel" group.
#auth           required        pam_wheel.so use_uid

suする際にパスワードを要求します。
パスワードを要求する2つ目の方法がセキュリティ的にいいので、アンコメントする際は気をつけましょう。

sudoできるユーザを限定する

sudoコマンドは、root以外のユーザーが管理コマンドを実行できるようにするためのコマンド。
そのためすべてのユーザがsudoできてしまうという状況は、当然セキュリティ的に良くないです。
sudoの権限管理は、

visudo

を実行し、/etc/sudoersを編集することで行います。
visudoを実行するとエディタが立ち上がるので、あとはファイル内にあるコメントの通り編集すればOKです。
下記は、ユーザとグループにsudoの権限を与える例です。

// ユーザの場合
username ALL=(ALL) /path/to/command

// グループの場合
%groupname ALL=(ALL) /path/to/command 
※グループの場合は、先頭に「%」を入れる

// 許可したいコマンドが複数の場合
username ALL=(ALL) /path/to/command1,/path/to/command2...

「ALL」については、https://beyondjapan.com/blog/2022/05/sudoers/ がとても参考になる。

追記(2023/07/30)

  • ファイルの削除は、そのファイルを格納しているディレクトリに書き込み権限と実行権限があれば削除することができる
    • ファイル自体のパーミッションは関係なし
  • umaskには、グローバルな設定とユーザごとの設定があり、ユーザごとの設定がある場合(.bash_profile)、ユーザごとの設定が優先される
  • SUIDやSGIDについて
  • アプリケーションからファイルの作成などを行う場合、実行ユーザは誰になるのか。
    • 例えば、LaravelアプリケーションをApacheで動作させている場合、実行ユーザはhttpd.confで設定されているユーザとなる。
    • artisanコマンドを実行した時の実行ユーザは、artisanコマンドを実行したユーザ。
2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?