Linux用户和组管理
1. Linux输入账号和密码后的过程
1. 先找寻/etc/passwd是否有你的账号,没有就跳出。如果有,从/etc/passwd获得uid,从/etc/group获得gid,同时把用户的家目录与shell设定也读出来。
2. 核对输入的密码与/etc/shadow,是否一致
3. 如果正确,就进入shell管理的阶段
2. /etc/passwd文件结构
root:x:0:0:root:/root:/bin/bash
第一列:用户名
第二列:早期密码列,后因为不安全,放到了/etc/shadow
第三列:uid
0为root,其它用户的uid也可以修改为0,但是不建议这样做
1~999系统账户
1000~60000一般用户
第四列:gid
第五列:用户信息说明栏
第六列:用户家目录,如果要修改某个用户的家目录,修改这个地方就可以了。
第七列:shell设定
3. /etc/shadow文件结构
root:$1$openssl $JeZQQ/HbK0aLlolY6grw31::0:99999:7:::
第一列:用户名
第二列:密码
第三列:最近更改密码的日期
第四列:密码不可被更改的天数,默认为0,表示随时可以修改
第五列:密码需要重新更改的天数,默认为99999,没有强制用户修改密码
第六列:密码更改前警告的天数,默认为7天
第七列:密码失效日,-1为永不失效,0为立刻失效
第八列:账号失效日
第九列:保留
如果普通用户忘记了密码,直接使用root更改该用户的密码即可。
如果root用户忘记了密码,可以使用用户维护模式,修改root的密码。
也可以用LiveCD开机后挂载根目录去修改/etc/shadow,将root的密码字段清空(可以直接修改/etc/shadow,按wq!强制退出即可),重启计算机,root将不使用密码登录。
4. 群组
1. /etc/group文件结构
root:x:0:
第一列:组名
第二列:组密码,不需要设置
第三列:gid
第四列:组包含的用户名称
2. 有效群组与初始群组
初始群组:当创建用户,会自动创建一个同名的群组,这个群组就是初始群组。初始群组体现在/etc/passwd文件的GID部分,这个GID就是用户的初始群组。
有效群组:当用户加入多个群组中,使用groups查看当前用户所在组,第一个出现的就是有效群组
例子:
创建一个用户
useradd yangjianbo
查看/etc/passwd
yangjianbo:x:1502:1502::/home/yangjianbo:/bin/bash 1502就是用户的初始群组
把yangjianbo这个用户加入到其它群组
usermod -G zabbix yangjianbo
查看/etc/group
zabbix:x:1501:yangjianbo 可以看到zabbix这个组中有了成员yangjianbo
切换yangjianbo用户,执行groups
yangjianbo zabbix 第一个组就是有效群组
切换有效群组为zabbix
newgrp zabbix
再执行一下groups
zabbix yangjianbo 可以看到有效群组已经切换为zabbix 切换有效群组的时候,其实是又开了一个shell,执行exit退出当前的shell
3. /etc/gshadow文件结构
yangjianbo:!::
第一列:组名
第二列:组密码,无密码就是!
第三列:群管理员账号
第四列:群组成员账号
5. 账号管理
1. 创建用户
1. useradd
参数及选项
-c 注释,就是/etc/passwd,第五列的说明栏
-d 设置家目录,而不适用默认家目录。
-e expire_date 账号失效日过期时间
-g 指定初始群组,该群组必须存在
-G 指定次要群组,该群组必须存在
-M 强制不创建家目录
-m 强制创建家目录
-s 指定shell,默认为/bin/bash
-u 指定UID,是一组数字。直接指定一个特殊的数字给这个用户
-r 建立一个系统账号,账号的UID会受限制
-f 修改/etc/shadow的第七列,密码失效日,0为立刻失效,-1为永不失效
2. 例子
useradd -d /home/zhangxueyou -u 10000 -g zabbix -G zhangshaohua1510 -s /sbin/nologin -f -1 -c niubi yangjianbo
家目录: /home/zhangxueyou 权限为700
uid: 10000 查看/etc/passwd
初始群组:zabbix 查看/etc/passwd
次要群组:zhangshaohua1510 查看/etc/group
shell: /sbin/nologin 查看/etc/passwd
-f: 密码永不过期
-c:用户信息说明栏 查看/etc/passwd
用户名: yangjianbo
3. useradd使用的参考文件
useradd -D 可以查看
/etc/default/useradd 实际的配置文件
具体内容如下:
GROUP=100 初始群组的id,centos属于私有群组机制,所以该配置不会生效 HOME=/home 定义家目录的位置 INACTIVE=-1 密码过期后是否失效的天数,shadow的第七个字段,0为立刻失效,-1永不失效 EXPIRE= 账号失效的日期 SHELL=/bin/bash SKEL=/etc/skel 家目录的参数目录,在这个目录创建的文件都会拷贝到用户的家目录下 CREATE_MAIL_SPOOL=yes 建立使用者的mailbox,在/var/spool/mail/
例子:用户登录的时候,出现下面的情况: -bash-4.2$ 解决方法: cp -a /etc/skel/.bash* /home/用户 /etc/skel目录的作用: 1. 可以把通知的内容放到skel目录下,让登录的人去看 2. 统一初始化新用户的环境变量 可以编辑/etc/skel/.bash_profile
4. 关于密码的参考文件
/etc/login.defs
MAIL_DIR /var/spool/mail 邮箱目录 PASS_MAX_DAYS 99999 密码多久变更 PASS_MIN_DAYS 0 密码多久不用变更 PASS_MIN_LEN 5 密码最小长度 PASS_WARN_AGE 7 密码过期前警告的天数 UID_MIN 1000 用户最小的uid UID_MAX 60000 用户最大的uid SYS_UID_MIN 201 系统账号最小的uid SYS_UID_MAX 999 系统账号最大的uid GID_MIN 1000 群组最小的gid GID_MAX 60000 群组最大的gid SYS_GID_MIN 201 系统群组最小的gid SYS_GID_MAX 999 系统群组最大的gid CREATE_HOME yes 是否创建家目录 UMASK 077 创建家目录的权限700 USERGROUPS_ENAB yes userdel删除用户的时候,如果初始群组没有其他成员,那么该用户的初始群组也会被删掉 ENCRYPT_METHOD SHA512
5. 创建用户的时候,涉及到的参考文件
/etc/default/useradd
/etc/login.defs
/etc/skel/*
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
2. 设置密码
1. passwd
--stdin 常用于shell脚本中,批量创建用户的密码
命令行: echo "aaaaa" | passwd --stdin yangjianbo 脚本中使用双引号,命令行使用单引号
-l 会在用户的密码前面添加!!,用户就无法登陆系统
-u 解锁用户密码,与-l相对
-S 查看用户密码信息
-n 修改/etc/shadow的第四个字段,不可修改密码天数
-x 修改/etc/shadow的第五个字段,多久内必须更改密码
-w 修改/etc/shadow的第六个字段,过期前警告的天数
-i 后面跟日期,密码失效日期
3. 修改账号及密码期限的信息
1. chage命令
-l 显示用户及密码的信息
-d 修改最近一次修改密码的日期
-E 修改账号过期时间 0表示马上过期,-1表示永不过期
-M 密码保持有效的最大天数
-m 密码保持有效的最小天数,0为任何时候修改密码都可以
-W 密码过期前,提前收到警告信息的天数
-I 密码失效日期
2. 例子
设置用户yangjianbo,30天不准修改密码,60天必须修改密码,提前10天发出警告,过期后30天禁止用户登录系统
chage -m 30 -M 60 -W 10 -I yangjianbo
4. 修改账号信息
1. usermod
-c 修改/etc/passwd第五列的说明栏
-d 修改家目录
-e 修改账号过期日期,后面跟日期
-f 修改密码过期后多少天,密码失效
-g 修改初始群组
-G 修改次要群组
-a 结合-G使用,添加用户到次要群组,同时并不删除用户在其它群组,如果不加-a,用户只能加入到当前次要群组
-l 修改用户名称
-s 修改用户shell
-u 修改用户uid
-L 锁定用户的密码
-U 解锁用户密码
5. 删除用户
1. userdel
删除用户相关数据,如下:
/etc/passwd,/etc/shadow
/etc/group,/etc/gshadow
/home/yangjianbo,/var/spool/mail/yangjianbo
-r 把用户的家目录也删除
6. 查看uid/gid
1. id命令
id yangjianbo
uid=1000(zhangshaohua1510) gid=1000(zhangshaohua1510) 组=1000(zhangshaohua1510)
7. 修改用户的shell
1. chsh
-l 列出当前用户所有的shell
-s 修改当前用户的shell,后面接指定的shell
6. 组管理
1. 增加组
1. groupadd
-g 指定gid
-r 创建系统群组
2. 修改组
1. groupmod
-g 修改群组gid
-n 修改群组名称
3. 删除组
1. groupdel
groupdel 组名
注意:后面接的组名,不要是别的用户的初始群组,否则删不掉群组
4. 群组管理员
1. gpasswd
-A 后面接用户,把某个用户设置为群组管理员
-M 后面接用户,把用户加入到该群组
-r 将群组的密码移除
-R 将群组的密码栏失效
切换为群组管理员后的参数
-a 将某个用户加入群组
-d 将某个用户移除群组
2. 例子
groupadd yunwei #创建一个群组 gpasswd -A yangjianbo yunwei #把用户设置为群组的管理员 su - yangjianbo # 切换为群组管理员账号 gpasswd -a redis yunwei #添加某个用户为群组成员 gpasswd -d redis yunwei #剔除某个用户出群组
su - root
groupdel yunwei #删除群组
7. 账号管理实例
1. 例子1,创建下面的账号

useradd -G mygroup1 -c "1st user" myuser1 useradd -G mygroup1 -c "2nd user" myuser2 useradd -c "3rd user" -s /sbin/nologin myuser3 echo "passwd" | passwd --stdin myuser1 echo "passwd" | passwd --stdin myuser2 echo "passwd" | passwd --stdin myuser3
2. 例子2
我的使用者 pro1, pro2, pro3 是同一个项目计划的开发人员,我想要让这三个用户在同一个
目录底下工作, 但这三个用户还是拥有自己的家目录与基本的私有群组。假设我要让这个项目计划
在 /srv/projecta 目录下开发, 可以如何进行?
1.创建一个共同的目录
mkdir -p /srv/project
2.单独创建一个属组,给这个目录
groupadd project
chgrp project /src/project
3.创建三个用户,并设置用户的次要群组为project
useradd -G project pro1
useradd -G project pro2
useradd -G project pro3
4.授权给目录
chmod 2770 /src/project
8. ACL管理
1. 针对方面
使用者:针对用户设置权限
群组:针对群组设置权限
mask:针对在该目录下创建目录或文件时,设置默认权限
2. 如何启动ACL
centos的文件系统ext2/ext3/ext4/xfs默认都已经开启了ACL,如何检查系统是否开启ACL,执行下面的命令
[root@dbbackup-server-50 ~]# dmesg | grep -i acl [ 2.292406] systemd[1]: systemd 219 running in system mode. (+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN) [ 4.460398] SGI XFS with ACLs, security attributes, no debug enabled
3. 设置ACL
1. setfacl命令
-m 设置后续的acl参数给文件使用,不可与-x合用
-x 删除后续的acl参数,不可与-m合用
-b 删除所有的acl参数
-k 删除默认的acl参数
-R 递归设置acl,包括子目录
-d 设置默认acl
2. 查看acl命令----getfacl
4. 例子
1. 为指定用户设置某个文件的acl权限
setfacl -m u:mysql:rx yangjianbo
设置完成后,会在文件权限的位置添加一个+号,说明有其他的权限
-rw-r-xr--+ 1 root root 0 Sep 14 23:14 yangjianbo
查看该目录的acl权限
getfacl yangjianbo
[root@manager ~]# getfacl yangjianbo # file: yangjianbo # owner: root # group: root user::rw- 属主的权限 user:mysql:r-x mysql用户的权限 group::r-- 属组的权限 mask::r-x 默认的mask other::r-- 其他人的权限
2. 为属主设置acl权限
setfacl -m u::rwx yangjianbo
3. 为其他群组设置acl权限
setfacl -m g:mysql:rx yangjianbo
4. 为属组设置acl权限
setfacl -m g::rx yangjianbo
[root@manager ~]# getfacl yangjianbo # file: yangjianbo # owner: root # group: root user::rw- group::r-x group:mysql:r-x mask::r-x other::r--
5. 设置有效权限
setfacl -m u:msyql:rw yangjianbo 设置用户mysql可以对yangjianbo文件进行读写 setfacl -m m:r yangjianbo 设置有效权限为只读 su - mysql mysql无法对yangjianbo进行修改数据和插入数据
通过mask来设置最大有效的权限
6. 某个用户只有读取某个目录的权限,不可以有写入该目录的权限
setfacl -m u:mysql:rx /tmp/yangjianbo su - mysql cd /tmp/yangjianbo touch a touch: cannot touch ‘a’: Permission denied
7. 接上面的例子,如果我用其他用户创建文件或者目录,那么ACL 权限是否会继承呢?
可以很明显看到,虽然父目录设置ACL,但是子目录并没有继承
setfacl -m d:u:mysql:rx yangjianbo 设置继承用户的acl权限 su - mysql cd /tmp/yangjianbo touch e getfacl e [root@manager yangjianbo]# ll total 0 drwxr-xr-x 2 root root 6 Sep 15 23:56 a drwxr-xr-x 2 root root 6 Sep 15 23:56 b drwxr-xr-x 2 root root 6 Sep 15 23:56 c -rw-r--r-- 1 root root 0 Sep 15 23:56 d -rw-r--r--+ 1 root root 0 Sep 16 22:54 e drwxr-xr-x+ 2 root root 6 Sep 16 22:54 f -rw-rw-r--+ 1 root root 0 Sep 16 22:56 w 看到文件权限后面的+号,说明已经继承acl已经生效了。
8. 如何取消acl权限
setfacl -b yangjianbo 取消所有的acl权限
setfacl -x u:mysql 取消指定的acl权限
setfacl -x d:u:mysql 取消继承权限
9. 不允许某个用户访问目录
setfacl -m u:mysql:- yangjianbo
9. 使用者身份切换
1. su
直接执行su,虽然已经切换为root,但是其实用的还是原来账号的shell环境
使用的是non-login shell,可以使用env查看一下。
- 不带用户的时候,切换为root,使用的是login-shell,使用的是root的shell环境
-l 与-类似
-m 使用原来用户的shell环境,也是non-login shell
-p 使用原来用户的shell环境,也是non-login shell
-c 只执行一次命令
su - mysql -c "date" 切换为mysql
su - -c "date" 切换为root用户
2. sudo
可以以其它身份执行一些指令(通常都是使用普通用户以root身份执行一些指令)
-u 后面跟用户名称
[root@milanyi_docker_server ~]# sudo -u mysql touch /tmp/1.txt [root@milanyi_docker_server ~]# ll /tmp/1.txt -rw-r--r-- 1 mysql mysql 0 9月 26 22:40 /tmp/1.txt
[root@milanyi_docker_server ~]# sudo -u mysql sh -c "echo yangjianbo > /tmp/2.txt" [root@milanyi_docker_server ~]# ll /tmp/2.txt -rw-r--r-- 1 mysql mysql 11 9月 26 22:41 /tmp/2.txt [root@milanyi_docker_server ~]# cat /tmp/2.txt yangjianb
sudo执行的流程:
1. 当用户执行 sudo 时,系统于 /etc/sudoers 文件中搜寻该使用者是否有执行 sudo 的权限;
2. 若使用者具有可执行 sudo 的权限后,便让使用者『输入用户自己的密码』来确认;
3. 若密码输入成功,便开始进行 sudo 后续接的指令(但 root 执行 sudo 时,不需要输入密码);
4. 若欲切换的身份与执行者身份相同,那也不需要输入密码。
visudo与/etc/sudoers
visudo是修改/etc/sudoers的指令,使用root用户执行visudo,修改/etc/sudoers文件。
1. 单一用户的配置,sudoers的语法
使用者账号 登入者的来源主机名=(可切换的身份) 可下达的指令 root ALL=(ALL) ALL <==这是默认值
2. 使用某个组的配置
## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL
usermod -a -G wheel mysql
3. 使用免密码的配置
%wheel ALL=(ALL) NOPASSWD: ALL
4. 可切换的身份限制
zhangshaohua1510 ALL=(root) NOPASSWD: ALL 限制用户只允许切换为root,切换为其它用户就报无权
zhangshaohua1510@milanyi_docker_server ~]$ sudo -u mysql touch /tmp/4.txt
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。
[sudo] zhangshaohua1510 的密码:
对不起,用户 zhangshaohua1510 无权以 mysql 的身份在 milanyi_docker_server 上执行 /bin/touch /tmp/4.txt。
5. 可执行的命令限制
zhangshaohua1510 ALL=(ALL) NOPASSWD: !/usr/bin/passwd,/usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root 限制用户修改root用户的密码 [zhangshaohua1510@milanyi_docker_server ~]$ sudo passwd mysql 更改用户 mysql 的密码 。 新的 密码: 无效的密码: 密码少于 8 个字符 重新输入新的 密码: passwd:所有的身份验证令牌已经成功更新。 [zhangshaohua1510@milanyi_docker_server ~]$ sudo passwd root 对不起,用户 zhangshaohua1510 无权以 root 的身份在 milanyi_docker_server 上执行 /bin/passwd root。
6. 别名的配置
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
10. 特殊的shell
/sbin/nologin 使用这个shell的用户是不可以登录系统的。
当使用/sbin/nologin的用户登录系统的时候,会有报错:
This account is currently not available.
如果想给一些/sbin/nologin用户一些提示,可以创建一个文件/etc/nologin.txt,里面可以填写一些内容。
[root@milanyi_docker_server ~]# su - tcpdump 上一次登录:一 9月 27 21:58:24 CST 2021pts/1 上 This account is system account or mail account. Please DO NOT use this account to login my Linux server. xiaoxindian.
11. PAM模块
1. PAM简介
PAM是一套应用程序编程接口,它提供了一连串的验证机制,只要用户将验证阶段的需求告知PAM后,PAM就能回报用户验证的结果(成功或失败)。
2. PAM配置文件
放在/etc/pam.d/目录下
3. PAM配置文件语法
查看一下/etc/pam.d/passwd,内容如下:
#%PAM-1.0 pam的版本号 auth include system-auth account include system-auth password substack system-auth -password optional pam_gnome_keyring.so use_authtok password substack postlogin
第一列 验证类型(type)
auth
主要用来检验用户的身份验证,通常需要密码来检验的。
account
主要用来检验用户是否具有正确的权限。例如:当你使用一个过期的密码登录时,当然就无法正确登录了。
session
用于记录用户登录与注销时的信息。例如:如果经常使用sudo或着su,会在/var/log/secure里面发现很多关于pam的说明,而且记载的数据是"session open,session close"的信息。
password
用于提供验证的修订工作。例如:修改或者更改密码
第二列 验证的控制标志(control flag)
required
此验证成功则带有success的标志,若失败则带有failure的标志,但不论成功或失败都会继续后续的验证流程。
requisite
若验证失败则立刻回报原程序failure的标志,并终止后续的验证流程。若验证成功则带有success的标志继续后续的验证流程。
sufficient
若验证成功则立刻回传success给原程序,并终止后续的验证流程;若验证失败则继续后续的验证。
optional
大多是用来显示信息,并不是用来验证的。

4. 常用模块简介
/etc/pam.d/*: 每个程序个别的PAM配置文件
/lib64/security/*: PAM模块文件 的实际放置目录
/etc/security/*: 其它PAM环境的配置文件
/usr/share/doc/pam-*/: 详细的PAM说明文件
例如:/usr/share/doc/pam-1.1.8/txts/README.pam_xauth
模块介绍
pam_securetty.so 限制系统管理员只能从安全的终端机登录,终端机的设置就在/etc/securetty这个文件中
pam_nologin.so 限制一般用户是否能够登录主机。如果有/etc/nologin这个文件,那么一般用户登录的时候,就会把/etc/nologin的内容显示出来。这个对root或者已经登录系统的一般用户没有影响。
pam_selinux.so 控制selinux的一个模块
pam_console.so 让用户可以通过特殊终端接口(console)登录系统
pam_loginuid.so 一般用户与系统用户的UID是不同的,使用这个模块来验证用户UID
pam_env.so 用来设置环境变量的一个模块
pam_UNIX.so 用于验证阶段的认证功能,用于授权阶段的账号许可证管理,用于会议阶段的日志文件记录
pam_cacklib.so 用来检验密码的强度
pam_limits.so ulimit就是这个模块提供的
5. 说一下login的PAM验证机制流程
1. 验证阶段 (auth):首先, (a)会先经过 pam_securetty.so 判断,如果使用者是 root 时,则会参考 /etc/securetty 的设定; 接下来(b)经过 pam_env.so 设定额外的环境变量;再(c)透过 pam_unix.so 检验密码,若通过则回报 login 程序;若不通过则(d)继续往下以 pam_succeed_if.so 判断 UID 是否大于 1000 ,若小于 1000 则 回报失败,否则再往下 (e)以 pam_deny.so 拒绝联机。 2. 授权阶段 (account): (a)先以 pam_nologin.so 判断 /etc/nologin 是否存在,若存在则不许一般使用者登入; (b)接下来以 pam_unix.so 及 pam_localuser.so 进行账号管理,再以 (c) pam_succeed_if.so 判断 UID 是否 小于 1000 ,若小于 1000 则不记录登录信息。 (d)最后以 pam_permit.so 允许该账号登入。 3. 密码阶段 (password): (a)先以 pam_pwquality.so 设定密码仅能尝试错误 3 次; (b)接下来以 pam_unix.so 透 过 sha512, shadow 等功能进行密码检验,若通过则回报 login 程序,若不通过则 (c)以 pam_deny.so 拒绝 登入。 4. 会议阶段 (session): (a)先以 pam_selinux.so 暂时关闭 SELinux; (b)使用 pam_limits.so 设定好用户能够操 作的系统资源; (c)登入成功后开始记录相关信息在登录文件中; (d)以 pam_loginuid.so 规范不同的 UID 权限; (e)开启 pam_selinux.so 的功能。
查看/etc/pam.d/login的内容,如下:
[root@milanyi_docker_server etc]# cat /etc/pam.d/login #%PAM-1.0 auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so auth substack system-auth auth include postlogin account required pam_nologin.so account include system-auth password include system-auth # pam_selinux.so close should be the first session rule session required pam_selinux.so close session required pam_loginuid.so session optional pam_console.so # pam_selinux.so open should only be followed by sessions to be executed in the user context session required pam_selinux.so open session required pam_namespace.so session optional pam_keyinit.so force revoke session include system-auth session include postlogin -session optional pam_ck_connector.so
6. 为什么root无法以telnet登录系统,而ssh可以直接登录?
1. telnet使用login的PAM模块,而login的验证阶段会有/etc/securetty的限制,而远程连接属于pts/n的动态端口接口设备名称,并没有在/etc/securetty,因此telnet无法登录linux系统
2. ssh使用自己的/etc/pam.d/sshd模块,查看一下这个文件内容
[root@milanyi_docker_server etc]# cat /etc/pam.d/sshd #%PAM-1.0 auth required pam_sepermit.so auth substack password-auth auth include postlogin # Used with polkit to reauthorize users in remote sessions -auth optional pam_reauthorize.so prepare account required pam_nologin.so account include password-auth password include password-auth # pam_selinux.so close should be the first session rule session required pam_selinux.so close session required pam_loginuid.so # pam_selinux.so open should only be followed by sessions to be executed in the user context session required pam_selinux.so open env_params session required pam_namespace.so session optional pam_keyinit.so force revoke session include password-auth session include postlogin # Used with polkit to reauthorize users in remote sessions -session optional pam_reauthorize.so prepare
并没有/etc/securetty的限制,所以可以直接连接到系统。
7. 其他相关文件
limits.conf
/etc/security/limits.conf
#<domain> <type> <item> <value> # #* soft core 0 #* hard rss 10000 #@student hard nproc 20 #@faculty soft nproc 20 #@faculty hard nproc 50 #ftp hard nproc 0 #@student - maxlogins 4 第一列 # - a user name # - a group name, with @group syntax # - the wildcard *, for default entry # - the wildcard %, can be also used with %group syntax, # for maxlogin limit 第二列 # - "soft" for enforcing the soft limits # - "hard" for enforcing hard limits 第三列 # - core - limits the core file size (KB) # - data - max data size (KB) # - fsize - maximum filesize (KB) # - memlock - max locked-in-memory address space (KB) # - nofile - max number of open file descriptors # - rss - max resident set size (KB) # - stack - max stack size (KB) # - cpu - max CPU time (MIN) # - nproc - max number of processes # - as - address space limit (KB) # - maxlogins - max number of logins for this user # - maxsyslogins - max number of logins on the system # - priority - the priority to run user process with # - locks - max number of file locks the user can hold # - sigpending - max number of pending signals # - msgqueue - max memory used by POSIX message queues (bytes) # - nice - max nice priority allowed to raise to values: [-20, 19] # - rtprio - max realtime priority 第四列 值
例子:
1. 限制每个用户只能新建100MB的文件,且大于90MB会警告
[root@study ~]# vim /etc/security/limits.conf vbird1 soft fsize 90000 vbird1 hard fsize 100000
2. 限制某个组,每次只能有一个用户登录系统
@pro1 hard maxlogins 1
3. 这个文件设置完成后,会立刻生效的。
12. linux主机上的用户信息传递
1. 查询用户信息
w 显示当前登录的用户信息 
who 显示当前用户信息

