วิธีการเรียกใช้แอปพลิเคชันโดยใช้ sudo โดยไม่ต้องใช้รหัสผ่าน?


40

... แต่ยังจำเป็นสำหรับแอปพลิเคชันที่ต้องการสิทธิ์ผู้ดูแลระบบหรือไม่

เพื่อที่จะอนุญาตให้ต่อไปนี้:

$ apache2ctl restart
httpd not running, trying to start
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs

$ sudo !!
sudo apache2ctl restart             #no password asked
$                                   #works!

สำหรับการอ้างอิงฉันได้เห็นการตั้งค่านี้ในอินสแตนซ์ e3 ของ amazon

ความคิดใด ๆ


นี่เป็นบทแนะนำที่ยอดเยี่ยมเกี่ยวกับฟอรัมที่มีรายละเอียดการสร้างไฟล์แยกต่างหากสำหรับการระบุโปรแกรมที่คุณใช้บ่อย และเป็นความคิดที่ดีด้วยเหตุผลด้านความปลอดภัย
ทอดด์นกกระทา Gen2ly

คำตอบ:


51

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

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

YOURNAME ALL = NOPASSWD: /usr/bin/apache2ctl

คุณสามารถแทนที่พา ธ ไปยังไฟล์ที่เรียกใช้งานได้ด้วย "ALL" หากคุณต้องการ

แทนที่ YOURNAME ด้วยชื่อผู้ใช้ของคุณแล้วกดCtrl+ Xเพื่อบันทึกและออก หากมีข้อผิดพลาดเกิดขึ้นข้อเสนอจะเปลี่ยนกลับแก้ไขหรือบันทึกต่อไป

ตรวจสอบให้แน่ใจว่าคุณใช้เส้นทางแบบเต็มเพื่อปฏิบัติการได้:
เช่น แทนเพียง/usr/bin/apache2ctl apache2ctlสิ่งนี้มีความสำคัญเนื่องจากไม่มีการระบุ path sudo อย่างชัดเจนจะอนุญาตให้โปรแกรมใด ๆ ที่ชื่อ apachectl บนพา ธ ปัจจุบันของผู้ใช้รันเป็น root


3
โปรดทราบว่า%YOURNAMEจะให้สิทธิ์กับกลุ่มที่มีชื่อเหมือนผู้ใช้ของคุณซึ่งโดยปกติจะไม่เกิดปัญหาเนื่องจากผู้ใช้ทั่วไปทุกคนมีกลุ่มที่มีชื่อคล้ายกันในระบบ Ubuntu หากต้องการให้สิทธิ์แก่ผู้ใช้ของคุณให้ระบุYOURNAMEโดยไม่ต้องใช้%
Daniel Werner

มีวิธีที่จะปรับโครงสร้างหนี้มากขึ้นหรือไม่? (ฟังก์ชั่นบางอย่างของการปฏิบัติการเท่านั้น)
3pic

1
โพสต์เก่า แต่แน่นอนฉันจะเสร็จสมบูรณ์คำตอบว่าโดยการ จำกัด การเข้า sudoers' เพื่อโฮสต์โดยเฉพาะอย่างยิ่ง (ถ้าเป็นไปได้) และไม่ว่าจะได้รับข้อโต้แย้ง o การโต้แย้งที่ไม่ทั้งหมด (ต่อไปapache2ctl) YOURNAME YOUR-HOSTNAME = NOPASSWD: /usr/bin/apache2ctl <specific arg | "">เช่นดังนั้น: --- ในทุกกรณีman 5 sudoersคือการอ้างอิงที่จะไป
Cbhihe

25

คำตอบที่แท้จริงสำหรับคำถามนี้อาจซับซ้อนเนื่องจาก sudo มีประสิทธิภาพมากและสามารถกำหนดค่าให้ทำสิ่งที่ยอดเยี่ยม นี่คือคำอธิบายอย่างละเอียดในเอกสาร

คำตอบสั้น ๆ นั้นรันsudo visudoในเทอร์มินัล หากนี่เป็นครั้งแรกที่คุณใช้งาน visudo ระบบจะถามคุณว่าคุณต้องการใช้เครื่องมือแก้ไขแบบใด โดยทั่วไปแล้วนาโนคิดว่าเป็นวิธีที่ง่ายที่สุดในการใช้งาน แต่เลือกตัวแก้ไขที่คุณคุ้นเคย / คุ้นเคยที่สุด คุณจะต้องตัดสินใจว่าคุณต้องการให้ใครเข้าถึง; อาจเป็นALLสำหรับทุกคน( ความคิดที่แย่มาก )ผู้ใช้หรือกลุ่มระบบ กลุ่มจะนำหน้าด้วยเครื่องหมาย% ตัวอย่างเช่นหากคุณต้องการให้ทุกคนในsteroid_usersกลุ่มมีสิทธิ์รูทกลุ่มโดยไม่ต้องใช้รหัสผ่านสำหรับคำสั่งทั้งหมดคุณจะเพิ่ม:

