Chặn lệnh đặc biệt trong Linux cho người dùng cụ thể


27

Làm thế nào để chặn lệnh, hãy nói mkdircho người dùng cụ thể?

Những gì tôi đã làm chỉ tạo chức năng chỉ đọc và lưu trữ trong hồ sơ người dùng ~/.bashrc

/bin/mkdir() {
        echo "mkdir command not allow for you"

}

mkdir() {
        echo "mkdir command not allow for you"

}
./mkdir() {

        echo "mkdir command not allow for you"
}

readonly -f /bin/mkdir
readonly -f mkdir
readonly -f ./mkdir

Kiểm tra:

rahul@ubuntu:~$ cd /bin/
rahul@ubuntu:/bin$ ./mkdir /home/rahul/ggg
mkdir command not allow for you
rahul@ubuntu:/bin$ cd
rahul@ubuntu:~$ mkdir testing
mkdir command not allow for you
rahul@ubuntu:~$ /bin/mkdir testing
mkdir command not allow for you

Vì vậy, câu hỏi của tôi là cách để đạt được điều này là gì? Có công cụ nào cho việc này không?

Cập nhật 1 # Nhưng nếu người dùng thông minh, anh ta có thể sao chép nhị phân mkdir và đổi tên và sử dụng nó. Vậy làm thế nào để đạt được điều này?


7
Ví dụ của bạn sẽ thất bại vì người dùng có thể tự biên dịch mkdirvà đổi tên nó, hoặc thậm chí chỉ sao chép và đổi tên nhị phân hiện có. Ngoài ra, có một vỏ dựng sẵn để ghi đè các bí danh và chức năng.
strugee

hmm đúng rồi, vậy thì có sao không?
Rahul Patil

