Linux: ตั้งค่าสำหรับดูแลระบบระยะไกล


51

ทุกครั้งที่ฉันได้รับคำขอแปลก ๆ เพื่อให้การสนับสนุนระยะไกลการแก้ไขปัญหาและ / หรือการปรับแต่งประสิทธิภาพในระบบ Linux

บริษัท ขนาดใหญ่มักมีขั้นตอนที่กำหนดไว้แล้วอย่างดีในการให้การเข้าถึงระยะไกลแก่ผู้ขาย / ซัพพลายเออร์และฉันต้องปฏิบัติตามนั้น (ให้ดีขึ้นหรือแย่ลง.)

ในทางกลับกัน บริษัท ขนาดเล็กและบุคคลทั่วไปหันมาหาฉันเพื่อสอนพวกเขาด้วยสิ่งที่พวกเขาต้องทำเพื่อจัดตั้งฉันขึ้นมา โดยทั่วไปแล้วเซิร์ฟเวอร์ของพวกเขาจะเชื่อมต่อโดยตรงกับอินเทอร์เน็ตและมาตรการรักษาความปลอดภัยที่มีอยู่ประกอบด้วยค่าเริ่มต้นสำหรับการแจกจ่าย Linux ของพวกเขา

เกือบทุกครั้งที่ฉันจะต้องเข้าถึงระดับรูทและใครก็ตามที่จะตั้งค่าการเข้าถึงสำหรับฉันไม่ใช่ผู้เชี่ยวชาญระบบ ฉันไม่ต้องการรหัสผ่านรูทของพวกเขาและฉันก็ค่อนข้างแน่ใจว่าการกระทำของฉันจะไม่เป็นอันตราย แต่ฉันควรให้คำแนะนำง่ายๆอะไรกับ:

  • ตั้งค่าบัญชีและแลกเปลี่ยนข้อมูลรับรองอย่างปลอดภัย
  • ตั้งค่าการเข้าถึงรูท (sudo)
  • จำกัด การเข้าถึงบัญชีของฉัน
  • ให้หลักฐานการตรวจสอบ

(และใช่ฉันรู้และเตือนลูกค้าเหล่านั้นเสมอว่าเมื่อฉันมีการเข้าถึงของผู้ดูแลระบบการซ่อนการกระทำที่เป็นอันตรายใด ๆ เป็นเรื่องเล็กน้อย แต่สมมติว่าฉันไม่มีอะไรจะซ่อนและมีส่วนร่วมในการสร้างหลักฐานการตรวจสอบ)

สิ่งที่สามารถปรับปรุงได้ในขั้นตอนด้านล่าง


ชุดคำสั่งปัจจุบันของฉัน:

ตั้งค่าบัญชีและแลกเปลี่ยนข้อมูลรับรองอย่างปลอดภัย

ฉันให้แฮชรหัสผ่านและขอให้บัญชีของฉันได้รับการตั้งค่าด้วยรหัสผ่านที่เข้ารหัสดังนั้นเราไม่จำเป็นต้องส่งรหัสผ่านแบบข้อความที่ชัดเจนฉันเป็นคนเดียวที่รู้รหัสผ่านและเราไม่ได้เริ่มด้วย รหัสผ่านที่คาดเดาได้ยาก

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

ฉันให้คีย์สาธารณะ SSH (คู่คีย์เฉพาะต่อลูกค้า) และขอให้พวกเขาตั้งค่าบัญชีของฉันด้วยคีย์นั้น:

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 

ตั้งค่าการเข้าถึงรูท (sudo)

ฉันขอให้ลูกค้าตั้งค่า sudo ให้ฉันด้วยsudo sudoeditหรือโดยใช้โปรแกรมแก้ไขที่ชื่นชอบและผนวกไปที่/etc/sudoers:

hbruijn ALL=(ALL) ALL

จำกัด การเข้าถึงบัญชีของฉัน

