Eksekusi file saja

12

Bagaimana saya dapat mengatur file agar dapat dieksekusi hanya untuk pengguna lain tetapi tidak dapat dibaca / ditulisi, alasannya saya mengeksekusi sesuatu dengan nama pengguna saya tetapi saya tidak ingin memberikan kata sandi. Saya mencoba :

chmod 777 testfile
chmod a=x
chmod ugo+x

Saya masih mendapatkan izin yang ditolak saat mengeksekusi sebagai pengguna lain.

cmmrade
sumber
Bagaimana dengan saat mengeksekusinya BUKAN sebagai pengguna lain? Dan apakah ini skrip, atau program biner? Naskah harus dibaca oleh penerjemah.
psusi
Apakah Anda memiliki shebang di bagian atas file? #! / bin / sh
J Baron

Jawaban:

10

Anda perlu membaca dan menjalankan izin pada skrip untuk dapat menjalankannya. Jika Anda tidak dapat membaca konten skrip, Anda juga tidak dapat menjalankannya.

tony@matrix:~$ ./hello.world
hello world
tony@matrix:~$ ls -l hello.world
-rwxr-xr-x 1 tony tony 17 Jul 13 22:22 hello.world
tony@matrix:~$ chmod 100 hello.world
tony@matrix:~$ ls -l hello.world
---x------ 1 tony tony 17 Jul 13 22:22 hello.world
tony@matrix:~$ ./hello.world
bash: ./hello.world: Permission denied
EightBitTony
sumber
Memang, diperbarui untuk mencerminkan bahwa itu benar untuk skrip yang mempertimbangkan pertanyaan asli, adalah apa yang saya duga adalah kasusnya.
EightBitTony
12

Ada setengah kebenaran dari pernyataan sebelumnya. Anda dapat mengatur skrip sehingga tidak dapat dibaca oleh pengguna, tetapi masih dapat dieksekusi. Prosesnya sedikit berlarut-larut, tetapi bisa dilakukan dengan membuat pengecualian di / etc / sudoer sehingga pengguna dapat menjalankan skrip sebagai diri Anda sementara waktu tanpa diminta kata sandi. Contoh di bawah ini:

Beberapa skrip yang ingin saya bagikan dengan pengguna:

me@OB1:~/Desktop/script/$ chmod 700 somescript.pl
me@OB1:~/Desktop/script/$ ls -l somescript.pl
-rwx------ 1 me me 4519 May 16 10:25 somescript.pl

Buat skrip shell yang memanggil 'somescript.pl' dan simpan di / bin /:

me@OB1:/bin$ sudo cat somescript.sh
[sudo] password for me: 
#!/bin/bash
sudo -u me /home/me/Desktop/script/somescript.pl $@

LANGKAH OPSIONAL Buat symlink ke somescript.sh di / bin /:

sudo ln -s /bin/somescript.sh /bin/somescript

Pastikan skrip shell dapat dibaca / dieksekusi untuk pengguna (tidak ada akses tulis):

sudo chmod 755 /bin/somescript.sh
me@OB1:/bin$ ls -l somescript*
lrwxrwxrwx 1 root root  14 May 28 16:11 somescript -> /bin/somescript.sh
-rwxr-xr-x 1 root root 184 May 28 18:45 somescript.sh

Buat pengecualian di / etc / sudoer dengan menambahkan baris ini:

# User alias specification
User_Alias  SCRIPTUSER = me, someusername, anotheruser

# Run script as the user 'me' without asking for password
SCRIPTUSER ALL = (me) NOPASSWD: /home/me/Desktop/script/somescript.pl

BUKTI DALAM Puding:

someuser@OB1:~$ somescript
***You can run me, but can't see my private parts!***

someuser@OB1:~$ cat /home/me/Desktop/script/somescript.pl
cat: /home/me/Desktop/script/somescript.pl: Permission denied

