私はこれを実現するまで、Linuxで権限がどのように機能するかを理解したと思いました。
サブフォルダがありますが、奇妙な次の権限を持つファイルが含まれています。
ls -aRl /mnt/oddball
/mnt/oddball:
total 120
drwx------ 2 bendipa bendipa 4096 Aug 27 00:16 .
drwxr-xr-x 6 root root 4096 Jul 1 15:51 ..
-rw-rw-r-- 1 bendipa bendipa 12 Aug 27 00:16 Adoc.txt
-rwx------ 1 bendipa bendipa 12655 Aug 26 18:16 .IntBnkDet.doc.pgp
-rwx------ 1 bendipa bendipa 14550 Aug 26 19:04 .PersonalDetail.odt.pgp
-rwx------ 1 bendipa bendipa 76357 Aug 15 15:43 .StatePensionGateway.doc.pgp
問題は、私が新しいファイルを作成するたびに/mnt/不思議権限がファイルと同じであると仮定します。Adoc.txtこの場合、ファイルが親フォルダから権限を取得すると仮定します。奇妙なリストされた出力行権限のうち、最初の権限として表示されます。親フォルダを記録しました。奇妙な、/mntルートが所有し、他の権限を表示します。奇妙なしかし、それをしたくない奇妙な文書。
もちろん、新しいファイルの権限を変更するのは簡単です。/mntおかしい端末でファイルを生成するたびにこれを行う必要があるのは、やや面倒です。それともLinuxでこれが必要ですか?
ベストアンサー1
権限は親フォルダから継承されません。
通常のファイルシステムでは、rw-rw-rw-
モード0666()を使用して新しいファイルを作成しますが、修正済み値を渡しますumask
(逆方向)。
たとえば、次のようになります。
$ umask 0
$ touch foo
$ ls -l foo
-rw-rw-rw- 1 sweh sweh 0 Aug 26 21:14 foo
$ umask 022
$ touch bar
$ ls -l bar
-rw-r--r-- 1 sweh sweh 0 Aug 26 21:14 bar
$ umask 0222
$ echo hello > baz
$ ls -l baz
-r--r--r-- 1 sweh sweh 6 Aug 26 21:15 baz
umask
この値が新しいファイルを作成するために使用される権限を決定することがわかります。
この数字を説明しましょう。
r=4
w=2
x=1
各ファイルには、「所有者」、「グループ」、および「グローバル」権限があります。 8進数で数字を見ると分解できます。
たとえば、ライセンス0123は次のことを意味します。
owner = 1 ==> --x
group = 2 ==> -w-
world = 3 ==> -wx
私達はそれを見ることができます:
$ chmod 0123 foo
$ ls -l foo
---x-w--wx 1 sweh sweh 0 Aug 26 21:27 foo
値umask
は処理するビットを決定します。維持する。したがって、0666の実際の生成モードを採用し、一致することを確認してください。否定的なウマスク。
したがって、umask
0022の場合、否定は0755と0644であり、これは前に見た権限に0666 AND 0755
なります。rw-r--r--
しかし、いくつかの合併症があります。
まず得るこのファイルには、ディレクトリパス全体に対する権限が必要です。したがって、あなたの例では、Adoc.txt
グローバル読み取り権限があってもディレクトリがそのファイルに到達するのを防ぐため、他の人はファイルを見ることができません。
だから効果的な権限は、ファイルに対する権限だけでなく、ディレクトリツリー全体の権限にも依存します。
たとえば、
$ sudo ls -al X
total 8
drwx------ 2 root root 4096 Aug 26 21:19 .
drwxr-xr-x 3 root root 4096 Aug 26 21:18 ..
-rw-r--r-- 1 root root 6 Aug 26 21:19 y
権限にはy
誰もが読むことができると言われていますが、試してみると...
$ cat X/y
cat: X/y: Permission denied
その理由は目次許可が私を停止しました。
x
ディレクトリ内のファイルを読み取るには、ディレクトリに対する権限が必要です。
$ sudo chmod a+x X
$ ls -ld X
drwx--x--x 2 root root 4096 Aug 26 21:19 X/
$ cat X/y
hello
もう1つの問題は、デフォルト以外のファイルシステム(NTFSやSMBなど)を使用している場合です。マウントフラグは、元のファイルシステムがUnix権限を理解していないため、Unix権限を無視できます。しかし、あなたの問題はそうではないかもしれません。