Linux: thiết lập cho sysadmin từ xa


51

Thỉnh thoảng tôi nhận được yêu cầu kỳ lạ để cung cấp hỗ trợ từ xa, khắc phục sự cố và / hoặc điều chỉnh hiệu suất trên các hệ thống Linux.

Các công ty lớn hơn thường đã có các quy trình được thiết lập tốt để cung cấp quyền truy cập từ xa cho các nhà cung cấp / nhà cung cấp và tôi chỉ cần tuân thủ các quy trình đó. (Cho tốt hơn hoặc tồi tệ hơn.)

Mặt khác, các công ty và cá nhân nhỏ luôn quay sang tôi để hướng dẫn họ những gì họ cần làm để thiết lập tôi. Thông thường, các máy chủ của họ được kết nối trực tiếp với internet và các biện pháp bảo mật hiện có bao gồm các mặc định cho bất kỳ phân phối Linux nào của họ.

Gần như luôn luôn tôi sẽ cần quyền truy cập cấp gốc và bất cứ ai sẽ thiết lập quyền truy cập cho tôi không phải là một chuyên gia sysadmin. Tôi không muốn mật khẩu gốc của họ và tôi cũng khá chắc chắn rằng hành động của mình sẽ không độc hại, nhưng tôi nên đưa ra những hướng dẫn đơn giản hợp lý nào:

  • thiết lập một tài khoản và trao đổi thông tin an toàn
  • thiết lập quyền truy cập root (sudo)
  • hạn chế quyền truy cập vào tài khoản của tôi
  • cung cấp dấu vết kiểm toán

(Và vâng, tôi biết và luôn cảnh báo những khách hàng đó rằng một khi tôi có quyền truy cập quản trị viên, việc che giấu mọi hành động độc hại là chuyện nhỏ, nhưng hãy giả sử rằng tôi không có gì để che giấu và tích cực tham gia vào việc tạo ra một dấu vết kiểm toán.)

Những gì có thể được cải thiện trong các bước dưới đây?


Bộ hướng dẫn hiện tại của tôi:

thiết lập một tài khoản và trao đổi thông tin an toàn

Tôi cung cấp hàm băm mật khẩu và yêu cầu tài khoản của tôi được thiết lập với mật khẩu được mã hóa đó, vì vậy chúng tôi sẽ không cần truyền mật khẩu văn bản rõ ràng, tôi là người duy nhất biết mật khẩu và chúng tôi không bắt đầu với một mật khẩu yếu có thể dự đoán.

sudo useradd -p '$1$********' hbruijn

Tôi cung cấp SSH khóa công khai (cặp khóa cụ thể cho mỗi khách hàng) và yêu cầu họ thiết lập tài khoản của tôi với khóa đó:

sudo su - hbruijn
mkdir -p ~/.ssh
chmod 0700 ~/.ssh
echo 'from="10.80.0.0/14,192.168.1.2" ssh-rsa AAAAB3NzaC1y***...***== hbruijn@serverfault' >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys 

thiết lập quyền truy cập root (sudo)

Tôi yêu cầu khách hàng thiết lập sudo cho tôi bằng sudo sudoedithoặc sử dụng trình chỉnh sửa yêu thích của họ và nối vào /etc/sudoers:

hbruijn ALL=(ALL) ALL

hạn chế quyền truy cập vào tài khoản của tôi

Thông thường, khách hàng vẫn cho phép đăng nhập dựa trên mật khẩu và tôi yêu cầu họ thêm hai dòng sau /etc/ssh/sshd_configđể ít nhất giới hạn tài khoản của tôi chỉ với các khóa SSH:

Match user hbruijn
PasswordAuthentication no

Tùy thuộc vào máy khách, tôi sẽ định tuyến tất cả quyền truy cập SSH của mình thông qua một máy chủ pháo đài duy nhất để luôn cung cấp một địa chỉ IP tĩnh duy nhất (ví dụ 192.168.1.2) và / hoặc cung cấp dải địa chỉ IP mà ISP của tôi sử dụng (ví dụ 10.80. 0,0 / 14). Máy khách có thể cần thêm chúng vào danh sách trắng tường lửa nếu quyền truy cập SSH bị hạn chế (thường xuyên hơn không phải là ssh chưa được lọc).

Bạn đã thấy các địa chỉ IP đó là from=hạn chế trong ~.ssh/authorized_keystệp giới hạn các máy chủ mà từ đó khóa của tôi có thể được sử dụng để truy cập hệ thống của chúng.

cung cấp dấu vết kiểm toán

Cho đến bây giờ không có khách hàng nào yêu cầu tôi về điều đó và tôi chưa làm gì cụ thể ngoài những điều sau đây để che mông của mình:

Tôi cố gắng sử dụng nhất quán sudovới các lệnh riêng lẻ và cố gắng ngăn chặn sử dụng sudo -ihoặc sudo su -. Tôi cố gắng không sử dụng sudo vim /path/to/file mà sử dụng sudoeditthay thế.

Theo mặc định, tất cả các hành động đặc quyền sau đó sẽ được ghi vào syslog (và /var/log/secure):

