2009-10-29 16 views
11

Bazı yazılımları yükleyen bir bash komut dosyası var. Kökle çalıştırılmıyorsa mümkün olduğunca çabuk başarısız olmak istiyorum. Bunu nasıl yapabilirim?bash: komut dosyasının root tarafından çalıştırılmaması durumunda hata

+1

: * izinleri başarısız kadar çalıştıralım *; Sistem, mevcut kullanıcı olarak işlemin başarılı bir şekilde gerçekleştirilebileceği şekilde ve bu seçeneği kökünden zorlayarak, [önceden benzer varsayımlar yapmış olan komut dosyalarını düzeltmek zorunda kaldım] gibi bir sistem kurulabilir. Öte yandan, root olarak çalıştırılırsa büyük bir şişmanlık uyarısı * veya * engelleme * için çok daha fazla bir vaka. –

+0

Sudo kullanmayı denemelisiniz. Linux yazılımı altında, normal kullanıcıların sisteme zarar verebilecek bir şey yüklemesini önlemek için root olmanız gerekir. – masterLoki

+1

Bazılarının unutmuş olabileceği veya sudo'nun (veya diğer ayrıcalık yükseltme yöntemlerinin) farkında olamayacağı betiğini istiyor.). Başka bir şey yapmaya çalışmadan önce çalışma zamanı aklı için kontrol etmek için iyi bir uygulama. –

cevap

27
#!/bin/bash 
if [ "$(id -u)" != "0" ]; then 
    echo "This script must be run as root" 1>&2 
    exit 1 
fi 

Kaynak: http://www.cyberciti.biz/tips/shell-root-user-check-script.html

+0

veya daha kısa tutmak için UID env: [[$ UID -ne 0]]; – zlack

+1

@zlack $ UID, betik "sudo" üzerinden çalıştırılırsa orijinal kullanıcının UID'sini verirken David'in betiği root olarak çalıştırılır. Yaptığına bağlı olarak, David'in muhtemelen daha iyi. – pr1001

+0

pr1001'in dediği gibi, kullanıcı sudo kullanarak betiği çalıştırıyorsa UID çalışmayacaktır, ancak EUID yalnızca iyi çalışacaktır. – Tom

5

bu etrafında kazma sonra, konsensüs EUID (efektif kullanıcı kimliği) değişken ayarlanacak olarak bash id -u kullanmaya gerek yoktur o gibi görünüyor. UID'un aksine, EUID, kullanıcı root olduğunda veya sudo kullanılarak 0 olacaktır. Görünüşe göre, bu id -u çalışan daha etrafında 100 kat daha hızlıdır:

#!/bin/bash 
if ((EUID != 0)); then 
    echo "You must be root to do this." 1>&2 
    exit 1 
fi 

Kaynak: Ben * genellikle * Bu saçma davranışı dikkate alacağını rağmen https://askubuntu.com/questions/30148/how-can-i-determine-whether-a-shellscript-runs-as-root-or-not

+2

bu, Bourne kabuğunda çalışmıyor. Kesinlikle herhangi bir POSIX uyumlu çözümünüz var mı? –