วิธีการเปลี่ยนสิทธิ์ผู้ใช้ pi sudo; จะเพิ่มบัญชีอื่นที่มีสิทธิ์ต่างกันได้อย่างไร


14

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

sudo reboot

มีวิธีใดบ้างที่ฉันสามารถแก้ไขสิทธิ์ของผู้ใช้ pi เพื่ออนุญาตให้รีบูต (และติดตั้ง) แพ็คเกจ

ฉันสามารถมีหลายบัญชีที่มีสิทธิ์ต่างกันได้หรือไม่

ขอบคุณ


1
มีคำตอบใด ๆ ที่ให้ประโยชน์หรือไม่? ทุกคนเป็นคำตอบที่คุณค้นหาหรือไม่ โปรดทำเครื่องหมายว่าตอบแล้ว
Anders

ใช่. หากคุณยังคงสนใจฉันอัปเดตพวกเขาเป็นมิถุนายน 2017 - คำถามนี้ถูกถามเมื่อ 4 ปีที่แล้วและ 2 เดือนที่ผ่านมาและพาฉันไปยังวิธีการแก้ปัญหาในวันนี้ ลองดูคำตอบด้านล่าง:
SDsolar

คำตอบ:


22

ในการชี้แจงให้ชัดเจน: ไม่มี "คำสั่ง sudo" มีเพียงคำสั่งที่ต้องการสิทธิ์รูทในการทำงานอย่างถูกต้องและsudoเป็นคำสั่งเพื่อให้ได้รับหนึ่งคำสั่ง: sudoเพียงแค่เรียกใช้คำสั่งที่กำหนดเป็นรูท (อ่าน "sudo" ตามความจำเป็น ประโยค "superuser ทำอะไรสักอย่าง!") กฎที่ผู้ใช้สามารถทำได้ถูกเขียนลง/etc/sudoersไป ในการติดตั้ง Raspbian เริ่มต้นผู้ใช้เริ่มต้น "pi" ได้รับอนุญาตจากบรรทัดนี้:

pi ALL=(ALL) NOPASSWD: ALL

หมายความว่า: "ผู้ใช้ 'pi' บนโฮสต์ทั้งหมดได้รับอนุญาตให้สลับไปยังผู้ใช้ทั้งหมดและไม่จำเป็นต้องพิมพ์ PASSWD ของเขาเมื่อใช้คำสั่ง ALL (read: any)" (ฉันใช้ไวยากรณ์บ้าที่นี่เพื่อรักษาลำดับของบรรทัด .. หมายเหตุเกี่ยวกับสาเหตุที่มีวิธีแยกแยะโฮสต์: ด้วยวิธีนี้ไฟล์ sudoers เดียวกันสามารถแจกจ่ายไปยังเครื่องหลาย ๆ เครื่องบนเครือข่ายดังนั้นผู้ดูแลระบบเครือข่ายจึงทำงานน้อยลง) .

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

แน่นอนว่าคุณสามารถมีผู้ใช้หลายคนที่มีสิทธิ์ที่แตกต่างกัน แต่ฉันกลัวว่าการใช้ sudo ยังคงเป็นวิธีที่ดีที่สุดในการจัดการสิทธิ์เหล่านี้

ดังนั้นฉันหวังว่าสูตรอาหารเล็ก ๆ ที่นี่คือสิ่งที่คุณต้องการ:

$ sudo adduser admin

สิ่งนี้จะสร้างผู้ใช้ "ผู้ดูแลระบบ" ถามรหัสผ่านสร้างไดเรกทอรีบ้านของเขา ฯลฯ

$ sudo adduser admin sudo
$ sudo adduser admin adm

