Làm cách nào để thiết lập người dùng ảo cho vsftpd với quyền truy cập vào một thư mục con cụ thể?


24

Tôi cần có thể thêm người dùng ảo vào vsftpd chỉ có quyền truy cập vào thư mục con. Lý do tại sao tôi muốn sử dụng người dùng ảo là tôi chỉ muốn có 1 người dùng thực trên máy chủ.

Cấu trúc FTP là:

  • www
    • website_name1
      • sub_folder1
    • website_name2
      • sub_folder2
      • sub_folder3
    • website_name3
    • website_name4

Tài khoản chính có quyền truy cập vào thư mục www và tất cả các thư mục phụ và tôi muốn thêm một người dùng ảo có thể có quyền truy cập vào sub_folder1 và chỉ sub_folder1

Ngoài ra để tránh một số nhầm lẫn, tôi cũng sẽ yêu cầu một người dùng khác truy cập sub_folder3 và chỉ sub_folder3 . Quan điểm của tôi là tôi cần có khả năng chọn thư mục và thư mục con nào trên cơ sở người dùng.

Tôi đã tìm ra cách để thêm người dùng để xem toàn bộ cấu trúc thư mục hoặc người dùng thiết lập có tên cả hai đều không sử dụng cho tôi.

Tôi tìm thấy một câu hỏi tương tự được đăng ở đây:

Cách thiết lập VSFTPD cho nhiều người dùng bao gồm thêm các thư mục cụ thể

nhưng nó khuyên proftpdtôi mặc dù nói chung là ít an toàn hơn.
Hoặc tôi đã bỏ lỡ điểm ở đây?


Tôi gặp vấn đề với xác thực trong thời gian dài nhất cho đến khi tôi tìm thấy máy chủ nàyfault.com/questions/450214/ Rõ ràng PAM có vấn đề với hàm băm MD5. Hướng dẫn này giải quyết vấn đề đó.

Câu trả lời:


31

Với một chút chơi xung quanh tôi đã xoay sở để đưa ra một giải pháp bán (không hoàn hảo nhưng đủ tốt)

sử dụng 2707974 câu trả lời và thông tin tôi đã đạt được ở nơi khác tôi có thể nhận được những gì tôi cần.

Trước tiên, bạn cần cài đặt vsftp và PAM

apt-get install vsftpd libpam-pwdfile

Chỉnh sửa /etc/vsftpd.conf

nano /etc/vsftpd.conf

sau đó dán vào sau

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
local_root=/var/www
chroot_local_user=YES
allow_writeable_chroot=YES
hide_ids=YES

#virutal user settings
user_config_dir=/etc/vsftpd_user_conf
guest_enable=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
nopriv_user=vsftpd
guest_username=vsftpd

Chỉnh sửa theo nhu cầu chính xác của bạn, bit quan trọng nhất đối với người dùng ảo là mọi thứ sau khi nhận xét cài đặt người dùng ảo

Tạo người dùng

Bạn có thể sử dụng cơ sở dữ liệu hoặc htpasswdtôi thấy htpasswdnhanh hơn và dễ sử dụng hơn.

tạo một thư mục để lưu trữ người dùng của bạn

mkdir /etc/vsftpd
htpasswd -cd /etc/vsftpd/ftpd.passwd user1

thêm người dùng bổ sung chỉ cần bỏ qua -c

htpasswd -d /etc/vsftpd/ftpd.passwd user2

Tôi chỉ quản lý để làm cho nó hoạt động bằng CRYPT, giới hạn ở 8 ký tự để sử dụng hơn 8 ký tự sử dụng openssl để tạo hàm băm tương thích và đường ống trực tiếp vào htpasswd

htpasswd -c -p -b /etc/vsftpd/ftpd.passwd user1 $(openssl passwd -1 -noverify password)

Khi người dùng của bạn được tạo, bây giờ bạn có thể thay đổi tệp cấu hình PAM của mình

nano /etc/pam.d/vsftpd

và xóa mọi thứ bên trong tệp này và thay thế bằng các mục sau

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so

Điều này sẽ cho phép đăng nhập cho người dùng ảo của bạn được xác định /etc/vsftpd/ftpd.passwdvà sẽ vô hiệu hóa người dùng cục bộ

Tiếp theo chúng ta cần thêm một người dùng cho những người dùng ảo này sử dụng. Những người dùng này sẽ không có quyền truy cập vào trình bao và sẽ được gọivsftpd

useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

người dùng phải khớp guest_username=vsftpdtrong tệp conf vsftpd

Xác định quyền truy cập thư mục

Dòng quan trọng ở đây là như sau

user_config_dir=/etc/vsftpd_user_conf

điều này có nghĩa là khi user1đăng nhập vào nó sẽ tìm tệp sau

/etc/vsftpd_user_conf/user1

