มันเป็นการปฏิบัติที่ไม่ถูกต้องหรือไม่หากตั้งค่าเชลล์ของรูทเป็นอย่างอื่นที่ไม่ใช่ค่าเริ่มต้น


16

เมื่อเพื่อนของฉัน (ซึ่งเป็นผู้ใช้ Unix / Linux ที่มีประสบการณ์) บอกฉันว่าการตั้งค่าเชลล์ของรูทเป็นอย่างอื่นที่ไม่ใช่ sh (เช่น bash หรือ zsh) อาจสร้างปัญหาได้เนื่องจากสคริปต์บางตัวอาจสันนิษฐานว่าเชลล์เป็น sh .

อย่างไรก็ตามฉันคิดว่า Ubuntu มีรูทเชลล์เริ่มต้นที่ตั้งค่าเป็น bash และ Gentoo ก็ใช้ bash ด้วย ใครบางคนสามารถทำลายตำนานหรือไม่

คำตอบ:


12

ใช่. หากระบบล้มเหลวระหว่างการบูทคุณสามารถล็อกอินเข้ารูทเชลล์ได้ หากคุณมี / usr แยกต่างหากบางเชลล์สามารถล้มเหลวในการเริ่มต้นได้สำเร็จ

ฉันแนะนำให้สร้างบัญชีtoor(uid 0, gid 0) ด้วยเชลล์ที่ไม่ได้มาตรฐานในขณะที่รูทด้านซ้ายมีเชลล์เริ่มต้น


นี้เกิดขึ้นกับผมเมื่อผมปรับรุ่นจาก FBSD 7.2-8.0 bashและฉันลืมที่จะสร้าง ฉัน booted ในโหมดผู้เดียวในการแก้ไขปัญหา แต่ทำงานเพียงเพราะ/bin/shยังคงเชื่อมโยงกับFBSDส้อม 'ของและไม่ได้bourne bash
gvkv

เพียงเพื่อทำให้สิ่งต่าง ๆ ชัดเจนขึ้นถ้าฉันติดตั้งพูดzshและ/usrฉันก็จะได้รับความเสียหายอย่างใด? แต่ระบบของฉันได้/bin/shชี้ไปที่/bin/bashและbashตัวเองทำไมจะไม่shได้รับผลกระทบ?
phunehehe

1
ค่าเริ่มต้นสำหรับรูท "รับประกัน" ว่าระบบจะบู๊ต - คู่มือการอัพเกรดจะดูแลเกี่ยวกับความสามารถในการล็อกอินเข้าสู่รูทอย่างน้อยที่สุด อย่างไรก็ตามมันอาจไม่เป็นอย่างอื่น การแก้ปัญหาคือการทำซ้ำบัญชีรูทโดย toor ด้วยเชลล์ที่ไม่ใช่ค่าเริ่มต้นสำหรับการใช้งานในชีวิตประจำวันและรักษารูตตามเดิม
Maciej Piechotka

1
zshไม่ควรอยู่ใน/usr/bin/หากมีการติดตั้งผิด กระสุนทั้งหมดควรอยู่ใน/bin
xenoterracide

1
@xenoterracide: zsh บน Gentoo อยู่/binแต่เก็บไฟล์/usr/shareไว้ นอกจากนี้ฉันชัดเจนระบุว่าปัญหาคือในระหว่างการเข้าสู่ระบบในระหว่างการบูต (เมื่อบริการบางอย่างล้มเหลว)
Maciej Piechotka

7

ไม่ควรเป็นปัญหา

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

โปรแกรมเดียวที่ฉันนึกได้ว่าใช้ข้อมูลเชลล์บัญชีผู้ใช้ (นอกเหนือจากกระบวนการล็อกอิน) คือ procmail ตลกจริงๆถ้าผู้ใช้ของคุณตั้งเป็น shell / bin / false บน mailserver ... แต่คุณมักจะไม่เรียกใช้ procmail เหมือนรูท

ผู้สมัครคนอื่นก็คือเส้นในรากหน้าของราก ฉันไม่รู้ว่านโยบายของ crond คือเชลล์ที่จะใช้


$ SHELL ได้รับการตั้งค่าเป็น / bin / sh โดย crondaemon เมื่อเริ่มต้น
echox

3

สคริปต์ที่เขียนขึ้นสำหรับเชลล์ bourne จะใช้เวลาส่วนใหญ่กับ BASH หรือ ZSH หรือ $ foo โดยไม่มีปัญหาใด ๆ

ในหลาย ๆ ระบบ Linux นั้นไม่มีการติดตั้งดั่งเดิม แต่มักจะเป็น symlink กับ / bin / bash

หากสคริปต์บางตัว "สมมติ" ว่าเชลล์เป็น sh อย่างชัดเจนพวกเขาควรจะเขียนใหม่ มีกลไกรูปแบบเฉพาะเพื่อเลือกล่ามที่คุณต้องการ หากเป็น sh สคริปต์ควรรวม#!/bin/shเป็นบรรทัดแรก

