[Solution] Cannot lock /etc/passwd; try again later - Useradd Error

Sometime in Linux when adding user using the useradd command it throws the error 'Cannot lock /etc/passwd; try again later' as shown below:

#useradd test
useradd: cannot lock /etc/passwd; try again later

Answer:

The system files that are related to Linux user management are,

/etc/passwd : Contains user account information
/etc/shadow: Contains secured account information (encrypted password)
/etc/group : Contains group account Information
/etc/gshadow : Contains secured group information (encrypted group password)

When you create or modify a user, some lock files will get created to prevent concurrent modification of these system files. The lock files are,

/etc/passwd.lock
/etc/shadow.lock
/etc/group.lock
/etc/gshadow.lock

These files should get automatically removed once the command 'useradd' or 'usermod' finishes. Sometimes, you may encounter situations (bugs) where some of these files may not get properly unlocked after the execution of the command. In that case, when you execute useradd next time, it may show the error 'cannot lock /etc/password' or 'unable to lock group file'. So, if you get any such errors, check for any lock files under /etc.

# cd /etc
# ls –l *.lock

If you find any lock files named passwd.lock, shadow.lock, group.lock or gshadow.lock, remove it.

# rm –rf /etc/passwd.lock
# rm –rf /etc/shadow.lock
# rm –rf /etc/group.lock
# rm –rf /etc/gshadow.lock

Now, you should be able to execute useradd without any errors.

3 Comments... add one

  1. I know this is old, but I thought I'd share my experience. It helped me with a batch userdel script I was working on that kept giving me that lock error. The "ls -L" method you mentioned didn't find them all. There was a stray .pwd.lock file in /etc that the following command found:

    find / -type f -name "*.lock"

    Once I removed it, the script worked. Thanks!

    Reply
  2. Nope, removing the *.lock files broke it completely:
    *** Error in 'newusers': double free or corruption (!prev): 0x00007f968a371c70 ***

    Reply

Leave a Comment