Soru Kök olarak ve sudo olmadan chroot hapishanesinde nasıl bir komut çalıştırılır?


Minimal bir chroot kurarım ve içinde sudo veya su bulundurmaktan kaçınmak istiyorum ama hala süreçlerimi root dışı olarak çalıştırıyorum. Bu chroot requiers kökü çalıştıran bir hile. Böyle bir şeye benzeyen bir program yazabilirim:

uid = LookupUser(args[username])  // no /etc/passwd in jail
chroot(args[newroot])
cd("/")
setuids(uid)
execve(args[exe:])

Bu en iyi bahistir mi yoksa benim için bunu yapan standart bir araç var mı?


Kendiminkini yuvarladım İşte:


21
2017-09-17 16:06


Menşei




Cevaplar:


Eğer çağırırsan chroot kökten chroot seçenek --userspec=USER:GROUP root olmayan UID / GID altındaki komutu çalıştıracaktır.

Bu arada, '--userspec' seçeneği ilk olarak bir havuza göre coreutils-7.5'te tanıtılıyor. git://git.sv.gnu.org/coreutils.


24
2017-07-19 12:43



Tam olarak istediğim gibi görünüyor ama üzerinde belge bulamıyorum. (Adam ve bilgi sayfalarına bakıyorum.) Bazı dokümanlar için bir bağlantınız var mı? - BCS
Üzgünüm, fakat '--userspec' seçeneğinin RHEL> = 6.0 veya Fedora> = 13 olduğu anlaşılıyor. - kamae


fakechroot, ile bütünlüğünde fakeroot, bunu yapmana izin verecek. Çalışmakta olan tüm programları, root olarak bir chroot olarak çalıştırılıyormuş gibi davranacaklar, ancak aslında sizin gibi çalışacaklardır.

Ayrıca bakınız fakechroot'un adam sayfası.


16
2017-09-17 20:25



Satır içi ASM içerebilecek güvenilir olmayan bir kod derleyip çalıştırırken gerçek bir chroot'a ihtiyacım var. - BCS
Yıllar sonra bile, bu iş parçacığı üzerine tökezledim, eklemek gerekir: asla güvenlik için chroot kullanmayın. lwn.net/Articles/252794 - domenukk


Özel bir chrooter yazmak hiç de zor değil:

#define _BSD_SOURCE
#include <stdio.h>
#include <unistd.h>
const char newroot[]="/path/to/chroot";
int main(int c, char **v, char **e) {
    int rc; const char *m;
    if ( (m="chdir" ,rc=chdir(newroot)) == 0
      && (m="chroot",rc=chroot(newroot)) == 0
      && (m="setuid",rc=setuid(getuid())) == 0 )
            m="execve", execve(v[1],v+2,e);
    perror(m);
    return 1;
}

Bu setuid root'u yapın ve tercih ettiğiniz kullanıcıyı eklediğiniz bir özel gruba aittir (ve 'başka' erişiminiz yok).


9
2018-05-12 01:41





Kökünüzün chroot () işlevini root olarak çağırmasını sağlamak için linux yeteneklerinden yararlanabilirsiniz. Örnek olarak, bunu chroot ikili. Kök olmayan olarak, normalde şunu elde edersiniz:

$ chroot /tmp/
chroot: cannot change root directory to /tmp/: Operation not permitted

Ama sen koştuktan sonra setcap komut:

sudo setcap cap_sys_chroot+ep /usr/sbin/chroot 

Chroot görüşmesini yapmana izin verecek.

Bunu sisteme yapmanı önermiyorum. chrootBunun yerine kendi programınıza yaparsınız ve chroot'u çağırırsınız. Bu şekilde olup bitenler üzerinde daha fazla kontrole sahip olursunuz ve hatta siz çağırdıktan sonra cap_sys_chroot ayrıcalığını bile bırakabilirsiniz, böylece programınızda chroot'a yapılan başarılı çağrılar başarısız olur.


8
2017-07-20 14:40



Böylece, keyfi bir kullanıcının chroot sys-çağrısını, erişilen herhangi bir ikili yoluyla çağırmasına izin verilecektir. /usr/sbin/chroot? Bu, bir chroot içindeki herhangi bir işlemin, chroot sys-call adlı bir yürütülebilir dosya oluşturması koşuluyla çalıştırılmasına izin verir. /usr/sbin/chrootmevcut köke göre. - Çekirdek güvenlik modelini gevşeterek bunu yapmayı tercih ederim. - BCS
Cevabı chroot binary üzerine koymamın sadece bir örnek olduğunu yansıtacak şekilde güncelledim. Bu ikili oyunu kendi ikili programında yapmak istersiniz. - Corey Henderson


Tamamen farklı bir ad alanında (IPC, filesytem ve hatta ağ) bir chroot ortamı oluşturmak için Linux Containers'ı kullanabilirsiniz.

Görüntü tabanlı konteynırların oluşturulmasını yönetebilen ve onları imtiyazsız kullanıcılar olarak çalıştıracak şekilde konfigüre edebilen LXD bile var; böylece, güvenilmeyen kod konteynırdan bir şekilde kaçmayı başarırsa, yalnızca kodu, imtiyazsız kullanıcı olarak çalıştırabilecektir. sistemin kökü değil.

En sevdiğiniz arama motorunda 'Linux Containers' ve 'LXD' arama yapın;)


1
2018-02-18 12:26