Bagaimana cara mendapatkan kontrol penuh atas umask / PAM / izin?


11

// Diperbarui 8 Februari - Singkat masalah:

  • Bagaimana cara umask direktori berbeda dari file?
  • Bagaimana cara umask di Nautilus copy / paste?
  • Bagaimana cara mengatur umask untuk SSHFS?

SITUASI KAMI

Beberapa orang dari perusahaan kami masuk ke server dan mengunggah file. Mereka semua harus dapat mengunggah dan menimpa file yang sama. Mereka memiliki nama pengguna yang berbeda, tetapi semuanya adalah bagian dari kelompok yang sama. Namun, ini adalah server internet, sehingga pengguna "lain" harus memiliki (secara umum) akses hanya baca saja. Jadi yang ingin saya miliki adalah izin standar ini:

file: 664
direktori: 771

Tujuan saya adalah bahwa semua pengguna tidak perlu khawatir tentang izin. Server harus dikonfigurasi sedemikian rupa sehingga izin ini berlaku untuk semua file dan direktori, yang baru dibuat, disalin, atau ditulis secara berlebihan. Hanya ketika kami membutuhkan izin khusus, kami akan mengubahnya secara manual.

Kami mengunggah file ke server dengan SFTP-ing di Nautilus, dengan memasang server menggunakan sshfs dan mengaksesnya di Nautilus seolah-olah itu adalah folder lokal, dan dengan SCP-ing di baris perintah. Itu pada dasarnya mencakup situasi kita dan apa yang ingin kita lakukan.

Sekarang, saya telah membaca banyak hal tentang fungsionalitas umask yang indah. Dari apa yang saya mengerti umask (bersama-sama dengan PAM) harus memungkinkan saya untuk melakukan apa yang saya inginkan: menetapkan izin standar untuk file dan direktori baru. Namun, setelah berjam-jam membaca dan mencoba-dan-kesalahan, saya masih tidak mendapatkan ini berfungsi. Saya mendapatkan banyak hasil yang tidak terduga. Saya benar-benar ingin mendapatkan pemahaman yang kuat tentang umask dan memiliki banyak pertanyaan yang belum terjawab. Saya akan memposting pertanyaan-pertanyaan ini di bawah, bersama dengan temuan saya dan penjelasan tentang cobaan saya yang mengarah ke pertanyaan ini. Mengingat banyak hal yang tampaknya salah, saya pikir saya melakukan beberapa hal yang salah. Maka dari itu, ada banyak pertanyaan.

CATATAN: Saya menggunakan Ubuntu 9.10 dan karena itu tidak dapat mengubah sshd_config untuk mengatur umask untuk server SFTP. Menginstal SSH OpenSSH_5.1p1 Debian-6ubuntu2 <diperlukan OpenSSH 5.4p1. Jadi, inilah pertanyaannya.

1. APAKAH SAYA PERLU MENGEMBALIKAN PAM CHANG UNTUK MENGAMBIL EFEK?

Mari kita mulai dengan ini. Ada begitu banyak file yang terlibat dan saya tidak dapat mencari tahu apa yang mempengaruhi dan apa yang tidak mempengaruhi hal-hal, juga karena saya tidak tahu apakah saya harus me-restart seluruh sistem agar perubahan PAM berlaku. Saya melakukannya setelah tidak melihat hasil yang diharapkan, tetapi apakah ini benar-benar diperlukan? Atau bisakah saya keluar dari server dan masuk kembali, dan apakah kebijakan PAM baru harus efektif? Atau adakah program 'PAM' untuk dimuat ulang?

2. APAKAH ADA SATU FILE TUNGGAL UNTUK MENGUBAH BAHWA MEMPENGARUHI SEMUA PENGGUNA UNTUK SEMUA SESI?

Jadi saya akhirnya mengubah file BANYAK, karena saya membaca BANYAK hal yang berbeda. Saya akhirnya mengatur umask dalam file berikut:

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

Saya ingin perubahan ini berlaku untuk semua pengguna, jadi semacam perubahan di seluruh sistem akan menjadi yang terbaik. Bisakah itu tercapai?

3. SETELAH SEMUA, HAL UMAS INI, APAKAH BEKERJA?

