Linux権限管理コマンド解説

権限管理コマンド

ファイルやディレクトリの所有者や権限を管理するコマンドです。

chmod - ファイル・ディレクトリの権限変更

ファイルやディレクトリのアクセス権限を変更します。

構文/オプション 説明
chmod [mode] [file] ファイルの権限を変更
-R ディレクトリとその中身を再帰的に変更
-v 処理の詳細を表示
--reference=[file] 指定したファイルと同じ権限に設定

数値モード(8進数):

chmod 755 file.txt - 所有者に読み書き実行権限、グループとその他に読み実行権限を付与
chmod 644 file.txt - 所有者に読み書き権限、グループとその他に読み権限のみを付与
chmod -R 755 directory - ディレクトリとその中身に再帰的に権限を設定
chmod 600 id_rsa - 秘密鍵ファイルを所有者のみが読み書き可能に設定
chmod 440 /etc/sudoers - sudoersファイルをroot所有者とsudoグループのみが読み取り可能に設定
find . -type f -name "*.sh" -exec chmod 755 {} \; - すべてのシェルスクリプトに実行権限を付与

シンボリックモード:

chmod u+x file.txt - 所有者に実行権限を追加
chmod g-w file.txt - グループから書き込み権限を削除
chmod o=r file.txt - その他のユーザーに読み取り権限のみを設定
chmod a+r file.txt - すべてのユーザーに読み取り権限を追加
chmod u+x,g+x,o-rwx script.sh - 所有者とグループに実行権限を追加し、その他のユーザーからすべての権限を削除
chmod -R g+rX directory/ - ディレクトリとその中のファイルにグループ読み取り権限を追加し、ディレクトリにのみ実行権限を追加(大文字Xはディレクトリまたは既に実行権限があるファイルにのみ適用)
find . -type d -exec chmod g+s {} \; - すべてのディレクトリにSGIDビットを設定(新しく作成されるファイルが親ディレクトリのグループを継承)

権限の数値表現:

  • 4 - 読み取り権限(r)
  • 2 - 書き込み権限(w)
  • 1 - 実行権限(x)

これらの値を組み合わせて使用します。例えば、7(4+2+1)は読み書き実行権限すべてを表します。

3桁の数字は、左から順に「所有者」「グループ」「その他のユーザー」の権限を表します。

chown - ファイル・ディレクトリの所有者変更

ファイルやディレクトリの所有者やグループを変更します。

構文/オプション 説明
chown [owner]:[group] [file] ファイルの所有者とグループを変更
chown [owner] [file] ファイルの所有者のみを変更
chown :[group] [file] ファイルのグループのみを変更
-R ディレクトリとその中身を再帰的に変更
-v 処理の詳細を表示
--reference=[file] 指定したファイルと同じ所有者とグループに設定

例:

sudo chown user1 file.txt - ファイルの所有者をuser1に変更
sudo chown user1:group1 file.txt - ファイルの所有者をuser1、グループをgroup1に変更
sudo chown :group1 file.txt - ファイルのグループのみをgroup1に変更
sudo chown -R user1:group1 directory - ディレクトリとその中身の所有者とグループを再帰的に変更
sudo chown --reference=ref_file.txt target_file.txt - 参照ファイルと同じ所有者とグループに設定
find /var/www -type f -exec sudo chown www-data:www-data {} \; - Webサーバーのファイルの所有者を適切に設定
sudo chown -R $(whoami) ~/.config - 設定ディレクトリの所有権を現在のユーザーに変更
sudo find /home/user -not -user user -exec chown user:user {} \; - ユーザーのホームディレクトリ内で所有者が異なるファイルを修正

chgrp - ファイル・ディレクトリのグループ変更

ファイルやディレクトリのグループを変更します。

構文/オプション 説明
chgrp [group] [file] ファイルのグループを変更
-R ディレクトリとその中身を再帰的に変更
-v 処理の詳細を表示
--reference=[file] 指定したファイルと同じグループに設定

例:

sudo chgrp group1 file.txt - ファイルのグループをgroup1に変更
sudo chgrp -R group1 directory - ディレクトリとその中身のグループを再帰的に変更
sudo chgrp --reference=ref_file.txt file.txt - ref_file.txtと同じグループに設定
find /opt/app -type f -name "*.log" -exec sudo chgrp syslog {} \; - すべてのログファイルのグループをsyslogに変更
sudo chgrp -R $(id -gn) ~/projects - プロジェクトディレクトリのグループを現在のユーザーのプライマリグループに変更
sudo find /var/www -type d -exec chgrp www-data {} \; - Webサーバーのディレクトリのグループを適切に設定
sudo chgrp -v developers *.py - すべてのPythonファイルのグループをdevelopersに変更し、詳細を表示

