การจัดหาโปรไฟล์ bash สำหรับผู้ใช้รูท


17

ขออภัยล่วงหน้าหากคำถามนี้ก่อให้เกิดความรำคาญแก่ทุกคนตามที่ฉันขอขอบคุณมันถูกถามด้วยวิธีการต่างๆหลายครั้งก่อนหน้านี้ โปรดมั่นใจได้ว่าฉันได้อ่านจดหมายเหตุและได้ลองคำแนะนำบางอย่างแล้ว แต่ก็ยังไม่สามารถแก้ไขปัญหา (ง่าย) ได้ หวังว่าใครบางคนสามารถให้คำตอบและฉันก็รู้สึกถ่อมตนอย่างเหมาะสม FYI สำหรับการหลีกเลี่ยงความคลุมเครือใด ๆ ฉันจะใช้สัมบูรณ์มากกว่าเส้นทางสัมพัทธ์

adamเมื่อฉันเข้าสู่ระบบที่ผมทำเช่นนั้นเป็นผู้ใช้ นามแฝงใน/Users/adam/.bash_profileถูกโหลดและฉันสามารถใช้พวกเขาทันทีเมื่อดึงขึ้น terminal ฉันไม่ใช้.bashrcไฟล์และไม่เป็นไร

ทุกครั้งที่ฉันเปลี่ยนไปรูทโดยพิมพ์suลงในเทอร์มินัลแล้วใส่รหัสผ่านของฉัน การเปลี่ยนแปลงที่รวดเร็วและตอนนี้ฉันเป็นผู้ใช้รูท คำถามของฉันคือ: ทันทีที่กลายเป็นรูตโปรไฟล์ทุบตีรูทของฉันสามารถโหลดได้โดยที่ฉันไม่ต้องไปหาไฟล์โปรไฟล์ด้วยตนเอง? /Users/adam/.bash_profileเหตุผลที่ฉันรู้ว่ามันไม่ได้เกิดขึ้นโดยอัตโนมัติเป็นเพราะผมมีนามแฝงเดียวกันในแฟ้มประวัติของฉันและรากของฉัน หลังจากที่ได้เป็นผู้ใช้รูทเว้นแต่ฉันจะพิมพ์source [root_profile_file]พวกเขาจะไม่ทำงาน ฉันได้ลองตั้งค่าพีชคณิตต่อไปนี้แล้วเปลี่ยนเป็นรูทผ่านเทอร์มินัล แต่ไม่มีใครมาโปรไฟล์ / นามแฝงโดยอัตโนมัติ (หมายเหตุฉันไม่มีตัวเลือกใด ๆ ด้านล่างตั้งค่าพร้อมกันดังนั้นฉันไม่คิดว่าฉันจะ m ทำให้ระบบสับสน):

ตัวเลือกที่ 1:ใส่ชื่อแทนของฉัน/etc/profile

ตัวเลือก 2:

  • ใน/etc/profileแทรก[ -r /etc/bashrc ] && . /etc/bashrc
  • ใส่นามแฝงของฉัน /etc/bashrc

ตัวเลือก 3:

  • ใน/etc/bash_profileแทรก[ -r /etc/bashrc ] && . /etc/bashrc
  • ใส่นามแฝงของฉัน /etc/bashrc

ตัวเลือก 4: ใส่ชื่อแทนของฉัน/var/root/.profile

