Saya telah menginstal jailkit
di Ubuntu 12.04
dan saya telah menyiapkan shell pengguna ke /bin/bash
– tetapi ketika dipanggil menjalankan /etc/bash.bashrc
bukannya /etc/profile
Jika Anda belum pernah menggunakan jailkit
sebelum ini intinya:
- Versi root sistem yang "dipenjara" dibuat di suatu tempat, seperti /home/jail
- Direktori beranda pengguna yang dipenjara dipindahkan ke dalam folder itu seperti /home/jail/home/testuser
- File konfigurasi yang relevan disalin ke /home/jail/etc/ – termasuk /etc/passwd terbatas
- Program yang ingin Anda izinkan aksesnya disalin ke direktori yang sesuai, seperti
/bin/bash - Saat pengguna yang dipenjara masuk, mereka di-chroot ke /etc/jail/ dan tidak dapat melihat file apa pun di atas itu
Jadi saya punya testuser
yang memiliki entri di /etc/passwd
seperti ini:
testuser:x:1002:1003::/home/jail/./home/testuser:/usr/sbin/jk_chrootsh
Dalam file /home/jail/etc/passwd
ada entri seperti:
testuser:1001:1003::/home/testuser:/bin/bash
Saya telah membaca bash(1)
jadi saya pikir masalahnya adalah bash mengira itu tidak dipanggil sebagai shell login:
Ketika bash dipanggil sebagai shell login interaktif, atau sebagai shell non-interaktif dengan opsi –login, bash pertama-tama membaca dan mengeksekusi perintah dari file
/etc/profile, jika file itu ada.
Saya mendapatkan bash
sebenarnya sedang dipanggil oleh /usr/sbin/jk_chrootsh
tapi saya tidak mengerti bagaimana bash
menentukan jenis shell itu, dan kumpulan file startup apa yang harus dijalankan.
Saya ingin melihat apakah saya dapat memecahkan masalah ini – tetapi saya tidak mengerti:
Bagaimana bash tahu bagaimana itu dipanggil?
ps:Saya juga melihat ke login(1)
tanpa banyak keberuntungan.
Jawaban yang Diterima:
Biasanya bash tahu bahwa itu adalah shell login karena ketika program login memanggilnya, ia memberi tahu bash bahwa namanya adalah -bash
. Nama itu ada di argv[0]
, argumen baris perintah ke-nol, yang secara konvensional merupakan cara pengguna menjalankan program. Tanda hubung awal adalah konvensi untuk memberi tahu shell bahwa itu adalah shell login. Bash juga berfungsi sebagai shell login jika Anda memberikan opsi --login
atau -l
. Lihat Perbedaan antara Shell Login dan Shell Non-Login? untuk lebih jelasnya.
Pada Jailkit 2.16, jk_chrootsh
membaca jalur absolut ke shell untuk dipanggil dari berbagai sumber, dan meneruskan jalur ini sebagai argv[0]
, dan meneruskan argumen baris perintahnya sendiri ke shell itu. Dalam kasus penggunaan normal di mana jk_chrootsh
itu sendiri digunakan dalam /etc/passwd
, tidak ada cara untuk melewatkan argumen seperti -l
. Karena jalur absolut tidak dimulai dengan -
, tidak ada cara untuk membuat jk_chrootsh
aktifkan shell login, tanpa menggunakan program perantara kecil.
#include <unistd.h>
int main () {
execl("/bin/bash", "-bash", NULL);
return 127;
}
Saya mengharapkan jk_chrootsh
untuk memiliki cara mudah menjalankan shell login. Saya sarankan membuat permintaan fitur.