Người ta có thể sử dụng keyfile làm mật khẩu cho sudo không?


11

Bối cảnh

Tôi thích làm việc ở nơi công cộng trên máy tính xách tay của mình, nhưng tôi cũng thích sử dụng sudo mà không cần mật khẩu. Dựa trên những gì tôi biết bây giờ, tôi sẽ sử dụng NOPASSWDtùy chọn trong sudoerstệp của mình , nhưng tất nhiên bất cứ ai cũng có thể sử dụng sudo như họ muốn.

Một ý nghĩ quan trọng xuất hiện trong đầu tôi là các chương trình khóa tồn tại. Tuy nhiên, tôi thích sử dụng ổ đĩa flash (và chỉ sử dụng nó cho sudo) vì (1) nó nhanh hơn, (2) dễ hơn nhập mật khẩu của tôi và (3) Tôi không quan tâm đến việc mọi người truy cập nội dung của tôi cũng như không làm việc bất chính điều: máy tính xách tay sẽ ở nơi công cộng xung quanh những người khác và tài sản trí tuệ duy nhất trên máy tính xách tay của tôi là một dự án Angular rất cơ bản.

Ngoài ra, bản thân tôi và những người khác có thể muốn ngăn chặn việc lạm dụng sudo trên máy tính không chạy môi trường X hoặc Wayland. Công việc hiện tại của tôi yêu cầu một trình duyệt web hiện đại, nhưng nếu tôi có cơ hội không sử dụng X và chỉ sử dụng bộ ghép kênh, tôi sẽ làm điều đó - máy tính xách tay của tôi hơi cũ và chậm.

Câu hỏi

Những gì tôi muốn làm là đặt một keyfile vào ổ flash, và chỉ cần cắm vào ổ flash khi tôi ở máy tính xách tay, và lấy nó ra khi tôi rời khỏi nó.

Vì vậy, đây là ba câu hỏi của tôi xuất phát từ vấn đề này:

  1. Điều này có thể với sudo như là?
  2. Nếu không, tôi có thể viết một chương trình cho phép tôi làm điều này không?
  3. Nếu vậy, ngôn ngữ nào có thể là tốt nhất để viết chương trình này?

(4. [Có lẽ là một câu hỏi không liên quan] Gói này có thể tách rời hay nó cần phải là một nhánh của sudo?)

Ghi chú

Nếu có liên quan, thiết lập của tôi là Arch Linux với bspwm, không có môi trường máy tính để bàn. Hầu hết công việc của tôi là phát triển web bằng urxvt / vim và kiểm tra nó bằng Chrome.


1
pam_usb đáp ứng nhu cầu của bạn?
StrongBad

@StrongBad ơi ... vâng. Có vẻ như nó không ngay lập tức chỉ sudo, và đăng nhập và sudo cùng nhau, nhưng điều đó không quan trọng với tôi. Cảm ơn!
Gage Sorrell

2
Được rồi, để làm rõ, bạn muốn đăng nhập liên tục và chỉ ngăn mọi người sử dụng sudo trong tài khoản của bạn.
StrongBad

@StrongBad Đúng.
Gage Sorrell

Bạn có thể định cấu hình một cái gì đó bằng cách sử dụng rootpwcờ trong các /etc/sudoerstệp và thiết lập pam_usbđể đăng nhập root.
RubberStamp

Câu trả lời:


3

Tôi không chắc tại sao NOPASSWDtùy chọn này không tự đáp ứng yêu cầu của bạn, nhưng nếu bạn muốn yêu cầu sự hiện diện của ổ đĩa flash, tôi có thể nghĩ ra thứ gì đó gần như có thể làm những gì bạn đang tìm kiếm.

Đây là một cách giải quyết khác, nhưng bạn có thể tạo một người dùng quản trị cục bộ, nói superuservà cung cấp cho người dùng sudoquyền không mật khẩu , tức là thêm dòng sau vào /etc/sudoerstệp của bạn :

superuser ALL=(ALL) NOPASSWD:ALL

Sau đó, bạn có thể vô hiệu hóa đăng nhập mật khẩu và định cấu hình xác thực SSH chỉ khóa cho người dùng đó, tức là chạy passwd -l superuservà thêm các khổ sau vào /etc/ssh/sshd_config:

Match user superuser
PasswordAuthentication no

Sau đó tạo cặp khóa SSH cho người dùng này. Thêm khóa chung vào /home/superuser/.ssh/authorized_keysvà đặt khóa riêng vào ổ flash của bạn. Sau đó, khi bạn muốn sử dụng superusertài khoản, hãy cắm ổ đĩa flash và ssh vào superusertài khoản bằng khóa riêng của bạn. Và Voila! Bây giờ bạn có mật khẩu sudocho người dùng của bạn. Tất nhiên, bạn vẫn sẽ cần phải thoát các phiên shell của mình khi hoàn tất - rút ổ đĩa flash là không đủ. Mặc dù tôi đoán bạn cũng có thể thiết lập một móc nối trước để kiểm tra khóa riêng và tự động thoát nếu nó không xuất hiện (hoặc nếu nó không hợp lệ).


một câu trả lời dễ dàng để làm rõ lý do tại sao bạn có thể muốn làm điều này. Đối với máy chủ này tôi đang cố gắng quay trở lại, tôi chỉ có khóa gốc, không có quyền truy cập ssh gốc, tôi bị khóa vào người dùng ec2, mà sudo đang hỏi một pw tôi không có. Tôi đã khóa khóa gốc của mình cho máy chủ, vì vậy bây giờ tôi lý tưởng nhất là sử dụng khóa này để có được sudo acces, sau đó tôi có thể sửa chữa mọi thứ.
Brian Thomas
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.