Hangi komut dosyası normal kullanıcıların ağ ad alanlarını kullanmasına izin verebilir?


22

Ağ ad alanlarını (ağları) kullanan bir mimarim var. Düzenli kullanıcıların bu ağlarda bazı işlemler yapmalarına izin vermek istiyorum.

Ben bir senaryo yazabilirim netns-exec.shesinlenerek, bu yazı ile yürütülen, sudoiçeren:

ip netns exec $1 su $USER -c "$2"

ve sudoer dosyama ekle:

user ALL=(ALL) /path/to/netns-exec.sh

Ama öyle çirkin buluyorum ki bu konuda tamamen kabus görebiliyorum. Düzenli kullanıcıların ad alanlarını kullanmasına izin vermek için daha iyi bir çözüm var mı? Kullanıcıları bazı faydalı gruplara koymak mümkün müdür? Bunu aradım ama hiçbir şey bulamadım.


1
neden Cmd_Alias CMD_NETNS = ip netns exec [regexp matching your namespace] su [regexp matching allowed used] -c [regexp matching allowed namespace command]sudoers dosyanızda tanımlamıyorsunuz ve sonra izin verilen kullanıcılarınızı koyduğunuz bir grup oluşturuyorsunuz ve bu grubu bu komut takma adıyla ilişkilendiriniz.
netmonk

2
Bu oluyor sudobir içeren subeni rahatsız ediyor, değil alfabenin kendisini. Neyse, olayı sarmak için bir senaryo yazacağım. 2 kullanıcı anahtarı yapar, bu gerçekten çirkin, sence de öyle değil mi?
Raspbeguy,

6
Bu seni korkutmalı. Kullanıcı $ USER 'ı root olarak değiştirebilir.
Stephen

1
Evet ve beni korkutuyor. Ancak daha sonra güvenli olan sudobelirli bir değişken sağladığını anladım $SUDO_USER. Ama bu hala çirkin.
Raspbeguy

1
@Elronnd - çekirdek senaryolarda setuid yok sayar
Angelo

Yanıtlar:


1

1. Çözüm

Sadece "ağlar" adında bir grup ekleyin ve tüm kullanıcıları ekleyin. Sonra root'a sahiplik verin: netns ve gruba okuma / çalıştırma yetenekleri verin.

Diğer bir deyişle:

# New group netns
sudo groupadd --system netns

# Add root to "netns", not sure if needed
sudo usermod -aG netns root

# Do this for every needed user
sudo usermod -aG netns $UserName

# Change ownership to root, grant rw acces to group netns
sudo chown root:netns /path/to/netns-exec.sh
sudo chmod 633 /path/to/netns-exec.sh

2. Çözüm

Bu çözüm daha basittir, bu örnekte gösterildiği gibi sudoers dosyasını düzenlemek zorundasınız .

user ALL=(ALL) /bin/ip netns

Peki, çözüm 1 imkansız, komut ip netnsyalnızca kök tarafından çalıştırılabileceğini söyleyen bir hata döndürür. 2. Çözüm, başlangıçta aklımda olan şeydi, ancak bence tatmin edici değildi.
Raspbeguy

Bu chmod 0633, write+executetüm kullanıcılara ve netnsgruba izin verir . SGID kodunu komut dosyasına ayarlamak istediğinizden şüpheleniyorum, ancak @Angelo'nun belirttiği gibi: setuidve setgidkabuk komut dosyaları için ve iyi bir nedenle göz ardı edilir .
ckujau

0

Şahsen, normal kullanıcıların farklı ağ ad alanlarında komut çalıştırmasına izin verilip verilmediğini bilemiyorum, ancak bu açıklamalı kabuk betiği ihtiyaçlarınızı daha iyi karşılayabilir:

#!/bin/bash
# ip netns wrapper script, nns.
# Usage: nns nsname cmdline

case "${1}" in
    do)
        shift # remove "do"
        NSNAME="${1}" # remember nsname
        shift # remove nsname to get argument list for su -c
        [ -z "${NSNAME}" -o -z "${1}" ] && exit 1 # if either nsname or arglist is empty - error out
        echo ip netns exec "${NSNAME}" su "${SUDO_USER}" -c "${*}" # execute, ${*} merges separate arguments into single word for su/sh -c parsing. See with strace.
    ;;
    *)
        SCRIPTNAME="${0}" # remember script full path
        exec sudo "${SCRIPTNAME}" do "${@}" # run it through sudo with elevated privileges
    ;;
esac

Bir yere kurun /usr/binve kullanıcılarınızın çalıştırmasına izin verin.


Cevabınız için teşekkürler (ve birkaç ay sonra gördüğünüz için üzgünüm). Ancak sorun aynı kalıyor, yani sudo kullanarak.
Raspbeguy

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.