Linux账号管理与ACL权限设定

目录

    • 账号
      • /etc/passwd
      • /etc/shadow
    • 群组
      • /etc/group
      • groups 命令
      • newgrp 命令
    • /etc/gshadow
    • 账号管理
      • useradd 命令
        • login.defs
      • passwd 命令
      • chage 命令
      • usermod 命令
      • userdel 命令
    • 普通用户账号命令
      • SUID
      • id 命令
      • finger 命令
      • chfn 命令
      • chsh 命令
    • 新增或移除群组
      • groupadd 命令
      • groupmod 命令
      • groupdel 命令
      • gpasswd 命令
    • 实例
    • ACL使用
      • 查看是否支持
      • setfacl 命令
      • getfacl 命令
    • 使用者身份切换
      • su 命令
      • sudo 命令
      • visudo与/etc/sudoers
    • 特殊shell和PAM
      • nologin
      • PAM模块
    • 用户信息
      • 查询使用者
      • 使用这对谈
      • 使用者邮件邮箱: mail
    • 查找系统用户或群组相关文件

账号

/etc/passwd

#用户名:
#密码位,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

/etc/shadow

#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

群组

/etc/group

#组名:
#群组密码:给群组管理员使用,很少有群组管理员
#GID:passwd(GID)->group(GID)->group(组名)
#此群组支持的账号名称:多个账号使用","分割
root::0:
sshd:*:50:

groups 命令

#初始群组:在/etc/passwd中指定的群组,一登录获得的群组
#有效群组:当前有效的群组,用于创建新文件时分配给文件群组

#把用户laster加入到群组users中
usermod -a -G users laster

#查看当前用户的所有群组
groups
#第一个输出的群组即为有效群组

newgrp 命令

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

#/etc/gshadow, 只有ubuntu存在,主要用于群组管理员把账号加入自己群里.
#组名
#密码栏:为空或!表示无合法密码(没有群组管理员)
#群组管理员账号,参考gpasswd
#加入该群组的所有账号(与/etc/group 内容相同)
root:*::lei
daemon:*::
bin:*::
sys:*::
adm:*::syslog
tty:*::
disk:*::

#命令
gpasswd

账号管理

useradd 命令

#-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 
login.defs
#如果存在,使用useradd命令默认产生家目录
CREATE_HOME = yes

使用useradd增加账号参考文件

/etc/default/useradd
/etc/login.defs
/etc/skel/*

修改或增加的文件和目录

/etc/passwd 
/etc/shadow 
/etc/group 
/etc/gshadow
/home/家目录

passwd 命令

#所有人均可使用来改自己的密码
#[账号名称]省略更改当前账号
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 命令

#详细显示密码信息或修改密码信息
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 命令

#更改账号信息
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

userdel 命令

相关文件

用户账号/密码相关: /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

普通用户账号命令

SUID

#u+s,g+s,o+t
sudo chmod 

id 命令

#查找某人或自己的UID/GID等信息
id [username]

finger 命令

#-s:仅列出用户的账号,全名,终端机代号和登入时间等
finger [-s] username

chfn 命令

#change finger
chfn [-foph] [账户名]

chsh 命令

#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 命令

groupadd [-g gid][-r]组名
#-g:后面接某个特定的GID
#-r: 建立系统群组,与/etc/login.defs内的GID_MIN有关

sudo groupadd group1
sudo grep group1 /etc/group /etc/gshadow

groupmod 命令

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 

groupdel 命令

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 命令

#系统管理员命令
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

实例

ACL使用

查看是否支持

sudo dmesg | grep -i acl

setfacl 命令

setfacl [-bkRd][{-m|-x}acl参数]目标文件名
#1.针对特定使用者的方式

getfacl 命令


使用者身份切换

su 命令

#需要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

sudo 命令

#需要用户自己的密码
#/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.若欲切换的身份与执行者身份相同,那也不需要输入密码.

visudo与/etc/sudoers

#切换到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

特殊shell和PAM

nologin

PAM模块

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..."

使用者邮件邮箱: mail

#ubuntu 不支持

查找系统用户或群组相关文件

#查找整个系统内属于username的文件
find / -user username
#查找整个系统内属于群组的文件
find / -group shadow

你可能感兴趣的:(Linux发行版,linux,运维,服务器)