Làm thế nào để làm cho quyền siêu người dùng kéo dài hơn sử dụng sudo?


25

Có cách nào để tôi có thể thực hiện sudolệnh cho tôi quyền trong một khoảng thời gian dài hơn thời gian mặc định của nó không?

Nó có thể là một nỗi đau khi phải tiếp tục nhập sudomật khẩu, khi yêu cầu cài đặt nhiều gói, vì vậy sẽ rất tốt nếu tồn tại một lệnh hoặc cấu hình có thể được thực hiện để ảnh hưởng đến thời gian sử dụng.


3
Vì vậy, không ai sử dụng sunữa? Không bao giờ?
Mr Lister

9
@MrLister sudo -ivà bạn có một cái vỏ gốc, sẵn sàng cho bất cứ ai giúp đỡ mình đứng vững trong thời gian nhiều như một ...
Rmano

1
@DevRobot, bạn có nguồn nào cho việc đó không? Tôi thấy thật khó tin rằng Canonical sẽ loại bỏ một lệnh quan trọng như vậy và tôi không thể tìm thấy bất cứ điều gì về nó trên google.
DJMcMayhem

9
@DevRobot sucần root để có mật khẩu. Theo mặc định, người dùng root của Ubuntu không có mật khẩu. Do đó, bạn không suthể root. suđang làm việc như dự định ở đây. Hãy thử với bất kỳ người dùng nào có mật khẩu.
muru

3
@muru sudo suhoạt động tốt, mặc dù một chút lặp đi lặp lại.
coteyr

Câu trả lời:


27

Hành vi của sudođược cấu hình trong /etc/sudoerstập tin. Có timestamp_timeouttùy chọn chịu trách nhiệm cho người dùng lại mật khẩu sau một khoảng thời gian cụ thể.

Từ người đàn ông sudoers

timestamp_timeout
                       Number of minutes that can elapse before sudo will ask
                       for a passwd again.  The timeout may include a frac‐
                       tional component if minute granularity is insufficient,
                       for example 2.5.  The default is 15.  Set this to 0 to
                       always prompt for a password.  If set to a value less
                       than 0 the user's time stamp will never expire.

Để thay đổi cài đặt đó, hãy làm như sau:

  1. Trong thiết bị đầu cuối chạy sudo visudo. visudođược sử dụng cụ thể để chỉnh sửa /etc/sudoerstập tin và theo mặc định sử dụng nanotrình soạn thảo văn bản.
  2. Tìm các dòng bắt đầu bằng Defaults. Thêm dòng sau

    Defaults        timestamp_timeout=x
    

    Trong đó x là số phút bạn muốn giữa các lần lặp lại

  3. Lưu tệp với Ctrl+O


12

Từ man sudoers:

timestamp_timeout
                       Number of minutes that can elapse before sudo will ask
                       for a passwd again.  The timeout may include a frac‐
                       tional component if minute granularity is insufficient,
                       for example 2.5.  The default is 15.  Set this to 0 to
                       always prompt for a password.  If set to a value less
                       than 0 the user's time stamp will never expire.  This
                       can be used to allow users to create or delete their
                       own time stamps via “sudo -v” and “sudo -k” respec‐
                       tively.

Như bạn có thể thấy, thời gian chờ mặc định sudolà 15 phút. Bạn có thể thay đổi giá trị này trong /etc/sudoers.

Bạn không trực tiếp chỉnh sửa /etc/sudoers, thay vào đó sử dụng visudođể làm điều đó.

Từ man visudo:

     visudo edits the sudoers file in a safe fashion, analogous to vipw(8).
     visudo locks the sudoers file against multiple simultaneous edits, pro‐
     vides basic sanity checks, and checks for parse errors.  If the sudoers
     file is currently being edited you will receive a message to try again
     later.

Vì vậy, nhập sudo visudomột thiết bị đầu cuối, sẽ mở /etc/sudoerstệp trong nanotrình soạn thảo văn bản.

Tìm dòng này:

Defaults    env_reset

Và thêm vào đó X là thời gian bạn muốn đặt trong vài phút.timestamp_timeout=X

Vì vậy, như một ví dụ:

Defaults    env_reset,timestamp_timeout=5

Nếu bạn chỉ định 0, bạn sẽ luôn được hỏi mật khẩu. Nếu bạn chỉ định một giá trị âm, thời gian chờ sẽ không bao giờ hết hạn.

Sau khi hoàn thành, lưu và thoát.

Xem RootSudoTimeout


Đánh bại tôi sau 29 giây =)
Sergiy Kolodyazhnyy

1
Bạn tốt -_- b Tôi đang ở trên máy tính xách tay. . . có lẽ tôi cần thêm cà phê
Sergiy Kolodyazhnyy

Bạn cũng có thể đặt ví dụ -1 thành thời gian chờ - nếu bạn không bao giờ muốn nhắc nhở mật khẩu để kích hoạt.
Michał ywiecki

8

Thử đi .

  1. Chạy lệnh sau trong Terminal:

    sudo visudo
    
  2. Cuộn xuống dòng trông như thế này:

    Defaults        env_reset
    
  3. Thay đổi nó thành ví dụ:

    Defaults        env_reset,timestamp_timeout=30
    

Thay đổi 30 thành thời gian, tính bằng phút, mà bạn muốn nó chờ trước khi hết giờ. Bạn cũng có thể thay đổi nó thành 0 nếu bạn muốn một dấu nhắc mật khẩu mỗi khi bạn chạy sudo hoặc -1 nếu bạn không bao giờ muốn một dấu nhắc mật khẩu Nhấn Ctrl+ Xđể hoàn tất chỉnh sửa, Y để lưu các thay đổi và Enter để thoát.

