#用户名:
#密码位,x-有密码,空-无密码
#UID:
# 0-系统管理员;
# 1-999 保留给系统使用(只是习惯), 网络服务或背景服务希望使用较小的权限去运作,因此不希望使用root的身份去执行这些服务.
# 系统账号:系统正常运行需要的
# 1000-60000 一般使用者
#GID: 和/etc/group有关
#用户信息说明栏: 解释账号的意义(没有重要用途)
#家目录:root家目录是/root,一般用户家目录是/home/username
#shell设定
root:x:0:0::/root:/bin/sh
sshd::15:50:::/bin/sh
#1.用户名
#2.加密密码
#3.最近更动密码的日期
#4.密码不可被改动的天数
#5.密码需要重新变更的天数
#6.密码需要变更期限前的警告天数
#7.密码过期后的账号宽限时间(密码失效日)
#8.账号失效日期
#9.保留
root:$6$.gDix4Y6aFV2yTG/$Iz5znAKENZYzc2MIWmoIcdnQyGgt3sBpx4L1WGo49dhaGT.12DmmNs8.4J136k.n/ozazwSkae700fOjGcaNt0:1:0:99999:7:::
#ubuntu
-rw-r--r-- 1 root root 2539 Nov 15 17:30 /etc/passwd
-rw-r----- 1 root shadow 1441 Nov 15 17:30 /etc/shadow
#arm,不合理
-rw------- 1 root root 48 Jul 16 2023 passwd
-rwxr--r-- 1 root root 127 Aug 26 2023 shado1.w
#组名:
#群组密码:给群组管理员使用,很少有群组管理员
#GID:passwd(GID)->group(GID)->group(组名)
#此群组支持的账号名称:多个账号使用","分割
root::0:
sshd:*:50:
#初始群组:在/etc/passwd中指定的群组,一登录获得的群组
#有效群组:当前有效的群组,用于创建新文件时分配给文件群组
#把用户laster加入到群组users中
usermod -a -G users laster
#查看当前用户的所有群组
groups
#第一个输出的群组即为有效群组
The newgrp command is used to change the current group ID during a login session. If the optional - flag is given, the user's environment will be reinitialized as though the user
had logged in, otherwise the current environment, including current working directory, remains unchanged.
#有效群组切换,只支持当前用户所在的群组
#使用新的shell登录,环境变量没有变,使用exit返回到原来的shell
newgrp groupname
#/etc/gshadow, 只有ubuntu存在,主要用于群组管理员把账号加入自己群里.
#组名
#密码栏:为空或!表示无合法密码(没有群组管理员)
#群组管理员账号,参考gpasswd
#加入该群组的所有账号(与/etc/group 内容相同)
root:*::lei
daemon:*::
bin:*::
sys:*::
adm:*::syslog
tty:*::
disk:*::
#命令
gpasswd
#-r: 建立一个系统的账号, 这个账号的UID会有限制(参考 /etc/login.defs)
#-m: 强制!建立用户家目录
#-M: 强制!不要建立用户家目录
useradd [-u UID] [-g 初始群组] [-G 次要群组] [-mM] [-c 说明栏] [-d 家目录绝对路径] [-s shell] 使用者账号名
sudo useradd vbird1
sudo grep vbird1 /etc/passwd /etc/shadow /etc/group /etc/gshadow
#/etc/passwd:vbird1:x:1001:1001::/home/vbird1:/bin/sh
#/etc/shadow:vbird1:!:19709:0:99999:7:::
#/etc/group:vbird1:x:1001:
#uid为1500,初始群组为vbrid2
sudo useradd -u 1500 -g vbird2 vbird3
sudo grep vbird3 /etc/passwd /etc/shadow /etc/group
#/etc/passwd:vbird3:x:1500:1002::/home/vbird3:/bin/sh
#/etc/shadow:vbird3:!:19709:0:99999:7:::
#ubuntu系统什么时候在/home目录下建议家目录呢?
sudo useradd -m homebird
ll /home/
drwxr-xr-x 2 homebird homebird 4096 Dec 18 10:25 homebird/
sudo grep homebird /etc/passwd /etc/shadow /etc/group /etc/gshadow
/etc/passwd:homebird:x:1501:1501::/home/homebird:/bin/sh
/etc/shadow:homebird:!:19709:0:99999:7:::
/etc/group:homebird:x:1501:
/etc/gshadow:homebird:!::
#建立一个系统账号
sudo useradd -r vbird4
sudo grep vbird4 /etc/passwd /etc/shadow /etc/group
/etc/passwd:vbird4:x:998:997::/home/vbird4:/bin/sh
/etc/shadow:vbird4:!:19709::::::
/etc/group:vbird4:x:997:
#useradd 参考档
useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/sh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=no
cat /etc/default/useradd
#如果存在,使用useradd命令默认产生家目录
CREATE_HOME = yes
使用useradd增加账号参考文件
/etc/default/useradd
/etc/login.defs
/etc/skel/*
修改或增加的文件和目录
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
/home/家目录
#所有人均可使用来改自己的密码
#[账号名称]省略更改当前账号
passwd [--stdin] [账号名称]
passwd [-l][-u][--stdin][-S][-n 日数][-x 日数][-w 日数][-i 日数]账号
#--stdin : 管线, shell script使用
#-l: 是lock的意思,密码失效/etc/;shadow第二栏最前面加上!
#-u: unlock
#-S 列出密码的相关参数,shadow文件内的大部分信息
#-n 第4栏
#-x 第5栏
#-w 第6栏
#-i 第7栏
echo "abc534CC" | passwd --stdin vbird1
/etc/pam.d/passwd
pam_cracklib.so
#详细显示密码信息或修改密码信息
chage [-ldEImMW] 账户名
#-l: 列出信息
#-d: 后面接日期,修改 shadow 第三段(最近一次更改密码的日期),格式yyyy-mm-dd
#第一次登录强制修改密码
sudo useradd agetest
sudo passwd agetest
sudo chage -d 0 agetest
#密码建立时间会被修改为1970/1/1,所以会有问题
sudo chage -l agetest
Last password change : password must be changed
Password expires : password must be changed
Password inactive : password must be changed
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
#更改账号信息
usermod [-cdegGlsuLU]username
#-c:后面接账号的说明,即/etc/passwd第五栏的说明栏,可以加入一些账号的说明.
#-d:后面接账号的家目录,即修改/etc/passwd的第六栏
#-e:后面接日期,格式是YYYY-MM-DD也就是在/etc/shadow内的第八个段数据
#-f:后面接天数,为shadow的第七字段
#-g:后面接初始群组,修改/etc/passwd的第四个字段,亦即是GID的字段
#-G:后面接次要群组,修改这个使用者能够支持的群组,修改的是/etc/group
#-a:与-G合用,可[增加次要群组的支持]而非[设定]
#-l:后面接账号名称.亦即修改账号名称,/etc/passwd的第一栏
#-s:后面接shell的实际文件,例如/bin/bash或/bin/sh
#-u:后面接UID数字,修改/etc/passwd第三栏的资料
#-L:暂时冻结密码
#-U:解冻密码
#忘记建立家目录的账号建立家目录
cp -a /etc/skel /home/vbird1
chown -R vbird1:vbird1 /home/vbird1
#只需要修改目录的权限
chmod 755 /home/vbird1
相关文件
用户账号/密码相关: /etc/passwd, /etc/shadow
群组相关: /etc/group, /etc/gshadow
个人文件数据: /home/username, /var/spool/mail/username
命令
Usage: userdel [options] LOGIN
Options:
-f, --force force removal of files,
even if not owned by user
-h, --help display this help message and exit
-r, --remove remove home directory and mail spool
-R, --root CHROOT_DIR directory to chroot into
--extrausers Use the extra users database
-Z, --selinux-user remove any SELinux user mapping for the user
#-r:用户的家目录一起删除
userdel [-r]username
#u+s,g+s,o+t
sudo chmod
#查找某人或自己的UID/GID等信息
id [username]
#-s:仅列出用户的账号,全名,终端机代号和登入时间等
finger [-s] username
#change finger
chfn [-foph] [账户名]
#change shell
#-l:列出系统上可用的shell, /etc/shells
#-s:修改shell
chsh [-ls]
sudo chsh -s /bin/bash vbird1
#群组相关文件
/etc/group
/etc/gshadow
#相关命令
newgrp
groupadd
groupmod
groupdel
gpasswd
groupadd [-g gid][-r]组名
#-g:后面接某个特定的GID
#-r: 建立系统群组,与/etc/login.defs内的GID_MIN有关
sudo groupadd group1
sudo grep group1 /etc/group /etc/gshadow
Usage: groupmod [options] GROUP
Options:
-g, --gid GID change the group ID to GID
-h, --help display this help message and exit
-n, --new-name NEW_GROUP change the name to NEW_GROUP
-o, --non-unique allow to use a duplicate (non-unique) GID
-p, --password PASSWORD change the password to this (encrypted)
PASSWORD
-R, --root CHROOT_DIR directory to chroot into
#-g:修改GID数字
#-n:修改组名
#把刚才新建的组修改为GID=201,组名为mygroup
sudo groupmod -g 201 -n mygroup group1
Usage: groupdel [options] GROUP
Options:
-h, --help display this help message and exit
-R, --root CHROOT_DIR directory to chroot into
-f, --force delete group even if it is the primary group of a user
--extrausers Use the extra users database
#删除群组前确保删除所有使用初始群组的账号
sudo groupdel mygroup
#系统管理员命令
gpasswd groupname
gpassed [-A user1,...][-M user3,...]groupname
gpassed [-rR]groupname
# :没有任何参数,给于groupname一个密码
#-A:将groupname的主控权交给使用者管理
#-M:将某些账号加入这个群组
#-r:将groupname 密码移除
#-R:让groupname 的密码栏失效
#群组管理员命令
gpasswd [-ad] user groupname
#-a:添加用户到群组
#-d:移除用户
sudo gpasswd testgroup
#输入两次密码
sudo grep testgroup /etc/group /etc/gshadow
#添加组管理员账号
sudo gpasswd -A user1 testgroup
sudo gpasswd -A user1,user2,user3 testgroup
#群管理员把用户添加到群中
ssh [email protected]
#注意不要sudo
gpasswd -a user2 testgroup
sudo dmesg | grep -i acl
setfacl [-bkRd][{-m|-x}acl参数]目标文件名
#1.针对特定使用者的方式
#需要root用户密码
su [-lm][-c 指令][username]
#- : 单纯使用,代表使用login-shell的变量文件读取方式来登入系统;若没有用户名代表root身份
#-l: 与-类似,但后面需要加欲切换的使用者账号!也就是login-shell的方式
#-m: 与-p是一样的,表示[使用目前的环境设定,而不读取新使用者的配置文件]
#-c: 仅进行一次指令,所以-c后面可以加上指令
#使用non-login shell方式登录
lei@u18:/etc$ su
Password:
root@u18:/etc# id
uid=0(root) gid=0(root) groups=0(root)
#使用login-shell方式登录
su -
#ubuntu上两种方式结果相同
#只执行一次命令就返回一般用户
su - -c "head -n 3 /etc/shadow"
#变更为其他人
su -l testuser1
#输入testuser1的密码
#退出
exit
#需要用户自己的密码
#/etc/sudoers内的用户才能够执行sudo 指令
#-b: 将后续的指令放到背景中让系统自行执行,而不与目前的shell产生影响
#-u: 后面可以接欲切换的使用者,若无此则代表切换身份为root.
sudo [-b][-u 新使用者账号]
#以sshd身份在/tmp底下建立一个名为mysshd的文件
sudo -u sshd touch /tmp/mysshd
ll /tmp/mysshd
#以testuser1身份建立目录并在其中建立文件
sudo -u testuser1 sh -c "mkdir www;cd www;echo 'This is index.html' > index.html"
#sudo执行流程
#1.当用户执行sudo时,系统于/etc/sudoers文件中搜寻该使用者是否有执行sudo的权限;
#2.若使用者具有可执行sudo的权限后,便让使用者[输入用户自己的密码]来确认;
#3.若密码输入成功,便开始进行sudo后续的指令(但root执行sudo时,不需要输入密码);
#4.若欲切换的身份与执行者身份相同,那也不需要输入密码.
#切换到root账号
su -
#单个用户设置
visudo
testuser1 ALL=(ALL:ALL) ALL
#%后面接群组
%sudo ALL=(ALL) ALL
#把用户添加到群组中
sudo usermod -a -G sudo lei
#切换用户
su - lei
#测试sudo
sudo grep lei /etc/passwd /etc/shadow /et/group /etc/gshadow
#无密码sudo
%sudo ALL=(ALL:ALL) NOPASSWD:ALL
#仅能帮助root用户修改其他用户的密码
visudo
#指令字段必须要设置绝对路径
myuser1 ALL=(root) /usr/bin/passwd
#不能修改root密码,!不可执行
myuser1 ALL=(root) !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
#账号别名
User_Alias ADMPW = pro1, pro2,pro3,myuser1,myuser2
Cmnd_Alias ADMPWCOM = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
ADMPW ALL=(root) ADMPWCOM
Host_Alias
#别名需要大写
#sudo 下次操作在5分钟内不需要输入密码
#使用pro1的密码执行sudo su -后,变成root身份
User_Alias ADMINS = pro1, pro2,pro3,myuser1,myuser2
ADMINS ALL=(root) /bin/su -
man sudoers
man visudo
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
#组名
#登录者的来源主机名
#可切换的身份和组名
#可下达的指令
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
PAM(Pluggable Authentication Modules)
#sudo 和 root账号更改任何密码都可以
#普通用户更改密码有限制,最少8个字符
#看目前登录的账号
w
who
#
last
#查看账号的最近登录时间
lastlog
#/var/log/lastlog
write 使用者账号 [用户所在终端接口]
write testuser1
write: write: you have write permission turned off.
mesg y
#结束[ctrl]-d
#查看当前的状态
mesg
#接受者如果不想接收任何信息
mesg n
#对于root和sudo发送的消息不能拒绝
#发送给所有人
wall "I will shutdown my linux server..."
#ubuntu 不支持
#查找整个系统内属于username的文件
find / -user username
#查找整个系统内属于群组的文件
find / -group shadow