โดยทั่วไปแล้วลูกค้ายังอนุญาตให้ลงชื่อเข้าใช้ด้วยรหัสผ่านและฉันขอให้พวกเขาเพิ่มสองบรรทัดต่อไปนี้/etc/ssh/sshd_configเพื่อ จำกัด บัญชีของฉันไว้ที่คีย์ SSH เท่านั้น:

Match user hbruijn
PasswordAuthentication no

ฉันจะกำหนดเส้นทางการเข้าถึง SSH ทั้งหมดของฉันผ่านโฮสต์ป้อมปราการเดียวเพื่อให้ที่อยู่ IP แบบคงที่เดียว (เช่น 192.168.1.2) และ / หรือระบุช่วงที่อยู่ IP ที่ ISP ของฉันใช้ (เช่น 10.80 0.0 / 14) ไคลเอ็นต์อาจต้องเพิ่มรายการเหล่านั้นในรายการที่อนุญาตของไฟร์วอลล์หากการเข้าถึง SSH ถูก จำกัด (มักจะไม่ถูกกรองมากกว่า ssh)

คุณเห็นที่อยู่ IP เหล่านั้นเป็นfrom=ข้อ จำกัด ใน~.ssh/authorized_keysไฟล์ที่ จำกัด โฮสต์ที่คีย์ของฉันสามารถใช้เพื่อเข้าถึงระบบของพวกเขา

ให้หลักฐานการตรวจสอบ

จนถึงขณะนี้ยังไม่มีลูกค้าถามฉันเพื่อสิ่งนั้นและฉันยังไม่ได้ทำอะไรที่เฉพาะเจาะจงนอกเหนือจากที่กล่าวมาเพื่อปกปิดตูดของฉัน:

ฉันพยายามที่จะใช้อย่างต่อเนื่องsudoกับคำสั่งของแต่ละบุคคลและพยายามที่จะป้องกันไม่ให้ใช้หรือsudo -i sudo su -ฉันพยายามไม่ใช้sudo vim /path/to/file แต่ใช้sudoeditแทน

