Nhiều hệ thống Linux hoạt động như root


40

Trong nhóm của chúng tôi, chúng tôi có ba hệ thống Linux dày dạn kinh nghiệm phải quản trị vài chục máy chủ Debian. Trước đây chúng ta đều đã làm việc bằng root bằng xác thực khóa công khai SSH. Nhưng chúng tôi đã có một cuộc thảo luận về cách thực hành tốt nhất cho kịch bản đó và không thể đồng ý về bất cứ điều gì.

Khóa công khai SSH của mọi người được đưa vào ~ root / .ssh / ủy quyền_keys2

  • Ưu điểm: dễ sử dụng, chuyển tiếp tác nhân SSH hoạt động dễ dàng, ít chi phí
  • Nhược điểm: thiếu kiểm toán (bạn không bao giờ biết "gốc" nào đã thay đổi), tai nạn có nhiều khả năng

Sử dụng tài khoản cá nhân và sudo

Bằng cách đó, chúng tôi sẽ đăng nhập bằng tài khoản cá nhân bằng khóa công khai SSH và sử dụng sudo để thực hiện các tác vụ đơn lẻ với quyền root . Ngoài ra, chúng tôi có thể cung cấp cho mình nhóm "adm" cho phép chúng tôi xem các tệp nhật ký.

  • Ưu điểm: kiểm toán tốt, sudo ngăn chúng ta làm những việc ngu ngốc quá dễ dàng
  • Nhược điểm: Chuyển tiếp tác nhân SSH bị hỏng, thật rắc rối vì hầu như không có gì có thể được thực hiện dưới dạng không root

Sử dụng nhiều người dùng UID 0

Đây là một đề xuất rất độc đáo từ một trong những hệ thống. Ông đề nghị tạo ba người dùng trong / etc / passwd đều có UID 0 nhưng tên đăng nhập khác nhau. Ông tuyên bố rằng điều này thực sự không bị cấm và cho phép mọi người được UID 0 nhưng vẫn có thể kiểm toán.

  • Ưu điểm: Chuyển tiếp đại lý SSH hoạt động, kiểm toán có thể hoạt động (chưa được kiểm tra), không gặp rắc rối sudo
  • Nhược điểm: cảm thấy khá bẩn - không thể tìm thấy tài liệu ở bất cứ đâu như một cách được phép

Bạn muốn đề nghị gì?


2
Về tuyên bố "không thể tìm thấy tài liệu này ở bất cứ đâu như một cách được phép": Hãy xem -ocờ trong useraddtrang hướng dẫn. Cờ này ở đó để cho phép nhiều người dùng chia sẻ cùng một uid.
jlliagre

6
Bạn có thể giải thích ý của bạn bằng cách "ngắt chuyển tiếp tác nhân SSH" trong tùy chọn thứ hai không? Chúng tôi sử dụng điều này tại công việc của tôi và chuyển tiếp đại lý ssh hoạt động tốt.
Patrick

4
Bạn nên ssh ra khỏi tài khoản không root của bạn chứ không phải từ trong sudo.
Random832

4
Một hậu quả khác của phương pháp sudo: Bạn không còn có thể SCP / FTP làm root. Bất kỳ chuyển tập tin nào trước tiên sẽ cần phải được chuyển vào thư mục nhà của người đó và sau đó được sao chép trong thiết bị đầu cuối. Đây là một lợi thế và bất lợi tùy thuộc vào quan điểm.
dùng606723

1
Tại sao các hệ thống con rối / đầu bếp / ansible được xem xét?
Alex Holst

Câu trả lời:


64

Tùy chọn thứ hai là IMHO tốt nhất. Tài khoản cá nhân, truy cập sudo. Vô hiệu hóa quyền truy cập root thông qua SSH. Chúng tôi có vài trăm máy chủ và nửa tá quản trị viên hệ thống, đây là cách chúng tôi làm điều đó.

Làm thế nào để chuyển tiếp đại lý phá vỡ chính xác?

