Users & Groups

User Management
Create User
useradd [username]
# options
-g Main user group (gid)
-d User Home directory, by default located at /home/<UserName>
-m Create Home directory in case it doesn’t exist.
-s Assign a specific shell to the user, by default it is /bin/bash.
-M dont create home directory
# example:
useradd -g sector1 -d /home/nicolas -m -s /bin/bash nicolas
sudo useradd -G wheel -m -d /home/frank -s /bin/bash frank
adduser [username]
Add Root User
useradd -ou 0 -g 0 [username]
add user to sudoers group (user will be created of doesnt exist)
//usermod -aG [group] [username]
usermod -aG [group1,group2,group3,...] [username]
Change User Home Directory
usermod -d [dir] [username]
Lock/Unlock User
usermod -L [username]
usermod -U [username]
Set New UID for User
usermod -u [username]
Deleting User
userdel [username]
Password
set password
passwd [username]
List commands you are allowed to run
sudo -l
sudo -ll
Change User Shell
chsh -s [shell ] [username]
chsh -s /bin/bash hesher
List commands another USER is allowed
sudo -l -U user
sudo Commands
Run as root:
sudo COMMAND
Run as USER:
sudo -u USER COMMAND
Get a shell
sudo -s
sudo -s -u USER
Account Aging
sudo useradd -e 2020-12-31 charlie
you can set the number of days before an account with an expired password will get locked out:
sudo usermod -f 5 charlie
Account Expiration Date
-I, --inactive INACTIVE set password inactive after expiration
-m, --mindays MIN_DAYS set minimum number of days before password
-M, --maxdays MAX_DAYS set maximum number of days before password
-W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS
-d, --lastday LAST_DAY set date of last password change to LAST_DAY
chage -M 20 john
chage -E 2020-12-31 charlie
Default Account Aging
for Red Hat or CentOS only
/etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
Ubuntu also has the useradd configuration file, but it doesn't work. No matter how you configure it, the Ubuntu version of useradd just won't read it. So, the write-up about this file only applies to Red Hat or CentOS.
Login/Logout Monitoring
monitor last logins
last
lastb
lastlog → last time a user has logged in
Authentication Log Files
/var/log/messages
/var/log/syslog
/var/log/secure
/var/log/auth.log
Configure Password complexity with pam
Debian-based
Ensuring that password meets a certain degree of complexity is equally crucial and further thwarts any attempts by hackers to infiltrate your system using brute force.
As a general rule, a strong password should have a combination of Uppercase, lowercase, numeric and special characters and should be at least 12-15 characters long.
To enforce password complexity in Debian / Ubuntu systems, you need to install the libpam-pwquality
package as shown:
sudo apt install libpam-pwquality
Once installed, head out to the /etc/pam.d/common-password
file from where you are going to set the password policies. Be default, the file appears as shown:

Locate the line shown below
password requisite pam_pwquality.so retry=3
Add the following attributes to the line:
minlen=12 maxrepeat=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 difok=4 reject_username enforce_for_root
The entire line should appear as shown:

Let’s flesh out what these directives stand for:
retry=3: This option will prompt the user 3 times before exiting and returning an error.
minlen=12: This specifies that the password cannot be less than 12 characters.
maxrepeat=3: This allows implies that only a maximum of 3 repeated characters can be included in the password.
ucredit=-1: The option requires at least one uppercase character in the password.
lcredit=-1: The option requires at least one lowercase character in the password.
dcredit=-1: This implies that the password should have at last a numeric character.
ocredit=-1: The option requires at least one special character included in the password.
difok=3: This implies that only a maximum of 3 character changes in the new password should be present in the old password.
reject_username: The option rejects a password if it consists of the username either in its normal way or in reverse.
enforce_for_root: This ensures that the password policies are adhered to even if it’s the root user configuring the passwords.
Redhat-based
For Debian and Ubuntu systems, we enforced the password policy by making changes to the /etc/pam.d/common-password configuration file.
For CentOS 7 and other derivatives, we are going to modify the /etc/pam.d/system-auth
or /etc/security/pwquality.conf
` ``` configuration file.
So, proceed and open the file:
sudo vim /etc/pam.d/system-auth
Locate the line shown below
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
Append the options in the line as shown.
minlen=12 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root
You will end up having the line below:

Once done, save the password policies and exit the file.
Once again, when you try creating a user with a weak password that doesn’t adhere to the enforced policies, you will encounter the error shown in the terminal.

Configure Root Access
you can disable root logins entirely by setting root’s encrypted password to * or to some other fixed, arbitrary string. On Linux, passwd -l “locks” an account by prepending a ! to the encrypted password, with equivalent results. The * and the ! are just conventions; no software checks for them explicitly. Their effect derives from their not being valid password hashes. As a result, attempts to verify root’s password simply fail.
make sure only root has UID 0
awk -F: '($3 == "0")' /etc/passwd
Converting Passwords
pwconv - convert to shadow passwords.
pwunconv - convert from shadow passwords.
/etc/shadow Format
Username
Hashed password
Days since epoch of last password change
Days until change allowed
Days before change required
Days warning for expiration
Days before account inactive
Days since epoch when account expires
Reserved
Lock/Unlock the Password
passwd -l account
passwd -u account
set the account shell to no login
/sbin/nologin

Using chsh Command
chsh -s SHELL ACCOUNT
chsh -s /sbin/nologin jason
Manually Adding Users
Edit /etc/passwd
with view and add a new line for the new account. Be careful with the syntax. Do not edit directly with an editor! vipw locks the file, so that other commands won't try to update it at the same time. You should make the password field be `*', so that it is impossible to log in.
/etc/passwd
with view and add a new line for the new account. Be careful with the syntax. Do not edit directly with an editor! vipw locks the file, so that other commands won't try to update it at the same time. You should make the password field be `*', so that it is impossible to log in.Similarly, edit /etc/group
if you need to create a new group as well.
/etc/group
if you need to create a new group as well.Create the home directory of the user with mkdir.
Copy the files from /etc/skel
to the new home directory.
/etc/skel
to the new home directory.Fix ownerships and permissions with chown and chmod. The -R option is most useful. The correct permissions vary a little from one site to another, but usually the following commands do the right thing:
cd /home/newusername
chown -R username.group .
chmod -R go=u,go-w .
chmod go= .
Set the password with passwd.
Group Management
Create a New Group
groupadd [name]
Change Group Name
groupmod -n [new name] [old name]
Change the Group ID
groupmod -q 4000 [group]
chmod g+rwx [group]
chown [user]:[group] [file]
set GID
chmod g+s [group]
change primary group
usermod -g [group] [usename]
groupmod -g [gid] -n [new name] [oldname]
remove a user from a group
gpasswd -d [username] [groupname]
remove a group
groupdel [name]
list all system groups
cat /etc/groups
list current user groups
groups
list groups of another account
groups [username]
ip [username]
Last updated