Sep 26 11:00:03 hostname sudo:  hbruijn : TTY=pts/0 ; PWD=/home/hbruijn ; USER=jboss ; COMMAND=sudoedit /usr/share/jbossas/domain/configuration/domain.xml  
Sep 26 11:00:34 hostname sudo:  hbruijn : TTY=pts/0 ; PWD=/home/hbruijn ; USER=root ; COMMAND=/usr/bin/tail -n 5 /var/log/messages

Tôi hầu như từ bỏ việc tùy chỉnh môi trường làm việc của mình, điều duy nhất tôi thực sự làm là thiết lập những điều sau trong ~/.bash_profilelịch sử bash ngày càng tăng của tôi và bao gồm cả dấu thời gian:

export HISTSIZE=99999999999
export HISTFILESIZE=99999999999
export HISTIGNORE="w:ls:ls -lart:dmesg:history:fg"
export HISTTIMEFORMAT='%F %H:%M:%S  '
shopt -s histappend

8
Bạn có thể đăng nhập (dễ dàng thay đổi sau khi thực tế) và thậm chí chia sẻ các phiên screen, vì vậy trong trường hợp cực đoan, khách hàng của bạn có thể xem trực tiếp những gì bạn đang làm.
Sven

Nếu bạn muốn thêm một bản kiểm toán tốt hơn, bạn nên hướng dẫn họ kích hoạt đăng nhập từ xa nếu họ có khả năng
Fredi

Câu trả lời:


24

Điều duy nhất nảy ra trong đầu bạn là thêm --expiredatevào addusercuộc gọi.
Với điều đó, khách hàng biết rằng quyền truy cập của bạn sẽ tự động hết hạn vào một ngày cố định.

Anh ta vẫn cần tin tưởng bạn khi bạn có quyền truy cập root và vẫn có thể xóa cờ hết hạn.


15

Bạn có thể ghi lại các phiên của mình với tiện ích script (1) .

$ script session.log
Script started, file is session.log
$ ls
file1  session.log
exit
Script done, file is session.log

sau đó mọi thứ đều trong session.log.


Bạn có khuyên bạn nên chạy nó trên máy chủ của riêng bạn, trước khi bắt đầu phiên ssh cho một hệ thống từ xa, hoặc đưa nó vào như một phần của hồ sơ của tôi trên hệ thống từ xa không?
HBruijn

1
Tôi đoán bạn cũng có thể làm được - Tôi chỉ sử dụng nó một lần mà hầu hết mọi người không thực sự quan tâm.
user9517 hỗ trợ GoFundMonica

7

Vì bạn đã đăng nhập bằng khóa công khai SSH, nó sẽ thắt chặt mọi thứ một chút nếu bạn không cung cấp hàm băm mật khẩu; thay vào đó hãy bảo họ sử dụng adduser --disabled-password(tương đương, useradd -p '!'tôi nghĩ vậy), tương đương với PasswordAuthentication notài khoản đó một cách hiệu quả , cộng với việc không có ai đó rình mò email của bạn có thể bắt bẻ mật khẩu và đăng nhập như bạn.


3
Việc bổ sung Match user hbruijn \n PasswordAuthentication novào sshd_config sẽ ngăn mọi người đăng nhập từ xa bằng mật khẩu được giải mã của tôi (người dùng địa phương có khả năng sử dụng nó su - hbruijn) nhưng theo tôi biết tôi vẫn cần phải có mật khẩu hợp lệ cho các sudomục đích. Có lẽ tôi chỉ nên đặt lại mật khẩu sau khi đăng nhập?
HBruijn

Oh, điểm tốt về sudo. Tôi không chắc liệu một tài khoản ở --disabled-passwordtrạng thái có thể được cung cấp mật khẩu hay không bằng cách chạy passwdtừ tài khoản đó.
zwol

Ngoài ra những gì ngăn chặn bất cứ ai nghe trong băm mật khẩu bạn cung cấp? Phần đó là một liên kết yếu làm suy yếu việc sử dụng các khóa ssh trong đó không thành vấn đề nếu khóa công khai của bạn bị chặn.
JamesRyan

3
Liên kết yếu có thể được giải quyết bằng cách khách hàng cũng thêm một dòng trong tệp sudoers như thế hbruijn ALL=(ALL) NOPASSWD: /usr/bin/passwd hbruijnnào?
Dezza

2

Tại sao phải cung cấp mật khẩu, khi bạn sẽ sử dụng khóa chung / riêng.

Khóa công khai có nghĩa là được chia sẻ, vì vậy đây là những gì bạn nên sử dụng để trao đổi thông tin một cách an toàn, không phải mật khẩu băm.

sudo useradd --disabled-password hbruijn

Khi gửi khóa công khai của bạn, hãy xác minh dấu vân tay qua kênh thứ hai, như một cuộc gọi điện thoại, để bạn biết không ai thay đổi nó trên đường đi.

Vì bạn sẽ không có mật khẩu ngay bây giờ để sử dụng sudo, bạn cũng cần thay đổi dòng của mình trong tệp sudoers thành

hbruijn ALL=(ALL) NOPASSWD:ALL

Nếu bạn không thoải mái khi không có mật khẩu cho sudo và thực sự muốn có mật khẩu, bạn vẫn không cần phải gửi mật khẩu băm, hãy để tài khoản được tạo mà không cần mật khẩu, đặt khóa công khai và một khi tài khoản của bạn là thiết lập bạn có thể đăng nhập qua ssh và chạy passwdđể thiết lập mật khẩu của riêng bạn.

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.