Ngoài ra, nếu gặp rắc rối như vậy khi sử dụng sudotrước mọi tác vụ, bạn có thể gọi vỏ sudo bằng sudo -shoặc chuyển sang vỏ gốc bằngsudo su -


10
Thay vì vô hiệu hóa hoàn toàn quyền truy cập root bằng SSH, tôi khuyên bạn nên truy cập root bằng SSH yêu cầu khóa, tạo một khóa với cụm từ khóa rất mạnh và giữ cho nó bị khóa chỉ để sử dụng khẩn cấp. Nếu bạn có quyền truy cập bàn điều khiển vĩnh viễn thì điều này ít hữu ích hơn, nhưng nếu bạn không có, nó có thể rất tiện dụng.
EightBitTony

17
Tôi khuyên bạn nên vô hiệu hóa đăng nhập root qua SSH cho mục đích bảo mật. Nếu bạn thực sự cần phải đăng nhập với quyền root, hãy đăng nhập với tư cách là người dùng không phải root và su.
taz

+1 .. Tôi sẽ đi xa hơn là nói "Tùy chọn thứ hai là tốt nhất". Tôi là lựa chọn hợp lý duy nhất. Tùy chọn một và ba làm giảm đáng kể tính bảo mật của hệ thống khỏi cả các cuộc tấn công và sai lầm bên ngoài. Bên cạnh đó, # 2 là cách hệ thống được thiết kế để sử dụng chủ yếu.
Ben Lee

2
Xin vui lòng, giải thích trên sudo -s. Tôi có đúng không khi hiểu rằng sudo -ikhông có sự khác biệt nào khi sử dụng su -hoặc về cơ bản đăng nhập bằng root ngoài mục nhập nhật ký bổ sung so với đăng nhập gốc đơn giản? Nếu đó là sự thật, làm thế nào và tại sao nó tốt hơn đăng nhập gốc?
PF4Public

9

Đối với chiến lược được đề xuất thứ 3, ngoài việc sử dụng các useradd -o -u userXXXtùy chọn theo khuyến nghị của @jlliagre, tôi không quen với việc chạy nhiều người dùng như một uid. (do đó nếu bạn tiếp tục với điều đó, tôi sẽ quan tâm nếu bạn có thể cập nhật bài đăng với bất kỳ vấn đề nào (hoặc thành công) phát sinh ...)

Tôi đoán quan sát đầu tiên của tôi về tùy chọn đầu tiên "Khóa công khai SSH của mọi người được đưa vào ~ root / .ssh / ủy quyền_keys2", trừ khi bạn hoàn toàn không bao giờ hoạt động trên bất kỳ hệ thống nào khác;

  1. sau đó ít nhất một thời gian , bạn sẽ phải làm việc với tài khoản người dùng vàsudo

Quan sát thứ hai sẽ là, nếu bạn làm việc trên các hệ thống mong muốn tuân thủ HIPAA, PCI-DSS hoặc các công cụ như CAPP và EAL, thì bạn sẽ phải giải quyết các vấn đề về sudo bởi vì;

  1. Đó là một tiêu chuẩn công nghiệp để cung cấp các tài khoản người dùng không phải root, có thể được kiểm toán, vô hiệu hóa, hết hạn, v.v., thường sử dụng một số cơ sở dữ liệu người dùng tập trung.

Vì thế; Sử dụng tài khoản cá nhân và sudo

Thật không may là là một sysadmin, hầu hết mọi thứ bạn cần làm trên một máy từ xa sẽ yêu cầu một số quyền nâng cao, tuy nhiên thật khó chịu khi hầu hết các công cụ và tiện ích dựa trên SSH đều bị hỏng trong khi bạn đang ở trong sudo

Do đó tôi có thể chuyển qua một số thủ thuật mà tôi sử dụng để khắc phục những phiền toái sudomà bạn đề cập. Vấn đề đầu tiên là nếu đăng nhập root bị chặn bằng cách sử dụng PermitRootLogin=nohoặc bạn không có root bằng khóa ssh, thì nó sẽ tạo cho các tệp SCP một cái gì đó của PITA.

