Chapter 6

MANAGING LOCAL USERS AND GROUPS

id
id user01

File structure of /etc/passwd: When /sbin/nologin shell is assigned for user, user can't log in.

user  :password:uid:gid:nickname:homefolder :shell
ubuntu:   x    : 0 : 0 :  root  :/home/ubuntu:/sbin/nologin

File structure of /etc/group

nickname:group password: gid  : member users
group01 :       x      : 10000: user01,user02,user03

sudo gpasswd and newgrp commands can be used to add user as group member.

su

susu - arasındakı fərq.

su ilə user01-dən user02-yə keçdikdə, user01-in environment variable-ləri istifadə olunur. ($PATH buna daxildir)

su - ilə user01-dən user02-yə keçdikdə, user02-nin environment variable-ləri istifadə olunur. Elə buna görə də, bu üsulla keçid etdikdə, pwd dəyişir və user02-nin home qovluğu olur.

login shell vs non-login shell

Hal-hazırda hansı tip shell-də olduğumuza baxmaqçün aşağıdakı komandanı icra edirik:

echo $0
# əgər cavab -bash olarsa, login shelldir
# əgər cavab  bash olarsa, non-login shelldir

login shell - adətən əməliyyat sisteminə console vəya ssh vasitəsilə daxil olduqda verilən shell-dir.

non-login shell - user spesific initialization scripti (~/.bashrc) oxuyur,

sudo

wheel qrupunun üzvləri istənilən istifadəçi adından komandaları icra edə bilərlər.

sudo komandasının loqları default olaraq /var/log/secure da loqlanır.

sudo -u alice whoami
su -c "whoami" alice
runuser -l ubuntu -c 'whoami'
sudo -s -u username
  -s, --shell                   run shell as the target user; a command may also be specified
  -u, --user=user               run command (or edit file) as specified user name or ID
sudo su - # sudo -i dən yaxşıdır, çünki environmenti sıfırdan yaradır.
sudo -i -u username

sudo -s

$HOME, $SHELL, $USER, və $LOGNAME istisna olmaqla, keçid etdiyimiz istifadəçinin environment variable-larını gətirir. Komandanı icra edən istifadəçinin home qovluğunda qalırıq.

sudo -i

Komandanın keçid etdiyi istifadəçinin qovluğuna keçirik, keçid etdiyimiz istifadəçinin .profile, .bash_profile fayllarını oxuyub mənimsəyir.

sudoers

Default /etc/sudoers faylı:

Defaults   !visiblepw
Defaults    always_set_home
Defaults    match_group_by_gid
Defaults    always_query_group_plugin
Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

root	ALL=(ALL) 	ALL
ansible  ALL=(ALL)      NOPASSWD:ALL
%wheel	ALL=(ALL)	ALL

%

rule istifadəçiyə aid olduqda % işarəsi olmur, rule qrupa aiddirsə % işarəsi olur.

ALL=

sudoers faylının olduğu bütün hostlarda sudoers faylı tətbiq olunsun

(ALL)

komandalar wheel qrupunun hansı istifadəçisi adıyla execute oluna bilər? (sudo -u username)

NOPASSWD:

sudo istifadə olunanda şifrə istənilməsin

ALL

sol tərəfdə adı çəkilən istifadəçi/qrup üzvləri hansı komandaları icra edə bilər?

Example rule:

%inzibatcilar redhat.int.local=(admin) /bin/ping, /usr/sbin/tracert

Only in redhat.int.local server, members of group "inzibatcilar" can run "ping" and "tracert" commands as an admin user. Like this:

sudo -u admin ping 8.8.8.8

/etc/sudoers.d/rulename

Managementi asanlaşdırmaq üçün sözügedən qovluğa ruleları yazmaq mümkündür. Məsələn:

sudo vim /etc/sudoers.d/inzibatcilar
%inzibatcilar  ALL=(ALL)  ALL

Managing local user accounts

