web-dev-qa-db-ja.com

umask / PAM /パーミッションを完全に制御する方法は?

// 2月8日更新-未解決の問題の概要:

  • ディレクトリをファイルとは異なる方法でumaskする方法は?
  • Nautilusのコピー/貼り付けでumaskする方法は?
  • SSHFSのumaskを設定する方法は?

私たちの状況

弊社の何人かがサーバーにログインしてファイルをアップロードしています。それらはすべて、同じファイルをアップロードして上書きできる必要があります。ユーザー名は異なりますが、すべて同じグループに属しています。ただし、これはインターネットサーバーであるため、「他の」ユーザーには(一般に)読み取り専用アクセス権のみが必要です。だから私が欲しいのはこれらの標準的な権限です:

ファイル:664
ディレクトリ:771

私の目標は、すべてのユーザーが権限について心配する必要がないことです。サーバーは、これらの権限がすべてのファイルとディレクトリに適用され、新しく作成、コピー、または上書きされるように構成する必要があります。特別な権限が必要な場合のみ、手動で変更します。

NautilusでSFTPを使用してサーバーにファイルをアップロードし、sshfsを使用してサーバーをマウントし、ローカルフォルダーのようにNautilusでサーバーにアクセスし、コマンドラインでSCPを使用してファイルをアップロードします。これは基本的に私たちの状況と私たちが目指すことをカバーしています。

今、私は美しいumask機能について多くのことを読みました。私が理解していることから(PAMと一緒に)umask すべき新しいファイルとディレクトリに標準のアクセス許可を設定することで、私がやりたいことを正確に実行できます。しかし、何時間もの読書と試行錯誤の後で、私はまだこれを機能させることができません。予想外の結果がたくさん出ます。私は本当にumaskをしっかりと理解し、多くの質問に答えられないのが好きです。これらの質問を、私の調査結果およびこれらの質問につながった私の試験の説明とともに以下に投稿します。多くのことがうまくいかないように見えるので、私はいくつかのことを間違っていると思います。したがって、多くの質問があります。

注:私はUbuntu 9.10を使用しているため、SFTPサーバーのumaskを設定するために sshd_configを変更できません を使用しています。インストールされたSSH OpenSSH_5.1p1 Debian-6ubuntu2 <必要なOpenSSH 5.4p1。だからここに質問をします。

1。効果を発揮するためにPAMの変更を再開する必要はありますか?

これから始めましょう。 PAMの変更を有効にするためにシステム全体を再起動する必要があるかどうかもわからなかったため、関連するファイルが非常に多く、何が何に影響を及ぼし、何が影響を与えないかを理解できませんでした。期待した結果が得られなかったのでそうしましたが、これは本当に必要ですか?または、サーバーからログアウトして再度ログインするだけで、新しいPAMポリシーを有効にできますか?または、リロードする「PAM」プログラムはありますか?

2。 ISすべてのセッションのすべてのユーザーに影響を与える1つのファイルを変更して変更しますか?

だから私は多くの異なるものを読んだので、多くのファイルを変更してしまいました。次のファイルにumaskを設定してしまいました。

~/.profile -> umask=0002
~/.bashrc -> umask=0002
/etc/profile -> umask=0002
/etc/pam.d/common-session -> umask=0002
/etc/pam.d/sshd -> umask=0002
/etc/pam.d/login -> umask=0002

この変更をすべてのユーザーに適用したいので、何らかのシステム全体の変更が最適です。それは達成できますか?

3。すべての後、このUMASKのことは機能しますか?

したがって、可能な限りすべての場所でumaskを0002に変更した後、テストを実行します。

------------ SCP -----------

テスト1:

scp testfile (which has 777 permissions for testing purposes) server:/home/
testfile                                      100%    4     0.0KB/s   00:00   

権限を確認しましょう:

user@server:/home$ ls -l
total 4
-rwx--x--x 1 user uploaders 4 2011-02-05 17:59 testfile (711)

更新:pam.d/common-sessionsにumaskを設定するだけで修正されました(コメントを参照)