ตัวเลือก 5:

  • ใน/var/root/.profileแทรก[ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • ใส่นามแฝงของฉัน /var/root/.bashrc

ตัวเลือก 6:

  • ใน/var/root/.bash_profileแทรก[ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • ใส่นามแฝงของฉัน /var/root/.bashrc

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

คำตอบ:


14

ปัญหาที่คุณพบคือเมื่อคุณรันsuด้วยตัวเองคุณไม่ได้เข้าสู่เชลล์ 'เข้าสู่ระบบ' ซึ่งหมายความว่าสภาพแวดล้อมของคุณไดเรกทอรีการทำงานและทุกอย่างยกเว้น uid / gid ยังคงเหมือนเดิมของผู้ใช้

ทริกเกอร์การเข้าสู่ระบบไม่ทำงานและคุณประสบปัญหาที่คุณอธิบาย

วิธีแก้ไขปัญหาอย่างง่าย ๆ :

su -

จากsu(1)หน้าคน:

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

นอกจากนี้:

   -, -l, --login
       Provide an environment similar to what the user would expect had the user logged in directly.

หากคุณsuเข้าสู่ระบบในการเข้าสู่ระบบเปลือกทุบตีจะทำงานตามที่คุณคาดหวังและแหล่งที่มาของไฟล์ที่เหมาะสมใน "เข้าสู่ระบบ" โดยอัตโนมัติโดยไม่จำเป็นต้องแก้ปัญหาแฮ็คมากเกินไป


1
ฉันจะบันทึก แต่สอง Hai Vu: คุณจริงๆจริงๆไม่ควรมิได้ทำงานเป็นsu rootมีsudoไว้เพื่อจุดประสงค์นั้นหรือคุณสามารถทำงานในลักษณะที่คุณไม่ต้องการสิทธิ์รูทเลยก็ได้
Jason Salaz

ขอบคุณทั้งคุณและ @Hai Vu "su -" ทำอุบายและใช่เข้าใจอย่างถ่องแท้โดยทั่วไปแล้วควรหลีกเลี่ยงรูต
Adam Gold

1
ฉันรู้แล้วว่าจะเพิ่ม '-' หลังจากคำสั่ง su แต่ยังไม่ได้รับ. bash_profile ของฉันสำหรับผู้ใช้รูท คำตอบของ Florian Bidabe และ patrix ด้านล่างเกี่ยวกับการเปลี่ยนเชลล์รูตจาก sh เป็นทุบตีแก้ไขปัญหาให้ฉัน
JaredC

9

ที่จริงแล้วการใช้งานรูท/bin/sh(เชลล์ bourne เก่า) .bash_profileและ.bashrcถูกอ่านโดย bash

shมันจะกลายเป็นเรื่องยุ่งยากเป็นไฟล์เหล่านั้นอาจจะใช้ฟังก์ชั่นไม่สามารถใช้ได้ใน แม้ว่าคุณsource .bashrcหรือsource .bash_profileคุณจะยังคงมีปัญหากับฟังก์ชั่นที่ซับซ้อนเช่น

วิธีหนึ่งในการแก้ไขปัญหานี้คือการทำงาน

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash

เพื่อสลับrootเปลือกbashของ


ไฟล์/bin/shใช้งานของรูท /var/root/.profileให้เครดิตกับคำตอบ
Petr Újezdský

6

เมื่อฉันต้องsudo bashทำฉันจะทำให้ฉันรูต แต่กับสภาพแวดล้อมของ JRobert . bashrc ของฉันประกอบด้วย:

# Prompt: 'jrobert@JRiMac ~' in green (red, if I'm root), '$' in white
if [[ $UID == 0 ]]; then
   export PS1="\[\e[1;31;40m\]\u@\h \W\[\e[0m\]\$ "
else
   export PS1="\[\e[32;40m\]\u@\h \W\[\e[0m\]\$ "
fi

เพื่อทำให้รากแสงจ้องกลับมาที่ฉันในสีแดงเพื่อเน้นว่าตอนนี้ฉัน (ยิ่ง) มีความเสี่ยงต่อตัวเอง [เลือกหนึ่ง: ความสะเพร่า, ความมึนงง, แนวโน้มไขมันนิ้ว, ไม่เต็มใจที่จะรับคำแนะนำที่ดี, s.creek - อย่าทิ้งไม้พาย]


3

ฉันใช้sudo -iเพื่อสลับไปยังผู้ใช้รูท /var/root/.profileในกรณีนี้การกำหนดค่าเปลือกจะถูกอ่านจาก


1

โดยทั่วไปฉันแนะนำsuว่ามันอันตรายแค่ค้นหาแล้วคุณก็รู้ว่าทำไม สำหรับคำถามของคุณบัญชีรูทจะทำงานเช่นเดียวกับที่บัญชีของคุณทำนั่นคือมันเป็นแหล่ง ~ / .bash_profile และ / หรือ ~ / .bashrc ฉันไม่รู้ว่าอันไหนแต่ปรีชาของฉันโน้มตัวไปทาง~ / .bashrcดังนั้นคุณอาจต้องการลองใส่นามแฝงของคุณที่นั่น นี่คือข้อเสนอแนะ:

su           # type password to get into root account
vi ~/.bashrc # put your aliases there
exit         # exit your root session
su           # try again to see if your aliases works

0

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash ใช้งานได้เท่านั้น! ฉันพยายามนำexport PS1=...ไฟล์เหล่านี้ไปไว้ด้านบน / etc / profile, / etc / bashrc /var/root/.bashrc /var/root/.profile /var/root/.bash_profile

จากไฟล์เหล่านี้/bin/shเชลล์ไม่อ่านข้อมูล! (ทุบตีเท่านั้น) (Mac OS El Capitan) และฉันต้องเปลี่ยนเปลือกเพื่อทุบตี

ยังใช้"su -"งานได้เช่นกัน (ด้วยเปลือกนี้คือการอ่าน/var/root/.profileไฟล์)


1
ไม่จำเป็นต้องยืนยันคำตอบที่มีอยู่เดิมอีกครั้ง
nohillside

-1

วิธีหนึ่งในการแก้ไขปัญหานี้คือเรียกใช้สิ่งต่อไปนี้เพื่อสลับเชลล์ของรูทเป็นทุบตี:

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash

วิธีนี้แก้ไขปัญหาของฉันได้เช่นกัน


-2

หากคุณมีผู้ใช้ 'เริ่มต้น' เพียงคนเดียวและผู้ใช้รูทคุณสามารถใส่. alias su="su -"bash_profile ของผู้ใช้ 'เริ่มต้น' และคุณจะได้รับผลที่คุณต้องการ ทำงานได้และไม่มีสิ่งใดที่แฮ็ค

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