โดยค่าเริ่มต้นการกระทำที่มีสิทธิ์ทั้งหมดจะถูกบันทึกไว้ใน syslog (และ/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

ฉันส่วนใหญ่ยอมแพ้ในการปรับแต่งสภาพแวดล้อมการทำงานของฉันสิ่งเดียวที่ฉันทำคือการตั้งค่าต่อไปนี้ในการ~/.bash_profileเพิ่มประวัติทุบตีของฉันและรวมถึงการประทับเวลา:

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
คุณสามารถเข้าสู่ระบบ (ง่ายต่อการเปลี่ยนแปลงหลังจากข้อเท็จจริง) และแม้กระทั่งแบ่งปันเซสชันในscreenดังนั้นในกรณีที่รุนแรงลูกค้าของคุณสามารถดูการถ่ายทอดสดในสิ่งที่คุณกำลังทำอยู่
สเวน

หากคุณต้องการเพิ่มหลักฐานการตรวจสอบที่ดีกว่าคุณควรแนะนำให้พวกเขาเปิดใช้งานการบันทึกระยะไกลหากพวกเขามีความเป็นไปได้
Fredi

คำตอบ:


24

สิ่งเดียวที่อยู่ในใจจะเพิ่ม--expiredateการadduserโทร
เมื่อลูกค้าทราบว่าการเข้าถึงของคุณจะหมดอายุโดยอัตโนมัติในวันที่กำหนด

เขายังคงต้องเชื่อใจคุณเนื่องจากคุณมีการเข้าถึงรูทและยังสามารถลบการตั้งค่าสถานะที่หมดอายุได้


15

คุณสามารถบันทึกเซสชันของคุณด้วยยูทิลิตี้สคริปต์ (1)

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

ดังนั้นทุกอย่างอยู่ในเซสชั่น


คุณจะแนะนำให้เรียกใช้งานบนโฮสต์ของคุณเองก่อนที่จะเริ่มเซสชัน ssh กับระบบรีโมตหรือรวมเป็นส่วนหนึ่งของโปรไฟล์ของฉันบนระบบรีโมต
HBruijn

1
ฉันเดาว่าคุณสามารถทำอย่างใดอย่างหนึ่ง - ฉันใช้มันเพียงครั้งเดียวส่วนใหญ่คนไม่สนใจจริงๆ
user9517 รองรับ GoFundMonica

7

เนื่องจากคุณกำลังเข้าสู่ระบบด้วยรหัสสาธารณะ SSH มันจะกระชับขึ้นเล็กน้อยถ้าคุณไม่ได้ใส่รหัสผ่านแฮช แทนที่จะบอกให้พวกเขาใช้adduser --disabled-password(อย่างเท่าเทียมกันuseradd -p '!'ฉันคิดว่า) ซึ่งเทียบเท่ากับPasswordAuthentication noบัญชีนั้นได้อย่างมีประสิทธิภาพและไม่มีโอกาสที่คนที่สอดแนมในอีเมลของคุณสามารถบังคับแฮชรหัสผ่านและเข้าสู่ระบบของคุณได้


3
การเพิ่มของMatch user hbruijn \n PasswordAuthentication noไปยัง sshd_config ควรป้องกันไม่ให้ใครก็ตามเข้าสู่ระบบจากระยะไกลด้วยรหัสผ่านที่ถอดรหัสของฉัน (ผู้ใช้ในพื้นที่สามารถใช้งานได้ด้วยsu - hbruijn) แต่เท่าที่ฉันรู้ฉันยังต้องมีรหัสผ่านที่ถูกต้องสำหรับsudoวัตถุประสงค์ บางทีฉันควรตั้งรหัสผ่านใหม่หลังจากเข้าสู่ระบบ?
HBruijn

โอ้จุดที่ดีเกี่ยวกับ sudo ฉันไม่แน่ใจว่าบัญชีใน--disabled-passwordสถานะสามารถรับรหัสผ่านโดยเรียกใช้passwdจากบัญชีนั้น
zwol

นอกจากนี้สิ่งที่หยุดทุกคนฟังในรหัสผ่านแฮชคุณให้? ส่วนนั้นเป็นลิงค์อ่อนแอที่ทำลายการใช้คีย์ ssh โดยที่ไม่สำคัญว่ารหัสสาธารณะของคุณถูกดักข้อมูลหรือไม่
JamesRyan

3
สามารถที่เชื่อมโยงอ่อนแอได้รับการแก้ไขโดยมีลูกค้ายังเพิ่มบรรทัดใน sudoers ไฟล์เหมือนhbruijn ALL=(ALL) NOPASSWD: /usr/bin/passwd hbruijn?
Dezza

2

ทำไมต้องให้รหัสผ่านเมื่อคุณจะใช้กุญแจสาธารณะ / ส่วนตัว

กุญแจสาธารณะนั้นมีไว้เพื่อการแบ่งปันดังนั้นนี่คือสิ่งที่คุณควรใช้เพื่อแลกเปลี่ยนข้อมูลประจำตัวอย่างปลอดภัยไม่ใช่รหัสผ่านที่แฮช

sudo useradd --disabled-password hbruijn

เมื่อส่งกุญแจสาธารณะของคุณให้ตรวจสอบลายนิ้วมือผ่านช่องทางที่สองเช่นโทรศัพท์เพื่อให้คุณรู้ว่าไม่มีใครเปลี่ยนแปลงได้

เนื่องจากคุณไม่มีรหัสผ่านในการใช้งาน sudo ตอนนี้คุณต้องแก้ไขบรรทัดของคุณในไฟล์ sudoers ด้วย

hbruijn ALL=(ALL) NOPASSWD:ALL

หากคุณไม่สะดวกกับการไม่มีรหัสผ่านสำหรับ sudo และต้องการรหัสผ่านจริงๆคุณไม่จำเป็นต้องส่งรหัสผ่านที่ถูกแฮชให้สร้างบัญชีโดยไม่ใช้รหัสผ่านตั้งรหัสสาธารณะของคุณและเมื่อบัญชีของคุณเป็น ตั้งค่าคุณสามารถเข้าสู่ระบบผ่าน ssh และเรียกใช้ passwdเพื่อตั้งรหัสผ่านของคุณเอง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.