Bisakah saya mengganti umask saya menggunakan ACL untuk membuat semua file yang dibuat di dunia direktori dapat dibaca?

11

Asumsikan umask saya adalah 0077.

Saya memiliki direktori,, fooyang ingin saya peroleh izin khusus untuknya. Semua file yang saya buat fooharus dapat dibaca dunia, dan semua direktori harus dapat dibaca dan dieksekusi.

Saat ini, jika saya membuat file, itu akan menjadi 0600, dan sebuah direktori akan menjadi 0700:

$ cd foo/
$ touch file
$ mkdir directory
$ ls -l
drwx------ 2 nfm nfm 4096 2012-01-12 16:16 directory
-rw------- 1 nfm nfm    0 2012-01-12 16:15 file

Saya ingin file menjadi 0644, dan direktori 0755, terlepas dari umask saya:

drwxr-xr-x 2 nfm nfm 4096 2012-01-12 16:16 directory
-rw-r--r-- 1 nfm nfm    0 2012-01-12 16:15 file

Bagaimana saya bisa mencapai ini?

stickmangumby
sumber
Anda tidak mencoba googling "umask per direktori", bukan? Jika saya memiliki izin, saya akan downvote Anda untuk ini, karena hit ketiga adalah bash hack untuk melakukan persis apa yang Anda inginkan (diberikan, hanya untuk ANDA, bukan untuk pengguna lain.)
Brett Dikeman
3
@ Beeeeee aku memang melihat itu. Saya tertarik dengan cara lain untuk melakukannya, semoga menggunakan ACL. Saya lebih suka tidak memeriksa / mengganti umask saya di setiap cd, atau mengganti fungsi bash.
stickmangumby

Jawaban:

14

Ya, ACL dapat melakukan ini.

  1. Pastikan sistem file Anda sudah terpasang dengan acl. Untuk memeriksanya, ketik mount. Anda dapat melihat 'acl' terdaftar di antara izin lainnya, misalnya:

    /dev/sda1 on / type ext4 (rw,errors=remount-ro,acl)
    

    Jika tidak di-mount dengan acl, buka / etc / fstab, dan tambahkan 'acl' ke daftar opsi:

    # /etc/fstab: static file system information.
    #
    # <file system> <mount point>   <type>   <options>       <dump>  <pass>
    /dev/sda1       /          ext3     noatime,errors=remount-ro,acl 0       1
    

    Sekarang, pasang kembali sistem file yang sedang berjalan dengan opsi baru:

    mount -v -o remount /
    
  2. Instal utilitas acl. Di ubuntu / debian, ini adalah:

    sudo apt-get install acl
    
  3. Teman baru Anda adalah setfacldan getfacl. Gunakan setfacluntuk mengubah acl default untuk direktori:

    setfacl -d -m o:r foo
    

    -dset default, -mubah acl, dan o:rberi "other" hak untuk membaca. Pengaturan default pada direktori kira-kira setara dengan pengaturan setgid pada direktori, tetapi alih-alih file yang baru dibuat mewarisi grup, mereka mewarisi acl. Bersama-sama, setgid dan acl dapat menjadi kuat, karena Anda dapat memberikan izin default ke grup, dan mendapatkan file yang baru dibuat milik grup itu, untuk umask per-direktori berbasis grup yang efektif.

  4. Periksa pekerjaan Anda: ls -lsekarang seharusnya menunjukkan "+" tambahan yang menunjukkan keberadaan acl di samping izin file standar.

    % ls -la foo/
    drwxr--r--+
    

    Anda bisa mendapatkan info detail tentang acl menggunakan getfacl.

    % getfacl foo
    # file: foo
    # owner: you
    # group: you
    user::rwx
    group::r--
    other::r--
    default:user::rwx
    default:group::---
    default:other::r--
    
pengguna67641
sumber
1
Ini sepertinya tidak bekerja untuk saya. setfacldan getfaclmengembalikan hasil yang diharapkan, tetapi hanya direktori (bukan file) dalam direktori induk mewarisi acl, dan bahkan kemudian umask saya lebih diutamakan daripada default (jika mereka tidak dapat dibaca dunia, default:other::r--jangan biarkan pengguna lain akses mereka). Apakah saya melewatkan sesuatu yang jelas?
stickmangumby
Satu hal yang saya temukan (mungkin ini masalahnya): facl tampaknya menggunakan yang pertama dari (pengguna, grup, lainnya) yang cocok dengan pengguna saat ini. Yaitu, jika Anda milik grup untuk file, acl untuk grup akan diproses, bukan acl untuk yang lain. Acl masih harus diwarisi jika Anda menerapkan direktori dengan -d, meskipun ....
user67641
Hm, coba saja lagi dan semuanya bekerja dengan baik. Maaf, tidak yakin apa yang saya lakukan salah pertama kali! Terima kasih :)
stickmangumby
2

Anda juga bisa memaksa umask untuk direktori dengan menyetel properti ACL mask seperti ini:

setfacl -d -m mask:07 .
Saustrup
sumber
-4

Cukup instal OnDir dan konfigurasikan dengan benar sesuai dengan kebutuhan Anda. Saya telah menjawab masalah serupa yang ada di sini .

bintut
sumber
Pertanyaannya tidak menyebutkan apa pun tentang melintasi direktori dengan terminal, untuk itulah OnDir.
Yarin