การเปลี่ยนเชลล์ (ใช้ chsh) ผ่านบรรทัดคำสั่งในสคริปต์


11

ในสคริปต์เริ่มต้นที่ตั้งค่าเครื่องฉันต้องการเรียกใช้

chsh -s /bin/zsh

อย่างไรก็ตามสิ่งนี้จะถามรหัสผ่านของผู้ใช้ ฉันจะส่งรหัสผ่านเป็นพารามิเตอร์ได้อย่างไร หรือถ้าฉันมีพลัง sudo ฉันสามารถข้ามผ่านขั้นตอนนั้นได้หรือไม่? หรือมิฉะนั้นจะมีวิธีอื่นในการเปลี่ยนเชลล์เริ่มต้นเริ่มต้นหรือไม่

คำตอบ:


21

ต่อไปนี้เป็นการป้องกันบัญชีที่ถูกล็อคไม่ให้เปลี่ยนเชลล์และเลือกให้ผู้อื่นใช้งานchshโดยไม่ต้องใช้ sudo หรือ su:

ติดตั้งง่ายที่ยังคงปลอดภัย:

  1. เพิ่มส่วนบนสุดของ/etc/pam.d/chsh:

    # This allows users of group chsh to change their shells without a password.
    #
    # Per: http://serverfault.com/questions/202468/changing-the-shell-using-chsh-via-the-command-line-in-a-script
    #
    auth       sufficient   pam_wheel.so trust group=chsh
    
  2. สร้างกลุ่ม chsh:

    groupadd chsh
    

สำหรับผู้ใช้ใด ๆ ที่ได้รับอนุญาตให้เปลี่ยนเปลือกของพวกเขา:

    usermod -a -G chsh username

เงินยิง:

user@host:~$ getent passwd $USER
user:x:1000:1001::/home/user:/bin/bash
user@host:~$ chsh -s `which zsh`
user@host:~$ getent passwd $USER
user:x:1000:1001::/home/user:/usr/bin/zsh
user@host:~$ 

วิธีแก้ปัญหาการทำงานสงสัยว่าเรื่องนี้ยังไม่ได้รับการยอมรับ
dimpiax

ขอบคุณ นี่น่าจะเป็นวิธีที่สะอาดที่สุดในการปล่อยให้ผู้ใช้ใช้การเปลี่ยนการรับรองความถูกต้องแบบเชลล์เท่านั้นโดยไม่ต้องใช้ sudo สิ่ง pam.d นี้น่าสนใจมาก!
François Drolet

4

chsh จะเปลี่ยนสายที่เกี่ยวข้องกับผู้ใช้ใน / etc / passwd แม้ว่าผู้ใช้จะสามารถเปลี่ยน 'บรรทัด' ของตนเองใน / etc / passwd ได้ ดังนั้นหากคุณต้องการเปลี่ยนเชลล์สำหรับผู้ใช้รายอื่นคุณต้องใช้รหัสผ่านของเขา / เธอ

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

#visudo

สิ่งนี้ต้องการสิทธิ์รูท

สมมติว่าคุณกำลังใช้งานเป็น "อลิซ" และต้องการเปลี่ยนเชลล์ "bob's" โดยไม่มีรหัสผ่าน

เพิ่มไปยังไฟล์:

Cmnd_Alias     SHELL = /usr/bin/chsh
Runas_Alias    SH    = Bob
alice          ALL   = (SH) NOPASSWD: SHELL

สิ่งนี้ทำให้มั่นใจได้ว่า 'อลิซ' สามารถทำงานบนโฮสต์ทั้งหมดในฐานะผู้ใช้ในกลุ่ม SH โดยไม่มีรหัสผ่านกลุ่มคำสั่งใน SHELL

อาจจะไกลไปหน่อยที่จะทำแบบนี้ แต่ก็เป็นไปได้

อย่าลืมอ่าน "man sudoers" ก่อนที่จะเปลี่ยนไฟล์ sudores ด้วย 'visudo' โดยเฉพาะข้อความที่เกี่ยวข้องกับความปลอดภัย!


ปัญหาsudoคือมันง่ายมากที่จะหลีกเลี่ยงและรูตระบบ เป็นการดีกว่าที่จะไม่เปลี่ยนแปลงsudoersเว้นแต่จะมีความต้องการเฉพาะที่ไม่สามารถทำได้ด้วยวิธีอื่น (setuid / setgid executable, การอนุญาตกลุ่ม, ฯลฯ )

2

คุณต้องผ่านชื่อผู้ใช้; การทำเช่นนี้ผ่านsudo(หรือโดยรูท) จะอนุญาตให้คุณตั้งรหัสผ่าน / เชลล์ของผู้ใช้โดยไม่ต้องถามรหัสผ่านเก่า กรุณาตรวจสอบman chshข้อมูลเพิ่มเติม

ตอนนี้คำถามของฉันคือ: ทำไมคุณต้องการทำเช่นนั้น? หากเป็นสคริปต์การตั้งค่าคุณไม่ควรเปลี่ยนเชลล์ของผู้ใช้ ณ เวลาสร้าง (เช่นเมื่อเปิดตัวadduser) หรือไม่ หากคุณกำลังโคลนระบบจากระยะไกลคุณไม่ควรเปลี่ยนระบบ/etc/passwdก่อน ฉันไม่เห็นเหตุผลในการทำมันผ่านสคริปต์เว้นแต่ว่าคุณจะติดตั้งกระบวนการทั้งหมดโดยอัตโนมัติและการเลือกเชลล์ที่จะติดตั้งมาหลังจากการสร้างผู้ใช้คนแรก


สำหรับเครื่อง ec2 (สคริปต์ที่ฉันรันทันทีหลังจากที่เครื่องเริ่มทำงาน) ฉันต้องการเปลี่ยนเชลล์เริ่มต้นเริ่มต้น กำลังทำ "sudo chsh -s / bin / zsh user_name" ไม่ทำงาน (ยังขอรหัสผ่านของผู้ใช้)

ลองใช้สคริปต์และใช้#!/usr/bin/sudo -s(เส้น shebang) นอกจากนี้คุณแน่ใจหรือไม่ว่า zsh อยู่ใน / bin และอาจไม่ใช่ใน / usr / bin? (แค่ตรวจสอบฉันไม่คุ้นเคยกับ ec2)
lorenzog

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

0

ฉันเชื่อว่าคุณสามารถเปลี่ยนเชลล์ของผู้ใช้ใน/etc/passwordไฟล์ได้โดยใช้passwdคำสั่ง ผมยังไม่ได้อ่านมันยัง แต่ตอนนี้อาจจะมีประโยชน์: ความแตกต่างของระบบปฏิบัติการยูนิกซ์เปลือกและวิธีการที่จะเปลี่ยนเปลือกของคุณ


คำสั่งที่มีหรือchsh usermodไม่ต้องแก้ไขpasswdไฟล์โดยตรงใช้vipwคำสั่งสำหรับสิ่งนั้นเสมอ

0

ลองsudo chsh -s /bin/zshแล้ว:

  1. ออกจากเซิร์ฟเวอร์
  2. รีสตาร์ท terminal
  3. เข้าสู่ระบบเซิร์ฟเวอร์และตรวจสอบโดยecho $SHELL- ในกรณีที่ประสบความสำเร็จมันเปลี่ยน :)

นี่จะเป็นการตั้งค่า zsh เป็นเทอร์มินัลเริ่มต้นสำหรับผู้ใช้รูท
lcguida

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