--------- SSH ------------

テスト2:

ssh server
user@server:/home$ touch anotherfile
user@server:/home$ ls -l
total 4
-rw-rw-r-- 1 user uploaders 0 2011-02-05 18:03 anotherfile (664)

-------- SFTP -----------

ノーチラス:sftp:// server/home /

クライアントからサーバーに新しいファイルをコピーして貼り付けます(クライアントでは777)

テスト3:

user@server:/home$ ls -l
total 4
-rwxrwxrwx 1 user uploaders 3 2011-02-05 18:05 newfile (777)

Nautilusを使用して新しいファイルを作成します。端末でファイルの権限を確認します。

テスト4:

user@server:/home$ ls -l
total 4
-rw------- 1 user uploaders    0 2011-02-05 18:06 newfile (600)

つまり...ここで何が起こったのですか? すべき毎回644を取得します。代わりに、711、777、600、そして一度は644を取得します。そして、644は、SSHを介して新しい空のファイルを作成するときにのみ達成されます。これは、最も可能性の低いシナリオです。

だから私は尋ねています、結局のところumask/pamは機能しますか?

更新:pam.d/common-sessionsにumaskを設定するだけでテスト4を修正(コメントを参照)

4。 SO SSHFSをUMASKすることはどういう意味ですか?

Sshfsを使用してサーバーをローカルにマウントすることもあります。非常に便利。しかし、繰り返しになりますが、権限の問題があります。

マウント方法は次のとおりです。

sshfs -o idmap=user -o umask=0113 user@server:/home/ /mnt

注:sshfsは666ではなく777から始まるため、umask = 113を使用します。したがって、113を使用すると、望ましいファイル許可である664が取得されます。

しかし、今何が起こっているのかseeすべてのファイルとディレクトリが664であるかのようにです。Nautilusで/ mntを参照し、次のようにします。

  • 右クリック->新しいファイル(newfile)---TEST 5
  • 右クリック->新しいフォルダ(newfolder)---TEST 6
  • ローカルクライアントから777ファイルをコピーして貼り付けます---TEST 7

コマンドラインで確認してみましょう:

user@client:/mnt$ ls -l
total 8
-rw-rw-r-- 1 user 1007    3 Feb  5 18:05 copyfile (664)
-rw-rw-r-- 1 user 1007    0 Feb  5 18:15 newfile (664)
drw-rw-r-- 1 user 1007 4096 Feb  5 18:15 newfolder (664)

しかし、ちょっと、サーバー側でこの同じフォルダーを確認してみましょう:

user@server:/home$ ls -l
total 8
-rwxrwxrwx 1 user uploaders    3 2011-02-05 18:05 copyfile (777)
-rw------- 1 user uploaders    0 2011-02-05 18:15 newfile (600)
drwx--x--x 2 user uploaders 4096 2011-02-05 18:15 newfolder (711)

何?! REALファイルの権限は、Nautilusで表示されるものとは大きく異なります。では、sshfsのこのumaskは、非現実的なファイル許可を示す「フィルター」を作成するだけですか?そして、私は別のユーザーからファイルを開こうとしましたが、同じグループには実際の600のアクセス許可がありましたが、644の「偽の」アクセス許可がありましたが、これを読み取ることができませんでした。

5。 UMASK ISファイルについてはすべてですが、ディレクトリについては何ですか?

私のテストから、適用されているumaskもディレクトリのアクセス許可に何らかの影響を与えることがわかります。ただし、ファイルを664(002)に、ディレクトリを771(006)にしたいと考えています。では、ディレクトリに別のumaskを設定することは可能ですか?

6。 PERHAPS UMASK/PAM IS REALLY COOL、BUTUBUNTU IS JUST BUGGY?

一方では、PAM/UMASKとUbuntuで成功した人々のトピックを読みました。一方、Ubuntuのumask/PAM/Fuseに関する多くの古いバグと新しいバグを発見しました。

