Cho phép user1 đến su su - user2 mà không cần mật khẩu


51

Tôi cần cho phép người dùng martinchuyển sang người dùng martin-testmà không cần mật khẩu

su - martin-test

Tôi nghĩ rằng điều này có thể được cấu hình trong /etc/pam.d/su. Đã có một số dòng trong tập tin đó có thể không bị thiếu. Tuy nhiên, tôi không thích ý tưởng thêm người dùng martinvào nhóm wheel. Tôi không muốn cung cấp martinbất kỳ đặc quyền nào hơn là có thể chuyển sang martin-test. Tôi cũng không muốn sử dụng sudo.

Điều gì sẽ là cách tốt nhất để làm điều đó, trong khi vẫn giữ các đặc quyền của người dùng martintối thiểu?


2
Điều này dễ dàng hơn để làm với sudoví dụ sudo -u martin-test -i. Có một lý do bạn đang hỏi cụ thể về su?
jordanm

Tôi không muốn cài đặt sudochỉ vì điều này (tôi thường không sử dụng sudovà tôi đặc biệt không thích nó). Và tôi nghĩ rằng sử dụng pamlà cách sạch hơn và minh bạch hơn để làm điều đó.
Martin Vegter

3
@MartinVegter Như bạn có thể thấy từ câu trả lời của kịch bản, thực hiện điều này thông qua một số loại cơ chế pam là rất xấu. Thực sự đây là chính xác những gì sudođã được cho. Bên cạnh việc không sử dụng bình thường, những phản đối là gì?
Patrick

1
Nếu một giải pháp sạch là có thể với pam, tôi sẽ thích nó hơn sudo. Nếu sudolà khả năng duy nhất, thì điều đó cũng tốt. Sự phản đối của tôi sudochủ yếu là về ý thức hệ: Tôi không thích ý tưởng của người dùng thực hiện quản trị sudo foo. Khi tôi cần làm quản trị, tôi đăng nhập với quyền root. Nếu không, tôi đăng nhập với tư cách người dùng, Không nên trộn lẫn hai vai trò riêng biệt này. Ngoài ra, tôi đã pamcài đặt cơ sở hạ tầng. Tôi không muốn cài đặt một setuidchương trình khác có thể gây ra lỗi bảo mật.
Martin Vegter

5
@MartinVegter Bạn không phải thực hiện sudo foocác lệnh cụ thể. Sudo sudo -ssẽ ra mắt một cái vỏ. sudo là một tiện ích rất phổ biến có nghĩa là bảo mật của nó đã được xem xét kỹ lưỡng, nhiều hơn so với một số mánh khóe lừa đảo. Tôi cũng sẽ lập luận rằng việc lấy một shell root cho các tác vụ không an toàn hơn nhiều so với việc khởi chạy các lệnh cụ thể. Khi bạn khởi chạy một shell, bạn chạy mọi thứ như root. Nếu bất kỳ một trong những điều đó (chẳng hạn như đơn giản ls) có lỗ hổng bảo mật, thì bạn vừa mở một lỗ hổng bảo mật.
Patrick

Câu trả lời:


61

Thêm các dòng sau ngay bên dưới pam_rootok.sodòng trong /etc/pam.d/su:

auth  [success=ignore default=1] pam_succeed_if.so user = martin-test
auth  sufficient                 pam_succeed_if.so use_uid user = martin

Những dòng này thực hiện kiểm tra bằng cách sử dụng pam_succeed_if.somô-đun. Xem thêm cú pháp tệp cấu hình Linux-PAM để tìm hiểu thêm về các authdòng.

  • Dòng đầu tiên kiểm tra xem người dùng mục tiêumartin-test. Nếu có, không có gì xảy ra ( success=ignore) và chúng tôi tiếp tục trên dòng tiếp theo để kiểm tra người dùng hiện tại . Nếu không, dòng tiếp theo sẽ bị bỏ qua ( default=1) và chúng tôi tiếp tục trên các dòng tiếp theo với các bước xác thực thông thường.
  • Dòng thứ hai kiểm tra xem người dùng hiện tại là martin. Nếu có, hệ thống coi quá trình xác thực là thành công và trả về ( sufficient). Nếu không, không có gì xảy ra và chúng tôi tiếp tục các dòng tiếp theo với các bước xác thực thông thường.

Bạn cũng có thể giới hạn sutrong một nhóm, ở đây nhóm allowedpeoplecó thể sukhông có mật khẩu:

auth sufficient pam_succeed_if.so use_uid user ingroup allowedpeople

1
Nếu bạn muốn ủy quyền nếu họ ở trong một nhóm nhất định: auth đủ pam_succeed_if.so người dùng nhóm NHÓM
tômwagon

@gnp Siêu cảm ơn !! Làm việc trên iCinga với nrpe, phải thực thi một số lệnh như người dùng khác !! Đã giúp rất nhiều !!!!!! Cảm ơn!!!!!
saravanakumar

@GnP Xin hãy giúp tôi về askubuntu.com/questions/821793/...
Nullpointer

