はじめに
実務で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コマンドを実行したユーザ。