Cách hạn chế shell của người dùng cho phép thực thi chương trình shell


9

Có thể ngăn bất kỳ người dùng nào không sử dụng các lệnh như ls, rm và các lệnh hệ thống khác có thể gây hại cho hệ thống. Nhưng người dùng sẽ có thể thực hiện các chương trình shell.


Tại sao bạn muốn làm điều này? Bạn không thể viết một chương trình mà họ tương tác?
Joe

Những loại chương trình shell họ nên thực hiện?
Mike

Bạn có nghĩa là "chạy các chương trình shell do chính họ tạo ra", có vấn đề bảo mật rõ ràng ..
pjc50

13
Ồ, không, không phải là lslệnh nguy hiểm !
womble

Câu trả lời:


11

Câu hỏi của bạn nên là:

Tôi không tin tưởng người dùng của mình. Những người câm nhìn thấy một cái gì đó trên internet và thử nó mà không hiểu những gì nó làm. Những kẻ ranh ma thích rình mò và xem các tập tin của người khác và đánh cắp ý tưởng của họ. Và những kẻ lười biếng, đừng bắt tôi phải lười biếng.

Làm cách nào để bảo vệ hệ thống của tôi và người dùng của tôi khỏi người dùng của tôi?


Đầu tiên, unix có một hệ thống cấp phép hệ thống tập tin rất toàn diện. Đây có vẻ là một hướng dẫn tốt về quyền hệ thống tập tin unix . Điểm chính của điều này là các thư mục có thể được đặt sao cho người dùng có thể vào một thư mục và có thể chạy các chương trình ra khỏi thư mục đó nhưng không thể xem nội dung của thư mục đó. Nếu bạn làm điều này, ví dụ, trên / home, nếu người dùng chạy ls on / home, họ sẽ nhận được lỗi từ chối cấp phép.

Nếu bạn thực sự sợ người dùng của mình và muốn gắn bó họ trong một loại môi trường bị hạn chế của siêu thị , hãy sử dụng một cái gì đó như nhà tù của freebsd hoặc solaris - mỗi người dùng có môi trường được thiết kế riêng. Đối với các điểm được thêm vào, hãy sử dụng ZFS để bạn có thể chụp ảnh môi trường khi họ đăng nhập để nếu họ xóa các tệp của họ, bạn chỉ cần kéo chúng ra khỏi ảnh chụp nhanh.


9

Có ba điều cần phải có để thực hiện đầy đủ những gì bạn yêu cầu:

  1. Một shell tùy chỉnh thiếu các lệnh bạn quan tâm . Đây là một điều khó khăn để có được, nhưng nếu bạn thực sự không muốn người dùng có quyền truy cập vào một số nguyên thủy vỏ, đây là cách duy nhất để loại bỏ chúng.
  2. Đặt quyền chính xác cho tập tin . Không muốn người dùng làm hỏng hệ thống? Đặt quyền để chúng không thể làm hỏng hệ thống ngay cả khi chúng có các công cụ phù hợp. Trong ba bước này, đây là bước dễ nhất.
  3. Sử dụng một công nghệ kiểm soát truy cập bắt buộc như AppArmor . Các MAC như AppArmor và SELinux nhúng quyền trong kernel. Những điều này ngăn người dùng chạy các công cụ phù hợp ngay cả khi họ tìm thấy chúng ở đâu đó (và giống như quyền truy cập tệp, ngăn không cho họ sử dụng chúng bên ngoài hộp bị hạn chế).

Thắt lưng, treo, và một cây súng ngắn cho biện pháp tốt. Khó đi nhầm đấy.

AppArmor rất thú vị vì MAC cho một tệp thực thi cụ thể được kế thừa bởi tất cả các con của nó. Đặt thông tin đăng nhập của người dùng thành /bin/bash-bob, đặt hồ sơ AppArmor cho quyền nhị phân cụ thể đó và cách duy nhất họ thoát khỏi nhà tù cấp phép đó là thông qua khai thác kernel. Nếu một số tập lệnh cài đặt lười biếng để lại /var/opt/vendor/tmpcó thể ghi được trên toàn cầu vì một lý do ngu ngốc nào đó, người dùng sử dụng /bin/bash-boblàm vỏ của họ sẽ không thể viết ở đó . Đặt cấu hình bash-bob để chỉ cho phép ghi vào thư mục chính của họ /tmpvà những lỗi cho phép như vậy không thể được tận dụng. Ngay cả khi họ bằng cách nào đó tìm thấy mật khẩu gốc, hồ sơ AppArmor /bin/bash-bobvẫn sẽ được áp dụng ngay cả sau khi họ sukhởi động subashquá trình nó sinh ra là con cái /bin/bash-bob.

