Tôi có thể tạo người dùng SSH chỉ có thể truy cập thư mục nhất định không?


45

Tôi có một Máy chủ riêng ảo mà tôi có thể kết nối để sử dụng SSH bằng tài khoản gốc của mình, rõ ràng có thể thực thi bất kỳ lệnh linux nào và truy cập vào tất cả các khu vực đĩa.

Tôi muốn tạo một tài khoản người dùng khác, có thể truy cập máy chủ này bằng SSH, nhưng chỉ vào một thư mục nhất định, chẳng hạn /var/www/example.com/

Ví dụ: hãy tưởng tượng người dùng này có tệp HUGE error.log (500 MB) nằm trong /var/www/example.com/logs/error.log Khi truy cập tệp này bằng FTP, người dùng này cần tải xuống 500 MB để xem các dòng cuối cùng của nhật ký, nhưng tôi muốn anh ta trở thành có thể thực hiện một cái gì đó như thế này:

tail error.log

Do đó, tôi cần anh ta có thể truy cập máy chủ bằng SSH, nhưng tôi không muốn cấp cho anh ta quyền truy cập vào tất cả các khu vực máy chủ.

Tôi có thể làm cái này như thế nào?

Câu trả lời:


29

chroot người dùng.


Cập nhật:

Các bài viết TechRepublic bởi Vincent Danen nói:

Với việc phát hành OpenSSH 4.9p1, bạn không còn phải dựa vào các bản hack của bên thứ ba hoặc các thiết lập chroot phức tạp để giới hạn người dùng vào thư mục chính của họ hoặc cấp cho họ quyền truy cập vào các dịch vụ SFTP.

chỉnh sửa / etc / ssh / sshd_config (/ etc / sshd_config trên một số bản phân phối) và đặt các tùy chọn sau:

Subsystem     sftp   internal-sftp
Match Group sftp
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no

Đảm bảo chỉ thị của Match Match ở cuối tập tin. Điều này cho OpenSSH biết rằng tất cả người dùng trong nhóm sftp sẽ được chọn vào thư mục chính của họ (mà% h đại diện trong lệnh ChrootDirectory

Đối với bất kỳ người dùng nào bạn muốn chroot, hãy thêm họ vào nhóm sftp bằng cách sử dụng:

# usermod -G sftp joe
# usermod -s /bin/false joe
# chown root:root /home/joe
# chmod 0755 /home/joe

Lệnh usermod ở trên sẽ thêm joe người dùng vào nhóm sftp và đặt shell của họ thành / bin / false để họ hoàn toàn không thể có quyền truy cập shell. Các lệnh chown và chmod sẽ đặt các quyền cần thiết cho thư mục. Với các quyền này được đặt, người dùng sẽ được phép tải lên và tải xuống tệp, nhưng không thể tạo thư mục hoặc tệp trong thư mục gốc

Chroot tài khoản shell phức tạp hơn một chút vì nó yêu cầu một số tệp thiết bị nhất định và vỏ có sẵn trong thư mục nhà của người dùng. Các lệnh sau sẽ thiết lập một hệ thống chroot rất cơ bản trên Mandriva Linux:

# mkdir /chroot
# cd /chroot
# mkdir {bin,dev,lib}
# cp -p /bin/bash bin/
# cp -p /lib/{ld-linux.so.2,libc.so.6,libdl.so.2,libtermcap.so.2} lib/
# mknod dev/null c 1 3
# mknod dev/zero c 1 5
# chmod 0666 dev/{null,zero}
# mkdir -p /chroot/home/joe

Với những điều trên, người dùng joe có thể ssh in và sẽ bị giới hạn trong chroot. Thật không may, điều này không làm được gì nhiều, nhưng nó cho bạn ý tưởng về cách thiết lập nó. Tùy thuộc vào những gì bạn muốn cung cấp, bạn sẽ cần cài đặt thêm thư viện và nhị phân.


Các cộng đồng website Ubuntu nói

Tạo một chroot

  1. Cài đặt các gói dchroot và debootstrap.

  2. Là một quản trị viên (tức là sử dụng sudo), tạo một thư mục mới cho chroot. Trong thủ tục này, thư mục /var/chrootsẽ được sử dụng. Để làm điều này, gõ sudo mkdir /var/chroot vào một dòng lệnh.

  3. Là một quản trị viên, mở /etc/schroot/schroot.conftrong một trình soạn thảo văn bản. Loại cd /etc/schroot, theo sau gksu gedit schroot.conf. Điều này sẽ cho phép bạn chỉnh sửa các tập tin.

  4. Thêm các dòng sau vào schroot.confvà sau đó lưu và đóng tệp. Thay thế your_usernamebằng tên người dùng của bạn.

    [lucid] description = Ubuntu Lucid location = / var / chroot ưu tiên = 3 users = your_username Groups = sbuild root-Groups = root

Mở một thiết bị đầu cuối và gõ:

sudo debootstrap --variant=buildd --arch i386 lucid /var/chroot/ \ 
http://mirror.url.com/ubuntu/

Điều này sẽ tạo ra một 'cài đặt' cơ bản của Ubuntu 10.04 (Lucid Lynx) trong chroot. Có thể mất một lúc để các gói được tải xuống. Lưu ý: Bạn có thể thay thế lucid bằng phiên bản Ubuntu bạn chọn. Lưu ý: Bạn phải thay đổi ở trên mirror.url.comvới URL của máy nhân bản lưu trữ hợp lệ cục bộ với bạn. Một chroot cơ bản bây giờ đã được tạo ra. Gõ sudo chroot /var/chroot để thay đổi thành một vỏ gốc bên trong chroot.

Thiết lập chroot

Có một số bước cơ bản bạn có thể thực hiện để thiết lập chroot, cung cấp các phương tiện như độ phân giải DNS và quyền truy cập /proc.

Lưu ý: Nhập các lệnh này trong một vỏ nằm ngoài chroot.

Nhập thông tin sau để gắn /proc hệ thống tập tin vào chroot (cần thiết để quản lý các quy trình):

sudo mount -o bind /proc /var/chroot/proc  

Nhập thông tin sau để cho phép phân giải DNS từ trong chroot (cần thiết để truy cập Internet):

sudo cp /etc/resolv.conf /var/chroot/etc/resolv.conf 

Rất ít gói được cài đặt theo mặc định trong một chroot (thậm chí sudo chưa được cài đặt). Sử dụng apt-get install package_nameđể cài đặt các gói.


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.