Vấn đề 1 : Bạn muốn quét các tập tin từ phía từ xa, nhưng chúng yêu cầu quyền truy cập root, tuy nhiên bạn không thể đăng nhập vào hộp từ xa dưới dạng root trực tiếp.

Bored Solution : sao chép các tập tin vào thư mục chính, chown và scp xuống.

ssh userXXX@remotesystem, sudo su -Vv, cp /etc/somefilesđể /home/userXXX/somefiles, chown -R userXXX /home/userXXX/somefiles, sử dụng scp để lấy các tập tin từ xa.

Thực sự rất nhàm chán.

Giải pháp ít nhàm chán hơn : sftp hỗ trợ -s sftp_servercờ, do đó bạn có thể thực hiện một số thao tác như sau (nếu bạn đã cấu hình sudo in mật khẩu /etc/sudoers);

sftp  -s '/usr/bin/sudo /usr/libexec/openssh/sftp-server' \
userXXX@remotehost:/etc/resolv.conf 

(bạn cũng có thể sử dụng hack-around này với sshfs, nhưng tôi không chắc nó được khuyến nghị ... ;-)

Nếu bạn không có quyền sudo không có mật khẩu hoặc vì một số lý do được định cấu hình mà phương thức trên bị hỏng, tôi có thể đề xuất một phương thức truyền tệp ít nhàm chán hơn, để truy cập các tệp gốc từ xa.

Phương pháp chuyển tiếp cổng Ninja :

Đăng nhập vào máy chủ từ xa, nhưng xác định rằng cổng từ xa 3022 (có thể là bất cứ thứ gì miễn phí và không dành riêng cho quản trị viên, tức là> 1024) sẽ được chuyển tiếp về cổng 22 ở phía cục bộ.

 [localuser@localmachine ~]$ ssh userXXX@remotehost -R 3022:localhost:22
Last login: Mon May 21 05:46:07 2012 from 123.123.123.123
------------------------------------------------------------------------
This is a private system; blah blah blah
------------------------------------------------------------------------

Bắt nguồn từ thời trang bình thường ...

-bash-3.2$ sudo su -
[root@remotehost ~]# 

Bây giờ bạn có thể quét các tệp theo hướng khác để tránh bước nhàm chán nhàm chán khi tạo một bản sao trung gian của các tệp;

[root@remotehost ~]#  scp -o NoHostAuthenticationForLocalhost=yes \
 -P3022 /etc/resolv.conf localuser@localhost:~
localuser@localhost's password: 
resolv.conf                                 100%  
[root@remotehost ~]#  

 

 

Vấn đề 2: Chuyển tiếp tác nhân SSH : Nếu bạn tải cấu hình gốc, ví dụ: bằng cách chỉ định shell đăng nhập, các biến môi trường cần thiết để chuyển tiếp tác nhân SSH như SSH_AUTH_SOCKđược đặt lại, do đó chuyển tiếp tác nhân SSH bị "hỏng" bên dưới sudo su -.

Câu trả lời nửa nướng :

Bất cứ điều gì tải vỏ gốc đúng cách, sẽ thiết lập lại môi trường một cách hợp lý, tuy nhiên có một chút công việc bạn có thể sử dụng khi bạn cần quyền BÓNG gốc và khả năng sử dụng Tác nhân SSH, TRONG THỜI GIAN CÙNG

Điều này đạt được một loại hồ sơ chimera, thực sự không nên được sử dụng, bởi vì nó là một hack khó chịu , nhưng rất hữu ích khi bạn cần các tệp SCP từ máy chủ từ xa như root, đến một số máy chủ từ xa khác.

Dù sao, bạn có thể cho phép người dùng của bạn có thể bảo tồn các biến ENV của họ, bằng cách đặt các mục sau trong sudoers;

 Defaults:userXXX    !env_reset

điều này cho phép bạn tạo ra các môi trường đăng nhập lai khó chịu như vậy;

đăng nhập như bình thường;