Phần khó là xây dựng hồ sơ AppArmor đó.

  1. Tạo hồ sơ AppArmor cho / bin / bash-bob và đặt nó ở chế độ kiểm toán
  2. Đặt shell đăng nhập của Bob thành / bin / bash-bob
  3. Đăng nhập với tên Bob. Làm mọi thứ bạn muốn Bob có thể làm.
  4. Sử dụng audlog để xây dựng hồ sơ AppArmor (SUSE có các công cụ cho việc này, không chắc chắn về các bản phân phối Linux khác). Điều này là vô cùng tẻ nhạt, nhưng cần phải xảy ra nếu bạn cần mức độ bảo mật này.
    1. Bạn sẽ làm những việc như:
      • Phê duyệt quyền truy cập đọc vào hầu hết các thư viện hệ thống
      • Phê duyệt quyền đọc và thực thi đối với một số lệnh hệ thống được phép đã chọn
      • Phê duyệt quyền truy cập ghi vào không gian tạm thời
      • Phê duyệt tạo ổ cắm, nếu cần
  5. Đặt chính sách để thực thi.
  6. Đăng nhập như Bob, làm mọi thứ.
  7. Thực hiện điều chỉnh.

Theo tôi, bạn chỉ cần bước 2 và 3, vì kết hợp cả hai đều ngăn khả năng làm bất cứ điều gì có hại ngoài hộp được xây dựng cẩn thận mà bạn thiết lập trong cả hai bước đó.


4

Chà, bạn có thể đặt shell của người dùng thành chương trình bạn đã viết chỉ cho phép họ chạy các tập lệnh shell nhất định.

Tất nhiên điều này sẽ chỉ an toàn như các kịch bản chương trình và shell; trong thực tế, loại vỏ bị hạn chế này thường không an toàn trước kẻ tấn công thông minh.


3

Đừng thử và giới hạn các lệnh, giới hạn quyền truy cập tệp. Bạn thực tế không thể giới hạn quyền truy cập của mọi người vào các tòa nhà, vì vậy tất cả những gì ai đó cần làm là cung cấp bản sao của riêng họ về bất kỳ lệnh "nguy hiểm" nào mà bạn không muốn họ thực thi và bạn bị nhồi nhét.


2

Nếu bạn muốn người dùng chỉ có thể thực thi các tập lệnh / nhị phân nhất định, bạn có thể sử dụng trình bao bị hạn chế . Điều này (như bài viết trên Wikipedia đề cập) không hoàn toàn an toàn, nhưng nếu bạn có thể đảm bảo rằng không có ứng dụng nào được phép chạy có thể thực thi một trình bao mới thì đó là một lựa chọn tốt.

Để thiết lập trình bao giới hạn người dùng, hãy đặt /bin/rbash(hoặc tương tự, hầu hết các trình bao vào chế độ hạn chế khi tệp nhị phân được đặt tên r *** name *) làm trình bao người dùng. Sau đó, chỉnh sửa **. Bashrc (hoặc tương đương) và đặt $PATHvào thư mục lưu trữ tất cả các tệp nhị phân / tập lệnh được phép.


1

Vâng, điều đó là có thể, nhưng trong thực tế, nó sẽ tốn rất nhiều công sức và kế hoạch. Bạn có thể tạo tập lệnh và để chúng chạy như một cách sử dụng đặc quyền, sau đó xóa tất cả các đặc quyền khỏi người dùng được đề cập. Hoặc, bạn có thể đặt vỏ của người dùng thành thứ gì đó của riêng bạn, cho phép họ chỉ làm những gì bạn cho phép rõ ràng.

