web-dev-qa-db-ja.com

Linuxのファイルに対する書き込み権限はありますが、読み取り権限はありません

Linuxでファイルに対して書き込み権限はあるが、読み取り権限はないことは可能ですか?実行許可はどうですか?読み取りと書き込みの許可はありませんか?

5
Hanna

はい。ただし、読み取り権限なしで実行権限は、非バイナリファイルでは意味がありません(実行するにはスクリプトを読み取る必要があるため)。ディレクトリで、読み取りなしで実行すると、ディレクトリをトラバースできますが、ディレクトリを一覧表示したり、その内容を他の方法で実行したりすることはできません。次のパスを検討してください。

/home/user/foo/bar

ディレクトリfooのモード0711(所有者の完全なアクセス許可、グループとワールドに対してのみ実行)があり、ディレクトリbarのモード0755(所有者の完全なアクセス許可、他のすべてのユーザーの読み取りと実行)の場合、次に、user以外のアカウントがcd /home/user/foo/barそして、barが通常のディレクトリと同じように動作することを確認します。ただし、cd /home/user/fooは機能し、lsおよびそのディレクトリ内の他のコマンドは、権限が不十分なために失敗します(つまり、ディレクトリを読み取ってその内容を一覧表示することはできません)。

ファイルに対する読み取り許可なしの書き込み許可は、それが意味することを実行します。ファイルに書き込むことはできますが、書き込んだ内容を読み戻すことはできません。これは、複数のアカウントのプロセスが1つのログファイルに書き込むが、あるユーザーに属するプロセスが別のユーザーに属するプロセスから(おそらく機密性の高い)ログエントリを読み取れないようにする必要がある場合に役立ちます。

7
Aaron Miller
[benji@laptop ~]$ ./hello
Hello world!
[benji@laptop ~]$ chmod 000 hello #no permissions, start out with a clean slate
[benji@laptop ~]$ chmod +x hello #make it executable
[benji@laptop ~]$ cat hello #try to read it, but can't
cat: hello: Permission denied
[benji@laptop ~]$ ./hello #try to run it, it works!
Hello world!
[benji@laptop ~]$

[benji@laptop ~]$ cat hello.sh
#!/usr/bin/bash
echo 'Hello world!'
[benji@laptop ~]$ chmod 000 hello.sh #no permissions, start out with a clean slate
[benji@laptop ~]$ chmod +x hello.sh #make it executable
[benji@laptop ~]$ cat hello.sh #try to read it; FAIL
cat: hello.sh: Permission denied
[benji@laptop ~]$ ./hello.sh #try to run it, but the Shell interpreter (bash) cannot read it; FAIL
/usr/bin/bash: ./hello.sh: Permission denied
[benji@laptop ~]$ 

ファイルがシェルスクリプトでない場合にのみ、実行権限のみを持つことができます。シェルスクリプトは、シェルインタープリターによって読み取られる必要があります(したがって、読み取り権限が必要です)。それ以外の場合、バイナリ実行可能ファイルの場合、読み取り権限は必要ありません。パーミッションを実行するだけです。

[benji@laptop ~]$ echo hello >file
[benji@laptop ~]$ chmod 000 file #no permissions, start out with a clean slate
[benji@laptop ~]$ chmod +w file #write-only permissions
[benji@laptop ~]$ cat file #cannot read it
cat: file: Permission denied
[benji@laptop ~]$ echo hello again >file #but *can* write it

そうです、ファイルに対して書き込み権限はありますが、読み取り権限はありません。

8
BenjiWiebe

Unixでの読み取り、書き込み、実行のアクセス許可は、一般的に完全に独立しています。

Unixは、ユーザー権限(ファイルの所有者用)、グループ権限(ファイルのグループに属するanybpdy用)などを区別します。権限はこの順序で厳密にチェックされます。つまり、ユーザーがアクセスを試みた場合、ユーザー権限が適用され、他には何もチェックされません。ユーザーではなくグループに属している場合は、グループのアクセス許可が適用されます。上記のいずれでもない場合は、他の権限が適用されます。

権限は、ls(1)によってrwxとして3回(ユーザー、グループ、その他)表示されます。したがって、_r--_は読み取り専用、_rw-_は読み取り/書き込み、_--x_は実行のみを意味します。コマンドchown(1)には通常、アクセス許可を与える8進数が与えられますが、上記の表記を使用することもできます。つまり、_chown u+r,g-x,o=rw somefile_は、「ユーザーにrを加算し、x、その他の場合はrwを正確に設定します。

2
vonbrand

Chmodにアプローチする1つの方法は、read = 4 write = 2 execute = 1であるchmodmathを使用することです。必要な番号の配置は、U =ユーザーG =グループO =その他の順序になります。コマンド「chmodUGO」は権限を設定します。

serに完全なアクセス許可を持たせたい場合は、read(4)+ write(2)+ execute(1)= 7になります。

groupに読み取りと実行を持たせたい場合は、read(4)+ execute(1)= 5になります。

otherにアクセスできないようにする場合は、0になります。

これらの権限を設定するコマンドは次のようになります:chmod 750 file

1
Ben Plont