Yalnızca dosya izni yürütme


12

Dosyayı yalnızca diğer kullanıcılara yürütülebilir, ancak okunabilir / yazılamaz olarak nasıl ayarlayabilirim, bunun nedeni kullanıcı adımla bir şey yürütüyorum ama şifreyi vermek istemiyorum. Denedim :

chmod 777 testfile
chmod a=x
chmod ugo+x

Başka bir kullanıcı olarak yürütülürken hala izin almıyorum.


Başka bir kullanıcı olarak DEĞİL yürütülürken ne olur? Ve bu bir senaryo mu yoksa ikili bir program mı? Yazılar tercüman tarafından okunmalıdır.
psusi

Dosyanın üst kısmında bir sapma var mı? #! / bin / sh
J Baron

Yanıtlar:


10

Bir komut dosyasını yürütebilmek için hem okuma hem de yürütme izinlerine sahip olmanız gerekir. Komut dosyasının içeriğini okuyamazsanız, komut dosyasını da yürütemezsiniz.

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

Aslında, orijinal soruyu göz önünde bulundurduğumdan, şüphelendiğim senaryolar için doğru olduğunu yansıtacak şekilde güncellendi.
EightBitTony

13

Önceki ifadelerde yarı gerçek var. Bir komut dosyasını kullanıcı tarafından okunamayacak, ancak yine de yürütülebilir olacak şekilde ayarlayabilirsiniz. İşlem biraz çizilir, ancak / etc / sudoer'da bir istisna yapılarak yapılabilir, böylece kullanıcı bir şifre sorulmadan komut dosyasını kendiniz geçici olarak çalıştırabilir. Aşağıdaki örnek:

Bir kullanıcıyla paylaşmak istediğim bazı komut dosyaları:

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

'Somescript.pl' çağıran bir kabuk komut dosyası oluşturun ve / bin / dizinine kaydedin:

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

İSTEĞE BAĞLI ADIM / bin / içinde somescript.sh dosyasına bir sembolik bağlantı yapın:

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

Kabuk komut dosyasının kullanıcı tarafından okunabilir / yürütülebilir olduğundan emin olun (yazma erişimi yok):

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

Aşağıdaki satırları ekleyerek / etc / sudoer'da istisna yapın:

# 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

Pudingde Kanıt:

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

Bu yöntem ile karartmak için çalışmaktan daha iyi olmalı Filter::Cryptoya PAR::Filter::Cryptoya Acme::Bleachkararlı bir kullanıcı tarafından tasarlanmış ters olabilir ki. Komut dosyanızı ikili dosyaya derlemek için de aynı şey geçerlidir. Bu yöntemle ilgili bir sorun bulursanız bana bildirin. Daha ileri düzey kullanıcılar için User_Alias ​​bölümünü tamamen kaldırmak ve SCRIPTUSER'ı '% groupname' ile değiştirmek isteyebilirsiniz. Bu şekilde komut dosyası kullanıcılarınızı usermodkomutla yönetebilirsiniz .


6

Diğer kullanıcıların bir programı yürütmesine izin verirseniz, program dosyası okunabilir olsun veya olmasın, programın yaptığı her şeyi bilebilirler. Tek yapmaları gereken bir hata ayıklayıcı (veya hata ayıklayıcı benzeri bir program strace) işaret etmektir . İkili bir yürütülebilir dosya, yürütülebilir ve okunamıyorsa çalışabilir (bir komut dosyası çalışamaz, çünkü yorumlayıcının komut dosyasını okuyabilmesi gerekir), ancak bu size herhangi bir güvenlik sağlamaz.

Başkalarının programınızı tam olarak ne yaptığını görmelerine izin vermeden bir kara kutu olarak yürütebilmesini istiyorsanız, komut dosyanıza yükseltilmiş ayrıcalıklar vermeniz gerekir: kullanıcı için setuid yapın. Setuid programlarında hata ayıklama araçlarını yalnızca root kullanabilir . Güvenli setuid programları yazmanın kolay olmadığını ve çoğu dilin uygun olmadığını unutmayın; daha fazla açıklama için bkz . kabuk komut dosyalarında setuid'e izin verme . Bir setuid programı yazacaksanız, güvenli setuid komut dosyalarını mümkün kılmak için açıkça tasarlanmış bir moda (renk modu) sahip Perl'i şiddetle tavsiye ederim.


-1

Chmod komutuyla dosya izinlerini ayarlayabilirsiniz. Hem kök kullanıcı hem de dosyanın sahibi dosya izinlerini ayarlayabilir. chmod'un iki modu vardır, sembolik ve sayısal.

İlk olarak, kullanıcı (u), grup (g), diğerleri (o) veya üçünün (a) tamamı için izinler ayarlayıp ayarlamadığınıza karar verirsiniz. Ardından, bir izin (+) ekler, kaldırır (-) veya önceki izinleri siler ve yeni bir izin eklersiniz (=). Ardından, okuma iznini (r), yazma iznini (w) veya yürütme iznini (x) belirleyip belirlemeyeceğinize karar verirsiniz. Son olarak, chmod'a hangi dosyanın izinlerini değiştirmek istediğinizi söyleyeceksiniz.

İşte birkaç örnek.

Tüm izinleri silin, ancak herkes için okuma izni ekleyin:

$ chmod a=r filename

Komuttan sonra, dosyanın izinleri -r - r - r-- olur.

Grup için yürütme izinleri ekleyin:

$ chmod g+x filename

Şimdi, dosyanın izinleri -r - r-xr--

Dosyanın sahibi için hem yazma hem de yürütme izinlerini ekleyin. Aynı anda birden fazla izni nasıl ayarlayabileceğinizi unutmayın:

$ chmod u + wx dosya adı

Bundan sonra, dosya izinleri -rwxr-xr--

Yürütme iznini hem dosyanın sahibinden hem de gruptan kaldırın. Yine, her ikisini aynı anda nasıl ayarlayabileceğinizi unutmayın:

$ chmod ug-x dosya adı

Şimdi, izinler -rw-r - r--

Bu, sembolik modda dosya izinlerini ayarlamak için hızlı bir referanstır:

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

OP'nin nasıl kullanılacağını anladığı sorudan anlaşılıyor chmod. Bu soruya cevap vermiyor.
Scott
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.