[localuser@localmachine ~]$ ssh userXXX@remotehost 
Last login: Mon May 21 12:33:12 2012 from 123.123.123.123
------------------------------------------------------------------------
This is a private system; blah blah blah
------------------------------------------------------------------------
-bash-3.2$ env | grep SSH_AUTH
SSH_AUTH_SOCK=/tmp/ssh-qwO715/agent.1971

tạo một vỏ bash, chạy /root/.profile/root/.bashrc. nhưng bảo quảnSSH_AUTH_SOCK

-bash-3.2$ sudo -E bash -l

Vì vậy, shell này có quyền root và root $PATH(nhưng một thư mục home borked ...)

bash-3.2# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=user_u:system_r:unconfined_t
bash-3.2# echo $PATH
/usr/kerberos/sbin:/usr/local/sbin:/usr/sbin:/sbin:/home/xtrabm/xtrabackup-manager:/usr/kerberos/bin:/opt/admin/bin:/usr/local/bin:/bin:/usr/bin:/opt/mx/bin

Nhưng bạn có thể sử dụng lời mời đó để thực hiện những việc yêu cầu root sudo từ xa, nhưng cũng có quyền truy cập tác nhân SSH như vậy;

bash-3.2# scp /root/.ssh/authorized_keys ssh-agent-user@some-other-remote-host:~
/root/.ssh/authorized_keys              100%  126     0.1KB/s   00:00    
bash-3.2# 

1
Tôi thích những cái hack.
sjbotha

2

Tùy chọn thứ 3 có vẻ lý tưởng - nhưng bạn đã thực sự thử nó để xem điều gì đang xảy ra chưa? Mặc dù bạn có thể thấy tên người dùng bổ sung trong bước xác thực, mọi tra cứu ngược sẽ trả về cùng một giá trị.

Cho phép truy cập ssh trực tiếp gốc là một ý tưởng tồi, ngay cả khi máy của bạn không được kết nối với internet / sử dụng mật khẩu mạnh.

Thông thường tôi sử dụng 'su' thay vì sudo để truy cập root.


4
Thêm nhiều người dùng với cùng một UID sẽ thêm các vấn đề. Khi các ứng dụng tìm kiếm tên người dùng cho số UID, họ có thể tra cứu tên người dùng sai. Các ứng dụng chạy dưới root có thể nghĩ rằng chúng đang chạy sai người dùng và rất nhiều lỗi lạ sẽ bắt đầu xuất hiện (tôi đã thử nó một lần).
Patrick

8
Lựa chọn thứ ba chỉ là một ý tưởng tồi tệ đẫm máu . Về cơ bản, bạn đang phá vỡ mối quan hệ 1: 1 giữa UID và tên người dùng và thực sự mọi thứ trong unix đều mong muốn mối quan hệ đó được giữ vững. Chỉ vì không có quy tắc rõ ràng không làm điều đó không có nghĩa đó là một ý tưởng tốt.
Shadur

Xin lỗi, nhưng lựa chọn thứ ba là một ý tưởng khủng khiếp. Có nhiều UID 0 người đăng nhập chỉ là yêu cầu các vấn đề được nhân lên. Tùy chọn số 2 là duy nhất lành mạnh.
Doug

Tùy chọn thứ ba không xứng đáng với nhiều downvote. Không có lệnh nào trong Unix Tôi biết rằng bị nhầm lẫn bởi thủ thuật này, mọi người có thể nhưng các lệnh không nên quan tâm. Nó chỉ là một tên đăng nhập khác nhưng ngay khi bạn đăng nhập, tên đầu tiên được tìm thấy khớp với uid trong cơ sở dữ liệu mật khẩu được sử dụng, vì vậy hãy đảm bảo tên người dùng thực (ở đây là root) xuất hiện đầu tiên ở đó.
jlliagre

