Làm thế nào để chạy một chương trình với quyền root mà không cần sudo Hồi?


10

Tôi có một chương trình nhị phân nhất định trên OS X chỉ có thể chạy dưới quyền root.

Tôi mệt mỏi vì phải trả trước sudomỗi lần tôi gọi nó và gõ mật khẩu, và muốn nó tự động chạy như root khi tôi gọi nó thường xuyên, mà không yêu cầu mật khẩu.

Chủ sở hữu của chương trình là root và nhóm của nó là bánh xe.

Tôi đã cố gắng chmod ug+sđặt userid và groupid khi thực thi thành root / wheel, nhưng khi tôi chạy chương trình mà không có sudo thì nó vẫn phàn nàn rằng nó chỉ có thể chạy với sudo hoặc root.


Nó có thể được chạy tại một thời điểm cụ thể hoặc khi một số sự kiện xảy ra?
dùng151019

9
Các bậc thầy về thời gian cũ sẽ gợi ý rằng việc gọi một thao tác chỉ gốc bằng tay một cách thường xuyên có nghĩa là bạn đang làm sai. Đây có phải là một cái gì đó có thể được tự động? Hoặc chạy như một daemon? Chi tiết hơn có thể mang lại gợi ý cho các giải pháp của một loại khác.
dmckee --- ex-moderator mèo con

Là chương trình thực sự thuộc sở hữu của root? Setuid / gid sẽ sử dụng người dùng / nhóm tệp.
Daniel Beck

2
Cạn trong đó "chi tiết hơn" cũng bao gồm những thứ như liệu nhị phân của chương trình này có trên khối lượng gắn kết NFS hay không và liệu bạn có sử dụng nosuidtùy chọn gắn kết hay không, ngoài lý do tại sao bạn phải thường xuyên chạy chương trình với tư cách là siêu người dùng.
JdeBP

@dmckee rất nhiều người dùng mac chạy phần mềm máy chủ trên máy trạm của họ và nó thường được thiết lập để yêu cầu root cho những thứ thực sự không cần nó ... nhưng cấu hình lại một ngăn xếp LAMP để chạy mà không cần root là một điều khó khăn. Mặt khác, khởi động lại apache 20 lần một ngày và gõ sudo mỗi lần cũng là một nỗi đau ở mông. Đây là một giải pháp đơn giản.
Abhi Beckert

Câu trả lời:


2

Bạn có chắc chắn rằng chương trình bạn đang cố thực hiện thực sự là một tệp nhị phân và không phải là một tập lệnh shell. Hầu hết các shell bỏ qua các kịch bản suid bởi vì chúng thực sự, thực sự khó thực hiện một cách an toàn. Một cách dễ dàng để kiểm tra là sử dụng filelệnh trên chương trình.


17

Một nửa giải pháp cho vấn đề của bạn:

trong tệp sudoers, thêm vào như sau:

username ALL= NOPASSWD: /path/to/command

Sau đó, từ dòng lệnh, bạn có thể gõ:

sudo command

và nó sẽ chạy lệnh mà không yêu cầu mật khẩu của bạn. Lệnh này sẽ chạy như root.

Lưu ý, bạn sẽ cần thay thế tên người dùng bằng tên người dùng thực tế của bạn.


Kinh ngạc để tìm câu trả lời tốt nhất ở phía dưới. Cảm ơn bạn!
CDR

FYI, để giải quyết nửa kia (không phải gõ lệnh sudo), hãy tạo một bí danh shell bao gồm sudo trong lệnh (như surm = sudo rm "$ @")
Walter

4

Nếu bạn thực sự không thể gọi nó như một daemon vì bất kỳ lý do gì (câu hỏi này có liên quan trong trường hợp đó) , phương pháp này thể bị hack cùng nhau, nhưng nó khá bẩn và không an toàn.

Khái niệm này là để khởi chạy nó với một AppleScript. Trước tiên, bạn cần biết cách gọi quy trình từ dòng lệnh (nếu bạn đã sử dụng sudo, có nghĩa là bạn phải được thiết lập tất cả). Bạn sẽ khởi chạy quy trình đó bằng cách sử dụng do shell scriptlệnh và thay vì sử dụng sudo, bạn sẽ viết thông tin đăng nhập của mình vào AppleScript:

do shell script "/path/to/your/executable/here" user name "me" password "mypassword" with administrator privileges

Tôi nhắc lại một phần về điều này là không an toàn: NÀY CÓ Ý NGH CRA TÍN DỤNG ADMIN CỦA BẠN S ST ĐƯỢC LƯU TRỮ TRONG VĂN BẢN. Nếu có thể, bạn nên tìm một số cách để làm nền này dưới dạng LaunchDaemon.


Một cách để "Runas" cho máy Mac của bạn :) Cảm ơn
Vlueboy

2

ON OSX giả sử chương trình bạn có nằm trong / usr / local / bin / YourProgramName ... Để giải quyết vấn đề này bằng lệnh sau, Để thay đổi Id người dùng / ID nhóm cho phân cấp tệp được root trong các tệp thay vì chỉ các tệp .

sudo chown -R $(whoami) /usr/local/bin/

... sau đó trong Terminal gọi chương trình của bạn, $ YourProgramName


Vấn đề của tôi là các chương trình đã cài đặt được cài đặt mà không có quyền thích hợp, vì vậy tôi đã chạy nó trên các thư mục của các chương trình đó và bây giờ chúng chạy tốt với wudo. Cảm ơn!
atwixtor

0

Bạn có thể làm

sudo tcsh

mà sẽ đưa bạn vào một vỏ gốc.


0

có vẻ như chương trình tự kiểm tra nếu đang chạy với ID = 0


1
Tất nhiên đó sẽ là nếu nó là siêu người dùng được thiết lập-UID (để các mối quan tâm được thể hiện ở trên sang một bên). Điều bạn có thể đang cố gắng nói là chương trình đang kiểm tra UID 0 thực sự chứ không chỉ là UID hiệu quả 0.
JdeBP

-1

Bạn có thể sudo chown YOUR-USERNAME-HERE BINARY-NAME-HERE.

Tuy nhiên, tôi hoàn toàn đồng ý với nhận xét của dmckee.


Làm thế nào điều này sẽ giúp bất cứ điều gì? ⁠
Scott
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.