Sudoers'da Cmnd_Alias ​​ile komut argümanlarını nasıl kullanırım?


36

Sudoers'da komut argümanlarını nasıl belirlerim? Arka plan olarak, awskomut aslında tüm alt sistem gruplarına açılan bir ağ geçididir ve kullanıcının yalnızca çalışmasını kısıtlamak istiyorumaws s3 cp ...any other args...

Aşağıdakileri denediğimde /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

Kabuk maalesef şifre ister

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

Komutu Cmnd_Alias'ta kaldırırsam, istenildiği gibi akar (şifre istemi olmadan), ancak yetkilendirme çok geniştir. Öyleyse, sadece belirli emir çağrı türlerini kısıtlamanın doğru yolu nedir ?

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

Sonra

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

Çok teşekkürler.


Neden / usr / local / bin / aws, / usr / local / aws / bin / aws'a sahipsiniz? Demek istediğim, aynı satırda iki kez komut tekrarladınız mı?
Mohammed Noureldin 24/16

Yanıtlar:


47

Herhangi bir joker karakter kullanmadınız, ancak iki argüman sundunuz. Bu nedenle sudokomutları tam olarak yazıldığı gibi arar (yol arama hariç) (from 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).

Gibi bir şey deneyin:

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

Bunu not et:

 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. 

Bu nedenle, komut başına yalnızca bir joker karakter gerekir.


1
Özlü bir açıklama ve bilgi paylaşımı için +1, teşekkürler.
Dinesh

1
Sudo'nun bazı durumlarda istismarlar için kullanılabilecek argümanların ayrılmasına tam olarak uymadığını unutmayın , bkz. Unix.stackexchange.com/a/279142/43920 . Bu yüzden /usr/local/bin/aws s3 cpsudoer'da belirtmek yerine , bunu bir betikle değiştirmek daha güvenli (sadece root tarafından yazılabilir).
pcworld

6

@Muru ile aynı, ancak tam çalışma örneğini sevenler için:

# 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

Ancak /sbin/cmd1, /sbin/cmd2başka herhangi bir komut olabilir.

Amacı ECHO_CMDgünümüze kadar olan sudo echo X A, parola için ise soracaktır sudo echo A Xdeğil ve böyle basit bir deney yoluyla güven kazanmak için izin vermek.

( /bin/echoSisteminizde nerede olduğunu kontrol etmek için yankının oturduğu varsayılmıştır whereis echo)


Evet, bir /bin/echoikili dosya vardır, ancak kabukların çoğunda echo, tam yol sağlamazsanız, bu ikili yerine kullanılacak yerleşik bir işlevi vardır.
Marki555
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.