สำหรับกลยุทธ์ที่แนะนำครั้งที่ 3 นอกเหนือจากการตรวจสอบuseradd -o -u userXXX
ตัวเลือกตามที่ @jlliagre แนะนำฉันไม่คุ้นเคยกับการเรียกใช้ผู้ใช้หลายคนพร้อมกันกับ uid เดียวกัน (ดังนั้นหากคุณดำเนินการต่อไปฉันจะสนใจถ้าคุณสามารถอัปเดตโพสต์ด้วยปัญหาใด ๆ (หรือความสำเร็จ) ที่เกิดขึ้น ... )
ฉันเดาว่าการสังเกตครั้งแรกของฉันเกี่ยวกับตัวเลือกแรก "คีย์สาธารณะ SSH ของทุกคนจะถูกใส่ไว้ใน ~ root / .ssh / authorized_keys2" นั่นคือถ้าคุณไม่เคยทำงานในระบบอื่นใดเลย
- อย่างน้อยก็คุณจะต้องทำงานกับบัญชีผู้ใช้และ
sudo
ข้อสังเกตที่สองคือถ้าคุณทำงานบนระบบที่ต้องการ HIPAA, PCI-DSS หรือสิ่งอื่น ๆ เช่น CAPP และ EAL คุณจะต้องแก้ไขปัญหาของ sudo เพราะ;
- เป็นมาตรฐานอุตสาหกรรมในการจัดทำบัญชีผู้ใช้ที่ไม่ใช่รูทซึ่งสามารถตรวจสอบได้ถูกปิดใช้งานหมดอายุและอื่น ๆ โดยทั่วไปจะใช้ฐานข้อมูลผู้ใช้จากส่วนกลาง
ดังนั้น; ใช้บัญชีส่วนตัวและ sudo
โชคไม่ดีที่ในฐานะระบบดูแลระบบเกือบทุกอย่างที่คุณต้องทำในเครื่องรีโมตจะต้องได้รับการยกระดับสิทธิ์อย่างไรก็ตามมันน่ารำคาญที่เครื่องมือและยูทิลิตี้ที่ใช้ SSH ส่วนใหญ่ถูกจับในขณะที่คุณอยู่ sudo
ดังนั้นฉันสามารถส่งต่อเทคนิคบางอย่างที่ฉันใช้เพื่อแก้ไขสิ่งsudo
ที่คุณพูดถึง ปัญหาแรกคือหากการเข้าสู่ระบบรูทถูกบล็อกโดยใช้PermitRootLogin=no
หรือคุณไม่มีรูทโดยใช้คีย์ ssh มันจะทำให้ไฟล์ของ PITA เป็นไฟล์ SCP
ปัญหาที่ 1 : คุณต้องการ scp ไฟล์จากด้านระยะไกล แต่พวกเขาต้องการการเข้าถึงราก แต่คุณไม่สามารถเข้าสู่กล่องระยะไกลในฐานะที่เป็นรากโดยตรง
Boring Solution : คัดลอกไฟล์ไปยังโฮมไดเร็กตอรี่, chown และ scp down
ssh userXXX@remotesystem
, sudo su -
etc, cp /etc/somefiles
ถึง/home/userXXX/somefiles
, chown -R userXXX /home/userXXX/somefiles
ใช้ scp เพื่อดึงไฟล์จากระยะไกล
น่าเบื่อมากอย่างแน่นอน
Less Boring Solution : sftp รองรับการ-s sftp_server
ตั้งค่าสถานะดังนั้นคุณสามารถทำสิ่งต่อไปนี้ (ถ้าคุณกำหนดค่า sudo โดยใช้รหัสผ่านน้อยกว่า /etc/sudoers
);
sftp -s '/usr/bin/sudo /usr/libexec/openssh/sftp-server' \
userXXX@remotehost:/etc/resolv.conf
(คุณสามารถใช้การแฮ็กนี้กับ sshfs ได้ แต่ฉันไม่แน่ใจว่ามันแนะนำ ... ;-)
หากคุณไม่มีสิทธิ์ sudo น้อยกว่ารหัสผ่านหรือด้วยเหตุผลบางอย่างที่กำหนดไว้ว่าวิธีการข้างต้นใช้งานไม่ได้ฉันสามารถแนะนำวิธีการถ่ายโอนไฟล์ที่น่าเบื่อน้อยกว่าเพื่อเข้าถึงไฟล์รูทระยะไกล
วิธีการส่งต่อพอร์ตนินจา :
ล็อกอินเข้าสู่รีโมตโฮสต์ แต่ระบุว่ารีโมตพอร์ต 3022 (สามารถว่างได้และไม่สงวนไว้สำหรับผู้ดูแลระบบเช่น> 1024) เพื่อส่งต่อกลับไปยังพอร์ต 22 ที่ด้านโลคัล
[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
------------------------------------------------------------------------
รับรากในแบบปกติ ...
-bash-3.2$ sudo su -
[root@remotehost ~]#
ตอนนี้คุณสามารถคัดลอกไฟล์ไปในอีกทางหนึ่งโดยหลีกเลี่ยงขั้นตอนที่น่าเบื่อในการทำสำเนากลางของไฟล์
[root@remotehost ~]# scp -o NoHostAuthenticationForLocalhost=yes \
-P3022 /etc/resolv.conf localuser@localhost:~
localuser@localhost's password:
resolv.conf 100%
[root@remotehost ~]#
ปัญหาที่ 2: การส่งต่อตัวแทน SSH : ถ้าคุณโหลดรายละเอียดรากเช่นโดยการระบุเปลือกเข้าสู่ระบบเป็นตัวแปรสภาพแวดล้อมที่จำเป็นสำหรับตัวแทน SSH ส่งต่อเช่นSSH_AUTH_SOCK
มีการตั้งค่าจึงส่งต่อตัวแทน SSH คือ "เสีย" sudo su -
ภายใต้
คำตอบที่อบครึ่ง :
สิ่งใดก็ตามที่โหลดรูทเชลล์อย่างถูกต้องจะทำการรีเซ็ตสภาพแวดล้อมอย่างถูกต้องอย่างไรก็ตามมีการแก้ไขเล็กน้อยที่คุณสามารถใช้เมื่อคุณต้องการการอนุญาตรูททั้งสองและความสามารถในการใช้ SSH Agent ในเวลาเดียวกัน
การทำเช่นนี้จะทำให้ได้รับโปรไฟล์ความฝันที่ไม่ควรนำมาใช้เพราะมันเป็นแฮ็คที่น่ารังเกียจแต่มีประโยชน์เมื่อคุณต้องการไฟล์ SCP จากโฮสต์ระยะไกลในฐานะรูทไปยังโฮสต์ระยะไกลอื่น ๆ
อย่างไรก็ตามคุณสามารถเปิดใช้งานให้ผู้ใช้ของคุณสามารถรักษาตัวแปร ENV ของพวกเขาโดยการตั้งค่าต่อไปนี้ใน sudoers;
Defaults:userXXX !env_reset
สิ่งนี้ช่วยให้คุณสร้างสภาพแวดล้อมการเข้าสู่ระบบไฮบริดที่น่ารังเกียจเช่นนั้น
เข้าสู่ระบบตามปกติ
[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
สร้างเปลือกทุบตีวิ่งที่และ/root/.profile
/root/.bashrc
แต่เก็บรักษาSSH_AUTH_SOCK
-bash-3.2$ sudo -E bash -l
ดังนั้นเชลล์นี้มีสิทธิ์รูทและรูท$PATH
(แต่เป็นโฮมไดเรกทอรี 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
แต่คุณสามารถใช้การร้องขอนั้นเพื่อทำสิ่งต่าง ๆ ที่ต้องการรูท sudo จากระยะไกล แต่ยังสามารถเข้าถึงเอเจนต์ SSH ได้เช่นกัน
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#
-o
ตั้งค่าสถานะในuseradd
หน้าคู่มือ การตั้งค่าสถานะนี้มีไว้เพื่ออนุญาตให้ผู้ใช้หลายคนแบ่งปัน uid เดียวกัน