สิ่งนี้จะนำผู้ใช้ "admin" ไปไว้ในกลุ่มผู้ใช้ "sudo" และ "adm" และเนื่องจากสิทธิ์ได้รับการจัดการใน Linux โดยการเพิ่มผู้ใช้ในกลุ่มผู้ใช้สิ่งนี้จะให้สิทธิ์ผู้ใช้ "admin" ทั้งหมดและสิทธิ์ที่เขาต้องการ มีบรรทัด/etc/sudoersที่ให้ผู้ใช้ใด ๆ ที่อยู่ในกลุ่มผู้ใช้ "sudo" เพื่อรันคำสั่งใด ๆ ในฐานะรูท; และสิทธิพิเศษนี้คือสิ่งที่เราต้องการสำหรับผู้ใช้ผู้ดูแลระบบ (การเพิ่มเขาไปที่ "adm" ทำให้เขาสามารถอ่านไฟล์บันทึกบางไฟล์/var/logโดยไม่ต้องใช้sudoและอื่น ๆ ) คุณยังต้องใช้sudoเมื่อคุณลงชื่อเข้าใช้ในฐานะผู้ดูแลระบบ - แต่ตอนนี้ sudo ถามรหัสผ่านของผู้ดูแลระบบซ้ำทุกครั้งที่คุณไม่ได้ใช้งาน sudo เป็นเวลาประมาณห้านาที

ตอนนี้ออกจากระบบและเข้าสู่ระบบในฐานะผู้ใช้ "admin" ตรวจสอบว่า

$ sudo apt-get update
$ sudo apt-get upgrade

โรงงาน ถ้าเป็นเช่นนั้นคุณอาจยกเลิกสิทธิ์บางอย่างของผู้ใช้ "pi" เพราะตอนนี้คุณมั่นใจแล้วว่าผู้ดูแลระบบของคุณมีสิทธิ์ที่ถูกต้อง:

$ sudo deluser pi sudo
$ sudo deluser pi adm

สิ่งนี้จะทำให้ผู้ใช้ "pi" ออกจากกลุ่มผู้ใช้ "sudo"

$ sudo visudo

