Làm cách nào để sử dụng đối số lệnh với Cmnd_Alias ​​trong sudoers?


36

Làm cách nào để chỉ định đối số lệnh trong sudoers? Làm nền, awslệnh thực sự là một cổng vào toàn bộ các hệ thống con và tôi muốn hạn chế người dùng chỉ chạyaws s3 cp ...any other args...

Khi tôi thử như sau /etc/sudoers

Cmnd_Alias AWSS3_CMD = /usr/local/bin/aws s3 cp, /usr/local/aws/bin/aws s3 cp
gbt1 ALL=(gbt-ops) NOPASSWD: AWSS3_CMD

Vỏ không may nhắc mật khẩu

$ sudo -u gbt-ops aws s3 cp helloworld s3://my-bucket/hw.1
gbt-ops's password:

Nếu tôi loại bỏ lệnh args trong Cmnd_Alias, thì nó sẽ chảy như mong muốn (không có dấu nhắc mật khẩu), nhưng ủy quyền quá rộng. Vì vậy, cách đúng đắn để hạn chế chỉ một số loại lệnh lệnh nhất định .

Cmnd_Alias AWSS3_CMD = /usr/local/bin/aws, /usr/local/aws/bin/aws

Sau đó

$ sudo -u gbt-ops aws s3 cp helloworld s3://my-bucket/hw.1
...happy

Cảm ơn rất nhiều.


Tại sao bạn có / usr / local / bin / aws, / usr / local / aws / bin / aws? Ý tôi là bạn lặp lại lệnh hai lần trong cùng một dòng?
Mohammed Noureldin

Câu trả lời:


47

Bạn chưa sử dụng bất kỳ ký tự đại diện nào, nhưng đã cung cấp hai đối số. Do đó, sudotìm kiếm các lệnh chính xác như được viết (ngoại trừ tra cứu đường dẫn) (từ man 5 sudoers):

 If a Cmnd has associated command line arguments, then the arguments in
 the Cmnd must match exactly those given by the user on the command line
 (or match the wildcards if there are any).

Hãy thử một cái gì đó như:

Cmnd_Alias AWSS3_CMD = /usr/local/bin/aws s3 cp *, /usr/local/aws/bin/aws s3 cp *

Lưu ý rằng:

 Wildcards in command line arguments should be used with care.  Because
 command line arguments are matched as a single, concatenated string, a
 wildcard such as ‘?’ or ‘*’ can match multiple words. 

Vì vậy, chỉ cần một ký tự đại diện cho mỗi lệnh.


1
+1 cho một lời giải thích ngắn gọn và chia sẻ kiến ​​thức, cảm ơn.
Dinesh

1
Lưu ý rằng sudo không tôn trọng chính xác việc tách các đối số có thể được sử dụng để khai thác trong một số trường hợp, xem unix.stackexchange.com/a/279142/43920 . Vì vậy, thay vì chỉ định /usr/local/bin/aws s3 cptrong sudoers, sẽ an toàn hơn khi thay thế nó bằng một tập lệnh (chỉ có thể ghi bằng root).
pcworld

6

Giống như @muru, nhưng đối với những người thích ví dụ làm việc đầy đủ:

# Cmnd alias specification
Cmnd_Alias ECHO_CMD=/bin/echo A *,/bin/echo B *

# Make USER run specific commands on given HOSTNAME
# USER_NAME 

#userx
userx ALL=(root) NOPASSWD: /sbin/cmd1,/sbin/cmd2,ECHO_CMD

Trong khi /sbin/cmd1, /sbin/cmd2có thể là bất kỳ lệnh nào khác.

Mục đích của ECHO_CMDviệc trình bày sudo echo X Asẽ yêu cầu cụm mật khẩu, trong khi sudo echo A Xkhông, và cho phép bạn có được sự tự tin thông qua thử nghiệm đơn giản như vậy.

(Giả sử rằng echo nằm trong /bin/echo, để kiểm tra xem nó ở đâu trên hệ thống của bạn whereis echo)


Có, có /bin/echonhị phân, nhưng hầu hết các shell cũng có hàm dựng sẵn echosẽ được sử dụng thay cho nhị phân này nếu bạn không cung cấp đường dẫn đầy đủ.
Marki555
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.