Bagaimana cara saya memberi tahu sudo untuk menulis file dengan umask 0022?

11

Saya baru saja meningkatkan ke Snow Leopard. Saya telah memperhatikan bahwa beberapa file yang ditulis oleh MacPorts diinstal dengan izin yang salah - mereka ditulis dengan umask 0077. Saya pikir saya telah mempersempit masalahnya:

  1. The portperintah dipanggil melalui sudo.
  2. .bashrcFile saya menentukan umask dari 0077.
  3. Pada versi OS X yang lebih lama (10,5 dan di bawah), sudo menggunakan umask dari pengguna root (yang adalah 0022); namun, sekarang menggunakan umask saya di 0077.

Apakah ada cara untuk tetap sudomenggunakan perilaku lama? Sekarang, itu semacam menjengkelkan karena saya harus menggunakan sudountuk menjalankan perintah sederhana seperti port installed, port outdated, dll

(Masalahnya dijelaskan lebih rinci dalam tiket MacPorts ini .)

Edit

Saya menemukan umaskopsi untuk sudo, dan /etc/sudoerssaya menambahkan baris berikut:

Defaults umask=0022

Namun, ini tidak berfungsi seperti yang diinginkan, karena sesungguhnya umask digunakan oleh sudoadalah persatuan dari topeng pengguna dengan topeng default ini. Untuk mengesampingkan perilaku sudoumask dan menggunakan default secara langsung (yaitu, bukan gabungan dari pengguna dan sudo mask default), seseorang dapat menambahkan yang berikut ini:

Defaults umask_override
mipadi
sumber

Jawaban:

7

Mac OS X 10.7 (Lion) akhirnya memiliki versi sudo yang mendukung umask_override. Sebagai catatan, ini bekerja untuk saya:

Defaults umask_override
Defaults umask=0022
Alec Thomas
sumber
1
Bisakah Anda membuat ini bekerja berdasarkan per perintah? Saya ingin umask 0022 secara normal, tetapi kemudian memanggil umask 0006 dalam satu keadaan, tetapi di atas mengabaikan itu.
Michael
6

Saya akhirnya menambahkan yang berikut ini ke .bashrcskrip konfigurasi saya :

# Mimic old behavior of `sudo` on OS X Snow Leopard
sudo() {
    old=$(umask)
    umask 0022
    command sudo "$@"
    umask $old
}
mipadi
sumber
3

bagaimana tentang:

sudo22() {
   local UMASK=`umask`;
   umask 22;
   sudo "$@";
   umask $UMASK
}
akira
sumber
2

Dengan .bashrc Anda

if [[ $EUID -eq 0 ]]; then
   umask 0022
else
   umask 0077
fi
Aula Darren
sumber
2
Ide bagus! Sayangnya, sedikit investigasi menunjukkan bahwa Snow Leopard sudosebenarnya bukan sumber (kembali) .bashrc, tetapi mewarisi pengaturan saat ini dari pengguna yang memanggil sudo.
mipadi
Anda harus menggunakan solusi fungsi seperti yang tercantum dalam jawaban lainnya.
Darren Hall
2

Sebagai catatan: versi sudo saat ini sebagai opsi baru 'umask_override', yang akan mencegah penggabungan umask, sehingga Anda juga dapat menurunkan umask. Sayangnya, Mac OS X 10.6.6 tampaknya tidak mendukung versi sudo ini ...

Gabriel
sumber