İstifadəçiləri əlavə etmək üçün useradd komandasından istifadə etmək olar.

useradd komandası istifadəçi yaradılarkən hansı konfiqrasiya ilə yaradılacağını /etc/login.defs faylından götürür. Yeni istifadəçi yaratdıqda onun home qovluğu, UID və GID kimi dəyərlərinin təyin olunması bu fayldan asılıdır. Həmin faylın default parametrləri:

MAIL_DIR	/var/spool/mail

# İstifadəçinin default səlahiyyətləri
UMASK		022
HOME_MODE	0700
PASS_MAX_DAYS	99999
PASS_MIN_DAYS	0
PASS_WARN_AGE	7

# İstifadəçi ID-lərinin başlanğıc, son və maksimum dəyərləri:
# UID 0       - root-a aid olur.
# UID 1-200   - system processes assigned statically
# UID 201-999 - system users assigned dynamically
# UID 1000+.  - for regular users
UID_MIN                  1000
UID_MAX                 60000
SYS_UID_MIN               201
SYS_UID_MAX               999
SUB_UID_MIN		   100000
SUB_UID_MAX		600100000
SUB_UID_COUNT		    65536

# Qrupun ID-lərinin başlanğıc, son və maksimum dəyərləri:
GID_MIN                  1000
GID_MAX                 60000
SYS_GID_MIN               201
SYS_GID_MAX               999
SUB_GID_MIN		   100000
SUB_GID_MAX		600100000
SUB_GID_COUNT		    65536

ENCRYPT_METHOD SHA512
USERGROUPS_ENAB yes
CREATE_HOME	yes
HMAC_CRYPTO_ALGO SHA512

Sistemə yeni istifadəçinin əlavə olunması üçün iki əsas alət var: adduser və useradd. Onlardan adduser daha istifadəçi dostudur, useradd isə daha köhnədir.

Sistemə yeni istifadəçini şifrəsilə birlikdə əlavə etmək üçün oneliner:

sudo useradd -m user1 && echo "password1" | sudo passwd --stdin user1

-m (yaradılacaq istifadəçinin home qovluğu olmazsa, onu yaradır)

İstifadəçiləri userdel komandası ilə silərkən -r optionundan istifadə etmək lazımdır. Çünki əgər -r siz silinərsə, həmin istifadəçinin yaratdığı fayllar yiyəsiz qalacaq. Yeni yaradılmış istifadəçi köhnənin UID-sini götürüb, köhnə fayllara yiyə dura bilər. Məsələn:

useradd user01

ls -l /home
drwx------. 3 user01 user01 74 Feb 4 15:22 user01

userdel user01
drwx------. 3 1000 1000 74 Feb 4 15:22 user01

useradd user02
ls -l /home
drwx------. 3 user02 user02 74 Feb 4 15:23 user02
drwx------. 3 user02 user02 74 Feb 4 15:22 user01

Sistemdəki yiyəsiz faylları tapmaqçün aşağıdakı komandanı istifadə etmək olar:

find / -nouser -o -nogroup

usermod

usermod komandası ilə istifadəçi hesabı üzərində aşağıdakı əməliyyatları etmək mümkündür:

USERMOD OPTIONS:
USAGE
-c, --comment COMMENT

Add the user's real name to the comment field.

-g, --gid GROUP

Specify the primary group for the user account.

-G, --groups GROUPS

Specify a comma-separated list of supplementary groups for the user account.

-a, --append

Used with the -G option to add the supplementary groups to the user's current set of group memberships instead of replacing the set of supplementary groups with a new set.

-d, --home HOME_DIR

Specify a particular home directory for the user account.

-m, --move-home

Move the user's home directory to a new location. Must be used with the -d option.

-s, --shell SHELL

Specify a particular login shell for the user account.

-L, --lock

Lock the user account.

-U, --unlock

Unlock the user account.

usermod komandası vasitəsilə istifadəçinin aid olduğu qrupu dəyişmək mümkündür:

sudo usermod -g group01 user02