tập tin này giống như vsftpd.confđể bạn có thể xác định một cái mớilocal_root

quay trở lại câu hỏi mà chúng tôi muốn user1chỉ có quyền truy cập var/www/website_name1/sub_folder1, vì vậy chúng tôi cần tạo vsftpd_user_confthư mục:

mkdir /etc/vsftpd_user_conf

Bây giờ tạo tập tin người dùng:

nano /etc/vsftpd_user_conf/user1

và nhập dòng sau

local_root=/var/www/website_name1/sub_folder1

Bây giờ khởi động lại vsftp

service vsftpd restart

bây giờ bạn có thể đăng nhập với tên user1, người sẽ chỉ có thể xem var/www/website_name1/sub_folder1và bất kỳ thư mục và tệp nào bên trong nó.

Đó là giờ bạn có thể thêm bao nhiêu người dùng tùy thích và giới hạn quyền truy cập của họ vào bất kỳ thư mục nào bạn muốn.

Điều quan trọng cần nhớ nếu bạn không tạo tệp conf người dùng, nó sẽ mặc định cho thư mục var / www là root (trong ví dụ trên)

Nếu thư mục con dự định có thể sửa đổi bởi người dùng, thì có thể cần phải thay đổi chủ sở hữu của thư mục con được chia sẻ:

chown vsftpd:nogroup /var/www/website_name1/sub_folder1

Điều này hoạt động với một số sửa đổi: 1) Sử dụng các đường dẫn tuyệt đối (thay thế các đường dẫn bắt đầu từ "var /" bằng "/ var". 2) vsftpd 2.3.5 trong Ubuntu 12.04 không hỗ trợ tùy chọn allow_writitable_chroot, bạn có thể giải quyết nó bằng cách cài đặt bản vá vsftpd .
gadelat

Xin chào, với mật khẩu ssl, chúng ta lại bỏ qua -c với -d hay chỉ bỏ qua -c? Ngoài ra trên một lưu ý thứ hai, chúng ta chỉ cần chạy lại truy vấn để thay đổi mật khẩu? hoặc có một phương pháp khác. Cảm ơn
mdixon18

Tại sao bạn cần tạo một thư mục chính với useradd --home? nó có cần thiết không
điện tử128

1
Bổ sung: cho phép kết nối TLS an toàn. digitalocean.com/community/tutorials/ trộm
e-info128

1
apache2-utils có thể được yêu cầu cho một số cài đặt Tôi chưa đưa nó vào câu trả lời vì nó không phù hợp với mọi người.
Avenyet

12

Hãy thử với hướng dẫn này. Có lẽ sẽ làm việc cho Bạn.

Làm thế nào để làm nó

Cài đặt vsftpd và thư viện PAM

Chỉnh sửa /etc/vsftpd.conf/etc/pam.d/vsftpd

Tạo tài khoản người dùng với các thư mục tùy chỉnh (ví dụ: in / var / www /)

Đặt thư mục chính xác chmodchown

Tạo người dùng quản trị với toàn quyền truy cập vào máy chủ

  1. Cài đặt vsftpd(FTP Deamon rất an toàn) và libpam-pwdfileđể tạo người dùng ảo

Tôi muốn tạo người dùng FTP nhưng tôi không muốn thêm người dùng unix cục bộ (không có quyền truy cập shell, không có thư mục chính, v.v.). Một PAM (Mô-đun xác thực có thể cắm) sẽ giúp bạn tạo người dùng ảo.

sudo apt-get install vsftpd libpam-pwdfile

  1. Chỉnh sửa vsftpd.conf

Trước tiên, bạn cần sao lưu tập tin gốc

sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak

Sau đó tạo một cái mới

sudo vim /etc/vsftpd.conf

Sao chép và dán các dòng sau. Tệp CHỈ nên chứa các dòng này:

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
nopriv_user=vsftpd
virtual_use_local_privs=YES
guest_enable=YES
user_sub_token=$USER
local_root=/var/www/$USER
chroot_local_user=YES
hide_ids=YES
guest_username=vsftpd
  1. Đăng ký người dùng ảo

Để đăng ký người dùng bạn sử dụng htpasswd, vì vậy tôi giả sử bạn đã apache2làm việc trên máy chủ của mình. Tạo một vsftpdthư mục sau đó đặt các tập tin cấu hình trong đó.

sudo mkdir /etc/vsftpd

sau đó

sudo htpasswd -cd /etc/vsftpd/ftpd.passwd user1

-c có nghĩa là chúng tôi sẽ tạo tệp nếu nó chưa tồn tại -d buộc MD5, bạn cần nó trên ubfox 12.04, chỉ cần sử dụng nó luôn

Lệnh sẽ nhắc nhập mật khẩu.

Nếu bạn muốn thêm người dùng mới sau đó:

