Linux에서 특정 사용자(루트가 아닌 사용자)에 대해서만 날짜를 변경할 수 있습니까?
가능하다면 어떻게 해야 하나요?
누군가가 이것의 영향을 지적할 수 있다면 좋을 것입니다.
편집하다
즉, 내 질문은 이것이다.
루트 권한 없이 Linux의 날짜와 시간을 지금부터 다른 날짜와 시간으로 변경하고 싶습니다. 어떻게 이를 달성할 수 있나요?
답변1
날짜는 시스템 전체 매개변수이며 시스템(사용자가 아님)에 중요합니다. 이는 파일 시스템 타임스탬프, 로깅, 데몬 작업, 예약 등에 나타납니다. 날짜가 정확하지 않으면 많은 프로그램이 시스템을 방해하고 손상시킬 수 있습니다. 따라서 이러한 의미에서 www가 아닌 네트워크가 완료되면 로컬뿐만 아니라 전역적으로 시간을 지속적으로 추가하고 수정해야 합니다. 클라이언트와 서버 간의 시간 차이가 너무 크면 인증서도 작동이 중지됩니다.
따라서 그런 의미에서 시스템 날짜/시간은 실제 날짜/시간입니다(UTC가 바람직합니다. 그렇지 않으면 시간대를 전환할 때 랩탑의 파일 시스템이 손상될 수 있습니다).
반면에 시간대 설정은 UTC에서 사용자에게 표시되는 날짜 및 시간으로의 변환 레이어일 뿐입니다. 이는 변경될 수 있습니다(X Tian의 설명 참조). 그러나 이것이 당신이 원하는 것인지는 모르겠습니다. 정수(때로는 정수의 일부) 시간만 설정할 수 있으며 하루를 초과할 수는 없습니다. 임의의 지연을 유도하기 위해 사용자 정의 시간대를 구축하는 것은 기술적으로 가능하지만 이는 추악한 해킹입니다.
모든 기본 시간 연산에는 여전히 유닉스 시간(1970년 1월 1일 이후 균일하게 시간이 측정된 정수)이 포함되어 있으므로 로케일(시간대 및 기타 항목)은 일반적으로 시간을 시각적으로 표시하거나 매우 특정한 작업에만 사용됩니다. script 목적은 이 기능에 따라 다릅니다. 예를 들어 함수를 date
호출하여 clock_gettime
시스템 시간을 검색한 다음 localtime
현재 로케일로 변환을 호출합니다. 내부 표현은 항상 시스템 시간입니다.
이를 수행하는 특수 커널 모듈 또는 대체 라이브러리가 있을 수 있습니다. 조정된 기능을 사용하여 손상된 라이브러리를 생성 clock_gettime
하고 이를 한 명의 사용자에게 표시할 수 있습니다. 이것이 귀하의 시스템에 어떤 영향을 미칠지 모르겠습니다. 파일 시스템 작업 및 이와 유사한 작업은 여전히 커널에서 처리되므로 기본 기능이 작동합니다. 그러나 예약, 백업 기능 및 makefile이 제대로 작동하지 않을 수 있습니다.
편집: 아마도 당신이 원하는 것은 가상 머신일 것입니다. 그러면 더 고립될 수 있으므로 시간을 변경하고 싶다면 그렇게 할 수 있습니다. 때로는 시간에 따라 발생하는 소프트웨어 결함을 피하는 데 유용합니다.
답변2
구성 파일이나 해당 사용자와 관련된 공통 구성 파일에서 TZ 환경 변수를 설정할 수 있습니다.
$ date
Fri Mar 21 10:11:15 GMT 2014
$ export TZ="PST+8"
$ date
Fri Mar 21 02:11:53 PST 2014
TZ의 최대값은 24시간입니다.
답변3
날짜/시간을 가져오는 시스템 호출이 몇 개만 있으므로 수행하려는 작업에 따라 해당 호출에서 반환된 값을 변경하기 위해 사전 로드 라이브러리를 배치할 수 있습니다(여전히 질문에서 약간 불분명합니다). 이는 Y2K 테스트가 최고조에 달했을 때 일반적인 전략이었습니다.
좋다https://github.com/wolfcw/libfaketime당신이 원하는 것을 할 수도 있지만, 그렇지 않다면 스스로 하는 것이 충분히 간단합니다.