%steroid_users ALL=(ALL) NOPASSWD: ALL

ที่ส่วนท้ายของไฟล์ออกและบันทึกไฟล์ หากทุกอย่างไปได้ด้วยดีและคุณเป็นสมาชิกของกลุ่ม steroid_users คุณจะสามารถออกsudo *some-command*โดยไม่ต้องป้อนรหัสผ่าน

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

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

ฉันหวังว่านี่จะช่วยได้.


ใช้งานได้ฉันเอาสิ่งนี้แล้วฉันใช้ "sudo service sudo restart" จากaskubuntu.com/questions/192050/และฉันก็สามารถใช้ทั้งหมดนี้ในเซสชัน Ubuntu ที่ใช้งานอยู่ของฉัน ! น่ากลัว
Patrick

5

คุณจะต้องแก้ไขไฟล์ '/ etc / sudoers' (มีคำสั่ง 'visudo') เพื่อเพิ่ม NOPASSWD ก่อนรายการคำสั่งที่อนุญาตสำหรับผู้ใช้หรือกลุ่มของคุณ หากผู้ใช้ของคุณอยู่ในกลุ่ม 'ผู้ดูแลระบบ' - คุณต้องมีสิ่งต่อไปนี้:

%admin ALL=(ALL) NOPASSWD: ALL

ตรวจสอบhttps://help.ubuntu.com/community/Sudoers , btw


3

คุณสามารถเพิ่มการตั้งค่าสถานะ nopasswd ลงในรายการผู้ใช้ แต่ไม่ได้กำจัดคำถามที่ถามรหัสผ่านทั้งหมด เฉพาะคำถามแรกเท่านั้นที่จะถูกถาม

  1. แก้ไข sudoers: sudo visudo(คุณต้องใช้ sudo นี่เป็นไฟล์ admin)
  2. เพิ่มผู้ใช้ของคุณด้วยการตั้งค่าสถานะ nopasswd หลัง Admin Line (ในตอนท้าย) ตัวอย่างเช่น:
    cyrex ALL = NOPASSWD: ALLหรือcyrex ALL = (ALL) NOPASSWD: ALL

2
sudo visudo
%<GROUP> ALL = NOPASSWD: apache2ctl

หรือ

sudo visudo
%<GROUP> ALL = NOPASSWD: /etc/init.d/apache2

ฉันเดาว่ามันจะทำ

แต่ระวังด้วยการลบรหัสผ่านสำหรับ sudo


2
คุณควรระบุพา ธ สัมบูรณ์ในตัวอย่างแรกเพื่อเหตุผลด้านความปลอดภัยผู้ใช้ที่ไร้ยางอายสามารถเปลี่ยน $ PATH และขโมยการเข้าถึงรูทด้วยชื่อคำสั่งที่ไม่มีเงื่อนไข
bgvaughan

0

ตอนนี้สำหรับคำตอบง่ายๆ! ไม่มีวิธีที่เป็นไปได้ที่จะทำสิ่งสกปรกหรือทำให้เหลวไหลติดตั้ง

เพียงแค่ใส่รหัสผ่านของคุณสองสามครั้งแล้วคุณจะไม่ต้องป้อนอีกครั้ง! การทำเช่นนี้จะช่วยให้คุณสามารถเพิ่มบัญชีผู้ดูแลระบบในเครื่องไปยังกลุ่ม "root" ซึ่งจะถูกยกเลิกการคอมเม้นต์จากเทมเพลตซึ่งจะช่วยให้สิทธิ์ทั้งหมดของผู้ใช้กลุ่ม "รูท" เป็นพิเศษ คุณสามารถอ่าน / แก้ไขข้อกังวลด้านความปลอดภัยของฉันสำหรับขั้นตอนนี้ได้ที่ส่วนท้ายของโพสต์นี้

% ชื่อผู้ใช้ & เป็นตัวแปรทั่วโลกสำหรับชื่อผู้ใช้ของคุณ (แทนที่ด้วยชื่อผู้ใช้ที่ต้องการ)

ขั้นตอนที่ 1: เปิดหน้าต่างเทอร์มินัลแล้วพิมพ์ " sudo usermod -a -G root %username%"

ขั้นตอนที่ 2: จากนั้นคัดลอก / วางสิ่งนี้ ...

