Apa izin yang benar untuk / tmp? Saya tidak sengaja mengatur semuanya secara publik secara rekursif

78

Saya telah dianiaya sudo.

Saya telah membuat direktori sementara yang sangat singkat yang ingin saya bagikan antara beberapa pengguna selama beberapa jam ... dan saya menamakan direktori ini /some/path/tmp

Sayangnya saya telah meluncurkan sudo chown 777 -R /tmpbukan sudo chown 777 -R tmp, jadi /tmpfile saya sekarang sepenuhnya publik.

Saya menggunakan common /tmpcukup sering (setiap hari, hampir setiap jam) secara pribadi untuk file kehidupan singkat, skrip, banyak skrip.

Apakah ini menjadi masalah keamanan sekarang setelah sepenuhnya ditetapkan untuk umum? Haruskah saya mengubahnya kembali ke pengaturan yang lebih aman, atau seperti pengaturan standar umum untuk distro Debian atau Ubuntu - (Saya tidak tahu yang mana)? Untuk apa izin yang benar /tmp?

Stephane Rolland
sumber
Berhati-hatilah karena saya lupa sesuatu yang penting dalam jawaban awal saya: soket X11 harus dapat diakses oleh publik, jika tidak, Anda tidak akan dapat memulai aplikasi GUI baru. Saya telah memperbarui jawaban saya.
Gilles
Apakah itu chownatau chmod?
Melebius
@Melebius Saya agak bingung dengan pertanyaan Anda: Saya tidak menyebutkan chmod. chown (seperti ch - own), adalah tentang kepemilikan file, di mana pengguna memiliki file. chmod (seperti ch - modifify) lebih banyak tentang siapa yang dapat mengeksekusi, atau menulis di dalam, atau membaca isi file.
Stephane Rolland
2
@StephaneRolland Ya, itulah yang membingungkan saya. Anda dapat menggunakan chown 777yang mengatur kepemilikan file kepada pengguna dengan ID 777. Namun, semua jawaban, termasuk yang diterima, bekerja dengan chmod. Karena semuanya mengatur izin ke nilai yang sama untuk semua pengguna (pemilik, grup, yang lain), sebagian besar efek kepemilikan file menjadi tidak relevan. Namun, perintah yang benar untuk memperbaiki hasil sudo chown 777 -R /tmpseharusnya sudo chown root -R /tmp.
Melebius

Jawaban:

117

Pengaturan normal untuk /tmpadalah 1777, yang lsditampilkan sebagai drwxrwxrwt. Yaitu: terbuka lebar, kecuali bahwa hanya pemilik file yang dapat menghapusnya (itulah arti tbit tambahan ini untuk direktori).

Masalah dengan /tmpmode 777 adalah bahwa pengguna lain dapat menghapus file yang Anda buat dan mengganti konten pilihan mereka.

Jika Anda /tmpadalah sistem file tmpfs, reboot akan mengembalikan semuanya. Kalau tidak, jalankan chmod 1777 /tmp.

Selain itu, banyak file yang /tmpperlu pribadi. Namun, setidaknya satu direktori secara kritis harus dapat dibaca oleh dunia:, /tmp/.X11-unixdan mungkin beberapa direktori lain yang serupa ( /tmp/.XIM-unix, dll.). Perintah berikut sebagian besar harus mengatur hal-hal yang benar:

chmod 1777 /tmp
find /tmp -mindepth 1 -name '.*-unix' -exec chmod 1777 {} + -prune -o -exec chmod go-rwx {} +

Yaitu membuat semua file dan direktori pribadi (menghapus semua izin untuk grup dan lainnya), tetapi membuat soket X11 dapat diakses oleh semua. Kontrol akses pada soket ini diberlakukan oleh server, bukan oleh izin file. Mungkin ada soket lain yang perlu tersedia untuk umum. Jalankan find /tmp -type s -user 0untuk menemukan soket yang dimiliki root yang mungkin perlu Anda akses-dunia. Mungkin ada soket yang dimiliki oleh pengguna sistem lain juga (misalnya untuk berkomunikasi dengan bus sistem); jelajahi dengan find /tmp -type s ! -user $UID(di mana $UIDID pengguna Anda).

