Komut satırı argümanlarını kısıtlamanıza rağmen, kullanıcının root olarak çalıştığında rastgele bir dosyayı açmak, düzenlemek ve üzerine yazmak için vim kullanmasını engelleyen hiçbir şey yoktur .
Kullanıcı çalıştırabilir sudo vim /etc/httpd/conf/httpd.conf
ve sonra
- tüm bu metni düzenleme arabelleğinden temizle
- daha sonra kolaylık kaynağı için mevcut bir dosya (gerekli olmasa da): örneğin sudo konfigürasyonu
:r /etc/sudoers
NOT: SELinux tarafından kısıtlanmadığı sürece, kullanıcı herhangi bir dosyayı bu şekilde okuyabilir !
- kendine daha fazla sudo ayrıcalıkları ver
user ALL=(ALL) NOPASSWD: ALL
- eski yapılandırmanın üzerine yaz
:w /etc/sudoers
Kullanıcılarınızın şimdi sisteminize erişebilmelerini, değiştirebilmelerini veya tahrip etmelerini sağlayabilecek düzinelerce benzer yolu hayal edebiliyorum.
Apache yapılandırmanızı yalnızca sudo log mesajlarında düzenlerken göreceğiniz için, dosyaların bu şekilde değiştirildiği bir denetim iziniz bile olmayacak. Bu, sudo
herhangi bir editöre imtiyaz vermede güvenlik riskidir .
Bu, sudo root seviyesine komutları için tar
ve unzip
genellikle güvensiz olan haklar vermenin neden az ya da çok aynıdır , hiçbir şey arşivdeki sistem ikili dosyaları ya da sistem yapılandırma dosyalarının yerini almanızı engellemez.
Diğer birçok yorumcu sivri out sahip olarak ikinci bir risk, yani vim
sağlayan kabuk kaçar size verir vim içinden bir alt kabuk başlayabilir, rasgele herhangi komutunu çalıştırmak . Sudo vim oturumunuzda bunlar root olarak çalışacaktır, örneğin shell escape:
:!/bin/bash
size etkileşimli bir kök kabuğu verecek
:!/bin/rm -rf /
barda iyi hikayeler yapacak.
Bunun yerine ne yapmalı?
sudo
Kullanıcıların sahip olmadıkları dosyaları güvenli bir şekilde düzenlemelerine izin vermek için hala kullanabilirsiniz .
Sudoers konfigürasyonunuzda, sudoedit
bir kullanıcının düzenleyebileceği dosyalara tam (joker karakter) yol adını izleyen özel bir ayrılmış komut belirleyebilirsiniz:
user ALL=(ALL) sudoedit /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf
Kullanıcı daha sonra -e
sudo komut satırında anahtarı kullanabilir veya sudoedit
komutu kullanabilir :
sudo -e /etc/httpd/conf/httpd.conf
sudoedit /etc/httpd/conf/httpd.conf
Man sayfasında açıklandığı gibi :
-e (edit)
Seçenek yerine bir komut çalıştırılmaz ve kullanıcı düzenlemek bir veya daha fazla dosya istediğinde, gösterir. Bir komut yerine, "sudoedit" dizesi güvenlik politikasına danışılırken kullanılır.
Kullanıcı politika tarafından yetkilendirilmişse, aşağıdaki adımlar uygulanır:
- Geçici kopyalar, sahibine ayarlanan kullanıcıya ayarlanmış olarak düzenlenecek dosyalardan yapılır.
- Politika tarafından belirtilen düzenleyici geçici dosyaları düzenlemek için çalıştırılır. Sudoers politikası, SUDO_EDITOR, VISUAL ve EDITOR ortam değişkenlerini kullanır (bu sırayla). SUDO_EDITOR, VISUAL veya EDITOR'dan hiçbiri ayarlanmadıysa, editör
sudoers
(5) seçeneğinde listelenen ilk program kullanılır.
- Değiştirilmişlerse, geçici dosyalar orijinal konumlarına geri kopyalanır ve geçici sürümler kaldırılır.
Belirtilen dosya mevcut değilse, oluşturulur.
Sudo tarafından çalıştırılan çoğu komutun aksine, düzenleyicinin, çağrılan kullanıcının ortamı değiştirilmemiş olarak çalıştırıldığını unutmayın. Bir nedenden dolayı, sudo bir dosyayı düzenlenen sürümüyle güncelleyemiyorsa, kullanıcı bir uyarı alır ve düzenlenen kopya geçici bir dosyada kalır.
El sudoers
kitabı ayrıca, ve seçenekleriyle birlikte kabuk kaçmalarına karşı nasıl sınırlı koruma sağlayabileceğinin bir bölümünü de içermektedir .RESRICT
NOEXEC
restrict
Kullanıcılara, isteğe bağlı komutlar çalıştırmalarını sağlayan komutlara erişim vermekten kaçının. Pek çok editör kabuk kaçmaların devre dışı bırakıldığı sınırlı bir moda sahiptir, ancak sudoedit editörleri sudo ile çalıştırmak için daha iyi bir çözümdür. Kabuk çıkışları sunan çok sayıda program nedeniyle, kullanıcıları sık sık çalıştırılamayan programlarla sınırlandırmak.
ve
noexec
Paylaşılan kütüphaneleri destekleyen birçok sistem, bir ortam değişkenini (genellikle LD_PRELOAD) alternatif bir paylaşılan kütüphaneye işaret ederek varsayılan kitaplık işlevlerini geçersiz kılma yeteneğine sahiptir. Bu tür sistemlerde, sudo tarafından çalıştırılan bir programın diğer programları yürütmesini önlemek için sudo'nun noexec işlevi kullanılabilir. Not ... ...
, bir komut için noexec etkinleştirmek kullanmak için NOEXEC
yukarıdaki Kullanıcı Şartname bölümünde belirtildiği gibi etiketi. İşte yine bu örnek:
aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
Bu, kullanıcının aaron'un çalışmasını /usr/bin/more
ve /usr/bin/vi
noexec etkinken çalıştırılmasını sağlar . Bu, bu iki komutun başka komutları (kabuk gibi) yürütmesini engelleyecektir.
vim
, kullanıcı istediği herhangi bir dosyayı açabilir ve yazabilir.