새 사용자를 생성하면 기존 권한이 삭제됩니다.

새 사용자를 생성하면 기존 권한이 삭제됩니다.

~/.ssh/config다음 권한이 있는 SSH 구성 파일로 Ubuntu를 실행하는 컴퓨터가 있습니다 (새 파일을 생성할 때 기본값).

-rw-rw-r--  1 dev dev   75 Oct 26 20:13 config

기존 사용자(dev)와 동일한 기본 그룹(dev)으로 새 사용자(test)를 생성한 후 dev로 로그인하면 더 이상 git clone을 할 수 없습니다.

dev@vm:~$ git clone ...
Cloning into ...
Bad owner or permissions on /home/dev/.ssh/config
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

인터넷 검색에서는 를 실행하여 ssh 문제를 해결할 수 있다고 표시하는 것 같지만 chmod 600 ~/.ssh/config이것이 왜 문제가 될까요? 이 문제가 다른 파일에도 영향을 미치는 것 같은데 어떻게 체계적으로 해결할 수 있습니까?

감사해요!

답변1

openssh-7.6p1 소스 코드 파일에서readconf.c권한 확인이 함수에 위임된 것을 볼 수 있습니다 secure_permissions.

if (flags & SSHCONF_CHECKPERM) {
        struct stat sb;

        if (fstat(fileno(f), &sb) == -1)
                fatal("fstat %s: %s", filename, strerror(errno));
        if (!secure_permissions(&sb, getuid()))
                fatal("Bad owner or permissions on %s", filename);
}

이 기능은misc.c파일이 그룹 쓰기 가능한 경우 명시적으로 그룹당 하나의 멤버를 강제로 적용하는 것을 볼 수 있습니다.

int
secure_permissions(struct stat *st, uid_t uid)
{
        if (!platform_sys_dir_uid(st->st_uid) && st->st_uid != uid)
                return 0;
        if ((st->st_mode & 002) != 0)
                return 0;
        if ((st->st_mode & 020) != 0) {
                /* If the file is group-writable, the group in question must
                 * have exactly one member, namely the file's owner.
                 * (Zero-member groups are typically used by setgid
                 * binaries, and are unlikely to be suitable.)
                 */
                struct passwd *pw;
                struct group *gr;
                int members = 0;

                gr = getgrgid(st->st_gid);
                if (!gr)
                        return 0;

                /* Check primary group memberships. */
                while ((pw = getpwent()) != NULL) {
                        if (pw->pw_gid == gr->gr_gid) {
                                ++members;
                                if (pw->pw_uid != uid)
                                        return 0;
                        }
                }
                endpwent();

                pw = getpwuid(st->st_uid);
                if (!pw)
                        return 0;

                /* Check supplementary group memberships. */
                if (gr->gr_mem[0]) {
                        ++members;
                        if (strcmp(pw->pw_name, gr->gr_mem[0]) ||
                            gr->gr_mem[1])
                                return 0;
                }

                if (!members)
                        return 0;
        }
        return 1;
}

답변2

이것은 ssh와 관련이 있습니다. ssh에서는 ~/.ssh/config영향을 받는 사용자만 파일을 읽을 수 있고 다른 사용자는 읽을 수 없도록 요구합니다. 대부분 시스템의 파일 권한은 기본적으로 664 또는 644(rw-rw-r-- 또는 rw-r--r--)입니다. umask를 설정하여 이를 제어할 수 있습니다.

git clone저장소는 ssh를 사용하여 복제되고 있으며 복제가 http(s)에서 수행되더라도 init에서 일부 ssh 항목을 사용하고 있을 수 있습니다.

링크:

관련 정보