การตั้งค่าเปลือกเริ่มต้นของคุณไม่ควรเกี่ยวข้องในบริบทนี้


2

ฉันไม่คิดว่าการเปลี่ยนเปลือกของรูทจะทำให้เกิดปัญหาใด ๆ ฉันดูเหมือนจะจำ unices (อาจจะเป็นบางสายพันธุ์ BSD?) มี tcsh เป็นเชลล์เริ่มต้นสำหรับรูต

การเข้าสู่ระบบรูทหายากอยู่แล้ว โดยปกติแล้วคุณจะเข้าสู่บัญชีของคุณเองแล้ว su หรือ sudo เพื่อรูท

สิ่งสำคัญคือเชลล์ของรูทควรมีการพึ่งพาน้อยที่สุดเท่าที่จะเป็นไปได้เพื่อให้สามารถใช้ได้ในบริบทการซ่อมแซมระบบ ตัวอย่างเช่นเป็นความคิดที่ดีที่จะมีรูทเชลล์ที่ลิงก์แบบสแตติก การแจกแจงบางอย่างจัดส่งเวอร์ชันที่ลิงก์แบบคงที่ของ bash หรือ zsh หรือsash (เชลล์ที่มียูทิลีตีมาตรฐานจำนวนมากในตัว) อย่างไรก็ตามนี่ไม่ใช่สิ่งสำคัญหากระบบของคุณสามารถบูตได้อย่างง่ายดายจากซีดีกู้คืนหรือไดรฟ์ USB


สำหรับเหตุผลที่ขึ้นต่อกันฉันคิดว่ามันสมเหตุสมผลที่จะปล่อยให้เชลล์เหมือนเดิมดังนั้นการปรับเปลี่ยนระบบขนาดใหญ่ (เช่นการอัพเกรด) จะไม่ทำให้สับสน ฉันเห็นด้วยที่ง่ายต่อการแก้ไขด้วย live CD หรือ USB แต่ฉันไม่ควรต้องแก้ไขในตอนแรก
phunehehe

1

เชลล์ล็อกอินของผู้ใช้ไม่มีผลกับกระบวนการบู๊ต คุณสามารถตั้งค่าเปลือกนี้เป็นสิ่งที่คุณต้องการ ไม่ใช่ว่าทุกระบบจะทุบตีและทำงานได้ดี นอกจากนี้ถ้ามันเป็นมันถูกติดตั้งที่ไม่ถูกต้องทั้งหมดหอยระบบควรจะอยู่ใน/usr/bin/zsh /binอย่างไรก็ตามคุณไม่ควรเปลี่ยน/bin/shให้ชี้ไปที่สิ่งอื่นนอกเหนือจากค่าเริ่มต้น (เว้นแต่คุณจะรู้ว่าคุณกำลังทำอะไรอยู่) เนื่องจากสคริปต์หลาย ๆ ตัว#!/bin/shมักจะมีจุดที่#!/bin/bashน่ากลัวเมื่อพวกเขาควรมีเพราะพวกเขาใช้ bashisms และพฤติกรรมอื่น ๆ การทำงานในหรือzshdash


โอ๊ะขอโทษฉันทำผิดพลาดจริง ๆ แล้วบนคอมพิวเตอร์ของฉันทั้งคู่bashและzshอยู่ใน/bin
phunehehe

0

ฉันทุบตีเป็นเปลือกเริ่มต้นสำหรับราก ฉันใช้zshมาระยะหนึ่งแล้วก็กลับไปทุบตีทุบตีสิ่งที่คุณใช้เปลือกหอยไม่สำคัญมาก

มันเป็นเพียงปัญหาถ้ามีมากกว่าหนึ่งคนสามารถเข้าถึงรูทได้ ในกรณีนี้คุณอาจเลือก 'ตัวส่วนร่วม' ซึ่งโดยปกติแล้วจะเป็น bash เนื่องจากเป็นเชลล์ที่ใช้กันอย่างแพร่หลาย


0

ในส่วนที่เกี่ยวกับ Solaris / illumos Solaris Mini Shell ถามถึงคำถามที่พบบ่อย

sysadmins บางตัวยังแนะนำให้เปลี่ยนรูทเชลล์ใน
ระบบ Solaris ถามว่าทำไมและคุณอาจถูกบอกว่ารูทต้องการ
เชลล์ที่ลิงก์แบบสแตติกซึ่งไม่ได้ขึ้นอยู่กับ
ไลบรารีแบบไดนามิกภายใต้ / usr / lib เรื่องนี้เป็นเรื่องจริงในอดีต แต่ไม่
จำเป็นว่าจะเป็นทุกวันนี้ Solaris เมื่อกำหนดค่าอย่างเหมาะสมจะเหมือนกับ Unix รุ่นอื่นและสามารถรองรับเชลล์ใดก็ได้ที่คุณกำหนดสำหรับรูทหรือบัญชีอื่น ๆ

ดังนั้นใช่ถ้าคุณกำลังใช้ Solaris หรือ illumos ก็จะปรับให้ใช้เปลือกหอยอื่น ๆ shกว่า

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