Wie erhalte ich die volle Kontrolle über umask / PAM / Berechtigungen?


11

// Aktualisiert am 8. Februar - Ausstehende Probleme in Kürze:

  • Wie kann man Verzeichnisse anders als Dateien umaskieren?
  • Wie umask auf Nautilus kopieren / einfügen?
  • Wie setze ich umask für SSHFS?

UNSERE SITUATION

Mehrere Personen aus unserem Unternehmen melden sich bei einem Server an und laden Dateien hoch. Sie alle müssen in der Lage sein, dieselben Dateien hochzuladen und zu überschreiben. Sie haben unterschiedliche Benutzernamen, gehören aber alle zur selben Gruppe. Dies ist jedoch ein Internet-Server, daher sollten die "anderen" Benutzer (im Allgemeinen) nur Lesezugriff haben. Was ich also haben möchte, sind diese Standardberechtigungen:

Dateien: 664
Verzeichnisse: 771

Mein Ziel ist es, dass sich nicht alle Benutzer um Berechtigungen kümmern müssen. Der Server sollte so konfiguriert sein, dass diese Berechtigungen für alle Dateien und Verzeichnisse gelten, die neu erstellt, kopiert oder überschrieben wurden. Nur wenn wir spezielle Berechtigungen benötigen, würden wir dies manuell ändern.

Wir laden Dateien auf den Server hoch, indem wir SFTP in Nautilus ausführen, den Server mit sshfs mounten und in Nautilus darauf zugreifen, als wäre es ein lokaler Ordner, und indem wir SCP in der Befehlszeile ausführen. Das deckt im Wesentlichen unsere Situation und unser Ziel ab.

Jetzt habe ich viele Dinge über die schöne Umask-Funktionalität gelesen. Soweit ich weiß, sollte umask (zusammen mit PAM) es mir ermöglichen, genau das zu tun, was ich will: Standardberechtigungen für neue Dateien und Verzeichnisse festlegen. Nach vielen, vielen Stunden Lesen und Ausprobieren bekomme ich dies jedoch immer noch nicht zum Laufen. Ich bekomme viele unerwartete Ergebnisse. Ich mag es wirklich, ein solides Verständnis von Umask zu bekommen und habe viele Fragen unbeantwortet. Ich werde diese Fragen unten zusammen mit meinen Ergebnissen und einer Erklärung meiner Versuche, die zu diesen Fragen geführt haben, veröffentlichen. Angesichts der Tatsache, dass viele Dinge schief zu gehen scheinen, denke ich, dass ich einige Dinge falsch mache. Daher gibt es viele Fragen.

HINWEIS: Ich verwende Ubuntu 9.10 und kann daher die sshd_config nicht ändern , um die Umask für den SFTP-Server festzulegen. Installiertes SSH OpenSSH_5.1p1 Debian-6ubuntu2 <erforderlich OpenSSH 5.4p1. Also hier gehen die Fragen.

1. MUSS ICH NEU STARTEN, damit PAM-ÄNDERUNGEN EFFEKTIEREN?

Beginnen wir damit. Es waren so viele Dateien beteiligt, und ich konnte nicht herausfinden, was die Dinge beeinflusst und was nicht, auch weil ich nicht wusste, ob ich das gesamte System neu starten muss, damit PAM-Änderungen wirksam werden. Ich habe dies getan, nachdem ich die erwarteten Ergebnisse nicht gesehen hatte, aber ist das wirklich notwendig? Oder kann ich mich einfach vom Server abmelden und wieder anmelden und sollten neue PAM-Richtlinien wirksam sein? Oder gibt es ein 'PAM'-Programm zum Neuladen?

2. GIBT ES EINE EINZELNE DATEI ZU ÄNDERN, DIE ALLE BENUTZER FÜR ALLE SITZUNGEN BEEINFLUSST?

Also habe ich VIELE Dateien geändert, als ich VIELE verschiedene Dinge gelesen habe. Am Ende habe ich die Umask in den folgenden Dateien festgelegt:

~/.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

Ich möchte, dass diese Änderung für alle Benutzer gilt, daher ist eine systemweite Änderung am besten. Kann es erreicht werden?

3. FUNKTIONIERT DIESE UMASK-DINGE?

Nachdem ich an jedem möglichen Ort umask auf 0002 geändert habe, führe ich Tests durch.

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

TEST 1:

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

Lassen Sie uns die Berechtigungen überprüfen:

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

