Chapter 6
MANAGING LOCAL USERS AND GROUPS
id
id user01File 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/nologinFile structure of /etc/group
nickname:group password: gid : member users
group01 : x : 10000: user01,user02,user03sudo gpasswd and newgrp commands can be used to add user as group member.
su
su və su - 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 shelldirlogin 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 usernamesudo -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/tracertOnly 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) ALLManaging 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 SHA512Sistemə 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 user01Sistemdəki yiyəsiz faylları tapmaqçün aşağıdakı komandanı istifadə etmək olar:
find / -nouser -o -nogroupusermod
usermod komandası ilə istifadəçi hesabı üzərində aşağıdakı əməliyyatları etmək mümkündür:
-c, --comment COMMENTAdd the user's real name to the comment field.
-g, --gid GROUPSpecify the primary group for the user account.
-G, --groups GROUPSSpecify 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_DIRSpecify a particular home directory for the user account.
-m, --move-homeMove the user's home directory to a new location. Must be used with the -d option.
-s, --shell SHELLSpecify 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 user01Istifadəçi hesabının unlock olunması:
sudo usermod -U user01Bə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 user01Managing 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əsigroupdel
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 group0022Managing user passwords
user03:$1$somehash:17933:0:99999:7:2:1833:Username of the account this password belongs to.
The encrypted password of the user. The format of encrypted passwords is discussed later in this section.
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.
The minimum number of days that have to elapse since the last password change before the user can change it again.
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.
Warning period. The user will be warned about an expiring password when they login for this number of days before the deadline.
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.
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.
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 user01Chage komandasından istifadə vaxtı günlərin hesablanmasına ehtiyac duyulduğu halda:
date -d "+180 days" +%FLast updated
Was this helpful?