/etc/sudoersนี้จะเริ่มแก้ไขที่ช่วยให้คุณในการแก้ไข ใส่แท็กแฮช ( #) หน้าบรรทัดที่ขึ้นต้นด้วย "pi" แสดงความคิดเห็น (หรือลบออก) จากนั้นบันทึกและออกจากตัวแก้ไข visudo จะโหลดกฎสิทธิ์อีกครั้งทันที ตอนนี้ผู้ใช้ "pi" ไม่ได้รับอนุญาตให้ใช้ sudo อีกต่อไป

หลังจากนั้นคุณอาจเข้าสู่ระบบอีกครั้งในฐานะผู้ใช้ "pi" หากคุณต้องการสลับไปยังผู้ดูแลระบบสำหรับคำสั่งบางคำให้ใช้su("สลับผู้ใช้"):

$ su - admin

หากคุณต้องการเพิ่มผู้ใช้มากขึ้น: ใช้sudo adduser <name>เหมือนด้านบนจากนั้นตรวจสอบรายชื่อกลุ่มผู้ใช้ที่ "pi" ได้รับ:

$ groups pi
pi : pi dialout cdrom audio video plugdev games users netdev input

ใช้sudo adduser <username> <groupname>เพื่อเพิ่มผู้ใช้ใหม่ของคุณไปยังกลุ่มผู้ใช้เหล่านี้หลายกลุ่มทำให้เขาสามารถใช้เสียงวิดีโอเร่งความเร็วใช้อุปกรณ์ที่เสียบได้ ฯลฯ หากไม่แน่ใจให้เพิ่มเขาในกลุ่มผู้ใช้เหล่านี้ทั้งหมด (แต่ไม่ใช่ "sudo"!)


2
visudoเป็นคำสั่งที่จะใช้เครื่องมือแก้ไขเริ่มต้นของคุณเพื่อแก้ไขไฟล์ sudoers การแก้ไขไฟล์นี้โดยที่ไม่มีไฟล์อาจเป็นความเจ็บปวดและไม่แนะนำ คุณสามารถเปลี่ยนโปรแกรมแก้ไขที่คุณต้องการได้โดยการออกsudo update-alternatives --config editor
earthmeLon

หรือคุณสามารถลองVISUAL=vim visudoในครั้งนี้ แต่ตัวอย่างที่ดีของการเปลี่ยนโปรแกรมเริ่มต้นเช่นโปรแกรมแก้ไข
Anders

6

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

ในการติดตั้งระบบเริ่มต้นคุณควรหาบรรทัดดังกล่าว:

pi ALL=(ALL) NOPASSWD: ALL

มันบอกsudoให้ผู้ใช้piสามารถเรียกใช้กล้องวิดีโอทั้งหมดในฐานะrootผู้ใช้โดยไม่ต้องแจ้งรหัสผ่าน คุณสามารถเปลี่ยนล่าสุดALLและระบุรายการคำสั่งที่คั่นด้วยจุลภาค (พร้อมเส้นทางแบบเต็ม) อนุญาตให้เรียกใช้ ในกรณีของคุณคุณควรเปลี่ยนบรรทัดนี้เป็น:

pi ALL=(ALL) NOPASSWD: /usr/bin/apt-get, /sbin/shutdown

โปรดทราบว่ามีอีกหนึ่งบรรทัดที่sudoersมีผลต่อpiผู้ใช้:

%sudo   ALL=(ALL:ALL) ALL

เส้นนี้จะช่วยให้ผู้ใช้ทุกคนในกลุ่มsudo( %ตัวอักษรหน้าชื่อหมายถึงมันเป็นชื่อกลุ่มแทนชื่อผู้ใช้) เรียกรหัสผ่านทั้งหมดให้พวกเขารู้ว่า พวกเขาเอง รหัสผ่าน หากคุณออกจากบรรทัดนี้ผู้ใช้piจะสามารถเรียกใช้คำสั่งอื่น ๆ ทั้งหมด แต่จะขอรหัสผ่านของเขา

หากคุณต้องการป้องกันไม่ให้สิ่งนี้เกิดขึ้นคุณสามารถลบบรรทัดนี้หรือลบผู้ใช้ออกpiจากsudoกลุ่ม

หลังจากทำการเปลี่ยนแปลง/etc/sudoersไฟล์คุณอาจต้องการตรวจสอบว่ามันเป็นสิ่งที่คุณต้องการโดยการเรียกsudo -l -U piคำสั่ง

แน่นอนคุณสามารถสร้างบัญชีที่แตกต่างกันและกำหนดค่าsudoersให้พวกเขาเข้าถึงคำสั่งที่แตกต่างกัน


1

พฤษภาคม 2018 นี่ยังคงเป็นที่คาดไม่ถึงในแนวคิด แต่ขั้นตอนมีการเปลี่ยนแปลงกับรุ่นที่ใหม่กว่า:

ประการแรกไฟล์ควรแก้ไขโดยตรงใน vi หรือ nano หรือ leafpad หรือ emacs - ไม่ว่าจะเป็นโปรแกรมแก้ไขข้อความที่คุณโปรดปราน

ชื่อผู้ใช้ pi ไม่ได้กล่าวถึงในไฟล์นี้:

/etc/sudoers

และบรรทัดสุดท้ายของไฟล์คือ:

#includedir /etc/sudoers.d

นี่คือไดเรกทอรีที่มีไฟล์ชื่อ

010_pi-nopasswd

ที่มีบรรทัดเดียวนี้

pi ALL=(ALL) NOPASSWD: ALL

ซึ่งมีผลกระทบของการไม่แสดงพร้อมท์สำหรับคำสั่ง sudo ใด ๆ ตราบใดที่ฉันเข้าสู่ระบบในฐานะผู้ใช้ pi (โปรดทราบว่าไวยากรณ์ต้องเป็นอย่างนี้ทุกประการ)

มันเยี่ยมมาก

สายกลุ่ม %sudo ALL=(ALL:ALL) ALLยังคงเป็น

ดังนั้นเพื่อตอบคำถามแรก:

เมื่อฉันย้ายไฟล์ /etc/sudoers/sudoers.d/010_pi-nopasswd ไฟล์หนึ่งไดเรกทอรีเพื่อให้การรวมล้มเหลวจากนั้นรอ 15 นาทีมันทำให้ระบบ Raspbian ของฉันแจ้งรหัสผ่านของฉันเมื่อใช้ sudo เพียงแค่ เช่นระบบ Ubuntu 14.04 LTS ของฉันที่เคยทำ

จากนั้นเมื่อฉันย้ายมันกลับไปที่เดิมแม้หลังจาก 10 นาทีมันก็ไม่ได้รับแจ้งอีกต่อไป

ไม่จำเป็นต้องรีบูตเครื่อง Voila ไม่มีการถามรหัสผ่านเมื่อใช้ sudo

ระบบทดสอบ lubuntu 14.04 LTS ของฉันมีการตั้งค่าเดียวกันยกเว้นว่าไฟล์ 010_pi-nopasswd ไม่มีอยู่ lubuntu ถูกติดตั้งด้วย pi ในฐานะผู้ใช้รูท มันกระตุ้นให้ฉันทุกครั้งที่ฉันใช้ sudo จากนั้นก็ไม่ได้เตือนฉันเป็นเวลา 10 นาทีหลังจากนั้น

ฉันได้เพิ่มไฟล์เดียวกันนี้ในระบบ Ubuntu เหมือนกับการตั้งค่า Raspbian (โปรดจำไว้ว่าให้ chmod 0440 ในไฟล์นี้ในขณะที่คุณยังอยู่ในหน้าต่าง 10 นาทีนั้น) - และ

Voila ไม่ได้แจ้งให้ฉันใส่รหัสผ่านของฉันอีกต่อไปเมื่อฉันเข้าสู่ระบบในฐานะ pi แม้หลังจากผ่านไป 15 นาที

การเปลี่ยนแปลงจะเกิดขึ้นทันทีโดยไม่จำเป็นต้องรีบูต

นี่คือคำตอบพฤษภาคม 2018 สำหรับวิธีปิดใช้งานและเปิดใช้งานพรอมต์สำหรับการใช้คำสั่ง sudo เมื่อล็อกอินในฐานะผู้ใช้ root pi ผู้ใช้และกลุ่มอื่นสามารถกำหนดค่าในแบบเดียวกันนี้

--UPDATE สำหรับ Ubuntu 16.04 LTS ระบบนี้คล้ายกันมาก อย่างไรก็ตามความแตกต่างที่ยิ่งใหญ่ที่สุดคือ16.04 มีสิทธิ์ในไฟล์ที่เข้มงวดมากขึ้นดังนั้นงานจะต้องทำในsuโหมด หากคุณลืมรหัสผ่านรูทของคุณคุณสามารถรีเซ็ตรหัสผ่านได้จากพรอมต์ปกติของคุณโดยใช้sudo passwd rootจากนั้นsuคำสั่งจะทำงานและคุณสามารถไปจากที่นั่นได้


เพิ่งพบสิ่งนี้ผ่านทาง Google - ดังนั้นหากฉันติดตามสิ่งนี้ผู้ใช้ยังคงต้องอยู่ในกลุ่ม sudoers แต่ /etc/sudo.d จะควบคุมความถี่ที่ผู้ใช้เฉพาะถามรหัสผ่านหรือไม่
lonstar

1
อ๋อ คุณได้มัน. การเป็นสมาชิกของsudoersมักจะทำในเวลาที่ผู้ใช้ถูกสร้างขึ้น ใช้ตัวอย่าง: คุณจะทราบว่าสตริงคำสั่งทั่วไปsudo apt-get update && sudo apt-get upgradeเรียกใช้ sudo สองครั้ง แต่ก็น่ารำคาญที่มันอาจหยุดและขอรหัสผ่านอีกครั้งก่อนการอัพเกรด ดังนั้นฉันจึงกำหนดให้ฉันไม่ต้องแจ้งชื่อเข้าสู่ระบบ (pi) ชื่อเดียวของฉันจากนั้นใช้sudo apt-get update -y && sudo apt-get upgrade -yดังนั้นมันจะไม่หยุดถาม OK เพื่อทำการเปลี่ยนแปลงขนาดใหญ่ เพื่อให้มันเหมือน Unix มากขึ้น ทำในสิ่งที่ฉันถามและแม้ว่าฉันจะเดินจากไปฉันก็อยากให้มันเสร็จ
SDsolar

0

การอนุญาตให้เข้าถึง sudo ผ่าน SSH ปลอดภัยกว่าอนุญาตให้ผู้ใช้ติดตั้งแพ็คเกจ หากคุณกังวลเกี่ยวกับเรื่องนี้จริงๆให้เปลี่ยนบรรทัด/etc/sudoersจาก:

pi ALL=(ALL) NOPASSWD: ALL

ถึง

pi ALL=(ALL) PASSWD: ALL

นั่นหมายความว่าคุณจะได้รับพร้อมท์ให้ใส่รหัสผ่านในครั้งแรกที่คุณใช้ sudo ในเซสชันใด ๆ และอีกครั้งหลังจากหมดเวลาสักครู่ คุณไม่สามารถแก้ไข/etc/sudoersได้โดยตรง ใช้sudo visudoทำ

ดูเหมือนว่า Krzysztof จะกระโดดไปพร้อมกับคำตอบที่นั่น คุณแน่ใจหรือไม่ว่าต้องการรีบูตทุกครั้งที่คุณติดตั้งแพ็คเกจใหม่ นอกจากว่าคุณกำลังติดตั้งเคอร์เนลหรือเฟิร์มแวร์ใหม่ก็ไม่จำเป็นต้องทำการรีบูต นี่คือระบบปฏิบัติการคุณภาพที่เราได้มาที่นี่ ...


3
การtimestampหมดเวลาการพูดถึงเป็นความคิดที่ดี ใช้เวลา 15 นาทีโดยค่าเริ่มต้น BTW โปรดทราบว่าPASSWDเป็นค่าเริ่มต้น (หากNOPASSWDไม่ได้ระบุไว้ก่อนหน้าในรายการคำสั่งนี้) นอกจากนี้โปรดทราบว่า/etc/sudoersสามารถแก้ไขได้โดยตรงโดยไม่มีปัญหาหากคุณรู้ว่าคุณกำลังทำอะไรอยู่ การใช้visudoทำให้การเปลี่ยนแปลงในไฟล์ชั่วคราวทำให้ไฟล์ถูกเขียนอัตโนมัติในช่วงกลางของการเปลี่ยนแปลง (ซึ่งอาจทำให้เกิดข้อผิดพลาดทางไวยากรณ์และ / หรือปัญหาด้านความปลอดภัย) มันล็อคไฟล์นี้จากการแก้ไขพร้อมกันหลายครั้งและทำการตรวจสอบไวยากรณ์ก่อนเขียนไฟล์
Krzysztof Adamski

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

TNX สำหรับความคิดเห็นนี้ @Krzysztof ฉันทำการแก้ไขในคำตอบของฉัน และคุณถูกต้องเกี่ยวกับการแก้ไข อันที่จริงแล้วในเครื่อง 16.04 ของฉันฉันแค่ใส่ pi line ลงในไฟล์ sudoers โดยตรงเพราะ sudoers.d เพิ่งบรรจุ readme ฉันทิ้งไว้เพียงสาเหตุ แต่อย่างน้อยสิทธิ์ pi จะถูกประมวลผล (โปรแกรมแก้ไขโปรดของฉันคือ VI / VIM, btw แต่บางครั้งจะใช้ leafpad หรือ Idle ไม่ได้เชี่ยวชาญ emacs อีกครั้ง - 15 ปีเป็นเวลานาน - และฉันสามารถทำได้มากขึ้นเร็วกว่าฉันใน emacs ขอขอบคุณอีกครั้ง
SDsolar

0

เพียงแค่ทางเลือกให้กับสิ่งที่ scruss กล่าวว่าลบไฟล์โดยการเรียกใช้/etc/sudoers.d/010_pi-nopasswd sudo rm /etc/sudoers.d/010_pi-nopasswdง่ายกว่าและปลอดภัยกว่าจากนั้นแก้ไขไฟล์ sudoers หลักซึ่งสามารถแบ่ง sudo ได้

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