UPDATE: behoben, indem NUR umask in pam.d / common-session gesetzt wurde (siehe Kommentare)

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

TEST 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 -----------

Nautilus: sftp: // server / home /

Kopieren Sie die neue Datei und fügen Sie sie vom Client auf den Server ein (777 auf dem Client).

TEST 3:

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

Erstellen Sie eine neue Datei über Nautilus. Überprüfen Sie die Dateiberechtigungen im Terminal:

TEST 4:

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

Ich meine ... WAS ist gerade hier passiert?! Wir sollten jedes Mal 644 bekommen. Stattdessen bekomme ich 711, 777, 600 und dann einmal 644. Und der 644 wird nur erreicht, wenn eine neue, leere Datei über SSH erstellt wird, was das am wenigsten wahrscheinliche Szenario ist.

Also frage ich, funktioniert umask / pam doch?

UPDATE: Test 4 wurde behoben, indem NUR umask in pam.d / common-session gesetzt wurde (siehe Kommentare).

4. WAS BEDEUTET ES, SSHFS UMASKIEREN?

Manchmal mounten wir einen Server lokal mit sshfs. Sehr hilfreich. Aber auch hier haben wir Berechtigungsprobleme.

So montieren wir:

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

HINWEIS: Wir verwenden umask = 113, da sshfs anscheinend von 777 anstelle von 666 startet. Mit 113 erhalten wir also 664, was die gewünschte Dateiberechtigung ist.

Jetzt sehen wir jedoch alle Dateien und Verzeichnisse so, als wären sie 664. Wir durchsuchen Nautilus nach / mnt und:

  • Rechtsklick -> Neue Datei (neue Datei) --- TEST 5
  • Rechtsklick -> Neuer Ordner (neuer Ordner) --- TEST 6
  • Kopieren Sie eine 777-Datei von unserem lokalen Client und fügen Sie sie ein --- TEST 7

Überprüfen wir also die Befehlszeile:

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)

Aber hey, lassen Sie uns denselben Ordner auf der Serverseite überprüfen:

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)

Was?! Die REAL-Dateiberechtigungen unterscheiden sich stark von denen in Nautilus. Erstellt diese Umask auf sshfs nur einen 'Filter', der unwirkliche Dateiberechtigungen anzeigt? Und ich habe versucht, eine Datei von einem anderen Benutzer zu öffnen, aber von derselben Gruppe, die echte 600 Berechtigungen, aber 644 "falsche" Berechtigungen hatte, und ich konnte dies immer noch nicht lesen. Was nützt dieser Filter?

5. UMASK dreht sich alles um Dateien. ABER WAS IST MIT VERZEICHNISSEN?

Aus meinen Tests kann ich ersehen, dass die angewendete Umask auch irgendwie die Verzeichnisberechtigungen beeinflusst. Ich möchte jedoch, dass meine Dateien 664 (002) und meine Verzeichnisse 771 (006) sind. Ist es also möglich, eine andere Umask für Verzeichnisse zu haben?

6. PERHAPS UMASK / PAM IST WIRKLICH COOL, ABER UBUNTU IST NUR BUGGY?

Einerseits habe ich Themen von Menschen gelesen, die mit PAM / UMASK und Ubuntu erfolgreich waren. Andererseits habe ich viele ältere und neuere Fehler in Bezug auf umask / PAM / fuse unter Ubuntu gefunden:

Ich weiß also nicht mehr, was ich glauben soll. Soll ich einfach aufgeben? Würde ACL alle meine Probleme lösen? Oder habe ich wieder Probleme mit Ubuntu?

Ein Wort der Vorsicht bei Backups mit Teer. Red Hat / Centos-Distributionen unterstützen acls im tar-Programm, aber Ubuntu unterstützt acls beim Sichern nicht. Dies bedeutet, dass alle Acls verloren gehen, wenn Sie ein Backup erstellen.

Ich bin sehr bereit, auf Ubuntu 10.04 zu aktualisieren, wenn dies auch meine Probleme lösen würde, aber zuerst möchte ich verstehen, was passiert.

Antworten:


3

Hier könnte viel los sein.

