5

報告しなければならない奇妙なことがあります。新しく構成した RHEL5 サーバーでは、シェルが /bin/bash に設定されており、.bashrc で umask が 002 に設定されています。

最初にログインすると、umask は正しく機能しているように見えます。

$ touch a
$ ls -l a
-rw-rw-r-- etc.....

別のファイルを作成すると機能します:

$ touch b
$ ls -l b
-rw-rw-r-- etc.....

しかし...ディレクトリを(任意のディレクトリに)変更すると、umaskは022に戻されます:

$ cd /var/www/whatever
$ touch c
$ ls -l c
-rw-r--r-- etc.....

完全に奇妙です。

このようなものを見た人はいますか?彼らはチェックすることを何か考えられますか?

cd'ing 後に umask 設定が変更されるのはなぜですか?

ありがとう、

-チャーリー

4

2 に答える 2

5

上記のコメントをくれた Barry Brown に感謝します - 私はこの問題 (Linux ではなく OSX) で髪を引き裂いていましたが、私の場合は rvm が原因でした。次のような行について、.profile、.bash_profile などを確認します。

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

コメントアウトし、シェルを再起動すると、問題が解決するはずです。rvm がこれほど失礼で押し付けがましいとは思いもしませんでした。すべてのシェルではなく、必要なときにのみロードすることをお勧めします。

于 2012-10-17T10:22:08.507 に答える
1

簡単に言えば、umask は 4 桁であり、任意に変更されることはありませんが、/etc/profile と fiends はデフォルトで 022 に設定されます。

更新
私はちょっとこれに夢中になり、あなたの質問に適切に答えるのを忘れました:

変更先のフォルダーにマウントされているパーティション (存在する場合) に umask が設定されていないことを確認します。(単にmountと入力します)

長い答えは次のとおりです。

man chmod §6: 数値モードは 1 ~ 4 桁の 8 進数 (0 ~ 7) であり、値 4、2、および 1 のビットを加算することによって導出されます。省略された数字は先行ゼロと見なされます。1 桁目は、設定されたユーザー ID (4) と設定されたグループ ID (2)、および制限付き削除またはスティッキー (1) 属性を選択します。2 桁目は、ファイルを所有するユーザーのアクセス許可を選択します。読み取り (4)、書き込み (2)、および実行 (1)。3 番目は、ファイルのグループ内の他のユーザーのパーミッションを同じ値で選択します。4 番目は、ファイルのグループに属していない他のユーザー用で、同じ値です。

GNU coreutils 8.14 2011 年 10 月


数年前にこのマニュアルページを何度か読んだことを覚えていますが、テーブルをセットアップする前に、これらすべてが何を意味するのかまったく理解できませんでした。参照テーブルを紛失したため、ここで再作成します。シンボリック表記はタイプするのが面倒なので好きではないので (chmod u+x など)、それについては言及しません。


chmodumaskの解釈

可能な設定: 4: 読み取り 2: 書き込み 1: 実行

各桁の可能な値と例

ドメイン setuid ユーザー グループ ワールド
数字 1 2 3 4
値 0 ~ 7 0 ~ 7 0 ~ 7 0 ~ 7

中かっこ {} 内の「可能な設定」値を合計して、有効な許可ビット (数値) を生成することができます。

一般的な例

0755 : ユーザーはフォルダに入り、そのフォルダにファイルを書き込む (削除する) ことができます このマスクがファイルに設定されている場合、ユーザーはファイル (つまり ./filenme.bin) を実行できます。最後の 2 桁は、ファイルが属するグループと世界 (システム上の他のユーザー) もファイルを実行できることを意味します。ディレクトリに適用すると、グループとワールドがそのディレクトリに入る可能性があることを意味します。

0644 : ユーザーはファイルの読み取りと書き込みを実行できますが、実行はできません。グループとワールドはファイルの読み取りのみ可能です。フォルダに適用すると、このマスクは誰もがそのディレクトリに入るのを防ぎます。

0600 : このマスクを使用してファイルを読み書きできるのは所有者だけです

0700 : フォルダの所有者のみが、このマスクを使用してフォルダの内容を入力、読み取り、および書き込むことができます。

0000 : ファイルを「隠す」ため、またはファイルまたはフォルダーが使用されないことを (自分自身に) 通知するために役立ちます。

無意味な仮面

0200 : ユーザーがファイルを書き込める場合、ファイルの umask を変更することもできます。

危険なマスク

0666 : 誰でもこのマスクを使用してファイルの読み取り、書き込み、削除を行うことができます

0777 : フォルダも同じです。バイナリ ファイルが777に設定されている場合、ファイルが /usr/bin などのシステム全体のバイナリ ディレクトリにある場合でも、誰でもそのファイルに必要なものを入れて実行できます。

4755 : スーパーユーザー (root) が所有するバイナリ ファイルは、スーパーユーザー権限で実行されます。これが意味することは明らかです。おそらく、スクリプト (bash スクリプトなど) がまだ /bin/bash によって実行されているため、4755 で解釈されたスクリプトを直観的に設定しても効果はありません。スクリプトが保存されているテキスト ファイルは、実際には実行可能ファイルではありません。

上記のすべての例では、便宜上、先頭のゼロを省略できます。

umask から chmod への変換

適切な umask を設定するには、フォルダの場合は 0777、ファイルの場合は 666 である「最大マスク」から不要なパーミッションを差し引くだけで済みます。

デフォルトのパーミッション 644 でシェルがファイルを作成するように強制するには、umask を 0022 に設定します。フォルダの場合、通常の (望ましい) umask は 755 であり、umask を 0022 に設定することによって達成されます。

0666 0777
-0022 -0022
 ____ ____
 0644 0755

相対リンク: https://unix.stackexchange.com/questions/364/allow-setuid-on-shell-scripts

于 2012-10-10T02:12:41.533 に答える