Bolehkah saya menyortir file / etc / group dan / etc / passwd?

33

Saya /etc/grouptelah berkembang dengan menambahkan pengguna baru serta menginstal program yang telah menambahkan pengguna dan / atau grup mereka sendiri. Hal yang sama berlaku untuk /etc/passwd. Pengeditan sekarang menjadi sedikit rumit karena kurangnya struktur.

Bolehkah saya menyortir file-file ini (mis. Dengan id angka atau abjad berdasarkan nama) tanpa efek negatif pada sistem dan / atau manajer paket?

Saya kira itu tidak masalah tetapi hanya untuk memastikan saya ingin mendapatkan pendapat ke-2. Mungkin rootperlu menjadi baris 1 atau dalam baris 1k pertama atau sesuatu?

Hal yang sama berlaku untuk /etc/*shadow.

Ned64
sumber
7
"Mengedit sekarang menjadi sedikit rumit karena kurangnya struktur" Mengapa Anda mengedit file-file itu dengan tangan?
Kevin
Bagaimana cara menyortir file membantu mengedit? Apakah karena Anda ingin mengelompokkan akun terkait bersama, dan kemudian melakukan perubahan serupa di berbagai baris? Tetapi apakah akun terkait akan berbatasan jika Anda mengurutkan berdasarkan uid atau nama?
Barmar
@Barmar Ini membantu terutama karena akun pengguna dikelompokkan berdasarkan rentang dan terpisah dari akun sistem (saat mengurutkan berdasarkan UID). Oleh karena itu lebih mudah misalnya untuk menemukan garis yang benar untuk diperiksa atau diubah saat mengedit vi.
Ned64

Jawaban:

50

Anda harus baik- baik saja melakukan ini : pada kenyataannya, sesuai dengan artikel dan membaca dokumentasi, Anda dapat mengurutkan /etc/passwddan /etc/groupdengan UID / GID dengan pwck -sdan grpck -s, masing-masing.

ErikF
sumber
3
@Menasheh Warna situs ini tidak membuatnya menonjol seperti di situs lain, tetapi "OK melakukan ini" dalam jawaban ini adalah hyperlink.
hvd
2
OK, baik, tapi ... Secara umum, adakah alasan yang sah untuk mengedit / etc / passwd dan file serupa secara manual? Bukankah lebih baik mengaksesnya melalui alat yang dirancang untuk membuat dan memodifikasinya?
mickeyf_supports_Monica
@mickeyf Saya telah melihat orang-orang mengedit secara manual /etc/passwdketika mereka melakukan perubahan batch, seperti mengubah bidang GECOS untuk semua pengguna karena pemindahan / restrukturisasi (perubahan ruang atau nomor telepon global, dll.) Ini tidak umum lagi, tetapi ada yang spesifik alasan yang muncul dari waktu ke waktu.
ErikF
44

Meskipun ErikF benar bahwa ini umumnya harus baik-baik saja, saya ingin menunjukkan satu masalah potensial:

Anda diizinkan memetakan nama pengguna yang berbeda ke UID yang sama. Jika Anda memanfaatkan ini, alat yang memetakan UID kembali ke nama pengguna umumnya akan memilih nama pengguna pertama yang mereka temukan untuk UID itu /etc/passwd. Penyortiran dapat menyebabkan nama pengguna yang berbeda muncul terlebih dahulu. Untuk tujuan tampilan (mis. ls -lOutput), nama pengguna mana pun harus berfungsi, tetapi Anda mungkin telah mengonfigurasi beberapa program untuk menerima permintaan dari nama pengguna A, di mana ia akan menolak permintaan tersebut jika itu dilihat dari nama pengguna B, bahkan jika A dan B adalah pengguna yang sama.

hvd
sumber
Terima kasih, saya tahu Anda bisa, dulu memiliki pengguna dengan tcsh dan uid 0 di Solaris beberapa dekade yang lalu. Namun, sistem Linux tidak akan menciptakan situasi ini dengan sendirinya - Anda harus secara manual membuat pengguna seperti itu untuk memiliki masalah dengan situasi itu.
Ned64
2

Melakukan root pada baris pertama sudah lama menjadi "standar" dan sangat nyaman jika Anda harus memperbaiki shell mereka atau menghapus kata sandi, ketika berhadapan dengan masalah atau memulihkan sistem.

Saya juga lebih suka memiliki pengguna daemon / utils di pengguna menengah dan standar di akhir keduanya passwddan shadow.

hvd Jawabannya juga sangat baik tentang mengganggu urutan pengguna, terutama dalam sistem dengan banyak pengguna yang dikelola dengan tangan.

Jika Anda agak berhasil menyortir file, misalnya, hanya untuk pengguna standar, itu akan lebih masuk akal daripada mengubah urutan semua pengguna, imo.

Rui F Ribeiro
sumber
1
Jika Anda mengurutkan secara numerik dengan UID, Anda harus mendapatkan pesanan pilihan Anda. Root selalu 0, dan daemon secara konvensional memiliki UID di bawah 100.
Barmar
@Barmar Jika mengurutkan berdasarkan UID dan bukan dengan nama, memang, terima kasih sudah mengingat.
Rui F Ribeiro
0

Berikut adalah sedikit kode bash agak berbulu untuk mengurutkan file shadow / gshadow dengan aman (menggunakan vipw -s/ vigr -s) dan di tempat dari baris perintah:

EDITOR="/usr/bin/vi -c \"1,\\\$!awk 'BEGIN {FS = \\\":\\\"} FNR==NR {x2[\\\$1] = \\\$0; next} \\\$1 in x2 {print x2[\\\$1]}' - /etc/passwd\" -c \"wq! \" >/dev/null 2>&1" vipw -s

EDITOR="/usr/bin/vi -c \"1,\\\$!awk 'BEGIN {FS = \\\":\\\"} FNR==NR {x2[\\\$1] = \\\$0; next} \\\$1 in x2 {print x2[\\\$1]}' - /etc/group\" -c \"wq! \" >/dev/null 2>&1" vigr -s

CATATAN:

  1. vi -cmeneruskan perintah ke editor vim yang ditugaskan untuk menjadi editor untuk vipw/ vigroleh EDITORvariabel
  2. Kode awk diurutkan shadowberdasarkan passwd(dan gshadowoleh group)
  3. Garis miring terbalik hanya beberapa tingkat pelarian yang diperlukan sesuai dengan tingkat kutipan.
  4. Perintah kedua (-c \ "wq! \") Memaksa menulis dan menutup file yang diurutkan. Gaya ini diperlukan karena bayangan / gshadow sering mode 000 (yaitu tidak dapat ditulis). Perhatikan jarak antara '!' dan '\' diperlukan untuk mencegah interpretasi oleh shell sebagai '! \' yang mereferensikan acara bash.
puterboy
sumber