নিষ্ক্রিয়তা দ্বারা অবরুদ্ধ লগইন অ্যাকাউন্ট পুনরুদ্ধার


1

লগইন অ্যাকাউন্টগুলিতে 35 দিনের মধ্যে একটি নিষ্ক্রিয়তার টাইমার সেট থাকে। এটি, /etc/pam.d/passwd-auth এর একটি লাইন রয়েছে

auth        required      pam_lastlog.so inactive=35

সুতরাং আমি লাইনের মত পেতে

sshd[29629]: pam_unix(sshd:account): account weaverw has expired (failed to change password)
sshd[29629]: pam_lastlog(sshd:account): user weaverw inactive for 71 days - denied

প্রশ্ন: এই অ্যাকাউন্টগুলি পুনরায় সক্রিয় করার সর্বোত্তম উপায় কী? এসএ যা করছে তা অ্যাকাউন্টের উপর নির্ভর করে, তারপরে প্রস্থান করুন, সুতরাং এটি লাস্টলগে একটি এন্ট্রি রাখবে, তবে এটি অনুচিত মনে হয় না।


man chage, আপনার মেয়াদ শেষ হওয়ার তারিখটি পরিবর্তন করতে হবে।
c4f4t0r

আমি মনে করি না যে এটি সাহায্য করে। পাসওয়ার্ডটি প্রকৃতপক্ষে শেষ হয়ে গিয়েছিল, আসল সমস্যাটি ছিল লাস্টলগ নিষ্ক্রিয়তার টাইমারকে আঘাত করা। আইএফএআইএইচ, ছেজ / / ইত্যাদি / ছায়াকে হেরফের করবে তবে লাস্টলগ এবং সেই গণনাটিকে প্রভাবিত করবে না।
উডি ওয়েভার

উত্তর:


1

সমাধানের জন্য pam_unixপাসওয়ার্ডের মেয়াদ শেষ হওয়ার, সম্পাদনা /etc/shadow। এটির ফর্ম্যাট [কোলন বিচ্ছিন্ন ক্ষেত্র] রয়েছে:

username:passwd:number_of_days_since_pw_changed:...

এবং 3 য় ক্ষেত্রটি শূন্যে সেট করুন।


pam_lastlogএটি ঠিক করার জন্য এটি কিছুটা কুরুচিপূর্ণ। নিয়ন্ত্রণ ফাইল হয় /var/log/lastlog। এটি একটি সঙ্কোচিত এবং / অথবা বাইনারি বিন্যাস ফাইল।

এটি ইউটিলিটি দিয়ে দেখা যেতে পারে lastlog। তবে [এএএফআইসিটি] ইউটিলিটি স্বতন্ত্র প্রবেশের পরিবর্তনের কোনও প্রক্রিয়া সরবরাহ করে না।

মনে হচ্ছে প্রস্তাবিত পদ্ধতিটি ফাইলটি বাতিল করা। এটি এটি সমস্ত ব্যবহারকারীর জন্য পরিবর্তিত হলেও এটি পাসডাব্লুডের মেয়াদোত্তীর্ণ পরিবর্তনের চেয়ে কম গুরুতর। অনুমতিগুলি cp /dev/null /var/log/lastlogবিরক্ত না করে এটি করবে thisselinux

usermodউপযোগ হবে একটি তথ্য রিসেট একক ব্যবহারকারী কিন্তু শুধুমাত্র ব্যবহার যখন -uবিকল্প ব্যবহারকারীর ইউআইডি পরিবর্তন। সম্ভবত, এর সাথে একত্রে ব্যবহৃত -o:

usermod -o -u <current_uid_of_user> <username>

সবচেয়ে খারাপভাবে, এটি দুটি কমান্ডে করুন, প্রথমে ইউডকে নতুন অনন্য ইউডে সেট করুন, তারপরে আবার পুরানোটিতে সেট করুন। উদাহরণস্বরূপ, যদি ব্যবহারকারীর ইউআইডি 5001 ছিলেন এবং সেখানে কোন ব্যবহারে ইউআইডি 5500, একটি করুন:

usermod -u 5500 fred
usermod -u 5001 fred

আপনি যদি সত্যিই বেশিরভাগ তথ্য সংরক্ষণ করতে চান /var/log/lastlogএবং উপরের কাজটি না করে, shadow-utilsউত্স প্যাকেজটির এটি করার একটি উপায় আছে ...

ইউজারড থেকে উত্স স্নিপেট এখানে:

static void lastlog_reset (uid_t uid)
{
    struct lastlog ll;
    int fd;
    off_t offset_uid = (off_t) (sizeof ll) * uid;

    if (access (LASTLOG_FILE, F_OK) != 0) {
        return;
    }

    memzero (&ll, sizeof (ll));

    fd = open (LASTLOG_FILE, O_RDWR);
    if (   (-1 == fd)
        || (lseek (fd, offset_uid, SEEK_SET) != offset_uid)
        || (write (fd, &ll, sizeof (ll)) != (ssize_t) sizeof (ll))
        || (fsync (fd) != 0)
        || (close (fd) != 0)) {
        fprintf (stderr,
                 _("%s: failed to reset the lastlog entry of UID %lu: %s\n"),
                 Prog, (unsigned long) uid, strerror (errno));
        SYSLOG ((LOG_WARN, "failed to reset the lastlog entry of UID %lu", (unsigned long) uid));
        /* continue */
    }
}

এখানে ব্যবহারকারী মডেলের একটি স্নিপেট রয়েছে:

/*
 * update_lastlog - update the lastlog file
 *
 * Relocate the "lastlog" entries for the user. The old entry is
 * left alone in case the UID was shared. It doesn't hurt anything
 * to just leave it be.
 */
static void update_lastlog (void)
{
    struct lastlog ll;
    int fd;
    off_t off_uid = (off_t) user_id * sizeof ll;
    off_t off_newuid = (off_t) user_newid * sizeof ll;

    if (access (LASTLOG_FILE, F_OK) != 0) {
        return;
    }

    fd = open (LASTLOG_FILE, O_RDWR);

    if (-1 == fd) {
        fprintf (stderr,
                 _("%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"),
                 Prog, (unsigned long) user_id, (unsigned long) user_newid, strerror (errno));
        return;
    }

    if (   (lseek (fd, off_uid, SEEK_SET) == off_uid)
        && (read (fd, &ll, sizeof ll) == (ssize_t) sizeof ll)) {
        /* Copy the old entry to its new location */
        if (   (lseek (fd, off_newuid, SEEK_SET) != off_newuid)
            || (write (fd, &ll, sizeof ll) != (ssize_t) sizeof ll)
            || (fsync (fd) != 0)
            || (close (fd) != 0)) {
            fprintf (stderr,
                     _("%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"),
                     Prog, (unsigned long) user_id, (unsigned long) user_newid, strerror (errno));
        }
    } else {
        /* Assume lseek or read failed because there is
         * no entry for the old UID */

        /* Check if the new UID already has an entry */
        if (   (lseek (fd, off_newuid, SEEK_SET) == off_newuid)
            && (read (fd, &ll, sizeof ll) == (ssize_t) sizeof ll)) {
            /* Reset the new uid's lastlog entry */
            memzero (&ll, sizeof (ll));
            if (   (lseek (fd, off_newuid, SEEK_SET) != off_newuid)
                || (write (fd, &ll, sizeof ll) != (ssize_t) sizeof ll)
                || (fsync (fd) != 0)
                || (close (fd) != 0)) {
                fprintf (stderr,
                         _("%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"),
                         Prog, (unsigned long) user_id, (unsigned long) user_newid, strerror (errno));
            }
        } else {
            (void) close (fd);
        }
    }
}

সংজ্ঞাটি struct lastlogএসেছে #include <lastlog.h>এবং এগুলি দেখতে পাবেন:

/* The structure describing an entry in the database of
   previous logins.  */
struct lastlog
  {
#ifdef __WORDSIZE_TIME64_COMPAT32
    int32_t ll_time;
#else
    __time_t ll_time;
#endif
    char ll_line[UT_LINESIZE];
    char ll_host[UT_HOSTSIZE];
  };

আমি মনে করি এটি একটি সম্পূর্ণ উত্তর সরবরাহ করে। এটি নোট করে যে এটি সমাধান করার জন্য আপনাকে অবশ্যই / var / লগ / লাস্টলগে ডাটাবেস আপডেট করতে হবে। এটি ব্যবহারকারী হিসাবে লগ ইন না করে এটি করার একটি উপায় প্রস্তাব করে (যদিও আমি এটি কাজ করতে পারি না) এবং যদি কেউ এটির জন্য কিছু তৈরি করতে চায় তবে বিস্তারিত কোড সরবরাহ করে। আমি বিদ্যমান SA এর পদ্ধতির কমনীয়তা বা এর অভাব নিয়ে পুনর্বিবেচনা করতে যাচ্ছি।
উডি ওয়েভার 20

-2

আপনি যদি অন্য ব্যবহারকারী হিসাবে সার্ভারে যেতে পারেন তবে লগইন সময়টি পুনরায় সেট করতে আপনি 'সু- ব্যবহারকারী ' করতে পারেন ।


1
সার্ভারফল্টে আপনাকে স্বাগতম। ওপি যা বলেছিল যে তিনি ইতিমধ্যে করণীয়কে তিনি অযোগ্য বলে বিবেচনা করছেন তা কি নয়?
মেয়ে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.