Erste Gedanken:

  • ja, pam.d Änderungen werden sofort wirksam
  • /etc/pam.d/common-session ist der beste Ort, um einen Standard festzulegen umask
  • Jede pam.d-Umask wird von jedem Eintrag in überschrieben .bashrc,
    aber .bashrcnur unter bestimmten Umständen gelesen (interaktive Shell ohne Anmeldung).
  • testfile (711) ist sehr seltsam
    • Wie wird /homegemountet und verwenden Sie ACLs?
      (zB was tun ls -ld /homeund getfacl /homedrucken?)
    • war testfilebereits vorhanden, bevor Sie die Kopie erstellt haben, da scpdie Berechtigungen für eine bereits vorhandene Datei nicht geändert werden (es sei denn, Sie verwenden das -pFlag).
  • Es ist bekannt, dass Nautilus Dateien auf andere Weise erstellt, nicht sicher warum oder welche Regeln gelten
  • umask=0113 wird wahrscheinlich Probleme verursachen
  • Führen Server und Client dasselbe Betriebssystem aus?
    Wenn auf dem Client beispielsweise ACLs aktiviert sind oder Cygwin ist, kann das Verhalten unterschiedlich sein
  • Der beste Weg, um vernünftige Berechtigungen zu erzwingen, ist die Verwendung von Standard-ACLs, genau weil diese, wie Sie festgestellt haben, umaskvom Benutzer in .bashrcund überschrieben werden können .bash_profile.

Aktualisieren:

  • umask=0113 für sshfs ist falsch.
    1. Versuchen Sie die Montage ohne Angabe von a umask
    2. Erstellen Sie mit eine neue Datei innerhalb des Einhängepunkts touch.
    3. Sie sollten sehen, dass es nur zB -rw-r--r--ohne xBits wird
    4. Durch das Ausblenden von xBits können Verzeichnisse beschädigt werden ,
      und Compiler können möglicherweise keine ausführbaren Dateien ordnungsgemäß erstellen

Problemumgehung:

Wenn wir uns nichts Besseres vorstellen können, können Sie entweder neue Dateien verwenden famoder gamindarauf achten, dass sie erstellt werden, und die Berechtigungen für sie korrigieren, oder sogar nur ein Skript, das regelmäßig ausgeführt wird und die Berechtigungen für alle Dateien festlegt.


Vielen Dank! OK, also habe ich ALLE umask-Einstellungen außer pam.d / common-session entfernt. Dies löste mehrere Probleme! Test 1 (SCP) und Test 4 (Neue Datei in Nautilus) funktionieren jetzt gut. Hürden kopieren jetzt eine Datei mit allen Berechtigungen in Nautilus auf den Server (Test 3 - immer noch 777 statt 664). Und das Verzeichnis Probleme. Sowohl Server als auch Client sind Ubuntu (9.10 vs 10.10), und es sind keine zusätzlichen ACLs aktiviert.

Klingt so, als würde das Kopieren mit Nautilus die Berechtigungen beibehalten cp -poder scp -pbeibehalten.
Mikel

Irgendeine Idee, wie man das ändert?

Welches Verhalten willst du? Sie können Standardberechtigungen für neue Dateien mithilfe von Standard-ACLs festlegen. Nautilus wird die Standard-ACL berücksichtigen. Siehe vanemery.com/Linux/ACL/linux-acl.html für eine Übersicht und suse.de/~agruen/acl/linux-acls/online für alle Details.
Mikel

Beachten Sie, dass Standard-ACLs keine maximalen Berechtigungen erzwingen, sondern nur diese Berechtigungen als Standard festlegen. cp -pBeim scp -pKopieren über Nautilus wird weiterhin versucht, die Berechtigungen der Kopie mit denen der zu kopierenden Datei übereinzustimmen.
Mikel

0

Dies ist nicht PAM / umask-bezogen, könnte aber für Sie nützlich sein.

Wenn Sie ein Verzeichnis festlegen , werden alle darin erstellten Dateien und Verzeichnisse automatisch seiner Gruppe zugewiesen.

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

Vielen Dank! Ich wusste nichts davon. Es löst nicht die Berechtigungsprobleme, aber es ist in der Tat nützlich!


0

ACLs sollten für Sie gut funktionieren.

Legen Sie eine Standard-ACL für alle Ordner der Gruppe fest, die dann von allen zukünftigen Dateien und Verzeichnissen übernommen wird.

So etwas setfacl -m d:g:uploaders:rwxsollte funktionieren.

So korrigieren Sie Ihre vorhandenen Berechtigungen:

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

Es sieht so aus, als ob die Standard-ACL nicht funktioniert, wenn beim Kopieren einer Datei "Erhalten" festgelegt ist. In diesem Fall kann ich nur vorschlagen, die Suchbefehle in cron auszuführen oder das Dateisystem auf Änderungen zu überwachen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.