sudo sed -i 's/# auth       sufficient pam_wheel.so trust/auth       sufficient pam_wheel.so trust/g' /etc/pam.d/su`

ขั้นตอนที่ 2หรือพิมพ์

sudo nano /etc/pam.d/su`

ไปที่บรรทัดที่ 19 และลบ "#" ก่อนหน้า# auth sufficient pam_wheel.so trust(อาจเป็นหมายเลขบรรทัดอื่นสำหรับบางรายการ)

* คำสั่งแรกเพิ่ม% ชื่อผู้ใช้% ของคุณไปยังกลุ่ม "root"

คำสั่งที่สอง / สามอนุญาตให้สมาชิกทุกคนในกลุ่ม "root" เป็น superuser โดยไม่ต้องใช้รหัสผ่านเมื่อเทียบกับการอนุญาตให้ผู้ใช้สิทธิ์ "root" su สำหรับการตรวจสอบสิทธิ์เท่านั้น


EndNote:

อย่ายุ่งกับ/etc/sudoers... มีการตรวจสอบ / ยอดคงเหลือมากมายที่ต้องมีการตรวจสอบสิทธิ์ 'su' การตรวจสอบสิทธิ์ Superuser ใช้ขั้นตอน pam.d เช่นเดียวกับการตรวจสอบสิทธิ์การเข้าสู่ระบบอื่น ๆ ทั้งหมด "/etc/security/access.conf" มีโครงร่างสำหรับการควบคุมการเข้าถึงผ่านการสื่อสาร tcp / ip (192.168.0.1) และผ่านบริการ telnet (tty1 & tty2 & tty3 ... ฯลฯ ) สิ่งนี้ช่วยให้การกรองที่แม่นยำยิ่งขึ้นต่อแอปพลิเคชันผ่านโปรโตคอลการขนส่ง หากความปลอดภัยเป็นสิ่งที่คุณกังวลข้อกังวลของคุณควรถูกนำไปสู่การคุกคามจากระยะไกล / รหัสกับผู้อื่นที่สัมผัสคอมพิวเตอร์ของคุณเมื่อคุณออกจากห้อง !!!

อาหารสำหรับความหวาดระแวง (อย่าพิมพ์เพียงแค่รีวิวนี้):

sudo sed -i 's/#-:ALL EXCEPT (wheel) shutdown sync:LOCAL/-:ALL EXCEPT (wheel) shutdown sync:LOCAL/g' /etc/security/access.conf

^ นี้บล็อกการเข้าถึงคอนโซลสำหรับทุกคนที่ไม่ได้เป็นสมาชิกของระบบหรือรูท บางครั้งโปรแกรมติดตั้งชื่อผู้ใช้ / กลุ่มที่ถูกโจมตี!


2
ไม่ใช่ผู้เชี่ยวชาญด้านความปลอดภัย แต่ฟังดูง่ายกว่า คุณกำลังปิดการใช้งานรหัสผ่านสำหรับทั้งกลุ่มเพื่อให้ผู้ใช้รายเดียวเรียกใช้แอพที่ไม่มีรหัสผ่านเพื่อหลีกเลี่ยง "ความซับซ้อน" ในการปรับแต่ง sudo สำหรับแอปพลิเคชันเฉพาะใช่ไหม และทั้งหมดนี้บนเซิร์ฟเวอร์สาธารณะ สคริปต์ปิดการใช้งานสัญชาตญาณการเอาชีวิตรอดขั้นพื้นฐานของคุณหรือไม่? ความปลอดภัยนั้นซับซ้อนตามการออกแบบ จำไว้ว่ามันเหมือนหัวหอม มันมีเลเยอร์และทำให้คุณร้องไห้ ... การสูญเสียข้อมูลบนเซิร์ฟเวอร์ที่ถูกบุกรุกเป็นเพียงส่วนหนึ่งของสมการ การโจมตีแบบสปริงบอร์ดของแฮ็กเกอร์จากระบบของคุณนั้นร้ายแรงพอ ๆ กัน แต่มักถูกมองข้าม
hmayag

2
มันตอบโต้ได้ง่ายและตอบโต้สามัญสำนึก: การเปิดขวดคุกกี้ทั้งหมดสำหรับผู้ใช้ที่ต้องการเพียงหนึ่งคุกกี้นั้นค่อนข้างไร้ความรับผิดชอบ คุณจะเพิ่มผู้ใช้ในรายการ sudoers และลบความจำเป็นในการป้อนรหัสผ่านแทนที่จะแก้ไขไฟล์ / ไฟล์ sudoers "ถ้าปืนพกไม่ปลอดภัยสำหรับเด็กอย่าให้ศีลกับพวกเขา" -me
John
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.