@Patrick Bạn đã thấy điều này trong thực tế? Nhiều như tôi đã thử nghiệm, sau đó các ứng dụng chọn rootngười dùng nếu rootngười dùng là người đầu tiên sử dụng /etc/passwdUID 0. Tôi có xu hướng đồng ý với jlliagre. Nhược điểm duy nhất mà tôi thấy, là mỗi người dùng là một rootngười dùng và đôi khi có thể khó hiểu khi biết ai đã làm gì.
Martin

2

Tôi sử dụng (1), nhưng tôi đã gõ

rm -rf / tmp *

vào một ngày xấu số. Tôi có thể thấy đủ tệ nếu bạn có nhiều hơn một quản trị viên.

(2) Có lẽ được thiết kế nhiều hơn - và bạn có thể trở thành root chính thức thông qua sudo su -. Tai nạn vẫn có thể mặc dù.

(3) Tôi sẽ không chạm vào sà lan. Tôi đã sử dụng nó trên Suns, để có một tài khoản root không phải barebone-sh (nếu tôi nhớ chính xác) nhưng nó không bao giờ mạnh mẽ - cộng với tôi nghi ngờ nó sẽ rất dễ nghe.


2

Chắc chắn trả lời 2.

  1. Có nghĩa là bạn đang cho phép truy cập SSH dưới dạng root. Nếu cỗ máy này theo bất kỳ cách nào mà công chúng phải đối mặt, đây chỉ là một ý tưởng tồi tệ; trở lại khi tôi chạy SSH trên cổng 22, VPS của tôi đã nhận được nhiều lần thử hàng giờ để xác thực là root. Tôi đã có một IDS cơ bản được thiết lập để ghi nhật ký và cấm các IP thực hiện nhiều lần thất bại, nhưng chúng vẫn tiếp tục. Rất may, tôi đã vô hiệu hóa quyền truy cập SSH với tư cách là người dùng root ngay khi tôi có tài khoản riêng và sudo được cấu hình. Ngoài ra, bạn hầu như không có dấu vết kiểm toán làm việc này.

  2. Cung cấp quyền truy cập root khi cần thiết. Vâng, bạn hầu như không có bất kỳ đặc quyền nào với tư cách là người dùng chuẩn, nhưng đây chính xác là những gì bạn muốn; nếu một tài khoản bị xâm phạm, bạn muốn nó bị hạn chế trong khả năng của nó. Bạn muốn bất kỳ siêu người dùng truy cập để yêu cầu nhập lại mật khẩu. Ngoài ra, quyền truy cập sudo có thể được kiểm soát thông qua các nhóm người dùng và bị hạn chế đối với các lệnh cụ thể nếu bạn muốn, cho bạn quyền kiểm soát nhiều hơn đối với những người có quyền truy cập vào cái gì. Ngoài ra, các lệnh chạy như sudo có thể được ghi lại, vì vậy nó cung cấp một lộ trình kiểm toán tốt hơn nhiều nếu xảy ra sự cố. Ồ, và đừng chỉ chạy "sudo su -" ngay khi bạn đăng nhập. Đó là một thực tế khủng khiếp.

  3. Ý tưởng của sysadmin của bạn là xấu. Và anh ta nên cảm thấy tồi tệ. Không, các máy * nix có thể sẽ không ngăn bạn làm điều này, nhưng cả hệ thống tệp của bạn và hầu như mọi ứng dụng ngoài đó đều mong muốn mỗi người dùng có một UID duy nhất. Nếu bạn bắt đầu đi trên con đường này, tôi có thể đảm bảo rằng bạn sẽ gặp vấn đề. Có thể không ngay lập tức, nhưng cuối cùng. Ví dụ, mặc dù hiển thị tên thân thiện, các tệp và thư mục sử dụng số UID để chỉ định chủ sở hữu của chúng; nếu bạn gặp phải một chương trình có vấn đề với các UID trùng lặp, bạn không thể thay đổi UID trong tệp mật khẩu của mình sau này mà không phải thực hiện một số thao tác dọn dẹp hệ thống tệp thủ công nghiêm trọng.

sudolà con đường phía trước. Nó có thể gây thêm rắc rối với việc chạy các lệnh dưới quyền root, nhưng nó cung cấp cho bạn một hộp an toàn hơn, cả về quyền truy cập và kiểm toán.