Ngoài ra, người dùng không cần phải biên dịch, anh ta có thể dễ dàng sao chép cp /bin/mkdir mkdir2sau đó sử dụng nó :(
Rahul Patil

Tạo một thư mục là một nhiệm vụ cơ bản / phổ biến đến mức có nhiều cách để thực hiện nó và gần như không thể chặn tất cả chúng (ngoại trừ việc không cho phép người dùng tạo tệp; tức là bảo vệ ghi tất cả các thư mục chống lại anh ta). Ví dụ, cp -r /usr/local/lib gggsẽ tạo một thư mục có tên ggg(chứa bản sao nội dung của /usr/local/lib, nếu có, sau đó người dùng có thể xóa). Bạn có thể sử dụng find / -type d -emptyđể tìm một thư mục trống để sao chép.
G-Man nói 'Phục hồi Monica'

Câu trả lời:


21

Tôi không biết làm thế nào với bash, nhưng tôi biết một shell khác giới hạn môi trường người dùng: lshell (shell hạn chế) .

Tổng quan nhanh về cấu hình

Lshell được cấu hình thông qua tệp INI. Theo mặc định, nó chứa một danh sách trắng các lệnh được phép, nhưng nó có thể được cấu hình dễ dàng để cấm người dùng sử dụng một lệnh cụ thể.

Cấu hình này (conf mặc định /etc/lshell.conf) cấm người dùng foosử dụng mkdir:

[foo]
allowed = 'all' - ['mkdir', 'bash', 'sh', 'csh', 'dash', 'env']

Để định cấu hình tài khoản người dùng sử dụng lshell theo mặc định, bạn phải:

 chsh -s /usr/bin/lshell foo

Lshell có thể làm nhiều hơn, như:

  • 3 cấp độ chi tiết: người dùng, nhóm, tất cả.
  • Có thể hạn chế quyền truy cập vào các đường dẫn nhất định trong hệ thống.
  • Có thể hạn chế sử dụng một số ký tự (như |).
  • Có thể hạn chế việc sử dụng một số lệnh nhất định chỉ qua SSH.

Và hơn thế nữa.

Cập nhật 1 # Kết quả kiểm tra đã thêm:

rahul:~$ which bash
/bin/bash
rahul:~$ dd if=$(which bash) of=my_bash
*** forbidden syntax: dd if=$(which bash) of=my_bash
rahul:~$ bash
*** forbidden command: bash
rahul:~$ cp /bin/bash my_bash
*** forbidden path: /bin/bash
rahul:~$ /bin/bash
*** forbidden command: /bin/bash
rahul:~$ sh
*** forbidden command: sh
rahul:~$ dash
*** forbidden command: dash
rahul:~$ env bash
*** forbidden command: env
rahul:~$ cp /bin/mkdir mycreatedir
*** forbidden path: /bin/mkdir

3
với allowed = 'all' - ['mkdir'], bạn không thể thực hiện bashvà không bị hạn chế một lần nữa?
dawud

3
Chỉ là phạm tội, xin lỗi, nhưng vẫn còn rất nhiều cách để tránh các hạn chế do danh sách đó áp đặt, ví dụ dd if=$(which bash) of=my_bash && chmod u+x my_bash && ./my_bash. Tôi nghĩ vấn đề là thiếu chính sách mặc định hạn chế, nghĩa là trong trường hợp này, bạn cho phép GRANT theo mặc định, sau đó là quyền DENY dựa trên danh sách, khi đó phải theo cách khác: DENY theo mặc định, sau đó GRANT dựa trên chính sách .
dawud

1
@dawud: Tôi đồng ý rằng việc duy trì danh sách trắng các lệnh được phép là cách tiếp cận tốt hơn so với việc có danh sách đen và hy vọng người dùng sẽ không phá vỡ nó bằng cách thông minh cho quản trị viên.
rahmu

2
@Marco, kiểm tra ví dụ được cung cấp trong câu trả lời của tôi. Tôi cung cấp một danh sách trắng các lệnh được phép và trong trường hợp đó, người dùng không thể chỉ là cpmột tệp nhị phân cho PATH của mình ( rootthư mục sở hữu, rxcho người dùng) và rbashngăn không cho thực thi ./executables. Nó có trả lời câu hỏi của bạn không?
dawud

2
@dawud Nó thực sự. Tôi đã bỏ lỡ thư mục bin chỉ đọc.
Marco

15

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 cung cấp bảo mật chính xác rbashvới PATH chỉ đọc được trỏ đế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 mkdirthay 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ả.


4

Thêm một nhóm giả, thêm người dùng vào nhóm đó chown root:somegroup /bin/mkdir, chmod g-x /bin/mkdir. Lưu ý rằng điều này phụ thuộc vào người dùng không thể sửa đổi các nhóm của họ. IIRC điều này đúng trong GNU / Linux nhưng không phải trong một số Unice khác.


2
Trên hầu hết các hệ thống tệp, bạn cũng có thể sử dụng ACL mở rộng để kiểm soát chi tiết hơn - số lượng nhóm cần thiết sẽ tăng theo cấp số nhân với số lượng người dùng (do có thể kết hợp), chưa kể đến các vấn đề đặt tên.
peterph

2
thêm một điểm nữa, đồng thời xóa quyền đọc từ người dùng khác 710, vì vậy người dùng không thể sao chép và đổi tên nhị phân đó phải không?
Rahul Patil

1
@RahulPatil có, và tất nhiên bạn cũng cần hạn chế sử dụng trình biên dịch.
peterph

1

Cách tốt nhất mà tôi đã thử nghiệm là sử dụng Profile.d cách tốt nhất và an toàn nhất

Bước # 1 (Tạo tệp bí danh)

[root@newrbe ~]# vim /etc/customalias.sh

Thêm dòng dưới đây:

alias rm="echo remove contenet is restricted"
alias poweroff="echo Poweroff is restricted"
alias chmod="echo Change Permission is restristed"

Lưu và thoát

Bước # 2 (Tạo trình tải hồ sơ)

/etc/profile.d/ vị trí này chứa các tệp để hoàn thành bash

[root@newrbe ~]# vim /etc/profile.d/customsource.sh

Thêm dòng bên dưới trong tệp, những dòng này sẽ chặn các lệnh được đề cập cho người dùng bên dưới

if [ `whoami` == "user1" ] && [ `whoami` == "user2" ]; then
    source /etc/customalias.sh
fi

lưu và đóng

Bây giờ Thoát và đăng nhập lại

Trân trọng, -Mansur


/etc/profile.d/không phải là để bashhoàn thành , đó là nơi đặt các tùy chỉnh phiên đăng nhập cho người dùng sử dụng shell đăng nhập giống POSIX, do đó, thông thường không phải là nơi bashtùy chỉnh bí danh (mà sẽ đi vào /etc/bash.bashrc) và nên có cú pháp shell POSIX (thông thường, .thay vào đó của source=thay vì ==).
Stéphane Chazelas

-1

cài đặt sudoers và thử cấu hình ở đó có người dùng và lệnh gì.


4
Chào mừng đến với SX. Vui lòng thêm chi tiết vào câu trả lời của bạn; OP, hoặc bất cứ ai khác đọc câu hỏi này trong tương lai, có thể không nhận thức được sudo.
Joseph R.

Câu trả lời này hoàn toàn sai
kiltek
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.