Làm thế nào tôi có thể buộc sudo luôn yêu cầu mật khẩu sau khi thức dậy sau khi bị đình chỉ?


15

Giả sử tôi thực thi một lệnh với sudo, sau đó nếu tôi sử dụng sudotrong vòng 15/5 phút tiếp theo (không chắc là nó nhớ tôi trong bao lâu) thì nó sẽ không nhắc tôi nhập mật khẩu. Nó sẽ chỉ nhắc tôi một lần nữa nếu tôi không sử dụng nó ít nhất là lâu như vậy.

Tuy nhiên, nếu tôi tạm dừng máy của mình, đánh thức nó và đăng nhập trước khi khoảng thời gian đó kết thúc, tôi có thể thực hiện sudolại lệnh và nó sẽ không hỏi tôi mật khẩu vì tôi không cho phép số tiền nhất định của thời gian

Vì vậy, làm thế nào tôi có thể làm cho nó để cho dù tôi đã sử dụng bao lâu sudo, nó chắc chắn sẽ nhắc tôi nhập mật khẩu sau khi tạm ngưng một lần tôi đã đăng nhập lại, ngay cả khi tôi vẫn ở trong khung thời gian đó 15/5 phút chưa sử dụng sudochưa qua?

Điều có khả năng nhất sẽ hoạt động là làm cho nó thực thi một lệnh để loại bỏ tất cả các bộ đệm nhận dạng sudokhi thực hiện một lệnh nào đó được thực thi khi thức dậy.

Tôi đang chạy Ubuntu Gnome 15.10 với Gnome 3.18.


1
Câu hỏi hay, nhưng tại sao bạn bị hoang tưởng? bởi vì nếu người khác không biết mật khẩu đăng nhập của bạn không thể ngừng sử dụngsudo
Edward Torvalds

Nếu bạn vừa thoát khỏi cửa sổ terminal đó, bạn sẽ cần nhập lại mật khẩu của mình khi bạn mở một cửa sổ terminal mới bất kể bạn làm nó nhanh như thế nào. Nếu bạn đang chạy một cái gì đó trong cửa sổ terminal, hãy thêm `; exit` và cửa sổ sẽ đóng khi lệnh hoàn thành.
Marc

@Marc: Tôi biết, nhưng không phải lúc nào cũng thuận tiện để thoát, cũng không phải tự sudohỏi bạn lần sau. Một giải pháp tự động sẽ được ưa thích.

@edwardtorvalds: Chà, tôi có thể đăng nhập lại, rồi biến mất (không phải tôi làm điều đó rất thường xuyên), và sau đó khi ai đó đến sẽ rất tệ nếu họ chỉ có thể sử dụng sudo. Tôi biết rằng nghe có vẻ hơi lạ đối với máy tính của riêng tôi, nhưng tôi có thể đã thực hiện một số công việc bảo trì trên một máy tính Ubuntu khác và sau đó khi tôi đăng nhập lại người dùng, có thể sẽ bất tiện khi đóng Terminal, nhưng tôi không muốn họ có sudoquyền.

1
Bổ sung `; exit` (bảy tổ hợp phím) có vẻ khá dễ dàng đối với tôi. Những loại bảo trì nào bạn bỏ đi, bởi vì tôi không thể nghĩ nhiều đến việc tôi sẽ có cơ hội đình chỉ ở giữa.
Marc

Câu trả lời:


19

Từ man sudo:

     -K, --remove-timestamp
                 Similar to the -k option, except that it removes the user's
                 cached credentials entirely and may not be used in conjunc‐
                 tion with a command or other option.  This option does not
                 require a password.  Not all security policies support cre‐
                 dential caching.

Vì vậy, những gì bạn muốn là người dùng của bạn để chạy sudo -Kmỗi khi hệ thống đình chỉ.

Ubuntu 15.04+ (hệ thống)

Điều này có thể được thực hiện trên Ubuntu 15.04+ bằng cách đặt một tập lệnh vào /lib/systemd/system-sleep/.

  1. Chạy sudo nano /lib/systemd/system-sleep/disable_sudo_user(thay thế userbằng tên người dùng của bạn để thuận tiện);
  2. Dán vào tập lệnh sau (thay thế userbằng tên người dùng của bạn):
#!/bin/sh
case $1/$2 in
    pre/suspend)
        su user -c 'sudo -K'
        ;;
esac
  1. Hit CTRL+ O,ENTERCTRL+ X;

  2. Chạy sudo chmod o+x /lib/systemd/system-sleep/disable_sudo_user;


Để kích hoạt tính năng này cho chế độ ngủ đông / ngủ hỗn hợp, thay vào đó hãy sử dụng tập lệnh này:

#!/bin/sh
case $1 in
    pre)
        su user -c 'sudo -K'
        ;;
esac

