Làm cách nào để tôi bảo sudo ghi các tệp có số ô là 0022?


11

Gần đây tôi đã nâng cấp lên Snow Leopard. Tôi đã nhận thấy rằng một số tệp được viết bởi MacPorts được cài đặt với sự cho phép sai - chúng được viết với một ô là 0077. Tôi nghĩ rằng tôi đã thu hẹp vấn đề:

  1. Các portlệnh được gọi qua sudo.
  2. .bashrcTập tin của tôi chỉ định một ô là 0077.
  3. Trên các phiên bản cũ hơn của OS X (10.5 trở xuống), sudo đã sử dụng ô của người dùng root (là 0022); tuy nhiên, bây giờ nó sử dụng ô của tôi là 0077.

Có cách nào để sudosử dụng các hành vi cũ? Ngay bây giờ, đó là loại gây phiền nhiễu bởi vì tôi phải sử dụng sudođể chạy các lệnh đơn giản như port installed, port outdatedvv

(Vấn đề được mô tả chi tiết hơn trong vé MacPorts này .)

Biên tập

Tôi phát hiện ra umasktùy chọn cho sudo và trong /etc/sudoerstôi đã thêm dòng sau:

Defaults umask=0022

Tuy nhiên, điều này không hoạt động như mong muốn, bởi vì cái ô thực sự được sử dụng sudolà sự kết hợp của mặt nạ người dùng với mặt nạ mặc định này. Để ghi đè hành vi của ô sudovà sử dụng trực tiếp mặc định (nghĩa là không kết hợp giữa người dùng và mặt nạ sudo mặc định), người ta có thể thêm vào như sau:

Defaults umask_override

Câu trả lời:


7

Mac OS X 10.7 (Lion) cuối cùng cũng có phiên bản sudo hỗ trợ umask_override. Đối với hồ sơ, điều này làm việc cho tôi:

Defaults umask_override
Defaults umask=0022

1
Bạn có thể làm cho công việc này trên cơ sở mỗi lệnh? Tôi muốn umask 0022 bình thường, nhưng sau đó gọi umask 0006 trong một trường hợp duy nhất, nhưng ở trên bỏ qua điều đó.
Michael

6

Tôi đã kết thúc việc thêm phần sau vào .bashrctập lệnh cấu hình của mình :

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

3

làm thế nào về:

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

2

Với .bashrc của bạn

if [[ $EUID -eq 0 ]]; then
   umask 0022
else
   umask 0077
fi

2
Ý tưởng tốt! Thật không may, một cuộc điều tra nhỏ cho thấy rằng Snow Leopard sudokhông thực sự (lại) nguồn .bashrc, nhưng thừa hưởng cài đặt hiện tại từ người dùng đã gọi sudo.
mipadi

Bạn sẽ phải sử dụng cách giải quyết chức năng như được liệt kê trong câu trả lời khác sau đó.
Hội trường Darren

2

Đối với bản ghi: phiên bản hiện tại của sudo dưới dạng tùy chọn mới 'umask_override', điều này sẽ ngăn không cho các ô được hợp nhất, do đó bạn cũng có thể hạ thấp ô. Đáng buồn thay, Mac OS X 10.6.6 dường như không thể thao phiên bản sudo này ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.