ฉันจะตัดไฟล์ข้อความที่เหมาะสมด้วยสคริปต์ Bash ที่อนุญาตให้ผู้ใช้ทุกคน grep สำหรับ $ USER ได้อย่างไร


0

ดังนั้นฉันมีไฟล์data.txtที่เก็บชื่อผู้ใช้และข้อมูลบางส่วนหนึ่งบรรทัดต่อผู้ใช้ ฉันต้องการมีสคริปต์ Bash ที่ผู้ใช้สามารถเรียกใช้และอนุญาตให้โทร

grep -w "^$USER" data.txt

เพื่อดึงพวกเขาชิ้นส่วนของข้อมูล data.txtแต่ไม่สามารถที่จะอ่านทั้งหมด มี setuid-trick ง่าย ๆ ทำไหม?

ไม่จำเป็นต้องเป็น Bash โซลูชัน C หรือ Perl ใด ๆ ก็ใช้ได้


ขอโทษฉันไม่เข้าใจ สนใจที่จะให้ตัวอย่างสั้น ๆ ?
Pavel

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

คำตอบ:


0

นี่เป็นวิธีการแก้ปัญหาด้วยสคริปต์ทุบตี

ฉันคิดว่าคุณไม่สามารถใช้ setuid สำหรับสคริปต์ดังที่อธิบายไว้ในคำตอบ U&Lนี้ คำแนะนำในนั้นคือการใช้

เสื้อคลุมที่ฆ่าเชื้อสภาพแวดล้อม (เช่นsudoกับenv_resetตัวเลือก)


ในตัวอย่างนี้ผมใช้แทน/etc/our_secrets.txt data.txtในตอนแรก จำกัด การเข้าถึงไฟล์:

sudo chown root: /etc/our_secrets.txt
sudo chmod 600 /etc/our_secrets.txt

/usr/local/sbin/sget_my_secretแล้วสร้างสคริปต์ นี่คือสคริปต์:

#!/bin/sh
exec /bin/grep -w "^$SUDO_USER" /etc/our_secrets.txt

และการอนุญาต:

sudo chown root: /usr/local/sbin/sget_my_secret
sudo chmod 744 /usr/local/sbin/sget_my_secret

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

ALL ALL=(ALL) NOPASSWD: /usr/local/sbin/sget_my_secret

ไปที่ไฟล์ sudo sget_my_secretตอนนี้ผู้ใช้สามารถเรียกใช้ เพื่อความสะดวกคุณต้องมีสคริปต์อื่น/usr/local/bin/get_my_secret:

#!/bin/sh
exec /usr/bin/sudo /usr/local/sbin/sget_my_secret

สิทธิ์:

sudo chown root: /usr/local/bin/get_my_secret
sudo chmod 755 /usr/local/bin/get_my_secret

ในขณะนี้ผู้ใช้สามารถเรียกใช้get_my_secretเพื่อรับข้อมูลของพวกเขา (ถ้ามี) นี่คือสิ่งที่เกิดขึ้น:

  1. get_my_secret ทำงานด้วยสิทธิ์ปกติ
  2. sudo /usr/local/sbin/sget_my_secretมันพยายามที่จะเรียกใช้
  3. sudoers ไฟล์แจ้งว่าสามารถทำได้
  4. sget_my_secret ทำงานด้วยสิทธิ์ระดับสูง
  5. ยกระดับการgrepประมวลผลไฟล์

หมายเหตุด้านความปลอดภัย:

  • ใน Debian ของฉันenv_resetตัวเลือกที่กล่าวถึงจะเปิดใช้งานตามค่าเริ่มต้น
  • คุณอาจต้องการแทนที่ALL ALL=(ALL) ...บรรทัดนี้ด้วยบรรทัดที่ จำกัด มากขึ้น
  • ในสคริปต์ฉันใช้เส้นทางเต็มทุกที่ที่ฉันสามารถ
  • ใครก็ตามที่สามารถวิ่งsget_my_secretด้วยการปลอมแปลง$SUDO_USERสามารถเรียกคืนความลับของคนอื่นได้ ฉันคิดว่าถ้าคุณสามารถทำได้คุณสามารถอ่านour_secrets.txtได้โดยตรง
  • คุณอาจจะคิดว่าคุณสามารถช่วยให้ผู้ใช้เรียกใช้sudo grep; แต่สิ่งนี้จะอนุญาตให้พวกเขาgrepทำอะไรก็ได้ในไฟล์ใด ๆ ! ประเด็นของการมีsget_my_secretคือการเพิ่มเพียงหนึ่งนี้ปฏิบัติการพิเศษในsudoersไฟล์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.