Jadi setelah mengubah umask ke 0002 di setiap tempat yang memungkinkan, saya menjalankan tes.

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

UJI 1:

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

Mari kita periksa izin:

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

UPDATE: diperbaiki dengan HANYA mengatur umask di pam.d / sesi umum (lihat komentar)

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

UJI 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 /

Salin dan tempel file baru dari klien ke server (777 pada klien)

UJI 3:

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

Buat file baru melalui Nautilus. Periksa izin file di terminal:

UJI 4:

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

Maksudku ... Apa yang baru saja terjadi di sini ?! Kita harus mendapatkan 644 setiap saat. Alih-alih, saya mendapatkan 711, 777, 600, dan kemudian sekali 644. Dan 644 hanya dicapai saat membuat file kosong baru melalui SSH, yang merupakan skenario paling tidak mungkin.

Jadi saya bertanya, apakah umask / pam berhasil?

UPDATE: tes tetap 4 dengan HANYA mengatur umask di pam.d / sesi umum (lihat komentar)

4. BEGITU APA ARTINYA UNTUK UMASK SSHFS?

Terkadang kami memasang server secara lokal, menggunakan sshfs. Sangat berguna. Tetapi sekali lagi, kami memiliki masalah izin.

Inilah cara kami memasang:

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

CATATAN: kami menggunakan umask = 113 karena rupanya, sshfs dimulai dari 777 bukannya 666, jadi dengan 113 kita mendapatkan 664 yang merupakan izin file yang diinginkan.

Tapi yang sekarang terjadi adalah kita melihat semua file dan direktori seolah-olah mereka 664. Kita telusuri di Nautilus ke / mnt dan:

  • Klik kanan -> File Baru (file baru) --- TEST 5
  • Klik kanan -> Folder Baru (folder baru) --- TEST 6
  • Salin dan tempel file 777 dari klien lokal kami --- TEST 7

Jadi mari kita periksa pada baris perintah:

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)

Tapi hei, mari kita periksa folder yang sama ini di sisi server:

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)

Apa?! Izin file NYATA sangat berbeda dari yang kita lihat di Nautilus. Jadi apakah umask ini di sshfs hanya membuat 'filter' yang menunjukkan izin file yang tidak nyata? Dan saya mencoba untuk membuka file dari pengguna lain tetapi grup yang sama yang memiliki 600 izin nyata tetapi 644 izin 'palsu', dan saya masih tidak bisa membaca ini, jadi apa gunanya filter ini ??

5. UMASK ADALAH SEMUA TENTANG FILES. TAPI APA TENTANG DIREKTUR?

Dari pengujian saya, saya dapat melihat bahwa umask yang sedang diterapkan juga memengaruhi izin direktori. Namun, saya ingin file saya menjadi 664 (002) dan direktori saya menjadi 771 (006). Jadi mungkinkah memiliki umask yang berbeda untuk direktori?

6. MUNGKIN UMASK / PAM BENAR-BENAR KEREN, TETAPI UBUNTU HANYA BUGGI?

Di satu sisi, saya telah membaca topik orang yang telah sukses dengan PAM / UMASK dan Ubuntu. Di sisi lain, saya telah menemukan banyak bug yang lebih tua dan lebih baru mengenai umask / PAM / fuse di Ubuntu:

Jadi saya tidak tahu harus percaya apa lagi. Haruskah saya menyerah? Apakah ACL akan menyelesaikan semua masalah saya? Atau apakah saya memiliki masalah lagi menggunakan Ubuntu?

Satu kata peringatan dengan cadangan menggunakan tar. Distribusi Red Hat / Centos mendukung ACL dalam program tar tetapi Ubuntu tidak mendukung ACL saat membuat cadangan. Ini berarti bahwa semua ACL akan hilang ketika Anda membuat cadangan.

Saya sangat ingin meningkatkan ke Ubuntu 10,04 jika itu akan menyelesaikan masalah saya juga, tetapi pertama-tama saya ingin memahami apa yang terjadi.

Jawaban:


3

Banyak hal bisa terjadi di sini.

