86

プログラムの開始時にログ ファイルを作成しようとしています。

/logディレクトリが作成されない場合は、ディレクトリが存在するかどうかを確認してから、ログファイルの作成に進む必要があります。

os.Mkdir(と同様に)を使用しようとしos.MkdirAllましたが、2 番目のパラメーターにどのような値を入力しても、アクセス許可のないロックアウトされたフォルダーが取得されます。ユーザーフォルダーの読み取り/書き込みを取得するには、これをどのような値にする必要がありますか? と思った0x700のですが、うまくいかないようです。

ありがとう!

4

5 に答える 5

147

8 進数表記を直接使用できます。

os.Mkdir("dirname", 0700)


許可ビット

+-----+---+--------------------------+
| rwx | 7 | Read, write and execute  |
| rw- | 6 | Read, write              |
| r-x | 5 | Read, and execute        |
| r-- | 4 | Read,                    |
| -wx | 3 | Write and execute        |
| -w- | 2 | Write                    |
| --x | 1 | Execute                  |
| --- | 0 | no permissions           |
+------------------------------------+

+------------+------+-------+
| Permission | Octal| Field |
+------------+------+-------+
| rwx------  | 0700 | User  |
| ---rwx---  | 0070 | Group |
| ------rwx  | 0007 | Other |
+------------+------+-------+

Unix パーミッション入門


一般的なパーミッションの使用法

0755 Web サーバーで一般的に使用されます。所有者は、読み取り、書き込み、実行ができます。他のすべてのユーザーは、ファイルを読み取って実行できますが、変更することはできません。

0777誰でも読み書きと実行ができます。Web サーバーでは、ファイルとフォルダーに「777」権限を使用することはお勧めできません。これにより、誰でもサーバーに悪意のあるコードを追加できるようになります。

0644読み書きできるのは所有者だけです。それ以外の人は読むことしかできません。誰もファイルを実行できません。

0655所有者のみがファイルを読み書きできますが、ファイルを実行することはできません。それ以外のユーザーは、読み取りと実行はできますが、ファイルを変更することはできません。

www.maketecheasier.com/file-permissions-what-does-chmod-777-means/


Linux でのディレクトリのアクセス許可

Linux のディレクトリにパーミッションを適用する場合、パーミッション ビットは通常のファイルとは異なる意味を持ちます。(ソース

読み取りビットユーザーは、ディレクトリに含まれるファイル名を読み取ることができます。
書き込みビット実行ビットも設定されている場合、ユーザーはファイル名を{追加、名前変更、削除}できます。
実行ビットユーザーはディレクトリに入り、内部のファイルにアクセスできます。

https://unix.stackexchange.com/a/21252

権限計算ツール

パーミッション計算機

便利なパーミッション計算機

于 2015-07-01T02:11:04.487 に答える
25

@Danielの回答での発言は実際には正しくありません。また、@ SashaCrofterがコメントで正しく指摘しているように、10進数について説明し、8進数を使用しています。

実際には、適切なUnixパーミッションを表す限り、パーミッション値がどのような形式であるかは問題ではありません。

POSIXファイルシステムのパーミッションビットは3倍のビット(所有者、グループ、その他のアクセス用の3ビット、および3ビットの修飾子(スティッキービットなど))で提供されるため、8進数を使用してパーミッションを8進数は3ビット値を表します。

したがって、Goコードで0700を使用すると、先頭の0が削除され、8進数のリテラルが表示されることをパーサーに通知するためだけに存在し、次の3文字は、所有者、グループ、その他の権限をこの順序で表します。たとえば、グループスティッキービットを設定したり、ファイルシステムオブジェクトをグループで読み取り可能で実行可能にしたりする場合は、02750などを指定します。

ファイルシステムオブジェクトが取得する実際のアクセス許可はumask、オブジェクトを作成するプロセスのアクティブによってさらに調整されることに注意してください。

これらのトピックをより深く理解するには、chmodUnixライクなオペレーティングシステムに関するマニュアルページと一般的な文献を読むのが最善です。

于 2013-02-17T13:51:14.910 に答える
7

他の回答に加えて、Unix および Linux スタイルのオペレーティング システムでは、すべてのプログラムがumask設定で実行されることを覚えておいてください。多くの場合、022 または場合によっては 002 にデフォルト設定される umask は、システムがファイルおよびディレクトリの作成要求から自動的に削除する一連のアクセス許可です。

これが意味することは、ほとんどのプログラム (この規則にはいくつかの例外があります)0666は、ファイルの作成には mode を使用0777し、ディレクトリの作成には mode を使用する必要があるということです。実行中のプロセスに記録されたユーザーの構成は、これらの権限のどれを奪うべきかを示しています。ユーザーの設定が022であり、モードでファイルを作成する場合、0666取得される実際の設定はrw-r--r--、ユーザーに対しては読み取りと書き込み、グループに対しては読み取り専用、その他に対しては読み取り専用です。

ユーザーが自分のグループに書き込み可能性を拡張したい場合は、自分の umask を に設定するだけで済みます2: 他のユーザーの書き込み許可を奪い、自分のグループには残しておきます。新しいファイルは mode で作成されるようになりましたrw-rw-r--プログラムは変更されません。モードは引き続き使用さ0666れます。ただし、ファイルは mode で作成されます0664

同様に、os.Mkdirまたはos.MkdirAllを呼び出すと0777、umask によって不要なパーミッションが取り除かれ、適切なパーミッションが残ります。

しかし、例外もあると言いました。これらには、ユーザー専用の機密情報のコピーを作成するプログラムが含まれます。これらは通常0700、ディレクトリと0600ファイルに対して mode を使用する必要があります。それらには、個人ではなくシステムユーザーとして機能する長時間実行サーバーが含まれる場合があります...ただし、これらのサーバーは正しいumaskで実行できますが、その場合、0777または0666問題ありません。

ここで何らかの判断を下す必要があります。os.Lstatssh などの特にセキュリティを重視するプログラムは、制限されたアクセス許可を使用したい場合があり、重要なディレクトリに対するアクセス許可が適切に制限されていることを (または同様に) チェックしたい場合もあります。

(umask は通話には適用されないことに注意してください。ここos.Chmodでは、モードを直接選択します。)

于 2020-01-29T08:31:18.150 に答える