Metode ini harus lebih baik daripada mencoba untuk mengaburkan dengan Filter::Cryptoatau PAR::Filter::Cryptoatau Acme::Bleachyang dapat dibalik direkayasa oleh pengguna ditentukan. Hal yang sama berlaku untuk kompilasi skrip Anda ke biner. Beri tahu saya jika Anda menemukan sesuatu yang salah dengan metode ini. Untuk pengguna yang lebih mahir, Anda mungkin ingin menghapus bagian User_Alias ​​sepenuhnya dan mengganti SCRIPTUSER dengan '% groupname'. Dengan cara ini Anda dapat mengelola pengguna skrip Anda dengan usermodperintah.

santana
sumber
6

Jika Anda membiarkan pengguna lain menjalankan program, maka mereka dapat mengetahui semua yang dilakukan program, apakah file program dapat dibaca atau tidak. Yang perlu mereka lakukan hanyalah menunjuk debugger (atau program seperti debugger seperti strace). File biner yang dapat dijalankan dapat dijalankan jika file itu dapat dieksekusi dan tidak dapat dibaca (skrip tidak bisa, karena penerjemah harus dapat membaca skrip), tetapi ini tidak memberi Anda keamanan apa pun.

Jika Anda ingin orang lain dapat menjalankan program Anda sebagai kotak hitam, tanpa membiarkan mereka melihat apa yang sedang dilakukan oleh program, Anda perlu memberikan hak istimewa pada skrip Anda: buat setuid untuk pengguna Anda. Hanya root yang dapat menggunakan alat debugging pada program setuid. Perhatikan bahwa menulis program setuid aman tidak mudah, dan sebagian besar bahasa tidak cocok; lihat Izinkan setuid pada skrip shell untuk penjelasan lebih lanjut. Jika Anda akan menulis program setuid, saya sangat merekomendasikan Perl, yang memiliki mode (mode taint) yang secara eksplisit dimaksudkan untuk membuat skrip setuid aman.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
-1

Anda dapat mengatur izin file dengan perintah chmod. Baik pengguna root dan pemilik file dapat mengatur izin file. chmod memiliki dua mode, simbolik dan numerik.

Pertama, Anda memutuskan apakah Anda menetapkan izin untuk pengguna (u), grup (g), orang lain (o), atau ketiganya (a). Kemudian, Anda menambahkan izin (+), menghapusnya (-), atau menghapus izin sebelumnya dan menambahkan yang baru (=). Selanjutnya, Anda memutuskan apakah Anda mengatur izin baca (r), izin menulis (w), atau mengeksekusi izin (x). Terakhir, Anda akan memberi tahu chmod izin file mana yang ingin Anda ubah.

Berikut ini beberapa contohnya.

Hapus semua izin tetapi tambahkan izin baca untuk semua orang:

$ chmod a=r filename

Setelah perintah, izin file akan menjadi -r - r - r--

Tambahkan izin eksekusi untuk grup:

$ chmod g+x filename

Sekarang, izin file adalah -r - r-xr--

Tambahkan kedua tulis dan jalankan izin untuk pemilik file. Perhatikan bagaimana Anda dapat menetapkan lebih dari satu izin sekaligus:

$ chmod u + wx nama file

Setelah ini, izin file akan menjadi -rwxr-xr--

Hapus izin eksekusi dari pemilik dan grup file. Perhatikan, sekali lagi, bagaimana Anda dapat mengatur keduanya sekaligus:

$ chmod ug-x nama file

Sekarang, izinnya adalah -rw-r - r--

Ini adalah referensi cepat untuk mengatur izin file dalam mode simbolis:

Which user?
u   user/owner
g   group
o   other
a   all
What to do?
+   add this permission
-   remove this permission
=   set exactly this permission
Which permissions?
r   read
w   write
x   execute
J Baron
sumber
Jelas dari pertanyaan bahwa OP mengerti cara menggunakannya chmod. Ini tidak menjawab pertanyaan.
Scott