Tuy nhiên, các quyền tiêu chuẩn trong linux khiến người dùng bình thường gần như không thể "làm hại hệ thống". Những loại tác hại bạn đang cố gắng ngăn chặn? Việc ngăn người dùng không thể cài đặt phần mềm hoặc chạy các chương trình bên ngoài thư mục chính của họ là chuyện nhỏ và bạn có thể sử dụng chroot để khóa hệ thống hơn nữa.


Tôi đang cố gắng ngăn các lệnh có thể như rm -rf / bin, ls / home / *, rm -rf / usr / bin, ls / .................... .....

2
Bạn có thể ngăn chặn những người sử dụng quyền truy cập tệp linux tiêu chuẩn ...
BarsheD

1

Bạn có thể muốn thử [lshell] [1] (vỏ giới hạn).

lshell là một trình bao được mã hóa bằng Python, cho phép bạn giới hạn môi trường của người dùng trong các nhóm lệnh giới hạn, chọn bật / tắt bất kỳ lệnh nào qua SSH (ví dụ: SCP, SFTP, rsync, v.v.), ghi nhật ký lệnh của người dùng, thực hiện hạn chế thời gian, và hơn thế nữa.

[1]: http://lshell.ghantoos.org/Overview lshell


1

Cách tôi thường thực hiện loại hạn chế này yêu cầu một số điều kiện được đáp ứng, nếu không, hạn chế có thể dễ dàng bị phá vỡ:

  • Người dùng không thuộc wheelnhóm, người duy nhất được phép sử dụng su(được thi hành thông qua PAM).
  • Người dùng được bảo mật đúng cách rbash với chỉ đọc PATHđến riêng tư ~/bin, ~/bin/thư mục này chứa các liên kết đến các tiện ích đơn giản:

    $ ll ~/bin
    total 0
    lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 clear -> /usr/bin/clear*
    lrwxrwxrwx. 1 root dawud  7 Sep 17 08:58 df -> /bin/df*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 egrep -> /bin/egrep*
    lrwxrwxrwx. 1 root dawud  8 Sep 17 08:58 env -> /bin/env*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 fgrep -> /bin/fgrep*
    lrwxrwxrwx. 1 root dawud  9 Sep 17 08:58 grep -> /bin/grep*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 rview -> /bin/rview*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 rvim -> /usr/bin/rvim*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 sudo -> /usr/bin/sudo*
    lrwxrwxrwx. 1 root dawud 17 Sep 17 08:58 sudoedit -> /usr/bin/sudoedit*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 tail -> /usr/bin/tail*
    lrwxrwxrwx. 1 root dawud 11 Sep 17 08:58 wc -> /usr/bin/wc*
    
  • người dùng sẽ được cung cấp một hạn chế, read-only môi trường (nghĩ về những thứ như thế LESSSECURE, TMOUT, HISTFILEbiến).

  • người dùng được ánh xạ tới người dùng SELinux staff_uvà được cấp quyền thực thi các lệnh như người dùng khác theo yêu cầu thông qua sudo.
  • người dùng là /home, /tmpvà có thể /var/tmpđược polyinstantiated qua /etc/security/namespace.conf:

    /tmp       /tmp/.inst/tmp.inst-$USER-     tmpdir:create   root
    /var/tmp   /tmp/.inst/var-tmp.inst-$USER- tmpdir:create   root
    $HOME      $HOME/$USER.inst/              tmpdir:create   root
    

    Ngoài ra, /etc/security/namespace.initlàm cho tất cả các tập tin bộ xương chỉ đọc cho người dùng và sở hữu bởi root.

Bằng cách này, bạn có thể chọn có $USERthể thực hiện bất kỳ lệnh nào thay mặt mình (thông qua một liên kết trong ~/binthư mục riêng , được cung cấp qua /etc/skel, như được giải thích ở trên), thay mặt cho người dùng khác (thông qua sudo) hoặc không có gì cả.


0

Có, chỉ cần thay đổi các quyền trên các lệnh này.

Bạn có thể có một cơ hội chiến đấu tốt hơn bằng cách viết một lệnh shell hoạt động theo yêu cầu của bạn.

Điều gì không phù hợp với các quyền mặc định cho người dùng bình thường trên Linux?

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.