Các phiên bản Ubuntu trước (Upstart)

Điều này có thể được thực hiện trên các phiên bản Ubuntu trước bằng cách đặt một tập lệnh vào /etc/pm/sleep.d/ .

  1. Chạy sudo nano /etc/pm/sleep.d/disable_sudo_user(thay thế userbằng tên người dùng của bạn để thuận tiện);
  2. Dán vào tập lệnh sau (thay thế userbằng tên người dùng của bạn):
#!/bin/sh
case $1 in
    suspend)
        su user -c 'sudo -K'
        ;;
esac
  1. Hit CTRL+ O, ENTERCTRL+X;

  2. Chạy sudo chmod o+x /etc/pm/sleep.d/disable_sudo_user;


Để kích hoạt tính năng này cho chế độ ngủ đông, thay vào đó hãy sử dụng tập lệnh này:

#!/bin/sh
case $1 in
    suspend|hybernate)
        su user -c 'sudo -K'
        ;;
esac

2
Nó sẽ vui hơn nếu bạn sử dụng sudo -u user sudo -k. : D
muru

@muru Nghĩ như vậy nhưng vì một số lý do, nó trông hơi ngớ ngẩn: D
kos

Xin lỗi, đã không viết bất kỳ mã shell nào trong một thời gian, chính xác thì nó pre/*)làm gì? :)

@ParanoidPanda Đã hết, xem cập nhật. Xem ở đây (Mô tả, đoạn thứ hai): systemd-suspend.servicegọi các kịch bản /lib/systemd/system-sleep/truyền hai đối số; $1nó hoặc precho các sự kiện trước khi ngủ hoặc postcho các sự kiện sau khi ngủ, và $2nó hoặc suspend, hybernatehoặc hybrid-sleep; pre/*có nghĩa là để bắt tất cả các kết hợp pre/và bất kỳ suspend, hybernatehoặc hybrid-sleep, nhưng vì bạn đã hỏi rõ ràng về việc đình chỉ nên tôi đã đổi nó thành pre/suspend.
kos

1
Đáng lưu ý là bạn cũng có thể làm điều này trong Ubuntu cũ, đó chỉ là cơ chế khác biệt, tức là sử dụng /etc/pm/sleep.dtập lệnh.
hobbs

3

Chỉ khi bạn là hoang tưởng! Bạn có thể sử dụng -Ktùy chọn của sudo.

-K, --reset-timestamp
       When used without a command, invalidates the user's cached credentials.  
       In other words, the next time sudo is run a password will be required.  
       This option does not require a password and was added to allow a user to revoke
       sudo permissions from a .logout file.

       When used in conjunction with a command or an option that may require a 
       password, this option will cause sudo to ignore the user's cached credentials.  
       As a result, sudo will prompt for a password (if one is required by the 
       security policy) and will not update the user's cached credentials.

       Not all security policies support credential caching.

ví dụ,

sudo -K <command>

Hoặc bạn có thể để máy tính của mình trong một hộp kim loại được bảo vệ bởi robot :)


Hmm ... Không chính xác như tôi muốn, có cách nào để tự động hóa việc này không? Bởi vì điều này cho thấy rằng tôi chắc chắn biết rằng tôi sắp tạm ngưng, nếu một lệnh đang chạy sudovà tôi cần phải đi đâu đó, vì vậy tôi tạm dừng máy, sau đó khi tôi quay lại và bỏ máy, tôi sẽ phải chờ cho lệnh hoặc thời gian hoàn thành trước khi tôi có thể làm cho nó hỏi lại mật khẩu lần sau? Nó sẽ hữu ích hơn nhiều vì nhiều lý do (bao gồm cả việc tôi đang chạy nó với GUI trên một runlevel khác, nó không yêu cầu mật khẩu sau khi tạm dừng) để nó được tự động.

Ngoài ra, tôi nghĩ rằng bạn có ý nghĩa -Kvà không -k.

Chà, dù sao nó cũng có thể hữu ích hơn.

1

Một phương pháp khác

Nhập 'sudo visudo'

Đi đến dòng có nội dung: 'Mặc định env_reset'

và đổi thành:

'Mặc định env_reset, timestamp_timeout = 0

Sau đó lưu tập tin.

Bằng cách đặt thời gian chờ thành 0, hệ thống sẽ nhắc bạn nhập mật khẩu mỗi lần.


Trong khi điều này không (về mặt kỹ thuật nói) thực hiện những gì OP được yêu cầu, đó là quá mức cần thiết đối với hầu hết các tình huống. Điều đó nói rằng, nếu bạn thực sự hoang tưởng (hoặc chỉ muốn thêm một bước để tạm dừng và suy ngẫm mỗi khi bạn làm điều gì đó có khả năng nguy hiểm), đây có thể là một sự thay thế khả thi.
một CVn
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.