だから私はもう何を信じればいいのか分かりません。私はあきらめるべきですか? [〜#〜] acl [〜#〜] 私のすべての問題を解決しますか?それとも、Ubuntuの使用に問題がありますか?

Tarを使用したバックアップに関する注意事項。 Red Hat/CentosディストリビューションはtarプログラムでACLをサポートしていますが、Ubuntuはバックアップ時のACLをサポートしていません。つまり、バックアップを作成すると、すべてのACLが失われます。

Ubuntu 10.04にアップグレードしても問題が解決する場合は、喜んでアップグレードしますが、まず何が起こっているのかを理解したいと思います。

11
user60129

多くのことがここで起こっている可能性があります。

最初の考え:

  • はい、pam.dの変更はすぐに有効になります
  • _/etc/pam.d/common-session_は、デフォルトを設定するのに最適な場所ですumask
  • pam.d umaskは_.bashrc_のエントリによって上書きされます。
    しかし_.bashrc_は特定の状況でのみ読み取られます(インタラクティブ、非ログインシェル)
  • testfile (711)は非常に奇妙です
    • _/home_はどのようにマウントされ、ACLを使用していますか?
      (例:_ls -ld /home_および_getfacl /home_は何を印刷しますか?)
    • testfileは既存のファイルの権限を変更しないため、コピーを行う前にscpはすでに存在していました(_-p_フラグを使用しない限り)
  • Nautilusはファイルを別の方法で作成することが知られていますが、その理由やルールは不明です
  • _umask=0113_はおそらく問題を引き起こします
  • サーバーとクライアントは同じオペレーティングシステムを実行していますか?
    たとえば、クライアントでACLが有効になっている場合、またはCygwinである場合、動作は異なる場合があります
  • 正しいアクセス許可を強制する最善の方法は、デフォルトのACLを使用することです。これは、ユーザーが_.bashrc_および_.bash_profile_でumaskをオーバーライドできるためです。

更新:

  • sshfsの_umask=0113_は間違っています。
    1. umaskを指定せずにマウントしてみてください
    2. touchを使用して、マウントポイント内に新しいファイルを作成します。
    3. あなたはそれが例えば取得するだけを見るはずです。 _-rw-r--r--_、xビットなし
    4. xビットをマスクすると、ディレクトリが壊れる可能性があります
      そしてコンパイラは実行可能ファイルを正しく作成できないかもしれません

回避策:

これ以上何も考えられない場合は、famまたはgaminを使用して、作成される新しいファイルを監視し、それらのアクセス許可を修正するか、定期的に実行するスクリプトだけを使用して、すべてのファイルに権限を設定します。

3
Mikel

ACLは問題なく機能するはずです。

グループのすべてのフォルダにデフォルトのACLを設定します。これは、将来のすべてのファイルとディレクトリに継承されます。

何かのようなもの setfacl -m d:g:uploaders:rwxは動作するはずです。

既存の権限を修正するには:

find /shared/folder -type d -exec setfacl -m d:g:uploaders:rwx {} \;
find /shared/folder -type f -exec setfacl -m g:uploaders:rw {} \;

ファイルのコピー時に「保持」が設定されている場合、デフォルトのACLは機能しません。その場合は、cronでfindコマンドを実行するか、ファイルシステムの変更を監視することのみを提案できます。

0
Steven
0

これはPAM/umaskとは関係ありませんが、役に立つかもしれません。

setgidディレクトリの場合、その中に作成されたすべてのファイルとディレクトリは自動的にそのグループに割り当てられます。

root@ricarda ~ # mkdir hello      
root@ricarda ~ # chown :users hello 
root@ricarda ~ # chmod g+s hello
root@ricarda ~ # ls -l |grep hello 
drwxr-sr-x. 2 root users  4096 Feb  7 04:05 hello
root@ricarda ~ # touch hello/some_file
root@ricarda ~ # mkdir hello/some_dir
root@ricarda ~ # ls -l hello/       
total 4
drwxr-sr-x. 2 root users 4096 Feb  7 04:16 some_dir
-rw-r--r--. 1 root users    0 Feb  7 04:06 some_file
0
k0001