写在前面
这篇文章,我们来聊一聊Linux下权限相关的知识,我打算从这几个方面展开:
1. 认识Linux下用户的分类
2. 什么叫做权限
3. 没有权限会是什么样子
4. 如何修改权限
5. 其它重要的问题
那么废话不多说,我们现在开始。
目录
1. Linux下用户的分类
Linux下有两种用户:
1. root(超级用户)
2. 普通用户
我们adduser添加的就是普通用户。
他们有什么区别呢?
root 基本不受权限的约束,而普通用户受权限的约束。
如何切换用户
我们如何切换两个用户呢?
Linux下所有的用户都有自己的密码,
我们可以通过su/su- 指令切换用户:
例:(切换到root用户)
输入的密码是root的密码,
另外,su- 指令是切换到root的根目录下,su 还是在当前的目录下面。
我们可以用Ctrl d这个快捷键回到之前的用户:
当然,直接输入 exit 也是一样的效果。
如何提高用户权限
我们可以通过sudo指令可以临时提升用户的权限,(持续时间可能十几分钟不等)
例:
我们可以观察到,在指令前面加上sudo,用户就临时切换成了root
这里输入的密码是当前用户的密码,
你可能会问:为什么我输入我的用户密码却能获得root的用户权限?
实际上,我们需要将该用户添加到系统信任的白名单才能享受sudo指令,
至于如何添加,我会在讲Linux工具的时候介绍,如果有兴趣的话,可以自己上网搜教程。
2. 什么叫做权限
权限,其实就是一件事情 是否允许你去做。
权限的认证是身份还有事物的属性,我们拿一个文件举个例子:
比如说我们刚刚建立的test.txt文件和目录:
最前面的这个:
是代表文件的类型:
- 代表普通文件(文本、可执行文件等等)
d 代表目录文件
b 代表 块设备文件(磁盘文件)
c 代表字符设备文件(键盘、显示器)
p はパイプライン ファイル (通信に使用される) を表します
ここでは主に通常のファイルとディレクトリ ファイルについて説明します。
補足:(ファイルの種類)
Linux システムのファイル接尾辞名には直接的な意味はありません (システム カーネルはこれに依存してファイル タイプを区別しません)。
(注: これはシステム カーネルのみであり、Linux 上の一部のソフトウェアにサフィックス名が必要ないという意味ではありません)
(たとえば、gcc コンパイラーではコンパイル時に .c の接尾辞が必要です)
引き続き権限を見てみましょう。
Linux では、ファイルのアクセス許可はこの場所の文字で表されます。
これら 3 つはグループを形成し、それぞれ所有者、所属するグループ、および他の権限を表します。
これらの文字の意味は次のとおりです。
r は読み取り許可を表します
w は書き込み許可を表します
x は実行権限を表します
- この場所に対する許可がないことを示します
加えて:
ファイル内のこれら 2 つの場所は、それぞれファイルの所有者とグループを表します。
3. 許可がない場合はどうなるか
通常のファイル:
ここでは、文を test.txt ファイルにリダイレクトします。
test.txtファイルの内容を確認してみると、
ファイルに書き込み権限がない場合はどうなりますか?
ファイルに書き込み権限がない場合、追加リダイレクトが失敗することがわかりました。
この文をファイルに追加しませんでした。許可が拒否されました。
読み取り権限がない場合はどうなりますか?
cat コマンドが使用されなくなっており、ファイルを読み取ることができないことがわかります。
test.txt に実行可能権限を追加すると、次のようになります。
ファイルを実行することもできますが、もちろん何も送信されません。
これはファイルのアクセス許可です。
root ユーザーで操作するとどうなるでしょうか?
やってみよう:
このファイルには権限がないことがわかります
しかし、root は何でもできるので、これはスーパーユーザーです。
カタログファイル:
次に、いくつかのディレクトリ ファイルのアクセス許可をテストしてみましょう。
ディレクトリに実行権限がない場合、ディレクトリに入ることができないことがわかりました。
書き込み権限がない場合はどうなりますか?
ディレクトリファイルに書き込み権限がない場合、ディレクトリ内に新しいファイルを作成できないことがわかりました。
読み取り権限がない場合はどうなりますか?
読み取り権限がないことがわかりました。ファイルの内容は表示できますが、
しかし、このディレクトリにどのようなファイルがあるのかはわかりません。
もちろん、root ユーザーはどの機能でも使用できます。
ここでもう 1 つ追加すべきことは、「他者の許可」とは、他のユーザーが私のファイルにアクセスする許可を指すということです。
4. 権限を変更する方法
chmod コマンドを使用できます
例を見てください。
自分自身に読み取り権限を追加します: (chmod u+r ファイル名)
属するグループに書き込み権限を追加します: (chmod g+w ファイル名)
他に実行権限を追加: (chmod o+x ファイル名)
この3つの例を通して、
u はユーザー、g はそのユーザーが属するグループ、o はその他、+ はアクセス許可を追加することを確認できます。
全員の権限を解除します: (chmod a-rwx ファイル名)
概要: a は全員、- は権限のキャンセルです。
さらに、次のような権限も理解できます: (8 進数形式)
実際、各場所の権限はバイナリで表現されます。
例: (test.txt ファイル)
彼の権限は現在 rwr- rwr- r-- です
バイナリ表現では、110 110 100 となります。
8 進数に変換すると: 6 6 4
例: (権限を番号で変更)
もちろん、次のこともできます。
これは権限の変更です。
実際、ファイルの所有者とグループを変更することもできます。
彼らです:
chown + ユーザー名 + ファイル名
chgrp + グループ名 + ファイル名
オプション -R を使用すると、ディレクトリを変更できます。
ここでは実演しませんが、興味があればご自身で試してみてください。
6. 最初の質問: ファイルの初期権限
ファイルを作成するときに、なぜ彼の許可がこのようになっているのでしょうか?
通常のファイルは: 664
ディレクトリ ファイルは次のとおりです: 775
実際、Linux システムの通常のファイルに対する初期権限は 666 です。
ディレクトリ ファイルのデフォルトの初期権限は 777 です。
Linux に保存されている権限マスクは、umask を使用して表示できます。
666 の権限は次のとおりです: 110 110 110 (666)
許可マスクは 000 000 011 (0002) です。
最終的な権限は次のとおりです: 110 110 100 (664)
私はナンセンスな話をしているのではなく、計算ルールについて話しているだけです。
最終権限 = 初期権限 & (~umask)
補足: もちろん、umask を自分で変更することもできます。
umask を変更すると、初期権限が変更されることがわかります。
7. 2 番目の質問: ディレクトリのアクセス許可
ディレクトリのパーミッションに関する操作や現象についてはすでに紹介しました。
ここで、次のようなシナリオがあります。
パブリック ディレクトリで同時に 2 人のユーザーが作業しています: (d1 ディレクトリの下)
xl ユーザーがファイルを作成しました。
テスト ユーザーはこのファイルを表示できます
このファイルには他のファイルに対する読み取り権限が設定されているため、次のとおりです。
では、読み取り許可を取り消したらどうなるでしょうか?
この方法では、テスト ユーザーは以下を読み取ることができません。
このとき、テストユーザーはイライラして、私に読まないでほしいと思っていました、考えませんか
このファイルを削除したいだけです:
その結果、ファイルは実際に彼によって削除されました。
明らかに、このファイルはテスト ユーザーに属していませんが、テスト ユーザーはファイルを削除できます。
明らかに、そのような設計は不合理です。
実際、私たちはディレクトリの権限を調べただけですが、
ディレクトリの権限は次のとおりです。
r は、指定されたディレクトリ内のファイルを表示できるかどうかを表します
w は、現在のディレクトリでファイルを作成、変更、削除できるかどうかを表します。
このようにすれば、ディレクトリの w 権限を直接取り消すことができるのではないかと思われるかもしれません。
誰かがすぐにファイルを削除できなくなったのでしょうか? はい、ただしファイルを操作することはできません。
だから何をすべきか?
8. 3 番目の問題: スティッキービット
前述の問題を解決するには、ディレクトリにスティッキー ビットを設定します。
どのように機能するのでしょうか?
非表示のアクセス許可 t を他のアクセス許可に追加します。これは、実際には特別な x アクセス許可です。
これをスティッキービットといいますが、
それがどのように機能するかを見てみましょう:
xl ユーザーがテスト ファイルを作成しました
テスト ユーザーはこのファイルを削除できないことがわかりました。
これが粘着部分です。
実際、スティッキー ビットが設定されたディレクトリ内のファイルを削除できるのは、ディレクトリの所有者とファイルの所有者だけです。
実際、オペレーティング システムは、ルート ディレクトリの下に共有スティッキー ビット ディレクトリも提供します。
興味のある方は体験も可能です。
要約する
この記事では、基本的にパーミッションに関するすべての知識を紹介するので、パーミッションについての理解がより高いレベルに向上すると思います。
最後に次のように書きます。
以上が今回の記事の内容となります、読んでいただきありがとうございます。
何かを得たと感じたら、ブロガーに「いいね! 」を与えることができます。
記事の内容に抜けや間違いがある場合は、ブロガーにプライベートメッセージを送信するか、コメントエリアで指摘してください〜