umask - デフォルトのファイル作成権限マスクの設定

新しく作成されるファイルやディレクトリのデフォルト権限を制御します。

構文/オプション 説明
umask 現在のumask値を表示
umask [mode] umask値を設定
-S シンボリックモードで表示

例:

umask - 現在のumask値を表示(例: 0022)
umask -S - シンボリックモードで表示(例: u=rwx,g=rx,o=rx)
umask 022 - umask値を022に設定(新しいファイルは644、ディレクトリは755になる)
umask 027 - umask値を027に設定(新しいファイルは640、ディレクトリは750になる)
umask 077 - 最も制限の厳しいumask値を設定(新しいファイルは600、ディレクトリは700になる)
echo "umask 002" >> ~/.bashrc - ログイン時に自動的にumask値を002に設定(グループ内での共同作業向け)
( umask 077 && touch secret.txt ) - 一時的にumaskを変更して安全なファイルを作成
umask -p - シェルスクリプトで使用可能な形式で現在のumask値を表示

umaskの計算方法:

ファイルの最大権限は666(rw-rw-rw-)、ディレクトリの最大権限は777(rwxrwxrwx)です。

umask値はこれらの最大権限から「削除する」権限を指定します。

例えば、umask 022の場合:

  • ファイル: 666 - 022 = 644(rw-r--r--)
  • ディレクトリ: 777 - 022 = 755(rwxr-xr-x)

getfacl/setfacl - アクセス制御リスト(ACL)の管理

より詳細なアクセス制御リスト(ACL)を表示・設定します。

コマンド/オプション 説明
getfacl [file] ファイルのACLを表示
setfacl -m u:[user]:[permissions] [file] 特定のユーザーに対するACLを設定
setfacl -m g:[group]:[permissions] [file] 特定のグループに対するACLを設定
setfacl -x u:[user] [file] 特定のユーザーのACLを削除
setfacl -b [file] すべてのACLエントリを削除
setfacl -R ディレクトリとその中身に再帰的に適用

例:

getfacl file.txt - ファイルのACLを表示
setfacl -m u:user1:rw file.txt - user1に読み書き権限を付与
setfacl -m g:group1:r file.txt - group1に読み取り権限を付与
setfacl -x u:user1 file.txt - user1のACLエントリを削除
setfacl -b file.txt - すべてのACLエントリを削除
setfacl -R -m u:user1:rx directory/ - ディレクトリとその中身にuser1の読み取り・実行権限を再帰的に設定
getfacl file1.txt | setfacl --set-file=- file2.txt - file1.txtのACLをfile2.txtにコピー
setfacl -d -m g:project:rw directory/ - ディレクトリ内に新しく作成されるファイルのデフォルトACLを設定
setfacl -m m:rx file.txt - ファイルの有効マスクを読み取り・実行のみに制限
find /shared -type d -exec setfacl -d -m g:team:rwx {} \; - 共有ディレクトリにチームのデフォルトACLを設定

sudo - 特権コマンドの実行

他のユーザー(通常はroot)の権限でコマンドを実行します。

オプション 説明
-u [user] 指定したユーザーとしてコマンドを実行(デフォルトはroot)
-i ターゲットユーザーのログインシェルを起動
-s シェルを起動
-l 現在のユーザーが実行できるコマンドを一覧表示
-v タイムスタンプを更新(認証キャッシュの延長)
-k タイムスタンプを無効化(次回のsudoで再認証が必要)

例:

sudo apt update - rootとしてaptコマンドを実行
sudo -u www-data php script.php - www-dataユーザーとしてPHPスクリプトを実行
sudo -i - rootのログインシェルを起動
sudo -l - 実行可能なコマンドを一覧表示
sudo -s - 現在の環境変数を保持したままrootシェルを起動
sudo -E apt upgrade - 現在のユーザーの環境変数を保持してコマンドを実行
sudo -k - sudoの認証キャッシュを無効化(次回のsudoで再認証が必要)
sudo !! - 直前のコマンドをsudoで再実行
sudo -u postgres psql - postgresユーザーとしてデータベースに接続
sudo -g wheel command - 指定したグループの権限でコマンドを実行