Sẽ rất tốt nếu thêm thông tin về cách áp dụng các thay đổi.
Kyslik

@Kyslik ý bạn là gì? Các hướng dẫn về cách chỉnh sửa các tệp cần thiết có trong câu trả lời ...
GnP

12

Nếu bạn không muốn thay đổi nhóm hoặc sử dụng sudo, hãy sử dụng mô-đun pam được gọi pam_execđể thực thi các tập lệnh bên ngoài trong giai đoạn pam.

Thêm một dòng trong dòng của bạn /etc/pam.d/susau pam_rootok.sodòng:

auth       sufficient pam_exec.so quiet /path/to/script

/path/to/script có quyền 755 (rwxr-xr-x) và nội dung sau:

#!/bin/bash
if [ "$PAM_TYPE" == "auth" ] && \
[ "$PAM_USER" == "martin-test" ] && \
[ "$PAM_RUSER" == "martin" ]; then
  exit 0
else
  exit 1
fi

Vì vậy, kịch bản này tồn tại với thành công nếu su:

  • được gọi trong bối cảnh xác thực,
  • người dùng gọi martin
  • người dùng để xác thực là martin-test.

Xem:

martin@host:~$ su - martin-test
martin-test@host:~$ exit
martin@host:~$ su - otheruser
Password: ****
otheruser@host:~$ 

1
pam_access có thể được sử dụng để cung cấp chức năng tương tự mà không cần dựa vào tập lệnh. (đây là những gì pam_access đã được thực hiện)
jsbillings

1
@jsbillings Bạn có thể đưa ra câu trả lời đó (với một số chi tiết) không?
Hauke ​​Laging 6/214

1
Làm thế nào tôi cần sửa đổi /etc/pam.d/suđể sử dụng pam_accesscho tình huống của tôi?
Martin Vegter

3
@jsbillings Thực tế pam_accesskhông thể làm điều này. Khi suđi qua ngăn xếp pam, nó sẽ hoạt động như người dùng mà bạn đang thay đổi chứ không phải người dùng mà bạn đang thay đổi. Vì vậy, nếu bạn thêm một quy tắc như + : martin : ALL, nó sẽ cho phép bất cứ ai thay đổi để martin . Thậm chí nếu bạn thay đổi martinđể martin-test, nó vẫn sẽ cho phép bất cứ ai làm điều đó. Bạn cần phân tích cả người dùng bạn đến và người dùng bạn đang thay đổi. Thực sự, đây chính xác là những gì sudodành cho ...
Patrick

0

Nếu bạn không có quyền truy cập vào tài khoản root, nhưng có mật khẩu của người dùng bạn muốn sử dụng để chạy lệnh, bạn có thể làm như sau.

  • Điều này sẽ hỏi bạn mật khẩu của toto: su - toto -c whoami
  • Điều này sẽ không: ssh toto @ localhost whoami

Chỉ cần cài đặt khóa công khai của bạn trong ủy quyền_key của toto


Câu trả lời chu đáo .. Tuy nhiên, lệnh ai đó muốn thử chạy đã có trên máy. Vì vậy, không có điểm ssh'ing đến cùng một máy chủ.
Raja Anbazhagan

-1

Giải pháp đơn giản của tôi là:

sudo login -f martin-test

Nếu bạn muốn tránh sudo bằng mọi giá, tôi nghĩ có thể đưa điều này vào một kịch bản:

  1. được sở hữu bởi root và với quyền root (sử dụng cờ setuid )
  2. thực thi bởi tất cả mọi người, cũng không có bất kỳ sudo.

Tuy nhiên, tôi không thể tìm ra chown rootchmod +s ToTest.shbit, để làm cho điều này thực sự hoạt động:

#!/usr/bin/env bash
echo howdy, I am $(whoami)
sudo login -f martin-test

Tôi vẫn chạy như người dùng bình thường của tôi, như tiếng vang cho tôi biết. Và nó vẫn yêu cầu mật khẩu sudo. Nếu nó đang chạy với quyền root, người ta có thể loại bỏ sudodòng cuối cùng ...


Cờ setuid trên shell (hoặc bất kỳ tập lệnh nào khác) sẽ không hoạt động trong Linux và vì lý do chính đáng. Lưu ý rằng tập lệnh trên với cờ suid hoạt động sẽ ngay lập tức bị mắc bẫy: Nó tham gia bash thông qua "env" (khá tự thất bại, bởi vì nếu bạn cho rằng bạn không biết nó ở đâu bash, tại sao bạn lại cho rằng bạn biết mình envđang ở đâu hoặc liệu nó có tồn tại không?). Nhưng cuối cùng, bạn không biết bashchính xác điều này sẽ là gì. Nó có thể đến từ thư mục người dùng đang gọi và đã được biên dịch trước đó một phút từ mã nguồn của anh ta. Bạn thấy tôi đang đi đâu? Hoặc người dùng có thể ghi đè whoami...
David Tonhofer

Bộ não của tôi hiện đang ở quá xa các vấn đề này để hoàn toàn nắm bắt, nhưng vẫn còn hơn cho các giải thích chi tiết.
Frank Nocke
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.