美文网首页
自己实现su命令

自己实现su命令

作者: 一路向后 | 来源:发表于2020-07-23 21:15 被阅读0次

1.程序源码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <pwd.h>
#include <shadow.h>
#include <termios.h>

int getsalt(struct spwd *sp, char *salt)
{
    int count = 0;
    int i = 0;

    for(i=0; sp->sp_pwdp[i] != 0x00; i++)
    {
        salt[i] = sp->sp_pwdp[i];

        if(salt[i] == '$')
        {
            count++;

            if(count == 3)
                break;
        }
    }

    return i;
}

int main(int argc, char **argv)
{
    struct termios old, new;
    struct spwd *sp = NULL;
    struct passwd *pw = NULL;
    char passwd[128] = {0};
    char salt[128] = {0};
    char *user = "root";
    char *p = NULL;

    if(argc == 2)
    {
        user = argv[1];
    }

    printf("Passwd: ");
    fflush(stdout);

    tcgetattr(0, &old);

    new = old;
    new.c_lflag &= ~ECHO;

    tcsetattr(0, TCSANOW, &new);
    fgets(passwd, 127, stdin);
    tcsetattr(0, TCSANOW, &old);

    putchar('\n');

    sp = getspnam(user);
    if(sp == NULL)
    {
        printf("用户不存在或密码错误!\n");
        exit(-1);
    }

    p = (char *)crypt(passwd, salt);
    if(p == NULL)
    {
        printf("用户不存在或密码错误!\n");
        exit(-1);
    }

    pw = getpwnam(user);
    if(pw == NULL)
    {
        printf("用户不存在或密码错误!\n");
        exit(-1);
    }

    setuid(pw->pw_uid);
    setenv("HOME", pw->pw_dir, 1);

    execl(pw->pw_shell, pw->pw_shell, NULL);

    return 0;
}

2.编译源码

$ gcc -o su su.c -lcrypt

3.授予权限

# chown root:root su
# chmod 511 su
# chmod +s su

4.运行程序

$ ./su
Passwd: 
# 

相关文章

  • 自己实现su命令

    1.程序源码 2.编译源码 3.授予权限 4.运行程序

  • Powershell 添加 su 命令

    因为 Linux 用习惯了,没有 su/sudo命令总觉得不太方便,经过一番搜索,决定自己来实现一个 su 命令。...

  • 每天学点LInux命令(五)

    每天学点LInux命令(五) shutdown 要实现该命令必须使用su - root 命令进入根目录 shutd...

  • su、sudo命令

    9月21日任务3.7 su命令3.8 sudo命令3.9 限制root远程登录 su命令 su命令可以不用退出当前...

  • 基础篇

    Linux学习 一、su命令 1、su命令用来切换用户,- 参数切换到自己的家目录下配置文件及环境变量 2、su ...

  • 2018-09-25

    9月21日任务 3.7 su命令 3.8 sudo命令 3.9 限制root远程登录 3.7 su命令 su us...

  • 5.6 su命令与sudo服务(P108-111)——《Linu

    su命令与sudo服务 预览:su命令,sudo服务,visudo 掌握情况: 一、su命令 1. 切换至root...

  • su、sudo、限制root远程登录

    目录 一、su命令二、sudo命令三、限制root远程登录 一、 su命令 su命令用于切换当前用户身份到其他用户...

  • 基础-13、su+sudo+限制root直接登录

    笔记内容:3.7 su命令3.8 sudo命令3.9 限制root远程登录 一、su 1.1#su – dongh...

  • su、sudo的用法

    1. su命令用法 su是最简单的身份切换命令,可以进行任何身份的切换。[su ]命令将身份切换到root,但是需...

网友评论

      本文标题:自己实现su命令

      本文链接:https://www.haomeiwen.com/subject/cnkklktx.html