sudo htpasswd -d /etc/vsftpd/ftpd.passwd user2

  1. Định cấu hình PAM trong /etc/pam.d/vsftpd

Một lần nữa, bạn cần sao lưu tập tin gốc

sudo mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak

và tạo một cái mới

sudo vim /etc/pam.d/vsftpd

Sao chép và dán 2 dòng này (đây phải là nội dung duy nhất). Tôi chỉ nhấn mạnh 2 dòng này, tôi đã lãng phí rất nhiều thời gian để giữ bản gốc và chỉ thêm những dòng này.

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so
  1. Tạo người dùng cục bộ mà không cần truy cập shell

sudo useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

Bạn có thể kiểm tra xem nó đã được tạo bằng lệnh id: id vsftpd. Chúng tôi xác định người dùng có vỏ / bin / false vì tham số check_shell (ngay cả khi bạn không sử dụng nó). Khi người dùng cuối kết nối với máy chủ FTP, họ sẽ được sử dụng cho quyền và quyền sở hữu:

chmodchown.

  1. Khởi động lại vsftpd

Cách phổ biến là sử dụng init.d như tất cả các deamon

sudo /etc/init.d/vsftpd restart

sudo service vsftpd restart

  1. Tạo thư mục

Theo cấu hình, tất cả người dùng sẽ được đặt vào thư mục này: / var / www / user1.

Bạn cần tạo chúng với các quyền cụ thể: thư mục gốc không thể ghi được!

 / [root = /var/www/user1] => 555
www [ /var/www/user1/www ] => 755
docs [ /var/www/user1/docs ] => 755

Lưu ý: người dùng không thể tạo tập tin hoặc thư mục trong thư mục gốc.

Trong vsftpd.confchúng tôi có chroot_local_user=YESđể người dùng không thể thấy bất cứ điều gì bên ngoài thư mục của mình. Đối với anh ta, máy chủ trông như thế này:

Vì vậy, chỉ cần chạy các lệnh sau:

mkdir /var/www/user1`
chmod -w /var/www/user1
mkdir www/user1/www
chmod -R 755 /var/www/user1/www
chown -R vsftpd:nogroup /var/www/user1

Các /var/www/user1thư mục ĐÃ tồn tại hoặc kết nối sẽ thất bại.

Ngay bây giờ bạn có thể thử kết nối với FTP của mình

  1. Tạo người dùng Quản trị viên để truy cập toàn bộ máy chủ

Để tạo người dùng quản trị, chúng tôi cần đăng ký người dùng mới htpasswd.

Trước khi chúng tôi làm như vậy, tôi sẽ khuyên bạn nên kiểm tra /etc/ftpuserstệp xác định người dùng nhất định không được phép kết nối với ftp. Tôi nghĩ rằng nó chỉ dành cho người dùng cục bộ và không phải người dùng ảo nhưng chỉ trong trường hợp không chọn tên có trong tệp này.

sudo htpasswd -d /etc/vsftpd/ftpd.passwd theadmin

Bây giờ chúng ta cần thêm một dòng mới vào /etc/vsftpd.conf

chroot_list_enable=YES

Điều này có nghĩa là người dùng của bạn sẽ được đặt vào thư mục của họ (như một nhà tù) người dùng EXCEPT trong / etc /

vsftpd.chroot_list

Hãy tạo tập tin này và thêm người dùng của chúng tôi, tập tin này là một dòng đơn giản có chứa điều đó. Thêm một người dùng trên mỗi dòng. Điều đó có nghĩa là bạn KHÔNG cần tạo một /var/www/theadminthư mục, người dùng sẽ đăng nhập và bắt đầu /home/vsftpd.

Khởi động lại máy chủ và bạn đã hoàn tất!


Đã thử điều này rồi, nó rất không linh hoạt vì nó thi hành local_root = / var / www / $ USER. Nó không cho phép tôi chỉ định một thư mục cho người dùng hoặc người dùng. thư mục này thường có mục đích và vị trí khác nhau tùy thuộc vào khách hàng. Cảm ơn đã trả lời mặc dù.
Avenyet

0

có, bạn có thể, và để linh hoạt tạo một tập tin và tệp userconfig, mkdir /var/www/userconfshoặc bất cứ điều gì bạn muốn thay đổi tên userconfs thành, sau đó tạo một tệp cụ thể

vi /var/www/userconfigs/ftpuseraccount

bên trong loại, local_root=/var/www(hoặc bất cứ điều gì bạn muốn truy cập bằng dir) guest_username=www-data(chủ sở hữu ubfox của tệp chỉnh sửa hàng đầu

sau khi cập nhật, bạn vsftpd.conf bằng cách thêm user_config_dir=/var/www/userconfigs(hoặc bất cứ điều gì bạn đã thay thế nó, tài khoản này sẽ truy cập bất cứ thứ gì sdir yo chỉ định)

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.