1

Chắc chắn tùy chọn 2, nhưng sử dụng các nhóm để cung cấp cho mỗi người dùng càng nhiều quyền kiểm soát càng tốt mà không cần sử dụng sudo. sudo trước mỗi lệnh mất một nửa lợi ích vì bạn luôn ở trong khu vực nguy hiểm. Nếu bạn làm cho các thư mục có liên quan có thể ghi được bởi các sysadins mà không có sudo, bạn sẽ trả lại sudo cho ngoại lệ khiến mọi người cảm thấy an toàn hơn.


1

Ngày xưa, sudo không tồn tại. Do đó, việc có nhiều người dùng UID 0 là lựa chọn duy nhất có sẵn. Nhưng nó vẫn không tốt, đáng chú ý là đăng nhập dựa trên UID để có được tên người dùng.

Ngày nay, sudo là giải pháp thích hợp duy nhất. Quên bất cứ điều gì khác.


0

Nó được ghi nhận trong thực tế. Các thông báo BSD đã có tài khoản toor của họ trong một thời gian dài và người dùng bashroot có xu hướng được chấp nhận thực hành trên các hệ thống trong đó csh là tiêu chuẩn (chấp nhận sai lầm;)


0

Có lẽ tôi lạ, nhưng phương pháp (3) cũng là thứ xuất hiện trong đầu tôi. Ưu điểm: bạn sẽ có mọi tên người dùng trong nhật ký và sẽ biết ai đã làm gì với quyền root. Nhược điểm: mỗi người đều là root mọi lúc, vì vậy sai lầm có thể là thảm họa.

Tôi muốn hỏi tại sao bạn cần tất cả quản trị viên để có quyền truy cập root. Cả 3 phương pháp bạn đề nghị có một nhược điểm riêng biệt: một lần một admin điều hành một sudo bash -lhoặc sudo su -hoặc tương tự, bạn sẽ mất khả năng của bạn để theo dõi ai làm gì và sau đó, một sai lầm có thể thảm khốc. Hơn nữa, trong trường hợp có thể có hành vi sai trái, điều này thậm chí có thể kết thúc tồi tệ hơn rất nhiều.

Thay vào đó, bạn có thể muốn xem xét đi một cách khác:

  • Tạo người dùng quản trị của bạn như người dùng thông thường
  • Quyết định ai cần làm công việc gì (quản lý apache / quản lý postfix, v.v.)
  • Thêm người dùng vào các nhóm liên quan (chẳng hạn như thêm "martin" vào "postfix" và "mail", "amavis" nếu bạn sử dụng nó, v.v.)
  • Sửa quyền (chmod -R g + w postfix: postfix / etc / postfix)
  • chỉ cung cấp quyền hạn sudo tương đối: (visudo -> cho phép martin sử dụng /etc/init.d/postfix, / usr / bin / postuper, v.v.)

Bằng cách này, martin sẽ có thể xử lý hậu tố một cách an toàn và trong trường hợp có lỗi hoặc hành vi sai, bạn chỉ mất hệ thống hậu tố của mình chứ không phải toàn bộ máy chủ.

Logic tương tự có thể được áp dụng cho bất kỳ hệ thống con nào khác, chẳng hạn như apache, mysql, v.v.

Tất nhiên, đây hoàn toàn là lý thuyết tại thời điểm này, và có thể khó thiết lập. Nó trông giống như một cách tốt hơn để đi tho. Ít nhất cho tôi. Nếu bất cứ ai thử điều này, xin vui lòng cho tôi biết làm thế nào nó đi.


Tôi nên thêm xử lý các kết nối SSH là khá cơ bản trong bối cảnh này. Dù bạn sử dụng phương pháp nào, không cho phép đăng nhập root qua SSH, hãy để người dùng cá nhân ssh với thông tin đăng nhập của riêng họ và xử lý sudo / nosudo / etc từ đó.
Tuncay Göncüoğlu
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.