Əgər istifadəçinin qrupunu dəyişmək yox, onu hansısa qrupa əlavə etmək istəyiriksə, onda -a istifadə etmək lazımdır.

sudo usermod -aG group01 user03

İstifadəçi hesabının lock olunması zamanı istifadəçi şifrəsini düzgün daxil etdiyi halda belə, ona Authentication failure bildirişi çıxır:

sudo usermod -L user01

İstifadəçinin hesabının hansı tarixdə lock olunacağının təyin olunması:

sudo usermod -L -e 2023-10-05 user01

Istifadəçi hesabının unlock olunması:

sudo usermod -U user01

Bəzən istifadəçilərin sistemə girişinin qarşısını almaq təhlükəsizlik tədibiri kimi önəmli olur. Bu halda usermod komandasını aşağıdakı kimi istifadə etmək mümkündür:

sudo usermod -s /sbin/nologin user01

Managing local group accounts

groupadd

groupadd komandası vasitəsilə yeni istifadəçi qrupları yaratmaq mümkündür:

groupadd group01
groupadd -r group02
# -r vasitəsilə /etc/login.defs faylındakı SYS_GID aralığından ID təyin etmək mümkündür.

groupmod

groupmod komandası vasitəsilə mövcud olan qrupun konfiqurasiyası dəyişdirilə bilər:

groupmod -n group0022 group02 # -n yeni qrup adının verilməsi
groupmod -g 20000 group0022.  # -g yeni GID verilməsi

groupdel

groupdel komandası vasitəsilə mövcud qrupu silmək mümkündür. Əgər qrupun içində hər hansı istifadəçi mövcud olarsa, qrup silinməyəcək.

groupdel group0022

Managing user passwords

user03:$1$somehash:17933:0:99999:7:2:1833:
  1. Username of the account this password belongs to.

  2. The encrypted password of the user. The format of encrypted passwords is discussed later in this section.

  3. The day on which the password was last changed. This is set in days since 1970-01-01, and is calculated in the UTC time zone.

  4. The minimum number of days that have to elapse since the last password change before the user can change it again.

  5. The maximum number of days that can pass without a password change before the password expires. An empty field means it does not expire based on time since the last change.

  6. Warning period. The user will be warned about an expiring password when they login for this number of days before the deadline.

  7. Inactivity period. Once the password has expired, it will still be accepted for login for this many days. After this period has elapsed, the account will be locked.

  8. The day on which the password expires. This is set in days since 1970-01-01, and is calculated in the UTC time zone. An empty field means it does not expire on a particular date.

  9. The last field is usually empty and is reserved for future use.

Note: If malicious user can modify /etc/passwd file in some way, he could alter the x value of th e root account and use this tool to hash his own cleartext password:

openssl passwd -1 "mypassword"

chage

chage komandası password aging policy təyin etmək üçün istifadə edilir.

sudo chage -d 0 -m 0 -M 90 -W 7 -I 14 user03

-d İstifadəçi neçə gün sonra giriş etdikdə şifrəsini dəyişməlidir

-m İstifadəçi yeni şifrə təyinindən neçə gün sonra öz şifrəsini dəyişə bilər.

-M Hazırki şifrə neçə gün istifadə oluna bilər

-W Şifrə köhnəlməyə neçə gün qalmış istifadəçi xəbərdar olunmalıdır

-I Expire date-dən sonraki neçə gündən sonra istifadəçi hesabı disabled olacaq

# İstifadəçi növbəti girişində şifrəsini dəyişdirsin.
chage -d 0 user01

# İstifadəçinin hesabı bu tarixdə expire olsun (YYYY-MM-DD)
chage -E 2023-09-09

# İstifadəçiyə tətbiq olunmuş şifrə siyasəti haqqında:
chage -l user01

Chage komandasından istifadə vaxtı günlərin hesablanmasına ehtiyac duyulduğu halda:

date -d "+180 days" +%F

Last updated

Was this helpful?