##概要
今日は自動デプロイの学習中にpermission denied
問題で悩み、権限系の知識が浅いと感じましたので復習を兼ねて詳しく調べてみました。
permissionとは英語で「許可や権限」を指し、deniedとは「否定の過去形で否定した」という意味を持ちます。つまり、permission denied
とは「権限がありません」というような意味を持ちます。
そして、プログラミングにおけるpermissionは「誰に、どのような操作を許可するのか」という権限を規定する情報が設定されています。この情報のことを、パーミッションと呼びます。
##パーミッションを確認するには?
lsコマンド
を -lオプション
で実行します。
するとこんな感じの画面になるかと思います。
$ ls -l
drwxr-xr-x. 20 root root 2077 July 5 14:34 bin/cat
「d」はディレクトリを指し、rwxはr(読み込み)、w(書き込み)、x(実行)を表し、それぞれ左側から「オーナー」、「グループユーザー」、「その他ユーザー」を表しています。
したがって「rwxr-xr-x」のような表示になっています。
※この場合だと、オーナーには「全権限」があって、グループユーザーとその他ユーザーは「読み込みと実行」が可能で「書き込み」の権限がないと言われています。
##権限を変更するには?
chmodコマンド
を指定します。chmodは「チェンジモード」と読みます。
書式は以下のようになります。
chmod <8進数の数値> <ファイル名>
意味 | 数字 |
---|---|
読み取り(r) | 4 |
書き込み(w) | 2 |
実行(x) | 1 |
例として、以下のようにコマンドを入力することで権限を変更できます。
今回だと2行目のchmod 755 file.txt
の部分が当たります。
$ ls -l file.txt
-rw-r--r-- 1 takuya staff 0 Jul 12 18:58 file.txt
$ chmod 755 file.txt
$ ls -l file.txt
-rwxr-xr-x 1 takuya staff 0 Jul 12 18:58 file.txt*
つまり、「755」というのは「7(4+2+1)5(4+1)5(4+1)」であり、ユーザには全てに権限を、グループとそののユーザには「読み込み」と「実行」する権限を与えているわけです。
##スーパーユーザー
ありとあらゆる操作が許可された強い権限を持つユーザがスーパーユーザです。ユーザ名がrootであることから「rootユーザ」とも呼ばれます。スーパーユーザはあらゆる操作が許可された強い権限をもつユーザであり、設定ファイルを変更したり、新しいアプリケーションをインストールしたりすることができますが、強い権限をもつだけにリスクも伴いますので、通常は一般ユーザでログインして操作し、必要な時だけスーパーユーザとして作業するといったことが大切になります。
コマンドとしてsuコマンド
とsudoコマンド
がありますが、違いは、suコマンド
を実行したのちには、exitコマンド
でsuperuser状態から抜ける必要があります。
また、sudoコマンド
はrootユーザーに成り代わってコマンドを実行するのに対して、suコマンド
はrootユーザーにそのまま成り代わって操作することを可能にするため、rootユーザーのパスワードが求められます。