Gilles
sumber
1
Bisakah Anda menjelaskan chmod kedua lebih lanjut?
Bartlomiej Lewandowski
@ BartlomiejLewandowski go-rwx: tidak ada izin untuk grup dan lainnya. Ini mengatur izin untuk rwx------(kecuali bahwa file yang dibuat sejak chmodakhir dapat berakhir dengan izin yang lebih sedikit, misalnya rw-------). Dengan kata lain, file hanya dapat diakses oleh pemiliknya. /tmp/.[!.]*adalah untuk memasukkan file dot, yang biasanya ada di /tmp.
Gilles
@BartlomiejLewandowski: chmod -go-rwx: setel hak "rwx" untuk Pemilik dan Grup. r = baca, w = tulis, x = eksekusi (untuk file) atau masukkan / lintasi (untuk direktori). 777 = rwxrwxrwx (bagian kanan dapat dilihat sebagai: "set 'r' set 'w' set 'x', set 'r' set 'w' set 'x', set 'r' set 'w' set 'x '", yang dalam biner direpresentasikan sebagai" 111111111 "(1 untuk mengatur, 0 untuk membatalkan). Dan" 111111111 "dalam biner diwakili dalam oktal sebagai" 777 "(oktal = grup 3 bit, setiap grup memiliki nilai 0 hingga 7) .jika "rwxr-xr--" itu akan menjadi "111101100" yang pada oktal adalah "754"
Olivier Dulac
2
Tanda + t disebut sebagai bagian yang lengket. Itulah yang membuat siapa pun selain pemiliknya tidak dapat menghapus file, meskipun izinnya 777. Sticky bit awalnya untuk mendapatkan kernel agar meninggalkan program yang umum di memori ketika mereka keluar sehingga mereka tidak harus diambil dari disk saat dijalankan berikutnya. Kita bicara hari PDP11 ....
kurtm
1
@GabrielFair Saya mengganti perintah menggunakan wildcard dengan menggunakan find yang tidak akan mengalami masalah.
Gilles
10

/tmpdan /var/tmpseharusnya membaca, menulis, dan melaksanakan hak untuk semua; tetapi Anda biasanya juga akan menambahkan bit-sticky ( o+t), untuk mencegah pengguna menghapus file / direktori milik pengguna lain. Jadi chmod a=rwx,o+t /tmpharusnya bekerja.

Adapun mengubah izin secara rekursif ... Selama pemilik / grup tetap seperti itu untuk file dan direktori, itu seharusnya tidak menjadi masalah. Tetapi Anda mungkin dapat mengubah izin dari segala sesuatu yang ada di bawah /tmp(bukan / tmp itu sendiri) untuk memastikan privasi pengguna, dengan menghapus rxhak orang lain dan mungkin grup.

Temukan adalah cara yang baik untuk melakukan ini. Sebagai root, lakukan:

cd /tmp
find . -type f -exec chmod u=rw,go= {} \;   # (or u=rw,g=r,o= {})
find . -type d -exec chmod u=rwx,go= {} \;  # (or u=rwx,g=rx,o= {})
Baard Kopperud
sumber
Pada sistem desktop yang khas, Anda sebaiknya membuat /tmp/.X11-unix/*dunia juga dapat dibaca, atau Anda tidak akan dapat memulai aplikasi X lagi.
Gilles
chmod a=rwX,o+t /tmp -Rharus melakukan findkeajaiban.
dhill
3
[root@Niflheim tmp]# ls -alF .
total 1632
drwxrwxrwt 15 root root    4096 Apr  7 04:24 ./
drwxr-xr-x 28 root root    4096 Apr  2 21:02 ../
[root@Niflheim tmp]# stat -c '%A %a %n' .
drwxrwxrwt 1777 .

Dari mesin CentOS 5.9.

Aaron D. Marasco
sumber