Chỉ cho phép tập tin


12

Làm cách nào tôi có thể đặt tệp chỉ có thể thực thi được cho người dùng khác nhưng không thể đọc / ghi được, lý do cho việc này tôi đang thực thi một cái gì đó với tên người dùng của mình nhưng tôi không muốn cung cấp mật khẩu. Tôi đã thử:

chmod 777 testfile
chmod a=x
chmod ugo+x

Tôi vẫn bị từ chối khi thực hiện với tư cách là người dùng khác.


Còn khi thực hiện nó KHÔNG phải là người dùng khác thì sao? Và đây là một kịch bản, hay một chương trình nhị phân? Các kịch bản phải được đọc bởi thông dịch viên.
psusi

Bạn có một shebang ở đầu tập tin không? #! / bin / sh
J Baron

Câu trả lời:


10

Bạn cần cả quyền đọc và thực thi trên một tập lệnh để có thể thực thi nó. Nếu bạn không thể đọc nội dung của tập lệnh, bạn cũng không thể thực thi nó.

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

Thật vậy, được cập nhật để phản ánh rằng điều đó đúng với các kịch bản xem xét câu hỏi ban đầu, là điều tôi nghi ngờ là trường hợp.
EightBitTony

12

Có một nửa sự thật cho các tuyên bố trước. Bạn có thể thiết lập một tập lệnh để người dùng không đọc được nhưng vẫn có thể thực thi được. Quá trình này được rút ra một chút, nhưng có thể thực hiện được bằng cách tạo một ngoại lệ trong / etc / sudoer để người dùng có thể chạy tập lệnh như chính bạn tạm thời mà không bị nhắc nhập mật khẩu. Ví dụ dưới đây:

Một số tập lệnh tôi muốn chia sẻ với người dùng:

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

Tạo một tập lệnh shell gọi 'somescript.pl' và lưu nó vào / bin /:

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

BƯỚC TÙY CHỌN Tạo một liên kết tượng trưng đến somescript.sh in / bin /:

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

Đảm bảo tập lệnh shell có thể đọc / thực thi được cho người dùng (không có quyền truy cập ghi):

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

Tạo ngoại lệ trong / etc / sudoer bằng cách thêm các dòng sau:

# 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

CHỨNG MINH TRONG 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

Phương pháp này nên tốt hơn so với cố gắng che giấu bằng Filter::Cryptohoặc PAR::Filter::Cryptohoặc Acme::Bleachcó thể đảo ngược được thiết kế bởi một người dùng xác định. Tương tự như vậy để biên dịch tập lệnh của bạn thành nhị phân. Hãy cho tôi biết nếu bạn tìm thấy một cái gì đó sai với phương pháp này. Đối với người dùng nâng cao hơn, bạn có thể muốn xóa hoàn toàn phần User_Alias ​​và thay thế SCRIPTUSER bằng '% tên nhóm'. Bằng cách này bạn có thể quản lý người dùng tập lệnh của mình bằng usermodlệnh.


6

Nếu bạn để người dùng khác thực thi một chương trình, thì họ có thể biết mọi thứ chương trình đang thực hiện, liệu tệp chương trình có thể đọc được hay không. Tất cả những gì họ cần làm là chỉ ra một trình gỡ lỗi (hoặc chương trình giống như trình gỡ lỗi, chẳng hạn như strace). Một tệp thực thi nhị phân có thể chạy nếu nó có thể thực thi và không thể đọc được (một tập lệnh không thể, bởi vì trình thông dịch cần có khả năng đọc tập lệnh), nhưng điều này không cung cấp cho bạn bất kỳ sự bảo mật nào.

Nếu bạn muốn người khác để có thể thực hiện chương trình của bạn như một hộp đen, mà không để cho họ thấy chính xác những gì chương trình đang thực hiện, bạn cần phải cung cấp đặc quyền nâng lên kịch bản của bạn: làm cho nó setuid để người dùng của bạn. Chỉ root mới có thể sử dụng các công cụ gỡ lỗi trên các chương trình setuid. Lưu ý rằng việc viết các chương trình setuid an toàn không dễ dàng và hầu hết các ngôn ngữ đều không phù hợp; xem Cho phép setuid trên các tập lệnh shell để giải thích thêm. Nếu bạn định viết một chương trình setuid, tôi thực sự khuyên bạn nên Perl, có chế độ (chế độ mờ) rõ ràng nhằm mục đích tạo các tập lệnh setuid an toàn có thể.


-1

Bạn có thể đặt quyền truy cập tệp bằng lệnh chmod. Cả người dùng root và chủ sở hữu tệp đều có thể đặt quyền truy cập tệp. chmod có hai chế độ, tượng trưng và số.

Đầu tiên, bạn quyết định xem bạn đặt quyền cho người dùng (u), nhóm (g), người khác (o) hay tất cả ba (a). Sau đó, bạn thêm quyền (+), xóa quyền (-) hoặc xóa sạch các quyền trước đó và thêm quyền mới (=). Tiếp theo, bạn quyết định nếu bạn đặt quyền đọc (r), quyền viết (w) hoặc thực thi quyền (x). Cuối cùng, bạn sẽ nói với chmod những quyền mà bạn muốn thay đổi.

Dưới đây là một vài ví dụ.

Xóa sạch tất cả các quyền nhưng thêm quyền đọc cho mọi người:

$ chmod a=r filename

Sau lệnh, quyền của tệp sẽ là -r - r - r--

Thêm quyền thực thi cho nhóm:

$ chmod g+x filename

Bây giờ, quyền của tệp sẽ là -r - r-xr--

Thêm cả quyền ghi và thực thi cho chủ sở hữu tệp. Lưu ý cách bạn có thể đặt nhiều quyền cùng một lúc:

$ chmod u + tên tệp wx

Sau này, các quyền của tệp sẽ là -rwxr-xr--

Xóa quyền thực thi từ cả chủ sở hữu và nhóm của tệp. Lưu ý, một lần nữa, làm thế nào bạn có thể đặt cả hai cùng một lúc:

Tên tệp $ chmod ug-x

Bây giờ, các quyền là -rw-r - r--

Đây là một tài liệu tham khảo nhanh để thiết lập quyền truy cập tệp trong chế độ tượng trưng:

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

Rõ ràng từ câu hỏi mà OP hiểu cách sử dụng chmod. Điều này không trả lời câu hỏi.
Scott
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.