Làm thế nào để thực hiện / sbin / shutdown, / sbin / restart, v.v. yêu cầu sudo một lần nữa trong 16.04?


18

Vì lý do nào, chúng tôi không còn cần phải root (hoặc sử dụng sudo) để chạy /sbin/shutdown, /sbin/rebootv.v.

Điều này có vẻ là bởi vì những thực thi đó bây giờ là các liên kết tượng trưng để /bin/systemctlxử lý mọi thứ như người dùng bình thường.

Tuy nhiên, nếu tôi muốn shutdownrebootyêu cầu xác thực root lại thì sao? Làm thế nào tôi có thể đạt được điều này?


3
Tôi đoán quy tắc polkit. Sửa đổi Askubfox.com/a/570969/158442 theo nhu cầu (sử dụng pkaction | grep login1cho các quy tắc quan tâm khác)
muru

3
(một ví dụ về các quy tắc yêu cầu đặc quyền của quản trị viên: askubfox.com/a/744094/158442 )
muru

1
Đây không phải là chỉ khi bạn là người duy nhất đăng nhập. Nếu có bất kỳ ai khác đăng nhập vào hệ thống, bạn sẽ được yêu cầu nhập mật khẩu gốc.
ognjen

Đó có thể không phải là câu trả lời mà bạn đang mong đợi, nhưng một hành vi tương tự có thể do một người dùng quản trị khác đã chỉnh sửa '/ etc / sudoers' của bạn. Nếu đây là nguyên nhân gây ra sự cố của bạn thì bạn có thể thay đổi lại bằng cách nhập sudo visudovà kiểm tra xem có dòng nào có đường dẫn đến các tệp thực thi này không.
Damien

Câu trả lời:


5

Systemd không thực sự xử lý shutdown, rebootvà các lệnh khác, và các đặc quyền mặc định được gán là dễ dãi. Để thay đổi điều này, bạn cần tạo quy tắc Polkit. Tạo một .pklatệp trong /etc/polkit-1/localauthority/50-local.d(giả sử confirm-shutdown.pkla) có chứa:

[Confirm shutdown]
Identity=unix-user:*
Action=org.freedesktop.login1.*
ResultActive=auth_admin_keep

Tắt máy khác nhau, khởi động lại, vv lệnh là, trong điều kiện Polkit, hành động trong org.freedesktop.login1, ví dụ, org.freedesktop.login1.power-off, org.freedesktop.login1.reboot, vv Vấn đề cụ thể ở đây là cấu hình mặc định, mà là ở /usr/share/polkit-1/actions/org.freedesktop.login1.policy:

<action id="org.freedesktop.login1.power-off">
        <description>Power off the system</description>
        ...
        <defaults>
                <allow_any>auth_admin_keep</allow_any>
                <allow_inactive>auth_admin_keep</allow_inactive>
                <allow_active>yes</allow_active>
        </defaults>

Lưu ý rằng nó cho phép người dùng hoạt động tắt nguồn, khởi động lại, v.v.


0

Bạn có thể sử dụng chmodlệnh.

  • Nếu bạn muốn cấp quyền truy cập chỉ root, bạn có thể viết:

    chmod 700 directory/to/the/file
    
  • Nếu bạn muốn cung cấp permisson cho root và nhóm sudo thì bạn có thể viết:

    chmod 770 directory/to/the/file
    
  • Nếu bạn muốn thay đổi nhóm tệp từ sudo sang một tệp khác (như người dùng hoặc quản trị viên), bạn cần nhập:

    chown owner:group directory/to/the/file
    
  • Nếu bạn muốn hoàn nguyên lại, hãy chạy:

    chown root:sudo filedirectory 
    

Lưu ý : bạn có thể phải sử dụng sudocác lệnh này hoặc đã đăng nhập vào tài khoản root


Lưu ý rằng việc cố gắng thay đổi quyền của liên kết sẽ thay đổi quyền của mục tiêu (trong trường hợp này /bin/systemctl), vì vậy việc chạy chmod / sbin / shutdown sẽ ảnh hưởng đến tất cả các liên kết trỏ đến /bin/systemctlvì quyền bin/systemctlsẽ được thay đổi như được xác nhận bởi lệnh $ ll /bin/systemctl -rwx ------ 1 root 659848 ngày 18 tháng 1 16:04 / bin / systemctl *
Elder Geek

Nếu bạn cần thay đổi lại, các quyền mặc định là-rwxr-xr-x 1 root root 659848 Jan 18 16:04 /bin/systemctl
Elder Geek

0

việc thay đổi quyền của liên kết tượng trưng trên hệ thống Linux sẽ không thay đổi quyền của liên kết mà thay vào đó là tệp mà nó trỏ tới (ít nhất là trong Ubuntu). Tôi sẽ nghĩ cách an toàn nhất để thực hiện điều này sẽ là để loại bỏ các liên kết, và tạo lại nó với các yêu cầu umask để có được những kết quả mà bạn mong muốn.

Một bài viết liên quan có thể được tìm thấy ở đây


-1

Bạn có thể tạo một tập lệnh kiểm tra xem người dùng có chạy nó với quyền root hay không.
Sau đó, nó sẽ chạy lệnh systemctl hoặc trả về lỗi.

#! / bin / bash
if ["$ (whoami)"! = "root"]; sau đó
    echo "Xin lỗi, bạn không root."
    thoát 1
khác
    (lệnh tắt hệ thống)
fi

Nguồn


4
Điều gì để ngăn người dùng không root không bỏ qua tập lệnh này?
Robie Basak

-1

Cố gắng thay đổi quyền của nó trong thiết bị đầu cuối. Bạn có thể làm cho nó có thể được thực thi chỉ bởi một nhóm nhất định, chẳng hạn như bánh xe hoặc quản trị viên. Đáng buồn thay (hoặc có lẽ may mắn thay), một tệp chỉ có thể có quyền sở hữu một nhóm nên đơn giản là nó không hoạt động. Hãy thử "sudo chown root: wheel / sbin / shutdown" và sau đó "sudo chmod g + x / sbin / shutdown". Điều này sẽ làm cho tập tin thực thi chỉ bằng root và quản trị viên (shudders) và sudoers sẽ được yêu cầu nhập mật khẩu của họ.


2
Nhóm "bánh xe" là một phần của Arch Linux và có thể các bản phân phối khác, nhưng chắc chắn không có trên Ubuntu btw.
Chỉ huy Byte

2
Điều này không hiệu quả. Một người dùng chỉ có thể tải xuống tệp nhị phân systemctl từ một nơi khác và chạy nó thay thế.
Robie Basak

@Robie, bạn có thể làm điều đó với bất kỳ giải pháp nào. Bạn có thể giữ nút nguồn. Giải pháp của tôi hoạt động cho những gì anh ấy yêu cầu.
chevydog
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.