Tüm komutların takma ad olarak tanımlanmasını önlemenin bir yolu var mı?
Örneğin, bir kullanıcı, rm
diğer ad olarak başka bir komut (Ubuntu varsayılan komutları) tanımlayamamalı .
~/.bashrc
.
Tüm komutların takma ad olarak tanımlanmasını önlemenin bir yolu var mı?
Örneğin, bir kullanıcı, rm
diğer ad olarak başka bir komut (Ubuntu varsayılan komutları) tanımlayamamalı .
~/.bashrc
.
Yanıtlar:
Bir kullanıcının istediği takma adı tanımlamasını engelleyemezsiniz. Düşünmek:
/etc/bash.bashrc
. Nereye isterse seçsinler./etc/bash.bashrc
ve tüm ~/.bashrc
ve ~/.bash_aliases
bir komut dosyası aracılığıyla. Takma adlarını başka bir dosyaya koyarlar ve kaynak yaparlar.PROMPT_COMMAND
Belirli diğer adları devre dışı bırakan bir komut çalıştırırsınız . Yeniden tanımlıyorlar veya tanımsızlar PROMPT_COMMAND
.DEBUG
Takma adları yakalar ve tanımlarsınız. Tuzağı kaldırırlar.unset
, builtin
ve enable
; işlev yapmakalias
; declare -rf alias
kullanıcıların işlevi değiştirmesini önlemek; ve işlevi dışa aktarın. Onlar çalıştırmak /bin/bash
ile --rcfile
ve --init-file
yerleşikleri artık etkin sözü yeni bir kabuk, başlatın.Diğer adları derleme zamanında devre dışı bırakabilirsiniz, o zaman bash'ı güncel tutmak ve bir sonraki Shellshock'tan etkilenmediğinizden emin olmak size kalmış. Tabii ki, kullanıcılar kendi bash inşa edebilirsiniz.
unalias alias
.
\unalias unalias
.
Bir kullanıcının takma ad oluşturmasını engellemenin tek yolu, takma adı desteklemeyen bir kabuk sağlamaktır. Bu genellikle bir X / Y problemidir, burada X, kullanıcıya paylaşılan bir sistemde bir kabuk verildikten sonra fiili olarak sorunu çözmeye çalışmak yerine, uygun kontroller veya mimariler ile çözülmesi gereken bir tehdit modelidir .
Aşağıda, teknik olarak doğru bir cevap ve bunun hangi problemleri çözeceği ve çözmeyeceği konusunda bazı rehberlik sağlarım. Ayrıca alternatif kontroller hakkında bazı ek rehberlik sağlarım.
Kullanıcının giriş kabuğu olarak rbash atayarak Bash'ın kısıtlı kabuğunu kullanabilirsiniz . Örneğin:
foo:x:2001:2001:restricted user:/home/foo:/bin/rbash
Ardından , tercihen herkesin kabuğunu bozmadan, kullanıcı için yerleşik takma adı devre dışı bırakmanız gerekir . Örnek olarak, /etc/profile.d/rbash.sh gibi bir dosyaya aşağıdakileri ekleyebilirsiniz :
# Limit effect to users in a specific UID range.
if ((UID >= 2000)) && ((UID < 3000)); then
# Check shell options; disable alias builtins when shell is restricted.
if [[ $- =~ r ]]; then
enable -n alias
enable -n unalias
fi
fi
Kullanıcıyı bir cezaevi hapishanesine yerleştirmediyseniz veya diğer kabuklara erişimi içermeyen değiştirilmiş bir PATH sağlamadıysanız, kullanıcının yalnızca bash
komut istemine yazmasını ve kısıtlanmamış bir kabuk almasını engelleyen hiçbir şey yoktur .
Buna ek olarak, kısıtlanmış kabuk, tasarımla dizinleri değiştirmek gibi birçok yaygın etkinliği engeller:
$ cd /tmp
rbash: cd: restricted
ancak PATH içindeki diğer komut dosyalarının veya programların bunu engellemez . Bu araçlar dikkatlice kullanıcının ortamı zanaat zorunda ve özellikle değiştirmek mümkün engellemek gerektiğini PATH rbash yapar çünkü rağmen kendi başlangıç dosyalarında PATH salt okunur bunu yapar sonra başlatma.
Rbash kullansanız bile, bunu daha geniş bir kontrol setinin parçası olarak yapmanız gerekir. Bazı örnekler şunları içerebilir:
Önle teknik olmayan kullanıcılar yanlışlıkla gibi varsayılan takma adları sağlayarak çağırma tehlikeli komutları rm -i
, mv -i
ve cp -i
de /etc/bash.bashrc dosyası.
enable -n alias
.Dosyaları ve dizinleri korumak için geleneksel Unix izinleri veya POSIX ACL'leri.
Etkileşimli olmayan tek bir komut gerçekleştiren girişler. Örneğin:
foo:x:2001:2001:run foo.sh:/home/foo:/usr/local/bin/foo.sh
Anahtar başına SSH zorunlu komutlarını kullanın. Örneğin:
# ~foo/.ssh/authorized_keys
command="/usr/local/bin/foo.sh" [remainder of line]
Koşullu Eşleşme bloğu ile OpenSSH ForceCommand seçeneğini kullanın .
Özel kullanım durumunuz için tasarlanmış gitolit veya scponly gibi özel aletler kullanın.
Chroot hapishanesi kullan .
Ayrılmış bir ortam sağlamak için Xen, OpenVZ, LXC, VMware, VirtualBox veya diğer teknolojiler gibi sanallaştırmayı kullanın.
Tehdit modelinizi doğru bir şekilde tanımladıktan sonra, kullanım durumunuz için en uygun kontrolleri tanımlayabilirsiniz. Takma adı neden engellemek istediğinizi (örn. Hangi gerçek dünya sorununu çözüyor?) Daha anlamlı bir anlayış olmadan en uygun kontrolleri seçemezsiniz.
Muru'nun cevabının gösterdiği gibi, bu oldukça anlamsız bir çaba. Ancak bazı seçenekler var, ancak mükemmel değiller.
bash
El kitabına göre , işlevler her zaman takma adlardan önceliklidir, bu nedenle aşağıdakileri yapabiliriz:
xieerqi@eagle:~$ function alias { echo "Aliases are no-no" ; }
xieerqi@eagle:~$ alias TEST='rm'
Aliases are no-no
İşlev tanımını sistem çapında yerleştirebilirsiniz .bashrc
, ancak muru'nun işaret ettiği gibi, akıllı kullanıcılar bashrc
örneğin farklı bir dosya sağlayarak takma adlar almanın yolunu bulacaklardır .
Birlikte oynadığım başka bir fikir de enable
yerleşik.
alias
yerleşik bir kabuktur ve yerleşiklerin etkinleştirilmesine veya devre dışı bırakılmasına izin veren bash
güzel bir enable
komuta sahiptir. Mesela işte devre dışı bırakıyorum alias
.
xieerqi@eagle:~$ enable -n alias
xieerqi@eagle:~$ alias
No command 'alias' found, did you mean:
Command '0alias' from package 'zeroinstall-injector' (universe)
alias: command not found
xieerqi@eagle:~$ alias TEST='rm'
No command 'alias' found, did you mean:
Command '0alias' from package 'zeroinstall-injector' (universe)
alias: command not found
xieerqi@eagle:~$ enable alias
xieerqi@eagle:~$ alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
xieerqi@eagle:~$
Yine, sistem çapında kullanmak bashrc
burada bir seçenektir.
rm
listeyi kontrol eder. Listelerin oldukça büyük olacağı düşünülürse, başlamak uzun zaman alacaktır, kullanıcılarınız size çok şikayet edecek ve sistem yöneticisi olarak sizden nefret edecektir :)
Sen olabilir (tanımlamak /etc/profile
adında bir işlevi) alias
doğrulama size (muhtemelen kullanarak istiyor mu type -p
(hepsi "Ubuntu varsayılan komutları" sonra "içinde çalıştırılabilir vardır) $PATH
yerleşiğini çağırmadan önce") alias
diğerleri sivri out olması koşuluyla, kullanıcılar alabilir, ANCAK etrafında. Neden farklı bir kullanıcı grubu almıyorsunuz veya onları eğitmiyorsunuz (" alias
Bir komutu geçersiz kılan bir tanesinin tanımlanması Kendi Kendini Ayakta Çekmenin ve karışıklığa neden olmanın çok iyi bir yoludur (örn. Neden ls
parolamı sormam gerekiyor?))?