Đây là nguồn: http://lifehacker.com/make-sudo-simes-last-longer-in-linux-1221545774


5

Bạn có thể chỉnh sửa /etc/sudoerstệp (với sudo visudo: cẩn thận) và thêm một dòng như

Defaults:myname timestamp_timeout=15 

mynameid người dùng của bạn ở đâu Giá trị thời gian chờ tính bằng phút. Bạn có thể sử dụng giá trị -1 để không bao giờ hết hạn, sau đó nhập sudo -kđể hủy xác thực, do đó bạn cần nhập lại mật khẩu.

Hoặc bạn có thể thêm một mục để nói một lệnh cụ thể hoàn toàn không cần mật khẩu.


1
+1 để đề cập đến sudo -kviệc vô hiệu hóa thủ công xác thực được lưu trữ.
Chỉ huy Byte

5

Tôi không thể tin rằng lệnh đơn giản nhất:

sudo -s

không được đề cập ở đây. Công tắc "-s" cung cấp cho bạn bảng điều khiển có quyền root, tồn tại cho đến khi bạn thoát nó. Không cần phải loay hoay với các cài đặt mặc định.


1
Tại sao điều này được bỏ phiếu?
coteyr

3
Tôi đã không downvote, nhưng điều này đánh bại một lợi thế của việc sử dụng sudo: mọi lệnh đơn lẻ được ghi lại (để bạn có thể thấy những gì bạn đã làm). Bạn mất đăng nhập khi bạn mở một vỏ gốc.
guntbert

1
@guntbert chắc chắn là mọi lệnh được ghi lại, nhưng trong lịch sử của người dùng root.
Oliver Friedrich

@BeowulfOF không nhất thiết - lịch sử bash là một cái gì đó hoàn toàn khác với nhật ký hệ thống.
guntbert

1
Thực sự, @guntbert, nếu bạn sử dụng nhật ký xác thực như thế này, bạn có các vấn đề khác nhau.
Oliver Friedrich

1

Tất cả các câu trả lời khác cho đến nay dường như tập trung vào việc thay đổi thời gian chờ mặc định trong bao lâu trước khi bạn phải nhập lại mật khẩu sudo. Tuy nhiên, nếu bạn muốn chỉ có thể chạy các lệnh với quyền root mà không cần thêm trước mỗi lệnh sudo, bạn có thể lấy shell gốc bằng:

sudo -i

hoặc là

sudo bash

hoặc là

sudo <your preferred shell here>

Mặc dù tất cả những thứ này chỉ bắt đầu một tiến trình đơn lẻ với quyền root, nhưng quá trình duy nhất được đề cập chỉ là một trình bao cho phép bạn bắt đầu nhiều tiến trình khác như bạn muốn mà không cần nhập sudohoặc nhập mật khẩu. :)

Tất nhiên, với sức mạnh lớn sẽ có trách nhiệm lớn, đừng làm những thứ ngu ngốc, v.v.


1
HÃY CẨN THẬN với điều này. Trong thực tế, bạn sẽ chạy một vỏ gốc.
hmayag

4
Tại sao điều này bị hạ cấp?
coteyr

@hmayag Vâng, nếu bạn bắt đầu một root root, bạn thực sự sẽ chạy shell root. Do đó lý do cho cảnh báo ở cuối.
thiệu lại vào

@coteyr Có thể vì lý do tương tự như câu trả lời của BeoWulf.
guntbert

1

Sau khi thấy quá nhiều câu hỏi từ người dùng đã sửa đổi tệp cấu hình và bối rối về lý do tại sao các thay đổi của họ bị ghi đè sau khi nâng cấp gói, tôi sẽ lưu ý rằng nếu bạn muốn sửa đổi timestamp_timeout, tốt hơn là thực hiện bằng cách tạo tệp /etc/sudoers.dthay vì sửa đổi /etc/sudoerstrực tiếp.

Vì vậy bạn nên làm

sudo visudo -f /etc/sudoers.d/timeout

(tên của tệp có thể là bất cứ thứ gì bạn muốn miễn là nó không chứa .dấu chấm ( ) cũng không kết thúc bằng dấu ngã ( ~)). Thay vì mở /etc/sudoerstrong trình soạn thảo bạn chọn, nó sẽ mở /etc/sudoers.d/timeout, thông thường dưới dạng một tệp trống vì nó không tồn tại. Đặt của bạn

Defaults timestamp_timeout=X

trong đó, và tiết kiệm như bình thường. Sau đó, nếu một phiên bản mới /etc/sudoersxuất hiện, bạn không phải chọn giữa cài đặt phiên bản mới hơn hoặc giữ các thay đổi của mình - bạn sẽ tự động có cả hai.


1

Nếu bạn đang tìm kiếm một giải pháp không thay đổi tệp cấu hình , ví dụ: khi bạn muốn mã thông báo tồn tại lâu hơn cho một phiên cụ thể hoặc chỉ áp dụng sau một hành động rõ ràng, bạn có thể thử các cách sau:

# Work as is with Bash 4.1.2(1)-release and later, this might require some adaptation for other shells
(while [ true ]; do sudo -v; sleep $((60*4)); done)&

Về cơ bản mã trước làm mới mã thông báo sudo cứ sau 4 phút , thông qua một quá trình được khởi chạy trong nền.

Thật vậy, theo sudohướng dẫn: "thời gian chờ mật khẩu mặc định cho chính sách bảo mật sudoers là 5 phút ." Vì vậy, tùy thuộc vào chính sách cụ thể của hệ thống, bạn có thể điều chỉnh lượng thời gian vòng lặp chuyển qua ngủ giữa hai chu kỳ.

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.