useradd新建用户和权限分配
场景:在搭建Ftp服务器时候,需要新建ftp用户,其实新建的ftp用户和Linux中root新建的用户一样,只是需要了解新建用户时候的相关规则。
1 解决新建用户缺少配置文件
1.1 新建用户 指定目录 修改密码
1. useradd 添加用户或更新新创建用户的默认信息
语法:useradd 选项 用户名
该命令的各选项含义如下:
-c comment 描述新用户帐号,通常为用户全名,comment 为字符串。 -d home_dir 设置用户主目录,默认值为用户的登录名,并放在/home目录下。 -D 创建新帐号后保存为新帐号设置的默认信息。 -e expire_date 用 MM/DD/YYYY 格式设置帐号过期日期。 -f inactivity 设置口令失效时间,该值为 0 使口令失效后帐号立即失效,为 -1 使该选项失效。 -g group 设置所要创建新用户所在的基本组,group为组名。 -k skel_dir 设置框架目录,该目录包含用户的初始配置文件, 创建用户时该目录下的文件都被复制到用户主目录下。 -m 自动创建用户主目录,并把框架目录(默认为/etc/skel)下的文件复制到用户主目录下。 -M 不创建用户主目录。 -r 允许保留的系统帐号使用用户ID创建一个新帐号。 -s shell 指定用户的登录shell。 -u user_id 设置用户ID
代码:
# useradd -d /home/test -m test;
然后给test设置密码。
# passwd test;
ps:注意上述test目录中已经存在一些用户默认的配置文件。
1.2 查看创建的用户列表
一般情况下是:
cat /etc/passwd 可以查看所有用户的列表
w 可以查看当前活跃的用户列表
cat /etc/group 查看用户组
但是这样看起来不是很简洁,一个简洁的命令是
cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1"|"$3"|"$4 }'|more
1.3 删除用户及目录
按部就班的办法是先删除用户在删除目录:
删除用户的命令是:userdel 用户名
比如我刚建立的用户是:zhyh,则命令为:
userdel zhyh
执行以上命令成功后利用以下命令删除目录
rm -rf /home/zhyh/
一个简单的办法就是执行下面的命令
userdel -r zhyh
1.4 问题
今天新建了一个MQM的用户 ,
useradd -g mqm -d /var/mqm //容易缺少配置文件
passwd mqm
终端中显示 -bash-4.1$而不是 [mqm@locahost~]
百度了下。据说是因为缺少配置文件,所以将缺少的配置文件复制到用户的家目录既可以。
将/etc/skel中的文件全部复制到/var/mqm/之后,问题就得到了解决。 操作如下
#查看用户的家目录
cat /etc/passwd
#-a表示复制隐藏文件
cp -a /etc/skel/. /var/mqm
linux中以 .开头的文件默认隐藏。在命令中加入-a可以对隐藏文件进行操作。
#可以查看隐藏文件 ls -a /etc/skel #可以复制隐藏文件 cp -a /etc/skel/. /
如果想将一个文件隐藏,只要在文件名之前加上“ . ”即可
#隐藏test文件
mv test .test
2 用户Shell控制
linux adduser-s /sbin/nologin和/bin/false的区别
/bin/false 是最严格的禁止login选项,一切服务都不能用, /sbin/nologin 只是不允许系统login,可以使用其他ftp等服务
如果想要用false在禁止login的同时允许ftp,则必须在/etc/shells里增加一行/bin/false。
知道了Linux用户管理最重要的两个文件就是/etc/passwd和/etc/shadow这两个文件。其中/etc/passwd是用来存储登陆用户信息的,它的基本格式如下:
root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin
由上面的格式可以看出,每一行代表一个用户的信息,一共包括7个字段的信息,每个字段的信息用冒号隔开。这7个字段分别代表:
1. 账号名称:即登陆时的用户名
2. 密码:早期UNIX系统的密码是放在这个文件中的,但因为这个文件的特性是所有程序都能够读取,所以,这样很容易造成数据被窃取,因此后来就将这个字段的密码数据改放到/etc/shadow中了
3. UID:用户ID,每个账号名称对应一个UID,通常UID=0表示root管理员
4. GID:组ID,与/etc/group有关,/etc/group与/etc/passwd差不多,是用来规范用户组信息的
5. 用户信息说明栏: 用来解释这个账号是干什么的
6. 家目录:home目录,即用户登陆以后跳转到的目录,以root用户为例,/root是它的家目录,所以root用户登陆以后就跳转到/root目录这里
7. Shell:用户使用的shell,通常使用/bin/bash这个shell,这也就是为什么登陆Linux时默认的shell是bash的原因,就是在这里设置的,如果要想更改登陆后使用的shell,可以在这里修改。
另外一个很重要shell可以用来替代让账号无法登陆shell的命令,那就是/sbin/nologin,此时该用户只能使用ftp登录。
当我看到这里的时候,我就去登陆我们实验室的服务器,打开/etc/passwd这个文件,里面果然有很多的类似上面格式的用户账号信息。由于我们实验室服务器开放了ftp服务,而我正好有一个ftp的账号,我看到我的账号信息是这样的
lxb:x:530:525::/opt/ftp:/sbin/nologin
通过上面的学习,我觉得它的意思大概是这样的,用户名是lxb,x表示密码经过加密放到/etc/shadow文件中了,UID是530,GID是525,访问的目录是/opt/ftp,我看了一下,这个目录下的内容正好是我登陆ftp后所看到的,至于最后一个/sbin/nologin,应该是登录时候使用的shell,但是它为什么是nologin呢,难道不让我登陆吗?
于是我用root权限登陆到里面,把后面的/sbin/nologin改成了/bin/bash,重新用ssh进行登陆,真的登陆进去了,而且登陆后的目录正好是/opt/ftp。
修改用户的shell类型有两种方式:
1、编辑/etc/passwd 文件
vim /etc/passwd
找到要修改的用户,直接进行编辑即可。
2、使用命令修改
usermod -s /bin/bash cs408
usermod -s /sbin/nologin cs408 //限定用户cs408不能shell登录,只能ftp