last 登录成功用户信息
lastb 登录失败用户信息
lastlog 最近登录用户信息
2. 用户交谈
write 用户之间可以相互发送信息
write 用户名 终端名
mesg 如果用户不想接受信息,执行命令mesg n禁止发送消息到你的终端
这个mesg n只针对普通用户,不针对root
mesg y允许发送消息到你的终端
wall 针对所有用户发消息
wall "hello,word"
3. 用户邮件信箱 mail
上面的交互命令要等到用户都在线的时候使用,当用户不在线的时候,就需要使用mail命令
mail yang
输入邮箱主题,内容,最后使用 . 结束
yang用户登录系统,输入mail就收到邮件了
13. 批量创建用户和密码
#!/bin/bash
# This shell script will create amount of linux login accounts for you.
# 1. check the "accountadd.txt" file exist? you must create that file manually.
# one account name one line in the "accountadd.txt" file.
# 2. use openssl to create users password.
# 3. User must change his password in his first login.
# 4. more options check the following url:
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
# 0. userinput
usergroup="" # if your account need secondary group, add here.
pwmech="openssl" # "openssl" or "account" is needed.
homeperm="no" # if "yes" then I will modify home dir permission to 711
# 1. check the accountadd.txt file
action="${1}" # "create" is useradd and "delete" is userdel.
if [ ! -f accountadd.txt ]; then
echo "There is no accountadd.txt file, stop here."
exit 1
fi
[ "${usergroup}" != "" ] && groupadd -r ${usergroup}
rm -f outputpw.txt
usernames=$(cat accountadd.txt)
for username in ${usernames}
do
case ${action} in
"create")
[ "${usergroup}" != "" ] && usegrp=" -G ${usergroup} " || usegrp=""
useradd ${usegrp} ${username} # 新增帳號
[ "${pwmech}" == "openssl" ] && usepw=$(openssl rand -base64 6) || usepw=${username}
echo ${usepw} | passwd --stdin ${username} # 建立密碼
chage -d 0 ${username} # 強制登入修改密碼
[ "${homeperm}" == "yes" ] && chmod 711 /home/${username}
echo "username=${username}, password=${usepw}" >> outputpw.txt
;;
"delete")
echo "deleting ${username}"
userdel -r ${username}
;;
*)
echo "Usage: $0 [create|delete]"
;;
esac
done

浙公网安备 33010602011771号