Pikiran pertama:

  • ya, perubahan pam.d langsung berlaku
  • /etc/pam.d/common-session adalah tempat terbaik untuk menetapkan default umask
  • pam.d umask apa pun akan ditimpa oleh entri apa pun .bashrc,
    tetapi .bashrchanya akan dibaca dalam keadaan tertentu (interaktif, shell non-login)
  • testfile (711) sangat aneh
    • bagaimana sudah /hometerpasang, dan apakah Anda menggunakan ACL?
      (mis. apa yang dilakukan ls -ld /homedan getfacl /homedicetak?)
    • memang testfilesudah ada sebelum Anda menyalin, karena scptidak akan mengubah izin pada file yang sudah ada (kecuali Anda menggunakan -pbendera)
  • Nautilus diketahui membuat file dengan cara yang berbeda, tidak yakin mengapa, atau apa aturannya
  • umask=0113 mungkin akan menyebabkan masalah
  • apakah server dan klien menjalankan sistem operasi yang sama?
    misalnya, jika klien memiliki ACL diaktifkan, atau Cygwin, perilaku dapat berbeda
  • cara terbaik untuk memaksakan izin waras adalah dengan menggunakan ACL default, tepat karena, seperti yang Anda temukan, umaskdapat ditimpa oleh pengguna di .bashrcdan .bash_profile.

Memperbarui:

  • umask=0113 untuk sshfs salah.
    1. Coba pasang tanpa menentukan a umask
    2. Buat file baru di dalam mount point menggunakan touch.
    3. Anda harus melihatnya hanya mendapatkan misalnya -rw-r--r--, tanpa xbit
    4. Dengan menutupi xbit, Anda mungkin memecahkan direktori
      dan kompiler mungkin tidak dapat membuat file yang dapat dieksekusi dengan benar

Penanganan masalah:

Jika kami tidak dapat memikirkan hal lain yang lebih baik, Anda dapat menggunakan famatau gaminmenonton file baru yang dibuat dan memperbaikinya, atau bahkan hanya skrip yang berjalan secara berkala dan menetapkan izin pada semua file.


Terima kasih! OK, jadi saya menghapus SEMUA pengaturan umask kecuali untuk sesi pam.d / umum. Ini menyelesaikan beberapa masalah! Uji 1 (SCP) dan Uji 4 (File baru di Nautilus) sekarang berfungsi dengan baik. Rintangan sekarang menyalin file dengan izin apa pun di Nautilus ke server (Uji 3 - masih 777 bukannya 664). Dan masalah direktori. Baik server dan klien adalah Ubuntu (9,10 vs 10,10), dan tidak ada ACL tambahan yang diaktifkan.

Kedengarannya seperti menyalin dengan Nautilus adalah mempertahankan izin seperti cp -patau scp -pakan.
Mikel

Adakah yang tahu bagaimana cara mengubahnya?

Perilaku apa yang Anda inginkan? Anda dapat mengatur izin default untuk file baru dengan menggunakan ACL default. Nautilus akan menghormati ACL default. Lihat vanemery.com/Linux/ACL/linux-acl.html untuk ikhtisar dan suse.de/ ~ agruen / acl / linux - acls / online untuk semua detail.
Mikel

Perhatikan bahwa ACL default tidak menegakkan set izin maksimum, mereka hanya menjadikan izin tersebut sebagai default. cp -p,, scp -pdan menyalin melalui Nautilus masih akan mencoba membuat izin salinan sama dengan file yang sedang disalin.
Mikel

0

Ini bukan terkait PAM / umask, tetapi ini bisa bermanfaat bagi Anda.

Jika Anda menetapkan direktori, maka semua file dan direktori yang dibuat di dalamnya secara otomatis ditetapkan ke grupnya.

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

Terima kasih! Saya tidak tahu tentang ini. Itu tidak menyelesaikan masalah izin, tetapi memang bermanfaat!


0

ACL harus bekerja dengan baik untuk Anda.

Tetapkan ACL default pada semua folder untuk grup, yang kemudian akan diwarisi oleh semua file dan direktori di masa depan.

Sesuatu seperti setfacl -m d:g:uploaders:rwxseharusnya bekerja.

Untuk memperbaiki izin Anda yang ada:

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

Sepertinya jika "menyimpan" diatur ketika file disalin, ACL default tidak berfungsi. Dalam hal ini, saya hanya dapat menyarankan menjalankan perintah find di cron atau memonitor filesystem untuk perubahan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.